我正在尝试将某个端口上的传入流量转发到另一台服务器,例如:myserver.com:8081
-> externalserver.com:15081
。
我的具体用例是 SSH,但我设置了http://port81.helpfulseb.com:81
(无 SSL)来测试解决方案这个问题.但是没有起到作用。
以下是我运行的命令:
iptables -t nat -A PREROUTING -p tcp --dport 81 -j DNAT --to-destination 158.69.48.226:81
iptables -t nat -A POSTROUTING -p tcp -d 158.69.48.226 --dport 81 -j SNAT --to-source <my external IP address, i.e. 51.68...>
158.69.48.226
是地址port81.helpfulseb.com
当我尝试连接时,myserver.com:81
请求超时。输出iptables -t nat -v -L
显示少量传入数据包,但没有传出数据包。我假设这些是收到的控制数据包,但由于某种原因,响应没有被正确路由。
$ iptables -t nat -v -L -n --line-number
Chain PREROUTING (policy ACCEPT 16632 packets, 665K bytes)
num pkts bytes target prot opt in out source destination
1 27 1276 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:81 to:158.69.48.226:81
Chain INPUT (policy ACCEPT 16632 packets, 665K bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 492 packets, 33023 bytes)
num pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 492 packets, 33023 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 SNAT tcp -- * * 0.0.0.0/0 158.69.48.226 tcp dpt:81 to:<my external IP>
我正在使用 Ubuntu 18.04 LTS,如果有帮助的话。
答案1
如果你不受 iptables 的束缚,那么还有 socat 解决方案:
[email protected]# /usr/bin/socat TCP-LISTEN:8081,fork,reuseaddr TCP:externalserver.com:15081