我的旧 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 相关的其他任何内容。
我认为 DD-WRT 接口使用术语“Internet NAT 重定向”来纠正默认情况下处于活动状态的发夹 NAT 问题,因为它可能“按预期工作”,您根本不知道它的存在。
而不是特定的IP地址(和端口号)可能在 iptables 中受到影响/interfaces 或具有类似效果,用于不来自 WAN 的流量。
沿着以下思路思考
来源:https ://forum.dd-wrt.com/phpBB2/viewtopic.php?p=545301
根据 HBruijn 的回答提出的一些线程,以及从路由器本身转储的一些 iptables,我想我找到了。如果没有 HBruijn 的回答,我无法到达那里,但它没有达到我想要的详细程度,所以我想我会分享。
https://svn.dd-wrt.com/ticket/1868是关于环回被破坏的问题的错误报告,它给出了示例简单的命令:
许多地方提到了一个特定的选项,例如https://forum.dd-wrt.com/phpBB2/viewtopic.php?t=82919&postdays=0&postorder=dsc&start=0:
这导致我访问https://forum.dd-wrt.com/phpBB2/viewtopic.php?p=643132,它显示了该选项导致的特定更改,我可以直接在自己的路由器上确认。
未选中“过滤 WAN NAT 重定向”:
选中“过滤 WAN NAT 重定向”:
不同之处在于未选中它:
,并检查它,这成为一个 DROP 规则。
因此,如果我正确理解这里发生的事情,未选中“过滤 WAN NAT 重定向”(这似乎什么都不做),实际上发生了什么,正如你们所说,路由器的默认行为是伪装本地上的每个连接来自任何非 WAN 端口的网络。
因此,从随机 DHCP 地址(在我的例子中说 192.168.123.10)到我的一个静态 IP(比如 173.13.139.236)的连接会:
然后返回数据包: