04-STUN配置
本章节下载: 04-STUN配置 (404.83 KB)
STUN(Session Traversal Utilities for NAT,NAT环境下的会话传输)是一种处理NAT穿越问题的协议,为隧道模块提供了确定网络中是否存在NAT设备,以及NAT设备为通信端点分配的IP地址和端口号的方法。STUN基于UDP传输协议报文,默认使用的端口号为3478。
STUN采用C/S模式,由STUN客户端(STUN Client)和STUN服务器(STUN Server)组成,典型组网如图1-1所示。
· STUN客户端:是一个发送STUN捆绑请求和接受STUN捆绑响应的设备。
· STUN服务器:是一个发送STUN捆绑响应和接受STUN捆绑请求的设备。STUN服务器通常部署在公网上。
图1-1 STUN典型组网
STUN客户端和STUN服务器通过交互如下类型的协议报文,探测NAT转换后的IP地址和端口号,以及NAT类型。STUN客户端和STUN服务器交互的协议报文类型包括如下两种:
· Binding Request:捆绑请求。
· Binding Response:捆绑响应。
NAT映射和NAT过滤是NAT穿越技术里经常用到的两个概念。在STUN里,需要通过NAT映射类型和NAT过滤方式来判断NAT类型,从而确定STUN是否能正常工作。
相关术语如下:
· Endpoint:指一对IP地址和端口号的组合。例如,Endpoint(X,x)表示IP地址为X、端口号为x。
· NAT映射:指NAT设备对内网主动发到外网的报文进行映射。当内网主机向外网主机发起访问时,NAT设备会建立内网Endpoint和外网Endpoint之间的映射关系表,并根据该映射关系将报文的内网Endpoint转换成外网Endpoint转发出去。
· NAT过滤:指NAT设备对外网主动发到内网的报文进行过滤。为了防止内网主机受到攻击,NAT设备会对外网主动发到内网的报文进行过滤,即过滤非法报文,转发正常通信报文。
NAT映射类型包括三种:EIM、ADM和APDM。下面以图1-2、图1-3和图1-4为例,详细介绍三种NAT映射类型。假设内网主机Host A的内网Endpoint为(X,x),经过NAT映射后的外网Endpoint为(Y,y)。外网Host B的Endpoint为(M,m),外网Host C的Endpoint为(N,n)。
· EIM(Endpoint-Independent Mapping,外部地址无关映射):同一个内网Endpoint发送到任何外部网络的报文,NAT映射后的结果相同。如图1-2所示,对于内网Endpoint(X,x),NAT映射后的外网Endpoint均为(Y,y)。
图1-2 EIM示意图
· ADM(Address-Dependent Mapping,外部地址相关映射):同一个内网Endpoint发送到外部网络中相同IP地址、任意端口号的报文,NAT映射后的结果相同。如图1-3所示,对于内网Endpoint(X,x)访问Host B的报文,NAT映射后的外网Endpoint为(Y1,y1);内网Endpoint(X, x)访问Host C的报文,NAT映射后的外网Endpoint为(Y2,y2)。只要M=N,无论m和n是否相同,都有Endpoint(Y1,y1)=Endpoint(Y2,y2)。
图1-3 ADM示意图
· APDM(Address and Port-Dependent Mapping,外部地址和端口相关映射):同一个内网Endpoint发送到外部网络中的同一个外网Endpoint,NAT映射后的结果相同。如图1-4所示,对于内网Endpoint(X,x)访问Host B的报文,NAT映射后的外网Endpoint为(Y1,y1);内网Endpoint(X,x)访问Host C的报文,NAT映射后的外网Endpoint为(Y2,y2)。只有当M=N,且m=n时,才有Endpoint(Y1, y1)=Endpoint(Y2, y2)。
图1-4 APDM示意图
NAT过滤方式包括三种:EIF、ADF和APDF。下面以图1-5、图1-6和图1-7为例,详细介绍三种NAT过滤类型。假设内网主机Host A的内网Endpoint为(X,x),经过NAT映射后的外网Endpoint为(Y,y)。外网Host B的Endpoint为(M,m),外网Host C的Endpoint为(N,n)。
· EIF(Endpoint-Independent Filtering,外部地址无关过滤):对于内网Endpoint(X,x),只要它曾经向外网发送过数据,外网主机就可以获取到NAT映射后的外网Endpoint(Y,y)。那么,对于任意外部网络的主机发送到Endpoint(Y,y)的报文,NAT设备都会进行地址转换并转发到内网。除此之外的外部报文都会被NAT设备过滤。
图1-5 EIF示意图
· ADF(Address-Dependent Filtering,外部地址相关过滤):对于内网Endpoint(X,x),只有它曾经向IP地址为M的外网主机Host B发送过报文,NAT设备才会对外网主机Host B使用外网地址M、任意端口号发送到Endpoint(Y,y)的报文进行地址转换。除此之外的外部网络报文都会被NAT设备过滤。
图1-6 ADF示意图
· APDF(Address and Port-Dependent Filtering,外部地址和端口相关过滤):对于内网Endpoint(X,x),如果它仅向外网Endpoint(M1,m1)发送过报文,那么NAT设备只会对Endpoint(M1,m1)发送到Endpoint(Y,y)的报文进行地址转换并转发到内网。除此之外的外网网络报文都会被NAT设备过滤。
图1-7 APDF示意图
NAT类型是由映射类型和过滤方式组合而成的,有如下四种组合方式:
· Full Cone NAT是EIM和EIF的组合。
· Restricted Cone NAT是EIM和ADF的组合。
· Port Restricted Cone NAT是EIM和APDF的组合。
· Symmetric NAT是APDM和APDF的组合。
不同类型的NAT的工作机制不同,具体如下:
· Full Cone NAT(完全锥型NAT):所有从同一个私网IP地址和端口(IP1:Port1)发送到NAT设备的报文都会被映射成同一个公网IP地址和端口(IP:Port)。并且,任何外部主机都可以通过该公网IP地址和端口(IP:Port)和内部主机进行通信。
· Restricted Cone NAT(限制锥型NAT)。所有从同一个私网IP地址和端口(IP1:Port1)发送到NAT设备的报文都会被映射成同一个公网IP和端口号(IP:Port)。与Full Cone NAT不同的是,不是所有外部主机都可以通过(IP:Port)和内部主机进行通信,除非内部主机之前已经向此外部主机发送过报文。
· Port Restricted Cone NAT(端口限制锥型NAT)。所有从同一个私网IP地址和端口(IP1:Port1)发送到NAT设备的报文都会被映射成同一个公网IP和端口号(IP:Port)。与Restricted Cone NAT不同的是,一台公网主机(IP2:Port2)能够和内网主机进行通信的前提是,这台公网主机通过(IP2:Port2)收到内网主机发送的数据包。
· Symmetric NAT(对称NAT)。所有从同一个私网IP地址和端口(IP1:Port1)发送到一个特定的目的IP地址和端口的报文,都会被映射到同一个IP地址和端口。如果同一台私网主机使用相同的源地址和端口号发送报文,但是发往不同的目的地,NAT将会使用不同的映射。此外,公网主机与某个内网主机通信的前提是,这台公网主机收到该内网主机发送的数据报文。
在如图1-8所示的SDWAN场景中,为了节约IP地址资源,CPE经常使用私网IP地址,需要经过NAT设备转换才能访问总部。由于CPE发出的报文在经过NAT设备后,IP地址会发生变化,如果无法获取报文转换后的IP地址,则CPE之间无法建立数据通道。
为了使CPE之间能够建立数据通道,需要在CPE和RR上使用STUN来探测CPE之间是否存在NAT设备,并确定经过NAT设备转换后的IP地址和端口号。在CPE和RR上的STUN配置如下:
· 在CPE上配置STUN客户端功能,CPE通过发送STUN捆绑请求报文发起STUN探测请求。
· 在RR上配置STUN服务器功能,RR通过发送STUN捆绑响应报文回应STUN探测请求。
完成上述配置后,CPE和RR之间通过交互STUN协议报文探测到转换后的IP地址和端口号后,CPE 1和CPE 2使用对方转换后的IP地址作为建立数据通道的目的IP地址。
关于穿越NAT的SDWAN隧道的详细介绍,请参见“IP业务配置指导”中的“SDWAN”。
图1-8 穿越NAT的SDWAN隧道示意图
STUN基于UDP传输协议报文,协议报文的封装格式如图1-9所示。
图1-9 STUN报文结构
如图1-10所示,STUN消息(STUN Message)包括STUN消息头和STUN消息属性两部分。STUN消息头的长度为20字节,后面跟着零个或多个属性。
图1-10 STUN消息结构
STUN消息头的结构如图1-11所示。
图1-11 STUN消息头结构
STUN消息头包含如下字段:
· STUN Message Type:STUN消息类型,长度为14比特。当前仅支持STUN捆绑请求和STUN捆绑响应两种类型的消息。
· Message Length:STUN消息长度,长度为16比特(不包括消息头长度)。
· Magic Cookie:魔术字,长度为32比特。魔术字包含固定值0x2112A442,用于STUN服务器检测STUN客户端是否可以识别特定属性。此外,当STUN与其他协议使用相同的端口号时,通过魔术字可以将STUN和其他协议区分开。
· Transaction ID:事务ID,长度为96比特,用于唯一标识一次STUN探测。事务ID由STUN客户端来选择,在一次STUN探测中,STUN服务器收到STUN的捆绑请求消息后,以同样的事务ID返回STUN捆绑响应消息。同时,STUN服务器根据事务ID来唯一标识STUN客户端的不同探测请求。
STUN消息属性采用TLV(Type/Length/Value,类型/长度/值)格式,结构如图1-12所示。其中,Type和Length字段的长度均为16比特,Value字段的长度可变。
图1-12 STUN消息属性结构
常见的STUN消息属性包括如下几种:
· CHANGE-REQUEST:捆绑请求中携带的消息属性,STUN客户端使用此属性来请求STUN服务器使用不同的IP地址或端口号来发送捆绑响应。
· MAPPED-ADDRESS:捆绑响应中携带的消息属性,表示经过地址转换后的STUN客户端的IP地址和端口。
· XOR-MAPPED-ADDRESS:捆绑响应中携带的消息属性,表示经过地址转换后的STUN客户端的IP地址和端口。与MAPPED-ADDRESS不同的是,XOR-MAPPED-ADDRESS属性中携带的IP地址经过了异或(XOR)处理。
· RESPONSE-ORIGIN:捆绑响应中携带的消息属性,表示STUN服务器发送数据的IP地址和端口。
· OTHER-ADDRESS:捆绑响应中携带的消息属性,表示STUN服务器的另一个IP地址和端口号。假设STUN服务器的IP地址为Y1,替代IP地址为Y2,端口号为YP1,替代端口号为YP2。Da表示STUN客户端发送捆绑请求的目的IP地址,Dp表示STUN客户端发送捆绑请求的目的端口号。如果Da为Y1,那么OTHER-ADDRESS中的IP地址为Y2;如果Da为Y2,那么OTHER-ADDRESS中的IP地址为Y1。如果Dp为YP1,那么OTHER-ADDRESS中的端口号为YP2;如果Dp为YP2,那么OTHER-ADDRESS中的端口号为YP1。
当STUN客户端要求STUN服务器使用不同的IP地址发送捆绑响应时,如果Da为Y1,则捆绑响应报文OTHER-ADDRESS中的IP地址为Y2;如果Da为Y2,则OTHER-ADDRESS中的IP地址为Y1。类似地,当STUN客户端要求STUN服务器使用不同的端口号发送捆绑响应时,如果Dp为YP1,那么OTHER-ADDRESS中的端口号为YP2;如果Dp为YP2,那么OTHER-ADDRESS中的端口号为YP1。
如果STUN服务器未指定替代IP地址,则捆绑响应报文中不会携带OTHER-ADDRESS属性,这种情况下,STUN客户端无法判断NAT类型。
STUN客户端通过和STUN服务器之间交互STUN协议报文,探测网络中NAT设备上的NAT映射的类型和NAT过滤的方式,并根据探测结果判断NAT类型。
假设STUN服务器的IP地址为Y1,替代IP地址为Y2,端口号为YP1,替代端口号为YP2。STUN客户端的IP地址和端口号为(X,XP)。STUN进行NAT映射探测的流程如图1-13所示,具体步骤为:
(1) STUN客户端以Endpoint(X,XP)为源地址和源端口向STUN服务器的外网Endpoint(Y1,YP1)发送捆绑请求。STUN服务器使用Endpoint(Y1,YP1)给STUN客户端发送捆绑响应,响应内容包括:STUN客户端经过NAT映射后的外网Endpoint(X1,XP1),以及STUN服务器的另一个外网Endpoint(Y2,YP2)。
(2) STUN客户端收到STUN服务器发送的捆绑响应报文后,判断NAT映射后的Endpoint(X1,XP1)是否与内网Endpoint(X,XP)相同:
a. 如果Endpoint(X1,XP1)与Endpoint(X,XP)相同,则SUTN客户端认为不存在NAT映射。
b. 如果Endpoint(X1,XP1)与Endpoint(X,XP)不同,则STUN客户端使用第(3)步进行探测。
(3) STUN客户端以Endpoint(X,XP)给STUN服务器的外网Endpoint(Y2,YP1)发送捆绑请求。STUN服务器使用Endpoint(Y2,YP1)给STUN客户端发送捆绑响应,响应内容包括:STUN客户端经过NAT映射后的外网Endpoint(X2,XP2)。
(4) STUN客户端收到STUN服务器发送的捆绑响应报文后,判断NAT映射后的Endpoint(X2,XP2)是否与第(1)步中NAT映射后的Endpoint(X1,XP1)相同:
a. 如果Endpoint(X2,XP2)与Endpoint(X1,XP1)相同,则STUN客户端认为NAT映射类型为EIM。
b. 如果Endpoint(X2,XP2)与Endpoint(X1,XP1)不同,则STUN客户端使用第(5)步进行探测。
(5) STUN客户端以Endpoint(X,XP)给STUN服务器的外网Endpoint(Y2,YP2)发送捆绑请求。STUN服务器使用Endpoint(Y2,YP2)给STUN客户端发送捆绑响应,响应内容包括:STUN客户端经过NAT映射后的外网Endpoint(X3,XP3)。
(6) STUN客户端收到STUN服务器发送的捆绑响应报文后,判断NAT映射后的Endpoint(X3,XP3)是否与第(3)步中NAT映射后的Endpoint(X2,XP2)相同:
a. 如果Endpoint(X3,XP3)与Endpoint(X2,XP2)相同,则STUN客户端认为NAT映射类型为ADM。
b. 如果Endpoint(X3,XP3)与Endpoint(X2,XP2)不同,则STUN客户端认为NAT映射类型为APDM。
图1-13 NAT映射类型探测流程图
假设STUN服务器的IP地址为Y1,替代IP地址为Y2,端口号为YP1,替代端口号为YP2。STUN客户端的IP地址和端口号为(X,XP)。STUN进行NAT映射探测的流程如图1-14所示,具体步骤为:
(1) STUN客户端以Endpoint(X,XP)为源地址和源端口向STUN服务器的外网Endpoint(Y1,YP1)发送捆绑请求,请求报文中携带CHANGE-REQUEST属性,即要求STUN服务器改变IP地址和端口号来发送捆绑响应。STUN服务器发送给STUN客户端的捆绑响应中,OTHER-ADDRESS为(Y2,YP2),捆绑响应的源地址和源端口为(Y2,YP2)。
(2) STUN客户端根据是否能收到响应报文进行如下判断:
a. 如果STUN客户端收到了捆绑响应报文,则STUN客户端认为NAT过滤类型为EIF。
b. 如果STUN客户端未收到捆绑响应报文,则STUN客户端使用第(3)步进行探测。
(3) STUN客户端以Endpoint(X,XP)给STUN服务器的外网Endpoint(Y1,YP1)发送捆绑请求,请求报文中携带CHANGE-REQUEST属性,即要求STUN服务器改变端口号来发送捆绑响应。STUN服务器发送给STUN客户端的捆绑响应中,OTHER-ADDRESS为(Y2,YP2),捆绑响应的源地址和源端口为(Y1,YP2)。
(4) STUN客户端根据是否能收到响应报文进行如下判断:
a. 如果STUN客户端收到了捆绑响应报文,则STUN客户端认为NAT过滤类型为ADF。
b. 如果STUN客户端未收到捆绑响应报文,则STUN客户端认为NAT过滤类型为APDF。
图1-14 NAT过滤方式探测流程图
STUN服务器通常部署在公网上,STUN服务器收到STUN客户端发送的捆绑请求报文后,向STUN客户端发送捆绑响应报文,且捆绑响应报文载荷中的IP地址为STUN服务器的公网地址。如果STUN服务器部署在私网,STUN服务器发送的捆绑响应报文载荷中的IP地址为STUN服务器的私网地址。由于STUN服务器侧的NAT设备不会将捆绑响应报文载荷中的私网IP地址转换为公网IP,需要网络设备做如下配合才能满足STUN探测需求:
· STUN服务器上手工指定经过地址转换后的STUN服务器的IP地址、替代IP地址。
· STUN服务器侧的NAT设备上使用公私网映射关系唯一的地址转换规则。
基于此,STUN客户端就不会感知STUN服务器的私网IP地址,仍然通过STUN服务器的公网IP地址与之互通,且STUN服务器发送给客户端的STUN协议报文载荷中的地址也会填充为STUN服务器的公网IP地址。
图1-15 STUN服务器部署在私网的典型组网
STUN基于UDP传输协议报文,STUN协议报文有可能在传输过程中被丢弃。STUN请求/响应事务的可靠性是通过STUN客户端的重传机制来实现的,具体机制如下:
(1) STUN客户端发送捆绑请求报文后,如果在一定时间没有收到捆绑响应报文,STUN客户端会以一定的时间间隔重传捆绑请求报文。
(2) 当STUN客户端收到捆绑响应报文,或者重传STUN报文的次数达到最大,STUN客户端将停止重传。
(3) 如果STUN客户端重传STUN报文的次数达到最大后,还未收到捆绑响应报文,则STUN客户端认为捆绑请求报文传输失败,无法进行STUN探测。
与STUN相关的协议规范有:
· RFC 3489:STUN - Simple Traversal of User Datagram Protocol (UDP) Through Network Address Translators (NATs)
· RFC 5389:Session Traversal Utilities for NAT (STUN)
· RFC 5780:NAT Behavior Discovery Using Session Traversal Utilities for NAT (STUN)
(1) 配置STUN服务器
(2) 配置STUN客户端
STUN主要用于解决SDWAN网络中的NAT穿越问题。在SDWAN网络中,STUN的探测结果需要在SDWAN隧道中传输。因此在配置STUN服务器和STUN客户端前,需要完成SDWAN的配置。关于SDWAN配置的详细介绍,请参见“三层技术-IP业务配置指导”中的“SDWAN”。
为了STUN探测功能能够正常工作,需要保证STUN客户端到STUN服务器的IP地址和替代IP地址均路由可达。
(1) 进入系统视图。
system-view
(2) 开启STUN服务器功能,并指定STUN服务器的IP地址和UDP端口号。
stun server ip ip-address [ port port-number ] [ alternative-ip ip-address [ alternative-port port-number ] ] [ vpn-instance vpn-instance-name ] [ global-ip global-ip-address [ global-port port-number ] [ global-alternative-ip ip-address [ global-alternative-port port-number ] ] ]
缺省情况下,STUN服务器功能处于关闭状态。
(1) 进入系统视图。
system-view
(2) 进入Tunnel接口视图。
interface tunnel number [ mode { advpn { gre | udp } [ ipv6 ] | ds-lite-aftr | eogre | eogre-udp | evi [ ipv6 ] | gre [ ipv6 ] | gre-p2mp [ ipv6 ] | ipsec [ ipv6 ] | ipv4-ipv4 | ipv4-ipv6 | ipv6 | ipv6-ipv4 [ 6rd | 6to4 | auto-tunnel | isatap ] | mgre | mpls-te | nve | nvgre | sdwan udp | sr ipv6 |{ vxlan | vxlan-dci } [ ipv6 ] } ]
关于本命令的详细介绍,请参见“三层技术-IP业务配置指导”中的“隧道”。
(3) 开启接口的STUN客户端功能,并设置STUN客户端连接的STUN服务器的IP和端口号。
stun client destination-ip ip-address [ destination-port port-number ] [ out-interface interface-type interface-number ]
缺省情况下,接口的STUN客户端功能处于关闭状态。
在完成上述配置后,在任意视图下执行display命令可以显示STUN配置后的运行情况,通过查看显示信息验证配置的效果。
在用户视图下,执行reset命令可以清除STUN表项。
表1-1 NAT显示和维护
操作 |
命令 |
查看STUN客户端收发报文的统计信息 |
display stun client info |
查看STUN服务器收发报文的统计信息 |
display stun server packet-statistics |
清除STUN客户端的报文统计信息 |
reset stun client statistics |
清除STUN服务器的报文统计信息 |
reset stun server packet-statistics |
SDWAN典型配置举例中,使用STUN来穿越NAT。关于此典型配置举例的具体内容,请参见“SDWAN配置指导”中的“SDWAN”。
不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!