我有一个在 vagrant VM(virtualbox)上运行的 ubuntu 桌面 14.04。
我正在尝试将端口 25 转发到端口 2525,并且已执行以下命令:
sudo sysctl net.ipv4.ip_forward=1
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
命令:
cat /proc/sys/net/ipv4/ip_forward
返回 1。
我可以在端口 2525 上打开一个连接:
vagrant@vagrant:~$ telnet localhost 2525
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 alfresco.com ESMTP SubEthaSMTP 3.1.6
但端口 25 上的 telnet 不起作用:
vagrant@vagrant:~$ telnet localhost 25
Trying ::1...
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
我也尝试连接机器的本地 IP,结果相同。
远程登录 10.0.2.15 2525
还可以,但是
远程登录 10.0.2.15 25
返回相同(连接被拒绝)。
命令:
iptables -t nat -L
返回:
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
REDIRECT tcp -- anywhere anywhere tcp dpt:smtp redir ports 2525
REDIRECT tcp -- anywhere anywhere tcp dpt:2526 redir ports 2525
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
更新
如果有人能至少建议如何解决此类问题,对我来说就足够了。
答案1
你可以使用 socat:
socat TCP-LISTEN:25,su=nobody,fork,reuseaddr TCP-CONNECT:127.0.0.1:2525
这告诉 socat 监听 TCP 端口 25 并将其连接到本地 2525。它以 nobody 用户身份运行,以提高安全性。fork 选项意味着它将重新协商传入端口,以便它不会阻塞。
这是基于以下帖子: https://superuser.com/a/536295/621970