答案1
看看这个图表。绿色框代表iptables
,蓝色框代表ebtables
(忽略那些)。
因此您会看到,OUTPUT
仅本地应用程序生成的数据包会遍历该链,而POSTROUTING
所有数据包都会遍历该链,包括从其他地方路由的数据包。
网络地址转换 (NAT) 有两种子情况:SNAT 转换来源数据包的地址,同时DNAT 转换目的地数据包的地址。
您可以在哪些链中执行以下任一操作:nat/PREROUTING
并且nat/OUTPUT
可以执行 DNAT,同时nat/POSTROUTING
并且可能nat/INPUT
(不确定这是否仍然有效)可以执行 SNAT。
答案2
@ x-yuri 我也对输出 NAT 感到困惑,但最后我得到了答案。预路由和后路由 NAT 均适用于外部 NAT,当某些数据包传入或传出您的接口并且您想要对地址进行 NAT 时。但 OUTPUT NAT 适用于您的本地网络 NAT,我的意思是当数据包从您的应用程序开始时。我认为这是一个很好的例子,可以更好地理解这一点。当您想要更改作为透明代理的流量的端口和 IP 地址时,例如我们在 Nginx 中所做的事情。我们可以使用这样的东西:
iptables -t nat -A 输出 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.10:8080
您将端口 80 上的流量发送到网络 192.168.100.10 上正在侦听其端口 8080 的另一台主机
我想这就是我希望这是真的以及你所要求的