我的旧 DD-WRT 路由器快要死了,所以我拿了一个 UniFi EdgeRouter,从风格上讲,它更像是一个“真正的路由器”。我有各种公共 IP,我为其设置了一对一的 NAT,即内部系统的 IP 为 192.168.123.134 ,对 173.13.139.236 的任何外部请求都被转换为内部 IP 并返回。
使用新路由器,我必须另外设置发夹 NAT 规则,以便内部系统可以到达 173.13.139.236 ,方法是将它们的请求转换为内部 IP,但在路由器上使用源IP(即伪装的 NAT)。
(据我了解,具体问题是,如果您只是对来自内部地址的数据包进行 NAT,使其目的地也是内部地址,那么回复只是直接返回给请求者,但请求者发送它将数据包发送到路由器,因此当它看到来自非路由器的回复时,它会将数据包丢弃为无效。)
使用我的 DD-WRT 路由器,我不必执行发夹式 NAT 规则,我不明白为什么。
具体来说,据我所知,我的 DD-WRT 系统上该 IP 的整个配置是:
iptables -t nat -I PREROUTING -d 173.13.139.236 -j DNAT --to 192.168.123.134
iptables -t nat -I POSTROUTING -s 192.168.123.134 -j SNAT --to 173.13.139.236
iptables -I FORWARD -d 192.168.123.134 -j ACCEPT
事实上,这确实奏效了。确实,它工作了很多年。为什么?
完全有可能在 DD-WRT 设置中有一些其他配置可以处理这个问题,但如果有,我不知道它会在哪里;我在更改路由器时查看了整个配置,但没有看到与这些 IP 相关的其他任何内容。