NAT 后面的 NAT 如何工作(路由器的 NAT 和 ISP 的 NAT)?

NAT 后面的 NAT 如何工作(路由器的 NAT 和 ISP 的 NAT)?

我使用的是调制解调器路由器,在某些情况下也位于 ISP NAT 后面。NAT(ISP 的 NAT)后面的 NAT(路由器的 NAT)如何工作?

据我所知,NAT 的工作方式如下:计算机 A 和 B 获取内部 IPinternal1internal2。然后 NAT 为它们提供相同 IP 上的端口,这样它们在面向公众时就位于someIP:1和 之后someIP:2

但是如果路由器这样做了,然后 ISP 再次这样做了,那么 IP 的形式就会是someIP:1:100someIP:2:101这是不可能的,因为端口没有二级端口。

那么这是如何实现的呢?

答案1

让我们尝试一个简单的例子。

在“正常”的 NAT 家庭网络中,192.168.1.2:11223被映射到“公共”地址:端口对203.0.113.5:22334。因此,最终目标主机认为它收到了数据包203.0.113.5:22334,并且不知道其背后的“私有”网络。


现在,让我们将其扩展为具有两级 NAT 的双 NAT 网络。

在最靠近主机的路由器上,192.168.1.2:11223被映射到“公共”地址:端口对10.0.0.8:22334。现在,10.0.0.8仍然是私有地址,只是在不同的网络中。就此路由器而言,它的工作已完成。

在下一个路由器上,它充当第一个路由器所在 LAN 的网关,10.0.0.8:22334并映射到其自己的公共接口上的另一个地址:端口对203.0.113.5:12345

最终目标主机认为它收到了来自 的数据包203.0.113.5:12345。它和整个公共互联网都不知道这里涉及的任何10.0.0.0/8192.168.0.0/16子网。它将向该地址发送响应,该响应必须由每个路由器依次转换回来。

                              Different address:port pairs for
                              thesame endpoint in one connection!
+------------------------+    -----------------------------------
|Host                    |
|192.168.1.2             |
+------------------------+    192.168.1.2:11223 <--- Host sees
                                                     this pair

+------------------------+    192.168.1.2:11223 <--- Router 1 sees
|Router 1                |                           req from this
|internal 192.168.1.1/24 |
|external 10.0.0.8       |
+------------------------+    10.0.0.8:22334 <------ Router 1 sends
                                                     req from this

+------------------------+    10.0.0.8:22334 <------ Router 2 sees
|Router 2                |                           req from this
|internal 10.0.0.1/24    |
|external 203.0.113.5    |
+------------------------+    203.0.113.5:12345 <--- Router 2 sends
                                                     req from this

+------------------------+    203.0.113.5:12345 <--- Public internet
|Public internet         |                           sees this pair
+------------------------+

CGN(“ISP NAT”)的工作方式大致相同。唯一的区别是它不会为其内部主机提供 RFC1918 私有地址,因为这可能会与业务网络发生冲突。相反,100.64.0.0/10上图中的“路由器 2”会分配范围 (RFC6598) 中的地址。就客户自己的路由器而言,其“公共”地址来自该范围 - 但实际上无法在公共互联网上访问!

答案2

据我所知,NAT 的工作方式如下:计算机 A 和 B 获得内部 IP internal1 和 internal2。然后 NAT 为它们提供相同 IP 上的端口,这样它们在公开时位于 someIP:1 和 someIP:2 后面。

端口号不是主机地址的一部分——无论是否使用 NAT,IP 层都没有端口。主机的 IP 地址始终是只是地址;它没有“二级”端口,也没有“一级”端口。[1]

相反,端口属于每个单独的 TCP/UDP联系主机在 IP 之上创建的端口。(严格来说,它们是每个数据包的一部分,并且同一连接中的所有数据包都使用相同的端口。)

因此,当您看到写为的地址时12.34.56.78:123,整个过程就是不是主机的 IP 地址 – 这是端口 123 的 TCP 连接端点一个主机的 IP 地址仍然很简单12.34.56.78

这些端口未添加通过 NAT 实现 - 它们一直存在;每个 TCP 或 UDP 数据包都有两个端口(一个“源”端口和一个“目标”端口)。执行 NAT 的路由器只是将它们转换为不同的值。无论您有多少级 NAT,该数据包仍然会有两个端口。


[1]这意味着,当两个主机通过 NAT 连接到同一个公共地址时,IP 层实际上无法区分它们——当外部 IP 数据包发送到someIP它时,它无法指定它想要哪个主机;NAT 路由器必须从 TCP 层推断这一点。这就是为什么您必须配置“端口转发”规则才能接收入站连接。

相关内容