SSH:将中间机器上的端口转发到本地网络

SSH:将中间机器上的端口转发到本地网络

我有一个主服务器,可以通过静态 IP(1.2.3.4)从外部访问。从主服务器,我可以连接到位于本地网络(10.0.0.1)中的从服务器。目前,我的服务器.ssh/config如下所示:

Host master
  Hostname 1.2.3.4
  User pi
  IdentityFile ~/.ssh/id_rsa

Host slave
  Hostname 10.0.0.1
  User pi
  IdentityFile ~/.ssh/id_rsa
  ProxyJump master

通过上述操作,我可以轻松地使用 连接到从属服务器ssh slave。不幸的是,这不适用于 Filezilla,它只允许我指定主机名和端口。这就是为什么我想将主服务器上的端口 2201 重定向到从属服务器 SSH。换句话说,我希望相当于运行。关于如何实现这一点有什么建议吗?ssh [email protected] -p 2201ssh slave

编辑:

添加-t nat标志后,我执行了@timmeyh建议的命令。iptables -t nat -L --line-numbers现在给出

Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination         
1    DNAT       tcp  --  anywhere             anywhere             tcp dpt:2201 to:10.0.0.1:22

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination         
1    SNAT       tcp  --  anywhere             10.0.0.1             tcp dpt:ssh to:10.0.0.0

其中 10.0.0.0 是主地址。但拒绝连接。我还确保已启用该功能。ssh [email protected] -p 2201/proc/sys/net/ipv4/ip_forward

答案1

你可以用 iptables 解决这个问题:

iptables -A PREROUTING -p tcp -m tcp --dport 2201 -j DNAT --to-destination 10.0.0.1:22
iptables -A POSTROUTING -d 10.0.0.1/32 -p tcp -m tcp --dport 22 -j SNAT --to-source <10.x.x.x IP of master>

第一个命令将告诉服务器将端口 2201 上的传入流量转发到 IP 10.0.0.1 的端口 22

第二个命令会告诉您,所有前往 10.0.0.1 的 22 端口的流量都必须具有正确的源 IP(在本例中为 1.2.3.4 服务器的 10.xxx 地址),以便目的地(10.0.0.1)知道将其路由回哪里。

希望这可以帮助

相关内容