• 产品与解决方案
  • 行业解决方案
  • 服务
  • 支持
  • 合作伙伴
  • 新华三人才研学中心
  • 关于我们

17-NAT配置指导

目录

04-STUN配置

本章节下载 04-STUN配置  (404.84 KB)

04-STUN配置


1 STUN

1.1  STUN简介

STUN(Session Traversal Utilities for NAT,NAT环境下的会话传输)是一种处理NAT穿越问题的协议,为隧道模块提供了确定网络中是否存在NAT设备,以及NAT设备为通信端点分配的IP地址和端口号的方法。STUN基于UDP传输协议报文,默认使用的端口号为3478。

1.1.1  STUN基本概念

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:捆绑响应。

1.1.2  NAT映射和过滤

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设备会对外网主动发到内网的报文进行过滤,即过滤非法报文,转发正常通信报文。

1. 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示意图

 

2. NAT过滤方式

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示意图

 

1.1.3  NAT类型

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.1.4  STUN应用场景

在如图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隧道示意图

 

1.1.5  STUN报文结构

STUN基于UDP传输协议报文,协议报文的封装格式如图1-9所示。

图1-9 STUN报文结构

 

图1-10所示,STUN消息(STUN Message)包括STUN消息头和STUN消息属性两部分。STUN消息头的长度为20字节,后面跟着零个或多个属性。

图1-10 STUN消息结构

 

1. 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客户端的不同探测请求。

2. 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类型。

1.1.6  STUN工作机制

STUN客户端通过和STUN服务器之间交互STUN协议报文,探测网络中NAT设备上的NAT映射的类型和NAT过滤的方式,并根据探测结果判断NAT类型。

1. 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映射类型探测流程图

 

2. 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过滤方式探测流程图

 

1.1.7  私网中部署STUN服务器

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服务器部署在私网的典型组网

 

1.1.8  STUN客户端重传机制

STUN基于UDP传输协议报文,STUN协议报文有可能在传输过程中被丢弃。STUN请求/响应事务的可靠性是通过STUN客户端的重传机制来实现的,具体机制如下:

(1)     STUN客户端发送捆绑请求报文后,如果在一定时间没有收到捆绑响应报文,STUN客户端会以一定的时间间隔重传捆绑请求报文。

(2)     当STUN客户端收到捆绑响应报文,或者重传STUN报文的次数达到最大,STUN客户端将停止重传。

(3)     如果STUN客户端重传STUN报文的次数达到最大后,还未收到捆绑响应报文,则STUN客户端认为捆绑请求报文传输失败,无法进行STUN探测。

1.1.9  协议规范

与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.2  STUN配置任务简介

(1)     配置STUN服务器

(2)     配置STUN客户端

1.3  STUN配置准备

STUN主要用于解决SDWAN网络中的NAT穿越问题。在SDWAN网络中,STUN的探测结果需要在SDWAN隧道中传输。因此在配置STUN服务器和STUN客户端前,需要完成SDWAN的配置。关于SDWAN配置的详细介绍,请参见“三层技术-IP业务配置指导”中的“SDWAN”。

1.4  STUN配置限制和指导

为了STUN探测功能能够正常工作,需要保证STUN客户端到STUN服务器的IP地址和替代IP地址均路由可达。

1.5  配置STUN服务器

(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.6  配置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 ] | ipv6-ipv6 | 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客户端功能处于关闭状态。

1.7  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

 

1.8  STUN典型配置举例

1.8.1  SDWAN典型配置举例

SDWAN典型配置举例中,使用STUN来穿越NAT。关于此典型配置举例的具体内容,请参见“SDWAN配置指导”中的“SDWAN”。

不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!

新华三官网
联系我们