我的问题是如何通过 SSH 连接到 Linux 服务器(Ubuntu 18.04),该服务器的 IP 地址每天都在变化。
我有一个客户,我偶尔会帮他处理一些管理任务。当他们需要帮助时,我需要通过 ssh 进入机器,但他们没有静态 IP,因此服务器的公共 IP 不断变化。我创建了一个小脚本来报告 Linux 机器的 IP 地址,发现它每天中午左右会更改一次。
我可以设置 SSH,它既可以在本地运行,也可以在远程运行……直到 IP 地址发生变化。一旦发生这种情况,即使使用新的 IP 地址,我也无法再进行远程连接。
- 每次 IP 地址改变时,我是否都需要重新启动 SSH 服务?
- 如果是,为什么?
- 当 IP 地址改变时,我是否需要采取其他操作以允许 SSH 访问?
更新
需要说明的是,我的问题不是找到新的 IP 地址。我已经有一个脚本可以做到这一点。问题是,一旦 IP 发生变化,服务器就会停止响应,即使我尝试使用新 IP 地址进行连接。
如果我重新启动目标计算机上的 SSH 服务,我就可以再次进行远程访问。但我不明白为什么我必须这样做。我想知道根本原因,希望找到更好的解决方案。
大多数人似乎认为只要我们知道新 IP,SSH 就应该可以工作,那么这是 18.04 独有的吗?我最近为客户端安装了此服务器,因此所有配置设置仍为默认设置。(不知道如何更改它。)
答案1
其他答案似乎忽略了你问题中的一件事:
一旦发生这种情况,即使使用新的 IP 地址,我也无法再进行远程连接
DDNS 将帮助您找出新的 IP 地址,但这似乎不是这里的问题。
不幸的是,服务器正在获取新的 IP应该在标准设置中,ISP 提供路由器,服务器在路由器后面有内部地址,路由器进行端口转发,这不是问题。您可能需要提供有关网络拓扑的更多信息才能得到好的答案。
我可以想象服务器不在路由器后面,而是建立自己的 PPPoE 连接,和a) 在服务器重启时,ssh 服务器绑定到特定的接口地址,b) 机器上的防火墙只允许传入的 ssh 到服务器的 IP,并且当 IP 发生变化时防火墙不会更新。
要检查第一种情况,请执行netstat -nta | grep -w 22 | grep LISTEN
。如果它显示 0.0.0.0:22,那没问题;如果它列出了特定的 IP,则检查 sshd 配置文件 ( /etc/sshd.conf
) 中的ListenAddress
。
要检查第二种情况,请iptables -L -n
检查链中的规则之一是否INCOMING
与您的服务器的 IP 和端口 22 匹配。
如果其中一个具有当前服务器地址,则需要将其更改为 0.0.0.0(确保您了解安全隐患),或者在 IP 更改时更新规则/配置。
编辑
由于服务器位于路由器后面,上述想法可能不适用(*)。在此设置中,路由器有一个外部 IP(每天都会变化),而您的内部设备应该有一些 10.xyz 或 192.168.xy 地址,这些地址不应改变。您连接到外部地址,路由器应该有到内部地址的端口转发规则。
当外部 IP 发生变化时,此端口转发不会中断(但现有的 ssh 连接将被断开),但是或许这不是您设置的规则,而是由 UPNP 魔法设置的,路由器在获得新地址时会放弃 UPNP 转发,而 sshd 仅在重新启动时调用该规则。您是否自己在路由器内设置了端口转发器。
或者,这是内部的服务器 IP 发生变化 - 在这种情况下,您的 DHCP 出现严重问题。为您的服务器提供一个固定的内部地址。
或者,您使用的是 IPV6?有些配置会不断更改设备 IP,以使其更难被跟踪。例如,https://www.internetsociety.org/blog/2014/12/ipv6-privacy-addresses-provide-protection-against-surveillance-and-tracking/- 但在这种情况下,你没有在原帖中提到这一点,真是太可惜了。这可能意味着你的路由器根本没有做 NAT,而我原来的想法即使在路由器后面仍然有效。
答案2
动态 DNS 是一种选择,另一种选择是让服务器通过邮件或以其他方式向您发送其 IP。一个简单的 HTTP 调用就可以了(到您控制并记录请求的端点)。
反过来解决整个公共网络问题也是可能的;您可以让服务器设置反向隧道或 VPN 连接,这样就不会受到 IP 更改的影响。
关于服务在新地址上没有响应:这完全取决于您的网络设置。例如:通过 DHCP 在内部接口上获取 WAN IP,并将 SSH 服务器设置为仅侦听启动时已知的接口上的 IP,这意味着在接口更改时必须重新启动 sshd。
答案3
您确实应该研究一下 ddns 服务。就远程连接到具有动态 IP 地址的某台机器而言,ddns 是最常用的解决方案。
前往https://noip.com并注册一个账户(呃...据说...免费,可供同一网络上运行的 1-3 台机器使用(如果我没记错的话,请不要在这里引用我的话:我已经有一段时间不再信任这些“免费”服务了...)。还有其他替代方案,例如 Afraid DNS(https://freedns.afraid.org/ 甚至,思科的 Open DNS : 也可以使用(假设这不是你唯一的客户端,我建议你注册一个伞状帐户试用版,先试用一下,然后再注册真正的帐户 >>> 他们甚至有一个类似 GUI 的可下载扩展,每当你的客户端 ip 发生变化时,它就会自动更新 ddns 主机名。据我所知,这确实是最简单、非技术性的方法[以防万一你需要打电话给你的一个客户并要求他们下载 GUI 而不是... ])
答案4
跳出思维定式——你能安排一个固定的 IPv6 地址吗?通常只有 IPv4 地址才需要更改,因为它们很稀缺。