NAT 网络穿透

储备知识

IP协议五元组

  1. 源IP地址
  2. 源端口
  3. 目的IP地址
  4. 目的端口
  5. 传输层协议

通过这个五元组可以唯一的标识一个网络连接。在通讯网络中,只要这五个元素相同,那么就可以认为相同的链接。

例如:两个局域网的设备通过tcp互相通信。

192.168.1.2:1563 -> 192.168.1.12:4780

那么这个五元组就是:

五元组
源IP地址192.168.1.2
源端口1563
目的IP地址192.168.1.12
目的端口4780
传输层协议tcp

NAT 和 NAPT

一开始用于被分配到本地地址,又想和因特网上的主机通信,使用NAT的方法。由于访问因特网需要公网IP,但是局域网的主机分配的局域网IP时,就需要NAT做地址转换。另外,这种通过使用少量的公有IP 地址代表较多的私有IP 地址的方式,将有助于减缓可用的IP地址空间的枯竭。

NAT全称是Network Address Translation,就是网络地址转换。

NAPT全称是Network Address Port Translation),即网络地址端口转换。NAPT算得上是一种较流行的NAT变体,通过转换TCP或UDP协议端口号以及地址来提供并发性。除了一对源和目的IP地址以外,这个表还包括一对源和目的协议端口号,以及NAT盒使用的一个协议端口号。NAPT的主要优势在于,能够使用一个全球有效IP地址获得通用性。主要缺点在于其通信仅限于TCP或UDP。当所有通信都采用TCP或UDP,NAPT允许一台内部计算机访问多台外部计算机,并允许多台内部主机访问同一台外部计算机,相互之间不会发生冲突。

现在流行的网络地址转换大多都是NAPT,NAPT和NAT的区别就是,前者会对端口和地址都进行转换,后者仅对IP地址进行转换。

在NAT转换中,NAT路由器会保留一个路由表,这个路由表决定了转换的方式。

NAT分为分为三种类型。Static NAT、Pooled NAT和NAPT。Static NAT的路由表是一个静态的路由表。每一个内部地址都唯一的映射一个外部地址。这样要求外部地址数量一定要大于等于内部地址,这种需求民营层次通常比较少见。商用中,很多云服务器是处在这样一个网络。云服务器本身获取的地址是一个内部地址,但是他可以使用一个公网地址自由通讯,可以独享一个IP 进行通讯。Pooled NAT被称为动态IP,他的路由表是一个动态的路由表。当内部主机尝试访问因特网时,NAT路由器会分配给这个主机一个临时的外部地址。这个概念同DHCP协议有一点相似,但是不同的是,DHCP是动态分配IP地址,而Pooled NAT是动态分配外部地址。而且这两个协议运行在不同的网络层。NAPT 也有一个动态的路由表,他是使用最普遍的一种转换方式。它又包含两种转换方式:SNAT和DNAT。SNAT(Source NAT):修改数据包的源地址。源NAT改变第一个数据包的来源地址,它永远会在数据包发送到网络之前完成,数据包伪装就是一具SNAT的例子。DNAT(Destination NAT):修改数据包的目的地址。Destination NAT刚好与SNAT相反,它是改变第一个数据包的目的地地址,如平衡负载、端口转发和透明代理就是属于DNAT。注意:本文讨论的Nat穿透是指 NAPT的SNAT转换模式


内网穿透

内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。

穿透的意义在于不经过中转服务器而让两个处于内网的设备直接通讯。显而易见的是,如果有一方有公网IP地址,或者有一台有公网IP的服务器做转发,穿透是没有意义的。


NAPT网络类型

对于不同的NAPT网络类型的理解可以基于四元组,就是五元组去掉传输层协议。

以下示例所用地址解释

解释IP地址
内部网络地址192.168.1.155
网关的内部地址192.168.1.1
网关的外部地址1.2.3.4
要访问的外部服务器地址5.6.7.8

Cone NAT (圆锥型)

可以理解为一个圆锥,细的一头是内部主机,粗的一头是外部网络。圆锥型的NAT网络都是比较好穿透的。

Full-cone NAT - 完全圆锥型

从同一私网地址端口192.168.1.155:4000发至公网的所有请求都映射成同一个公网地址端口1.2.3.4:62000 ,192.168.1.155可以收到任意外部主机发到1.2.3.4:62000的数据报。

Address-restricted-cone NAT - 地址限制圆锥型

从同一私网地址端口192.168.1.155:4000发至公网的所有请求都映射成同一个公网地址端口1.2.3.4:62000,只有当内部主机192.168.1.155先给服务器C 6.7.8.9发送一个数据报后,192.168.1.155才能收到6.7.8.9发送到1.2.3.4:62000的数据报。

Port-restricted cone NAT - 端口限制圆锥型

从同一私网地址端口192.168.1.155:4000发至公网的所有请求都映射成同一个公网地址端口1.2.3.4:62000,只有当内部主机192.168.1.155先向外部主机地址端口6.7.8.9:8000发送一个数据报后,192.168.1.155才能收到6.7.8.9:8000发送到1.2.3.4:62000的数据报。

这三种模式从名字上来看就已经可以很好理解,限制由少到多

Symmetric NAT (对称型)

这种模式下的穿透非常困难,他绑定了四元组中的所有四元。也就是说对于不同的链接,不会给予任何穿透。