具体问题:假设我有一台具有真实 IP 地址的机器(一个 Amazon Linux 实例)A1,我在我的个人本地机器 L1 上,并且我在家里运行一台小型服务器 L2
我怎样才能像访问 A1 那样从 L1 ssh 进入 L2?如果 L2 没有真实 IP...
我在 aws 机器上运行着许多 Java 微服务,所有这些服务都不需要扩大或缩小规模,我不需要云提供商提供的任何花哨功能,但我运行的服务越多,我的账单就越大,它们之间的通信就越复杂……
所以我现在想买一台具有大量 RAM 和 CPU 的服务器机器,在其上运行所有这些服务并避免使用 AWS 或任何提供商...我有不同的脚本可以 ssh 到远程主机并执行一些部署相关的工作...我希望当我从个人机器执行它们时它们仍然可以使用 L2 运行...
如果有更简单的方法可以做到这一点,请提出建议。但目前我看到两种解决方案,要么我从操作员那里获得真实 IP 地址,要么我使用 aws 或一些具有真实 IP 的虚拟机器来连接两台 L1 和 L2 机器...
我几乎没有做过任何基础设施的管理,所以如果这是一个菜鸟问题,请原谅我......
答案1
如果您的 L2 服务器位于您的家庭网络上,则它位于路由器后面,默认情况下在 Internet 上不可见(这意味着 Internet 上的任何机器都无法与其建立连接)。如上所述,它位于您的本地家庭网络中,地址为 10。。.* 或 192.168.。
从互联网的角度来看(这包括您不在家时的 L1 系统),唯一具有真正互联网地址的设备是您的路由器,并且您所有连接到互联网的家用机器似乎都有该地址(因此,您可以通过使用互联网浏览器访问 showmyip.net 等网站来获取路由器的互联网地址)。这种设置的好处是随机黑客无法打开与您的机器的连接。
通常,您可以要求路由器将对某个端口(例如 SSH)的连接请求转发到本地网络中的某台特定机器(IP 地址),因此从 Internet 上的任何地方通过 SSH 连接到您的 Internet 地址实际上都会将您连接到您的 L2 服务器。请参阅示例说明这里。
请注意,这可能不是一个好主意(因为如果你犯了一个错误,你的家庭网络可能会被黑客攻击,如果发生不好的事情,你的互联网地址可能会被列入黑名单)。这也要求你有一个固定的网络地址(或者当地址更改时,你可以轻松找到你的新地址)。托管服务器通常仍然是一个更好的解决方案,但 AWS 并不是唯一的提供商,你可以每月花 5 美元获得基本的 VPS Linux 服务器。
答案2
这正是 SSH 远程转发要解决的问题。
这需要您有一台 A1,即一台具有真实 IP 的机器。资源非常有限的机器也可以,因为它只充当跳板。
由于 L2 没有真实 IP,因此您需要从 L2 启动到 A1 的 ssh 连接并创建隧道:
root@L2# ssh user@A1 -R 9022:localhost:22
因此,现在每当连接到达 A1 上的端口 9022 时,它都会转发到 L2 上的端口 22。
现在您可以 1) 通过 SSH 连接到 A1 2) 从那里通过 SSH 连接到本地主机 9022
当然,您可以对此解决方案进行一些微调,例如,断开连接时自动重新启动从 L2 到 A1 的连接。例如,让 SSH 在真实 IP 而不是环回地址上监听端口 9022(需要编辑 SSHD 配置)。