将一个ssh连接从一个端口转发到另一个端口

我有一个方框B (在1.2.3.4说),我只能从另一个方框ssh到。 但是192.168.0.1上的某个开发工具只允许我指定一个ssh服务器的主机和端口,而不是比这更复杂,所以我打算在A上有一个端口来自动将sshstream量转发给B

我试过以下,但总是给我Connection timed out 。 我应该怎么做?

 sudo iptables -t nat -A PREROUTING -p tcp --dport 2222 -j DNAT --to-destination 1.2.3.4:22 sudo iptables -t nat -A POSTROUTING -p tcp -d 1.2.3.4 --dport 22 -j SNAT --to-source 192.168.0.1 

你的SNAT规则是错误的。 假如说:

  1. 你正在A机器上运行这些iptables命令
  2. 那台机器A实际上并不是192.168.0.1

那么--to-source参数的值应该是A的IP地址,而不是你希望允许连接的机器的地址。

您可能还需要添加一些其他的防火墙规则,以允许端口2222stream量stream动; NAT规则不会绕过过滤规则。

如果在这些变化之后仍然无法正常工作,那么通过来自机器A tcpdump捕获数据包可能会发现问题所在。

这是我最后的结果:

 echo 1 > /proc/sys/net/ipv4/ip_forward iptables -F iptables -X iptables -t nat -F iptables -t nat -X iptables -t mangle -F iptables -t mangle -X iptables -P FORWARD DROP iptables -A FORWARD -i vpn0 -p tcp -s 1.2.3.4 --sport 22 -j ACCEPT iptables -A FORWARD -i ens192 -p tcp -d 1.2.3.4 --dport 22 -j ACCEPT iptables -t nat -I PREROUTING -p tcp -i ens192 --dport 2222 -j DNAT --to 1.2.3.4:22 iptables -t nat -A POSTROUTING -p tcp -d 1.2.3.4 --dport 22 -j MASQUERADE