NAT原理与NAT穿透 - daniel-qa/Network GitHub Wiki

NAT原理与NAT穿透

基本型(透過 Router Table Mapping IP)的的NAT设备已经很少了。或许根本我们就没机会见到。

NAPT(Network Address/Port Translators):

其实这种才是我们常说的 NAT

NAPT的特点是在网关时,会使用网关的 IP,但端口会选择一个和临时会话对应的临时端口。如下图:

在客户机时 192.168.0.8:4000——6.7.8.9:8000

在网关时 1.2.3.4:62000——6.7.8.9:8000

服务器C 6.7.8.9:8000

网关上建立保持了一个 1.2.3.4:62000 的会话,用于 192.168.0.8:4000 与 6.7.8.9:8000之间的通讯。

对于 NAPT,又分了两个大的类型,差别在于,当两个内网用户同时与 8000 端口通信的处理方式不同:

Symmetric NAT型 (对称型)

在客户机时 192.168.0.8:4000——6.7.8.9:8000 192.168.0.8:4000——6.7.8.10:8000

在网关时,两个不同session但端口号不同 1.2.3.4:62000——6.7.8.9:8000 1.2.3.4:62001——6.7.8.10:8000

服务器C 6.7.8.9:8000

服务器 D 6.7.8.10:8000

这种形式会让很多p2p软件失灵。

如果數據包的來源端口不同,則映射到外部 IP 的目標端口也會不同。

當內部網絡中的主機(例如,計算機或設備)發出連接請求時,Symmetric NAT 會分配一個唯一的外部 IP 地址和端口組合,
用於該特定的連接。

此映射在連接的生命週期內保持不變。如果同一個內部主機發出多個連接請求,每個連接都會分配不同的外部位址。

Symmetric NAT 提供了一定的安全性,因為它限制了從外部網絡對內部網絡的直接訪問。

同時,它也增加了連接的複雜性,特別是在使用基於 IP 的應用程式或通訊協議(如 VoIP、P2P 網絡)時。

由於對稱性映射的特性,對外部用戶來說,與同一個內部主機建立多個連接可能會導致連接的不穩定性或失敗。

Symmetric NAT 在某些環境中被使用,特別是在企業網絡或特定的網絡架構中。

然而,它並非通用的 NAT 配置,而是一種具有特定特性和限制的變體。

Cone NAT型(圆锥型)

在客户机时 192.168.0.8:4000——6.7.8.9:8000 192.168.0.8:4000——6.7.8.10:8000

在网关时,两个不同session但端口号相同 1.2.3.4:62000——6.7.8.9:8000 1.2.3.4:62000——6.7.8.10:8000

服务器C 6.7.8.9:8000

服务器D 6.7.8.10:8000

目前绝大多数属于这种。

Cone NAT又分了3种类型:

a.Full Cone NAT(完全圆锥型):从同一私网地址端口 192.168.0.8:4000 发至公网的所有请求都映射成同一个公网地址端口1.2.3.4:62000192.168.0.8可以收到任意外部主机发到 1.2.3.4:62000的数据报

b.Address Restricted Cone NAT (地址限制圆锥型):从同一私网地址端口 192.168.0.8:4000发至公网的所有请求都映射成同一个公网地址端口1.2.3.4:62000,只有当内部主机 192.168.0.8 先给服务器C 6.7.8.9发送一个数据报后192.168.0.8才能收到6.7.8.9发送到1.2.3.4:62000的数据报

c.Port Restricted Cone NAT(端口限制圆锥型):从同一私网地址端口192.168.0.8:4000发至公网的所有请求都映射成同一个公网地址端口1.2.3.4:62000,只有当内部主机 192.168.0.8先向外部主机地址端口6.7.8.98000发送一个数据报后,192.168.0.8才能收到6.7.8.98000发送到1.2.3.4:62000的数据报。

a.Full Cone NAT(完全圆锥型)完全圆锥型是一种最宽松的NAT类型。

在完全圆锥型NAT中,外部网络中的任何IP地址和端口都可以通过NAT设备访问内部网络中的任何IP地址和端口。
换句话说,一旦内部网络中的主机向外部网络发送数据包,NAT设备就会为该主机建立一个临时的映射,
该映射允许来自外部网络的任何主机通过映射的公共IP地址和端口与内部主机通信。

b.地址限制圆锥型(Address Restricted Cone NAT):

地址限制圆锥型是相对于完全圆锥型更严格的一种NAT类型。
在地址限制圆锥型NAT中,只有外部网络中之前与内部网络中的主机进行通信的IP地址和端口才能向该主机发送数据包。
换句话说,一旦内部网络中的主机向外部网络发送数据包,NAT设备将为该主机建立一个映射,
只允许来自先前与该主机通信的外部主机通过映射的公共IP地址和端口与该主机通信。

c.端口限制圆锥型(Port Restricted Cone NAT):

端口限制圆锥型是最严格的NAT类型。在端口限制圆锥型NAT中,
只有外部网络中之前与内部网络中的主机在特定端口进行通信的IP地址和端口才能向该主机发送数据包。
换句话说,一旦内部网络中的主机向外部网络发送数据包,NAT设备将为该主机建立一个映射,
只允许来自先前在特定端口与该主机通信的外部主机通过映射的公共IP地址和端口与该主机通信。

穿越NAT的实现

UDP和TCP打洞