首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用DNAT进行端口转发

用DNAT进行端口转发
EN

Ask Ubuntu用户
提问于 2016-07-25 09:59:42
回答 1查看 6.1K关注 0票数 0

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

连接到远程机器工作:

代码语言:javascript
复制
ssh  -p 2222 192.168.2.100
user@192.168.2.100's password:

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

代码语言:javascript
复制
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时,它失败了:

代码语言:javascript
复制
>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/,您需要添加伪装:

代码语言:javascript
复制
sudo iptables -t nat -A POSTROUTING -j MASQUERADE

并确保启用了端口转发:

代码语言:javascript
复制
echo "1" > sudo /proc/sys/net/ipv4/ip_forward

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

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

EN

回答 1

Ask Ubuntu用户

发布于 2016-07-27 15:46:54

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

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

所以,这样做的诀窍是:

代码语言:javascript
复制
sudo socat TCP-LISTEN:2221,su=nobody,fork,reuseaddr TCP-CONNECT:192.168.2.100:2222

它连接本地主机上的端口2221和远程计算机上的端口2222 ( 192.168.2.100 )

苏多需要向任何人宣泄。

叉子选项意味着它将重新协商传入端口,这样它就不会阻塞。

票数 1
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/802643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档