iptables 需要 POSTROUTING 进行端口转发

iptables 需要 POSTROUTING 进行端口转发

我有一个运行 Ubuntu 的非常基本的路由器/防火墙。我想将特定端口 (443) 上的 tcp 连接转发到本地网络中的其中一台机器。它有一个通向外部世界的接口 (eth0) 和一个通向本地网络的接口 (eth1)。按照众多可用指南之一,我设置了 iptables,如下所示:

*nat
:PREROUTING ACCEPT [1:44]
:INPUT ACCEPT [1:44]
:OUTPUT ACCEPT [3:187]
:POSTROUTING ACCEPT [2:120]
-A PREROUTING -i eth0 -p tcp -m tcp --dport 443 -j DNAT --to-destination ip-localmachine:443
-A POSTROUTING -o eth0 -j MASQUERADE

我通过在本地机器上设置一个监听端口 443 的简单服务器来查看它是否有效:

nc -l 443

但是从外部连接到它时它收不到任何消息。现在,如果我向 POSTROUTING 添加一条规则:

-A POSTROUTING -d ip-localmachine -p tcp -m tcp --dport 443 -j MASQUERADE

一切突然都按预期工作了。有人能解释一下这是怎么回事吗?为什么我需要添加最后一行,而到目前为止我找到的所有指南都没有包含此步骤。

相关内容