我试图了解 NAT 在我的家庭网络中的基本工作原理(只是一个消费者 Google Fiber 路由器,除了我将要描述的端口转发之外没有自定义配置)。我有一台在端口 1234 上运行服务的 Raspberry Pi,并且我已使用路由器的工具设置了从我的公共 IP 上的 31234 到 Raspberry Pi 上的端口 1234 的端口转发。
- (正如预期的那样)当我使用家庭网络的公共 IP 从家庭网络外部连接到服务时(具体来说,我尝试从 Digital Ocean VPS 连接),我的 Raspberry Pi 服务器显示 Digital Ocean 服务器的 IP 作为连接的客户端 IP。
- (正如预期的那样)当我使用 Raspberry Pi 的内部的IP 或主机名,我的树莓派服务器显示我的 MacBook 的本地 IP 地址 (192.168.xx.xx)。
- (不料),当我从家庭网络(同样是从我的 MacBook)连接到服务时,使用我的家庭网络的民众IP,我的树莓派显示路由器的IP地址(192.168.xx.1)作为连接的客户端IP。
我试图理解为什么在最后一种情况下,路由器的 IP 地址显示为客户端 IP,而不是其他看似合理的选项,如我的家庭网络的公共 IP 或我的 MacBook 的本地 IP。
答案1
想象一下如果路由器不这样做会发生什么。本地连接目标会将其响应流量直接发送到您的 PC。但是,您的 PC 正在等待来自公共 IP 地址的响应。不相关的流量将被丢弃,通信将无法进行。
通过将路由器作为连接源,响应流量将被发送回路由器。然后路由器就会知道将响应转发到您的 PC。