iptables:本地生成并发往本地的数据包

iptables:本地生成并发往本地的数据包

在本地生成并发往本地的数据包是否采用 PREROUTING 链?

我向 iptables 添加了一些规则,以将我的公共 IP 的 http 请求转发到本地绑定的 Nginx。

iptables -t nat -A PREROUTING -i enp3s0f0 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1
iptables -t nat -A POSTROUTING -o lo -p tcp --sport 80 -j SNAT --to-source xxx.yyy.zzz.www

并将过滤表FORWARD链的策略设置为ACCEPT。

结果,这些规则起作用了,我可以在另一台机器上访问 Nginx,但是我无法在具有 xxx.yyy.zzz.www IP 的机器上访问 xxx.yyy.zzz.www。(使用 Curl 和 Chrome)

为什么我在xxx.yyy.zzz.www机器上访问不了Nginx?

答案1

不,本地发起的数据包不会通过 PREROUTING 链(参见此维基图表- 本地数据包的路径始于本地进程块)。此外,这些数据包仅通过 INPUT/OUTPUT 链,而不会通过 FORWARD。

要重定向本地发起的数据包,您应该将 DNAT/REDIRECT 规则插入 nat/OUTPUT 链:

iptables -t nat -A OUTPUT -p tcp --dst xxx.yyy.zzz.www --dport 80 \
  -j DNAT --to-destination 127.0.0.1

相关内容