什么时候使用 DNAT 而不是 SNAT 更有意义?

什么时候使用 DNAT 而不是 SNAT 更有意义?

我想使用 iptables 将 Ubuntu 12.04 服务器上的端口 2222 转发到远程主机 1.2.3.4 端口 22。

在阅读了许多关于端口转发的网页后,我发出

$ sysctl net.ipv4.conf.eth0.forwarding
net.ipv4.conf.eth0.forwarding = 1
$ sudo iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 2222 -j DNAT --to-destination 1.2.3.4:22

它按照我的要求转发流量。但是 ssh不是工作。结果我还需要提供

$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

现在一切都好了。我理解上述命令;我不明白的是,许多网站都给出了第一个命令,而没有一个给出第二个命令。在什么情况下第一个命令就足够了?

笔记:例子地点仅提供 DNAT 命令。

答案1

您所指的网站很可能是DNAT在将内部 LAN 连接到公共 Internet 的路由器上使用 iptables 的背景下推荐的。在这种情况下,由于 Internet 和内部 LAN 之间的所有流量都必须通过 iptables 路由器,因此返回的数据包也会自动为您重写。

在您的配置中,您尝试将流量导向远程主机。此MASQUERADE行是必需的,以便重写发往 1.2.3.4 的数据包,以便从 1.2.3.4 返回的数据包能够到达您的 iptables 框,从而正确地重写并返回给原始发送者。

大局:你想实现什么?端口转发可能不是正确的工具。

相关内容