端口更改的 DNAT 不起作用

端口更改的 DNAT 不起作用

我正在使用此命令在我的 VM 容器上建立 NAT:

iptables -t nat -A PREROUTING -d ${MAIN_IP} -p tcp --dport ${2} -j DNAT --to-destination ${SUBNET}${3}

  • MAIN_IP 是主服务器的全局 IP
  • SUBNET 是我的 VM 子网的前三个数字,例如“192.168.1”。
  • $2 是我想要转发的端口
  • $3 是最后一个子网段,例如 20

这对于直接 NATing 来说非常有效。

但是今天我想声明一个 DNAT 到 SSH 端口,所以我将 $2 设置为 5022,将 $3 设置为 20:22,为了清楚起见,结果得到了以下一行:

iptables -t nat -A PREROUTING -d ${MAIN_IP} -p tcp --dport 5022 -j DNAT --to-destination 192.168.1.20:22

但是这个不起作用:当我尝试 ssh 到虚拟机时,连接超时。请注意,当我不使用 nat 时,它们不会超时,因此工作正常。它只是通过 NAT 不起作用。ssh [email protected]

容器服务器上未启用 UFW。它几乎不监听任何内容,因此无需关闭任何内容 - 或者我希望如此。

我假设 DNAT 规则是正确的,那么我如何确定是什么阻碍了我?

编辑:nat 表的输出:

#iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DNAT       tcp  --  anywhere             my-server         tcp dpt:2113 to:192.168.1.35
DNAT       tcp  --  anywhere             my-server         tcp dpt:2115 to:192.168.1.35

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  anywhere             anywhere

编辑 2:我暂时解决了让 VM sshd 监听多个端口的问题。这样 NAT 就可以正常工作了。

相关内容