我刚刚在办公室的本地 Linux 服务器上工作,通过 SSH 连接到它。我更改了一些网络设置。具体来说,我添加了一个简单的网桥来替换以前的以太网连接 (eth0)。在这两种情况下,网络地址都是静态 IPv4 地址。
在我完成这些更改并使用重新启动网络守护程序后systemctl restart systemd-networkd
,我被锁定并且无法通过 ssh 重新进入机器。
幸运的是,我可以访问物理控制台。虽然重新启动网络确实为我提供了具有正确地址的新网桥,但它并没有从 eth0 中删除该地址 - 即使所有配置设置都是正确的。所以,我不得不手动操作ip a flush eth0
,然后我又恢复了正常运行。
我想,如果那是一个位于远程位置的根服务器而不是本地机器,我现在看起来会很老了。
我应该做些什么不同的事情,正确的方法是什么?
更新:从目前提供的两个答案来看,我认为我应该说得更清楚。我完全了解如何保留对我的站点的访问的所有硬件选项。因为我拥有并使用它们,所以我可以放心地调用某些更改,尽管可能会发生一些不好的事情。这有点麻烦,但我可以通过串行控制台登录,然后一切又恢复正常了。但我想知道,如果我没有它们,你们其他人将如何更改理论上可以断开连接的网络设置?
坦白说,我还想知道为什么我的 eth0 接口保留了旧的 IP 地址,即使我使用新设置重新启动了网络服务?这对我来说似乎不是理想的行为。
答案1
至少有两种不同的方法可以实现此目的:
- 远程控制台(HP ILO、DELL DRAC 等)允许您通过其自己的 NIC 和 IP 进行访问,这与主操作系统设置无关。如果您出错,只需“远程接管控制台”即可解决问题。
- 设置计时器以重新启动至安全工作状态。进行更改,然后关闭安全计时器。
例如
sleep 15*60 && shutdown -r +NOW "I messed up. Rebooting"
(On a new shell)
ifconfig / ip whatever
然后在工作改变状态下取消重启。
PS1:使用睡眠和关机是为了不向用户发送垃圾邮件。(尽管您可以只关闭 -t 15m 然后取消关机。)
PS2:注意睡眠&&关机而不是睡眠;关闭。
答案2
这干扰最少解决此类问题的方法是不需要重新启动。
串行控制台是获取访问权限的一种方式。还有其他更专业的硬件可用于访问没有功能性网络的主机。
如果您没有此类带外访问,则值得尝试通过网络与主机通信的其他方法。第一种替代方法是利用双栈为您提供一些冗余。如果您弄乱了 IPv4 配置,您可能仍然能够通过 IPv6 访问主机,反之亦然。
如果您搞乱了 IPv4 和 IPv6,您仍然可以通过 IPv6 链路本地通信访问主机。IPv6 链路本地通信的工作方式使其对错误配置的网络更具鲁棒性,因此很有可能成功。仅当您能够访问与目标位于同一网段上的至少一个其他功能主机时,此方法才有效。
这更具侵扰性解决这个问题的方法是重启。即使你没有完全远程访问的硬件,你仍然可能拥有远程触发重启的硬件。这可以通过可以触发主板上的复位线的硬件或通过对主机进行电源循环的硬件来实现。
如果主机上没有带外管理硬件,您可能需要请现场人员帮忙。在这种情况下,让他们重启机器肯定比让他们调试网络连接更容易。
一旦机器重新启动,您需要以某种方式确保它确实恢复在线状态。如果错误更改仅存在于内存中,并且重新启动将恢复到已知的良好配置,则可能不需要特别注意。在更成问题的情况下,将主机配置为尝试 PXE 启动并且仅在网络上没有 PXE 服务器时从本地磁盘启动可能会很有用。但是,只有当您知道可以信任网络时,这种方法才是明智的。
这最具侵扰性就是应用您现有的任何程序来处理主机完全丢失的情况。这些程序通常用于处理硬件故障,甚至更糟的是建筑物被烧毁的情况。但它们也可以用于诸如网络配置错误之类的小问题。(尽管这种方法具有侵入性,但它很少是首选解决方案。)