DNAT 端口转发不起作用

DNAT 端口转发不起作用

我想将本地端口 2221 转发到远程机器(192.168.2.100),其中 ssh 监听端口 2222。

连接远程机器的工作原理:

ssh  -p 2222 192.168.2.100
[email protected]'s password:

我的 iptables 设置非常简单,只有一条规则:

sudo iptables -t nat -A PREROUTING -p tcp --dport 2221 -j DNAT --to-destination 192.168.2.100:2222

>sudo iptables -t raw -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination    

>sudo iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  anywhere             anywhere             tcp     dpt:2221 to:192.168.2.100:2222

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       

>sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination       

当我现在尝试连接到(大概是)转发端口上的 ssh 时,失败了:

>ssh  -p 2221 127.0.0.1
ssh: connect to host 127.0.0.1 port 2221: Connection refused

我可能遗漏了一些基本知识。我该如何调试它?

更新: 根据https://www.debuntu.org/how-to-redirecting-network-traffic-to-a-new-ip-using-iptables/您需要添加伪装:

sudo iptables -t nat -A POSTROUTING -j MASQUERADE

并确保端口转发已启用:

echo "1" > sudo /proc/sys/net/ipv4/ip_forward

但是,它对我来说仍然不起作用。

如果有人可以解释如何获取进一步的调试信息,那就太好了。

答案1

我在这篇文章中找到了基于socat的解决方案:

https://superuser.com/a/536295/621970

因此,这是有效的:

sudo socat TCP-LISTEN:2221,su=nobody,fork,reuseaddr TCP-CONNECT:192.168.2.100:2222

它将本地主机上的端口 2221 连接到远程计算机 192.168.2.100 上的端口 2222

sudo 需要对 nobody 进行 su。

fork 选项意味着它将重新协商传入端口,以便它不会阻塞。

相关内容