设想:
我在路由器后面有一台使用 NAT 的本地机器,我的 ISP 有时会为该路由器分配一个新的公共 IP 地址。
本地计算机使用 SSH 在公共 SSH 服务器上打开远程端口,例如据我了解,这会将对端口 8080 上的 ssh 服务器的请求重定向到本地计算机的端口 80。ssh [email protected] -R 8080:localhost:80
问题:
会发生什么确切地如果我的 ISP 为我的路由器提供了一个新的公共 IP 地址。我本地计算机上的 ssh 客户端是否会停止并退出?ssh 服务器是否识别出更改,或者是否也停止或失败?或者没有问题,服务器可以自动更新 IP 地址?(这个问题及其答案让我认为是这样的,但没有明确说明)
目前,我并不关心如何修复此问题,我只想知道如何检测它。而且,我不能“尝试”它,对此我深表歉意。
答案1
正常情況:
您有一个 NAT 路由器,其公网 IP 为 333.333.333.333。您已将 NAT 配置为将传入流量从端口 22 转发到 192.168.33.33 端口 22。
公网 IP 为 444.444.444.444 的客户端使用端口 22 启动 SSH 会话并将其发送到 333.333.333.333 端口 22。
您的 NAT 路由器在 333.333.333.333:22 上接收 TCP 连接的第一部分(TCP 标志允许它知道传入流量是否是新的 TCP 连接)并检查 NAT 表以查看是否设置了任何端口转发。
您的 NAT 路由器找到 192.168.33.33 端口 22 的映射,并为此连接在内部启动 NAT 会话。它会将来自此连接的 444.444.444.444:22 上的传入数据包的源 IP 重写为 192.168.33.33:22,并将离开 NAT 路由器的数据包的源 IP 从 192.168.33.33:22 重写为 333.333.333.333:22。当 TCP 连接关闭或超时时,NAT 会话将过期。
如果你的公网 IP 发生变化,则:
尝试与旧 IP 建立新连接的外部客户端将会超时或连接到错误的系统。
现有连接:如果您的路由器在公共 IP 更改时未更新 NAT 配置,并且您正处于 TCP 连接与 NAT 会话之间,则 TCP 连接的 NAT 段将到达外部客户端,但响应无法返回到 NAT 后面的服务器。结果是客户端连接最终将超时,NAT 后面的服务器连接最终也将超时,您将在两端看到有关超时的日志条目。
除非您的路由器上设置了当外部 IP 发生变化时重新启动它,否则您的 SSH 服务器不会自动重新启动。
openssh
- Linux 使用的普通 SSH 服务器设计得足够强大,可以支持远程登录服务器。除非您明确地终止它,否则它几乎不会死机,可能是在您修改某些配置文件的权限,或者您的系统严重损坏的情况下。
我只想知道如何检测它
如果您的 NAT 路由器是基于 Linux 的路由器,并且您的 ISP 通过 DHCP 为您提供 IP,则您的路由器可能正在运行一个名为的程序,dhcpcd
该程序会在 ISP DHCP 租约到期时执行操作,并且具有钩子来执行事件操作(例如从您的 ISP 获取新 IP)。或者,如果您的路由器支持与动态 DNS 提供商(如 freemyip.com)合作,则您可以使用域名而不是 IP。