假设我的 WAN IP 是123.456.789.0
123.456.789.0:22
之前,当我从 LAN连接时,流量可以正确到达 LAN,服务也运行正常。当我从 WAN 连接时,服务也运行正常。
最近我换了一台新的TP-Link Archer C5 2.0路由器。这台路由器没有像我的旧路由器一样内置调制解调器,所以增加了一个额外的调制解调器。
现在,从 WAN 连接可以正常进行,但从 LAN 连接失败(无法创建连接)。我从 LAN 连接到 WAN IP 的用例是避免从 WinSCP 等 SFTP 实用程序更改会话。
我还没有测试是否因为有单独的路由器和调制解调器而导致这种情况,因为当我绕过路由器并尝试将流量发送到我自己的 WAN IP 而中间没有路由器时,问题仍然存在。
我认为这里的问题可能是以下两个之一:
- 将数据包发送到您自己的 IP 存在一些固有问题(这似乎不太可能),并且我的旧路由器会自行重定向此类数据包,而新路由器则不会。
- 通过 WAN 向您自己的 IP 发送数据包没有问题,并且我的旧路由器工作正常,而新路由器则不能。
我的路由器上是否存在我遗漏的某些配置选项?
答案1
简而言之,您缺少“NAT 环回”(又名“NAT 发夹”)配置选项。
将数据包发送到您自己的 IP 存在一些固有问题(这似乎不太可能),并且我的旧路由器会自行重定向此类数据包,而新路由器则不会。
是的,有。但你忘记了“向你自己的 IP 发送数据包”并不是仅有的發生的事。
你的 WAN IP 地址并不属于整个 LAN,而是属于你的路由器并且 LAN 中的其他设备即使看到数据包头上的地址也无法识别该地址。它们只识别他们自己的LAN 地址(例如典型的 192.168.xy)。
这意味着到 WAN IP 地址的连接总是进入路由器,然后路由器需要重写数据包的目标地址,并将更新后的数据包重新发送到最终设备。当然,响应从该设备需要进行相反的重写(即改变来源地址从设备自己的 LAN IP 返回到路由器的 WAN IP)。
但如果服务器识别出其客户端位于同一子网中,它将发送响应直接地,而不是通过路由器,路由器将没有机会取消转换源 IP 地址。因此,您的客户端计算机会向 WAN 地址发送数据包,但会收到来自 LAN 地址的回复,并且无法匹配两者。
有些路由器有“NAT环回”功能,可以重写目标和此类数据包的来源。缺点是您的服务器只能看到路由器的 IP 地址,而看不到实际客户端的 IP 地址。(此外,路由器的 CPU 可能会限制性能。)