NAT穿透

NAT概述

NAT即网络地址转换,用于局域网主机与公网主机的互相访问,解决公网IP不足的问题。

NAT转换类型

Full cone NAT

一对一的转换:局域网主机的地址(IP1:PORT1)经过NAT发送到公网时,NAT会改变请求的源IP和源端口(IP2:PORT2),此后所有来自(IP1:PORT1)的请求,都将转换为(IP2:PORT2)的请求,所有目的地址为(IP2:PORT2)的请求,都会转发给局域网主机(IP1:PORT1)。

Address-Restricted cone NAT

和Full cone NAT基本相同,区别在于:局域网主机(IP1:PORT1)和公网地址(IP2:PORT2)建立映射关系后,来自公网的目标地址为(IP2:PORT2)的请求不会被转发给局域网主机,除非局域网主机(IP1:PORT1)主动发送过请求给(IP2:*)。

也就是说,局域网主机访问过的IP才能发送数据给它。

Port-Restricted cone NAT

和Address-Restricted cone NAT基本相同,区别在于:对来自公网的请求的端口也有限制,只有局域网主机(IP1:PORT1)主动发送过请求给(IP3:PORT3)的主机,来自(IP3:PORT3)的请求才会被接受并转发。

Symmetric NAT

和之前的不同,这里的映射为(IP1:PORT1,IP3:PORT3) => (IP2:PORT2),即局域网主机地址(IP1:PORT1)和目标地址(IP3:PORT3)的组合映射为NAT的公网地址(IP2:PORT2)。也就是说,当目标IP或者端口发生变化时,即使局域网主机地址(IP1:PORT1)没变,NAT的转发端口(PORT2)也会变化。同时,它还具备和Port-Restricted cone NAT相同的限制条件。

NAT穿透

Full cone NAT穿透

  1. 只需要先访问服务器,拿到对方的公网IP:PORT,就可以直接通信。

Address-Restricted cone NAT & Port-Restricted cone NAT穿透

  1. A先从服务器拿到对方地址(IPb:PORTb)
  2. A发送一个请求到B(IPb:PORTb) A主动访问B是为了突破地址限制,为了能收到来自B的消息
  3. A告诉服务器准备完毕
  4. 服务器告诉B:A已经准备完毕
  5. B发送数据到A(IPa:PORTa),链接成功

Symmetric NAT穿透

  1. 由于公网端口会根据目标地址的不同而变化,不能通过上面的方法建立通信。
  2. 可以通过猜测对方下一个NAT端口号,发送大量不同目标端口的请求,如果命中则能建立通信。

配对

设Full cone NAT为A类,Address-Restricted cone NAT & Port-Restricted cone NAT为B类,Symmetric NAT为C类,那么:

  1. A类能和其他所有类别建立通信
  2. B类能和A类/B类建立通信
  3. C类只能和A类建立通信