现在的位置: 首页 > 综合 > 正文

NAT Type 及STUN

2018年02月09日 ⁄ 综合 ⁄ 共 3843字 ⁄ 字号 评论关闭

  今天整理下NAT的类型,我想要更好的理解NAT的不同类型的不同表现,可以借助学习STUN协议的测试流程,通过STUN的判断标准,进一步了解不同NAT的表现,希望带着下面一个问题来进行学习, 为什么stun只能不能解决对称的nat类型呢.?

 

 

一, NAT 的具体流程,

 

  请看下图,   图示为LAN端一PC和WAN端两Server, 中间为NAT的Soho Router,

 1, Client A 使用10.0.0.1:1234 需要和Server 1的18.181.0.31:1235 建立session, 假设建立UDP Session,则UDP pckets经过Router时, NAT会将该UDP包中的Sourec IP和Source Port进行修改, Source IP = Router's WAN IP, Source Port=WAN PORT = 62000(一般为者随机端口), 并重新计算crc将包发给S1;

 2, 在NAT将包重组,并发送出去的同时, 创建并维护了一张NAT Address Port Table表. 

Client Source IP:Client Sourece Port -- Wan IP:Wan port -- DesIP:DesPort(Server IP:ServerPort)

 3, Server 1收到该UDP Packets后,并进行回复. 回复的UDP包的SIP:SPORT=18.181.0.31:1235, DIP:DPORT=Router's WAN IP: WAN port=155.99.25.11:62000;

 4, 当NAT Router收到该UDP数据包后, 会根据step 2中创建的NAT Table中的表项进行查找, 根据该包中的Desport:DesPort 和Source IP:Sport找到对应的Client IP:Port,  并修改该Packets的DIP:Dport为ClientIP:Port,并发送该Client A; 最终完成整个NAT UDP的流程.

 

Cone nat

 

 

 

 

 

二, NAT 的类型;

 

1, NAT Type

NAT 从实现分为Cone NAT和Symmtric NAT两类。 最主要区别在于内网的某个Client使用相同的(Source IP+Source Port)组合访问不同的外网Server时,在NAT在出口方向上的打洞方式(Cone和Symmtric 映射表现的方式)以及入口方向上的源IP及源Port的条件限制检测(Cone内部3中不同的NAT方式对入口报文有不同的来源限制)。

 

 若上图所示的Client A使用同样的Source Port要和Server 2建立UDP session, 则不同的NAT type的行为将会不一样.

1.1, Cone NAT:  若相同的Client Source IP: Source Port在NAT Router上创建一个相同对应关系的WANIP:WAN Port. 为Cone NAT. 如上图所示, Session 2使用的Wan Source Port 仍为62000;

 

1.2, Symmtric NAT: 若相同的Client Source IP: Source Port在NAT Router上创建不同对应关系的WANIP:WAN Port. 为Symmtric NAT; 若上图中, Session 2使用的Wan Source Port为62001;  相比Cone NAT, Symmtric的限制更严格, 更安全;

 

2, Detail Information of Cone NAT

Cone  NAT,即锥行NAT,  从抽象上来理解为, NAT 使用一个洞,同WAN端很多台Server进行通信, 如下图所示,(前提条件为Client IP:Source Port 相同).但是根据NAT Router对WAN端入包的判断严格程度不同, Cone NAT又可分为以下3中types:

根据本人理解:  

Full Cone NAT: 在NAT Router Wan端收到数据包,并根据NAT Table找到相应的Client后,直接修改并发送; 不关心Source IP:Port.

Restricted Cone NAT: 在Full Cone的基础上,增加了对Source IP的判断, 若该Source IP并不是之前记录的DIP(Server IP), 则Drop掉;

Port Restricted NAT: 在Restricted Cone的基层上又增加了对Source Port的检测, 若该SourceIP:Source Port != 之前记录的DIP:DPort(ServerIP:Server:Port),则Drop掉. 

 

 

 

2.1 Full cone nat

  Once an internal address (iAddr:port1) is mapped to an external address (eAddr:port2), any packets from iAddr:port1 will be sent through eAddr:port2. Any external host can send packets to iAddr:port1 by sending packets to eAddr:port2.

 

2.2 Restricted nat

 §Once an internal address (iAddr:port1) is mapped to an external address (eAddr:port2), any packets from iAddr:port1 will be sent through eAddr:port2. An external host (hostAddr:any) can send packets to iAddr:port1 by sending packets to eAddr:port2 only if iAddr:port1 had previously sent a packet to hostAddr:any. "any" means the port number doesn't matter.

2.3 Port Restricted nat 

§Like a restricted cone NAT, but the restriction includes port numbers.
§Once an internal address (iAddr:port1) is mapped to an external address (eAddr:port2), any packets from iAddr:port1 will be sent through eAddr:port2. An external host (hostAddr:port3) can send packets to iAddr:port1 by sending packets to eAddr:port2 only if iAddr:port1 had previously sent a packet to hostAddr:port3.
 

3, Detail Information Of Symmetric NAT  

§Each request from the same internal IP address and port to a specific destination IP address and port is mapped to a unique external source IP address and port.
If the same internal host sends a packet even with the same source address and port but to a different destination, a different mapping is used.
§Only an external host that receives a packet from an internal host can send a packet back.

 

 

 三, STUN 及测试流程, 

STUN即简单nat 穿越协议. 可以检测设备当前NAT Router的类型,以及该NAT Map的ip和port以供应用程序使用. 下面就来说说stun是如何测试的.  简单来说,就是修改stun server的ip和port给wan口进行发包,并根据lan client收到包的个数和其中的map address的内容来判断nat的类型.  

首先,请看下图

  Test1,  c1给s1发送一个包, 同时这个s1给c1回复,并带有map address(i1) 的ip 和port(p1);

  Test2,   s2给c1发包,其目的地址为i1:p1, 若c1能收到,则为full cone;收不到则为restriected ;

  Test3,   c1给s2发包, 并收到s2给c1的回复, 类似于test1, 带有map address(i2)的ip和port (p2), 若P2!=P1,则表示c1给s2发送时有重新打了个洞, 则为Symmetric NAT,

  Test4.  s1更换源端口给c1(i1:p1)发包,若c1不能接收到的话则为port restricted;

最后附上一个流程图.

 

四, 参考资料,
RFC1631.The IP Network Address Translator (NAT)
RFC2663.IP Network Address Translator (NAT) Terminology and Considerations
RFC3235.Network Address Translator (NAT)-Friendly Application
RFC4787.Network Address Translation (NAT) Behavioral Requirem

若各位有什么问题,可以留言.

抱歉!评论已关闭.