我想要 ssh穿过互联网,一个网络到另一个网络。具体来说,从我的局域网(使用普通路由器和电缆调制解调器)到邻居的局域网(使用另一个普通路由器)。我发现的解决方案看起来很尴尬:
您可以指定传入端口的端口转发,以转发到每台计算机上的端口 22。
假设您在该网络上有 4 台计算机。我们将它们称为 A、B、C 和 D。您在不同的网络上有一台笔记本电脑,并且想要连接到计算机 A、B、C 或 D。
在端口 55555 设置传入端口转发,例如,在端口 22 上转发到计算机 A。
要连接到端口 22 上的计算机 A,您需要连接到端口 55555 上的外部 IP,该 IP 将转发到端口 22 上的计算机 A。连接命令如下:
ssh username@externalIP:55555
例子:
ssh [email protected]:55555
当然,还有一种更动态的方式来建立连接。我可以指定 MAC 地址或主机名吗?因为它是住宅,所以我不能用 FQDN 做太多事情。
使用 no-ip 注册 FQDN 有帮助吗?当然,FQDN 可以注册到路由器的外部 IP,但我不确定这是否有助于实际建立连接。
我只在我的家庭局域网或 Digital Ocean 上进行过 ssh 连接。虽然我手头没有邻居的路由器型号,但我确信使用静态 IP 地址和端口转发是可行的——但我宁愿使用 DHCP。
我如何指定哪个计算机:A、B、C 还是 D 使用 DHCP?
答案1
不幸的是,您建议的选项无法解决您的根本问题。您需要一个解决方案才能访问远程 NATed(并且可能被防火墙阻隔)网络内的主机。在您的案例中,您有一个远程网络“R”,(我推断)一个组合的防火墙/路由器/NAT/调制解调器盒“Fr”和一个位于该子网“Hr”内的远程主机。在该配置中,“Hr”很可能从“Fr”获取其(NATed)IP 地址,并且访问“Hr”的唯一方法是通过路由器。路由器具有唯一可从外部访问的地址(很可能),因此最简单的解决方案是在“Fr”上设置端口转发,就像您已经描述的那样。
使用(外部可解析的)主机名或 FQDN 来引用“Hr”不会有帮助,因为它仍然需要解析为“Fr”的唯一 IP 地址。“Fr”仍然必须知道将任何数据包转发到“Hr”,而做到这一点的唯一方法是设置端口转发。
“没有 IP 的 FQDN” 不会有帮助 - DNS 名称仅供人类使用。您的计算机并不真正关心名称,它们关心 IP 地址。类似地,如果您不指定地址,这就像将信封寄给“纽约州纽约市约翰·史密斯”,并希望它能寄到正确的人。
正如您所指出的,您可以为路由器的外部 IP 注册 FQDN(或使用动态 DNS 提供商),但您仍需要告诉路由器将数据包转发到“Hr”。当然,您可以让路由器将其外部接口上端口 22 上的“Fr”接收到的数据包转发到同一端口上的“Hr”。或者,您可以向 ISP 索取(并付费)更多外部 IP 地址,但这会变得更加复杂。
一个完全不同的选择是使用(中介)VPN 解决方案(如 Hamachi 或许多其他解决方案),其中你们都连接到第三方以在你们的计算机之间设置私有子网。
最后,我建议您咬紧牙关,根据您的需要设置端口转发解决方案。