我的家庭网络中有一台 PC,它位于运行 NAT 的路由器后面。我想在 PC 上设置一个 FTP 服务器,因此我转发了所有需要的端口等,现在它可以正常工作了。然后,出于好奇,我运行了 Wireshark 来查看那里运行的数据包。我使用路由器 WAN IP 连接到我自己,这就是我看到的:
这里的 192.168.1.3 是我的 PC IP,95.105.xx 是我的路由器 WAN IP,192.168.1.1 是路由器 LAN IP。
我理解为什么请求和回复都有 2 个副本——我在同一台机器上运行客户端和服务器。我不明白的是为什么第 2 个和第 3 个数据包包含路由器 LAN IP。
当有人连接到我的服务器时,我会看到以下内容:
如您所见,数据包仅包含我的 PC LAN IP 和该人的 IP。当我连接到其他服务器时,情况也是如此。
那么为什么当我连接自己时路由器会回复其 LAN IP 呢?
答案1
路由器无法保留源 IP 地址,因为这会导致返回流量直接通过 LAN 传输,而不经过 NAT。并且,只对一个方向的流量应用 NAT 而不对另一个方向的流量应用 NAT 会中断通信。
需要以这样的方式选择源 IP,以便将返回流量发送到路由器。这意味着它可以使用 LAN 之外的任何 IP 地址,并且连接将正常工作。
NAT 的一种方法是使用传出接口的 IP 地址作为源 IP。在至少一种实现中,这称为伪装。这可以解释您所看到的情况。从您的 LAN 到外部世界的连接被伪装成路由器的 WAN IP。从您的 LAN 通过端口转发再回到您的 LAN 的连接被伪装成路由器的 LAN IP。
这种方法的另一个好处是,即使路由器的 WAN IP 发生变化,连接也不会中断。