如果我尝试在 iptables 中的 NAT 表的 POSTROUTING 链中执行 DNAT,会发生什么?
假设我将 POSTROUTING 链中数据包的目标 IP 更改为应通过不同接口路由的地址。数据包会发生什么情况?
即使在做出所有路由决策之后,主机是否能够将数据包路由到正确的接口。
或者数据包仍会通过之前路由决策中决定的接口发送。
答案1
两个选项都是错误的。正确答案是:
- 将会发生错误。
因为DNAT只能在PREROUTING或OUTPUT链中使用。
答案2
要查看通过 iptables 的数据包流,请检查 NetFilter iptables 数据包流图。
https://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg
简而言之,路由决策发生在 PREROUTING 之后,并且前路由后。
此外,我认为你无论如何都无法在 POSTROUTING 上执行 DNAT。iptables 将抛出语法错误。