路由后如何更改目标 ip

路由后如何更改目标 ip

如何在做出路由决策后(即在 iptables 的 POSTROUTING 链中)更改目标 IP 地址?

答案1

e...顾名思义 - 在 POSTROUTING 表中执行此操作有点太晚了。

对了解发生的情况和时间非常有帮助。如果你真的必须重写 dst 地址 - 也许将另一台机器放在 [虚拟?] 行中,甚至更好 - 重新考虑为什么要这样做。

答案2

如果你真的想改变 POSTROUTING 中的目标,也许你可以尝试滥用 NETMAP 目标?我不确定它是否有效,但请尝试以下方法:

iptables -t nat -A POSTROUTING -d 1.2.2.2/32 -j NETMAP --to=1.3.3.3/32

答案3

我认为这个问题没有好的答案。我认为 iptables 不允许你在路由后更改目标 IP 地址。我想要做的是:

iptables -t nat -A POSTROUTING -o eth0 -p udp -d 10.0.0.0/8 --dport 53 -m comment --comment "Redirect DNS when VPN is down" -j DNAT --to-destination 8.8.8.8

但这不合法。我想根据输出接口更改目标地址,而这在路由之后才知道。

如果您可以更改目标 IP 地址,则更改路由就太晚了(这对于我的示例用途来说没问题)。您只能路由数据包一次。

我知道的唯一解决方案是在 eth0 和真实网络之间建立一个虚拟机,然后可以执行 DNAT。

就我的目的而言,我可以在 VPN 接口关闭或启动时动态添加或删除预路由规则,但这感觉像是一个笨拙的解决方案。

答案4

无法更改POSTROUTING表中的目标 IP。

使用链NETMAP中的方法POSTROUTING将充当SNAT整个映射网络。


例如

iptables -t nat -A POSTROUTING -s 1.2.3.4/24 -d 5.6.7.8/24 -j NETMAP --to 11.22.33.44/24


上述规则将会替换网络中的源1.2.3.4IP11.22.33.44地址24

相关内容