建立SSH连接时如何指定本地端口?


13

我在IDC中托管了两台服务器。我只能使用端口20/21/22/23/3389 / 33101-33109建立两个服务器之间的连接。IDC网络设备将阻止其源或目标端口不在20/21/22/23/80/3389 / 33101-33109列表/范围内的任何其他数据包。但是SSH的源端口是随机的。

使用该命令 可以轻松指定一个远程端口。ssh username@server -p remote_port

那么,是否有一个ssh命令参数或其他方式可以指定本地源端口,以便我可以使用端口33101建立SSH连接?

我的网络拓扑如下:
网络拓扑结构

Answers:



2

对于一次性的或偶然的情况,ProxyCommand方法很容易实现。

另一方面,如果您需要多个同时连接,或者当您需要经常使用该命令进行日常工作时,您可能还可以考虑在服务器上设置网络地址转换(NAT)规则。

这需要root服务器上的超级用户(通常是)访问权限,才能首先应用一个单独的NAT规则。请注意,即使您具有超级用户访问权限,即使您的“服务器”实际上是容器(例如Docker容器)而不是机器,也可能根本不允许(或有效)应用NAT规则。

说到带有该iptables套件的典型Linux系统,针对您的示例案例在server1上应用的NAT规则可能像这样:

iptables -t nat -I POSTROUTING -d <server2-ip-address> -p tcp --dport <server2-port> -j SNAT --to :33101-33109

该命令指示Linux内核使用当时在33101-33109范围内选择的源端口建立与server2-ip-address的server2-port的任何连接。

一旦制定了该规则,就可以按照通常的方式连接到server2:

ssh username@server2 -p remote_port

ssh只要您在NAT规则中指定的范围内有可用端口,就可以根据需要并发使用同一命令多次。

但是请注意,netstat在服务器上运行的(或等效命令)会将连接的本地地址报告为未经修改的,随机选择的源端口号,即使传递到服务器2的实际流量携带了经过修改的源端口号也是如此。

要撤消NAT规则,该命令是相同的,只是用一个-D选项代替-I

要在启动时自动应用NAT规则,取决于您在服务器上拥有的Linux发行版,以及它是否已经具有某些防火墙配置。

我没有使用过类似BSD的系统的经验,但是我相信有同样的经验。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.