我正在使用此命令在我的 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 就可以正常工作了。