如何连接到定期更改IP的linux机器?

Ric*_*ard 12 remote-access ssh

我的问题是找到一种通过 SSH 连接到 IP 地址每天都在变化的 Linux 服务器(Ubuntu 18.04)的方法。

我有一个客户,我偶尔会帮助他处理管理任务。当他们需要帮助时,我需要通过 ssh 进入机器,但他们没有静态 IP,因此服务器的公共 IP 不断变化。我创建了一个小脚本来报告Linux机器的IP地址,发现它每天中午左右变化一次。

我能够设置 SSH,它可以在本地和远程工作......直到 IP 地址发生变化。一旦发生这种情况,即使使用新的 IP 地址,我也无法再进行远程连接。

  • 每次IP地址变化都需要重启SSH服务吗?
  • 如果是这样,为什么?
  • 当 IP 地址更改以允许 SSH 访问时,我还需要采取任何其他措施吗?

更新

需要明确的是,我的问题不是找到新的 IP 地址。我已经有一个脚本可以做到这一点。问题是服务器在 IP 更改后停止响应,即使我尝试使用新 IP 地址进行连接。

如果我在目标机器上重新启动 SSH 服务,我又可以远程访问了。但我不明白为什么我必须这样做。我想知道根本原因,希望找到更好的解决方案。

大多数人似乎认为只要我们知道新 IP,SSH 就应该可以工作,那么这是 18.04 独有的吗?我最近为客户端安装了这个服务器,所以所有的配置设置仍然是默认的。(不知道怎么改。)

Gun*_*ohm 21

其他答案似乎忽略了您问题中的一件事:

一旦发生这种情况,即使使用新的 IP 地址,我也无法再进行远程连接

DDNS 将帮助您找到新的 IP 地址,但这似乎不是这里的问题。

不幸的是,在ISP 提供路由器的标准设置中,服务器获得新 IP应该不是问题,服务器在路由器后面有一个内部地址,路由器进行端口转发。您可能需要提供有关网络拓扑的更多信息才能得到好的答案。

我可以想象的是服务器不在路由器后面并进行自己的 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,即使在路由器后面,我最初的想法仍然有效。

  • +1 是第一个真正解决问题中提出的问题的答案。 (3认同)

Joh*_*tes 11

动态 DNS 是一种选择,另一种选择是让服务器邮件或以其他方式向您发送它的 IP。一个简单的 HTTP 调用就可以了(到您控制和记录请求的端点)。

以相反的方式解决整个公共网络也是可能的;您可以让服务器设置反向隧道或 VPN 连接,它们不会受到 IP 更改的影响。

关于对新地址没有响应的服务:这完全取决于您的网络设置。例如:通过 DHCP 的内部接口上的 WAN IP 和设置为仅侦听启动时已知接口上的 IP 的 SSH 服务器意味着必须在接口更改时重新启动 sshd。


小智 7

您应该真正研究 ddns 服务。只要能够远程连接到具有动态IP地址的某台机器;ddns 是最常用的解决方案。

前往https://noip.com并注册一个帐户(它是,错误...据说..coff..cof .. 对在同一网络上运行的 1-3 台机器免费(如果我没有记错,请不要引用)我在这里:自从我信任这些“免费”服务中的任何一个以来已经有一段时间了......。还有其他替代方案,例如 Afraid DNS(https://freedns.afraid.org/ 甚至,思科的 Open DNS :也可以使用(如果这不是您唯一的客户,我建议您注册一个伞状帐户试用版,试用一下,然后再注册真正的交易 >>> 他们甚至得到了其中一个类似 GUI 的可下载扩展,它会在您的客户端 ip 更改时自动更新 ddns 主机名。这确实是我所知道的最简单的非技术精通方法[就在如果你必须打电话给你的一个客户并要求我下载 GUI 而不是......])

  • 虽然这对于在更改 IP 地址时访问主机肯定有帮助,但这不是问题所在。问题是为什么 ssh 服务器在 IP 地址更改时停止响应以及如何解决这个问题。动态 DNS 服务没有解决这个问题。 (3认同)