对于这个问题的基本性质,我深表歉意,但如果有机会学习,我将不胜感激。它是关于访问远程计算机的:
情况
我家里有三四台电脑。(Windows、Linux、Mac 等)。我使用提供商提供的互联网,因此每台机器都有一个 IP。(我想这是一个内部“私有”IP)
因此,假设计算机 A 有 IP A ,那么我可以ssh theuser@IP_A
从计算机 B 访问该计算机(不是图形方式,只是终端)。我还可以使用 Visual Studio Code 从 B 或 C 远程访问 A。这样就没问题了。
假设我带着我的 PC A 去办公室(我可以从不同的网络连接)或者去提供互联网的咖啡馆,并且我想通过 ssh 连接到我的 - 比如 - Linux 计算机 B。我该怎么做呢?
在这种情况下,我很确定私有 IP 不行,那么该怎么做呢?
答案1
这项任务有 3 种技术。(在单个答案的范围内,我只能对它们进行概述。)
1.转发端口
您的家用电脑有私有 IP——但他们连接到互联网的路由器很可能在其外部接口上有一个公共 IP(大多数家庭互联网提供商都是如此)。如果您在路由器的配置界面中找到此地址,则可以从互联网连接到它。
然后,可以配置路由器,将所有传入连接转发到具有特定协议的外部接口,并端口号到特定的内部 IP 和端口。此功能在路由器接口中通常称为“端口转发”、“端口映射”或“虚拟服务器”。
一些路由器允许通过名称指定内部机器,但大多数要求指定其 IP 地址 - 因此您还必须在路由器的 DHCP 设置中将该机器的 IP 地址设为“静态”,以便它不会改变并且转发规则仍然有效。
然后您可以通过连接到 从 Internet 连接到特定内部机器上的特定端口<your router's IP>:<forwarded port>
。
对于大多数提供商而言,路由器的公共 IP 地址是动态的(每次启动时和/或不时都会发生变化),而互联网提供商通常会对静态 IP 收取额外费用。您可以使用 DDNS(第三方 DNS 服务,能够通过身份验证轻松更新其记录,只要路由器的公共 IP 发生变化,它就会自动执行此操作)来解决这个问题 - 但这些通常也需要付费,并且您的路由器需要支持特定的 DDNS 提供商来更新记录,因为没有更新协议的标准。
2.虚拟专用网络
您所描述的场景正是 VPN 最初创建的目的(因此得名);能够提供经过身份验证的互联网访问似乎是它现在的主要用例,但这只是一个幸运的副作用。
连接到 VPN 服务器后,VPN 客户端会在您的本地计算机上创建一个虚拟网络适配器,其 IP 来自远程网络。通过它,您可以像在远程网络上一样访问远程网络上的计算机。VPN 客户端将发送到虚拟适配器的数据包封装到所谓的“隧道协议”中,然后将其发送到 VPN 服务器,VPN 服务器将其解包并发送到远程网络上的目标计算机 - 反之亦然。
这是一种非常简单的技术,因此有很多 VPN 实现 - 甚至 SSH 也提供自己的“SSH 隧道”。不过,设置和使用的难易程度以及操作系统支持差异很大。当前的开放标准列在上面链接的 Wikipedia 页面上,例如https://openwrt.org/docs/guide-user/services/vpn/start
路由器中对 VPN 服务器的支持并不常见,因此你可能需要购买“VPN 路由器”或在你的路由器上安装 OpenWRT是否支持硬件。您还可以在其中一台内部机器上运行 VPN 服务器——然后您需要按照上述方法进行端口转发,并在需要访问时保持其处于打开状态,这很不方便。无论如何,您需要拥有并知道要连接的路由器的公共 IP,如上所述。
3. 通过中介进行远程访问
如您所见,连接的主要问题是必须有公共 IP —— 如果没有,则无处可连接。 但是,如果有具有公共 IP 的第三方服务器,您的两台机器都可以连接到该服务器并通过已建立的连接相互通信。
大多数在线“远程访问”服务都是这样运作的,而且由于中介服务器的维护成本(它们需要支持所有转发连接的总带宽),它们几乎总是需要付费。对于那些免费的服务,由于服务器资源有限,您的连接可能会非常差。
由于中介是一个通用的通信渠道,此类服务通常在其客户端提供多种类型的连接:远程桌面、文件传输、VPN 等。
关键优势在于您不需要拥有具有已知公共 IP 的机器。关键劣势在于成本,以及几乎没有实际使用的开放标准,因此您的选择将仅限于特定服务的客户端支持的任何功能和集成。