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

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

我有一个盒子B(比如说1.2.3.4),我只能从另一个盒子 ssh 到A。但是 上的某个开发工具192.168.0.1只允许我指定 ssh 服务器的主机和端口,而不能指定比这更复杂的内容,所以我计划在 上设置一个端口A来自动将 ssh 流量转发到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

答案1

你的SNAT规则是错误的。假设:

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

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

您可能还需要添加一些其他防火墙规则以允许端口 2222 流量流动;NAT 规则无法绕过过滤规则。

如果这些更改之后事情仍然没有进展,通过tcpdump机器捕获的数据包A可能会揭示出问题所在。

答案2

以下是我最终得到的结果:

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

相关内容