无需断开连接即可将 Ubuntu 服务器从 NetPlan 迁移到 NetworkManager(可能通过 SSH)

无需断开连接即可将 Ubuntu 服务器从 NetPlan 迁移到 NetworkManager(可能通过 SSH)

我发现安装后的 Ubuntu 服务器默认带有具有 DHCP 配置的 NetPlan(至少在 Ubuntu 22.04 焦点窝中)。

有些用户不想要 NetPlan 而只想要 NetworkManager,例如使用nmclinmtui或导入 VPN 配置等,因此安装后我认为经常会迁移到 NetworkManager。

目前,这是我全新安装后从 NetPlan 迁移到 NetworkManager 的过程。

创建此文件:

/etc/netplan/01-er-netplan-fix.yaml

包含此内容:

# This file describes the network interfaces available on your system
# For more information, see netplan(5).
# Set and change netplan renderer to NetworkManager GUI tool
network:
  version: 2
  renderer: NetworkManager

然后运行以下命令:

# install Network Manager
sudo apt install network-manager

# disable NetPlan
mv /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.bak

# reload NetPlan
netplan apply

# I'm not proud of this but I reboot to apply everything now
reboot

问题:当我重新启动时,服务器显然断开连接,但它也从未通过 DHCP 更新其 IP。

作为解决方法,我在服务器上打开一个物理终端,运行dhclient,然后继续nmtui使用 DHCP 添加一个简单的以太网配置,一切都恢复正常。

所以我的问题是:如何从 NetPlan 迁移到 NetworkManager?可能自动更新其 IP?可能根本不会断开连接?这样您的 SSH 连接就不会中断。

请随意建议在重启后至少预填充一个有效的 NetworkManager 配置以获得有效的 DHCP,但我仍然不明白我是否也可以完全避免重启并保持有效的 SSH 连接来完成整个迁移过程。

感谢您的想法!也许这个问题很愚蠢,但我不知道 NetPlan,因为我通常使用 Debian,而且我没有遇到这些问题。

答案1

有点晚了,但最近在继承了一些 Ubuntu 服务器后遇到了类似的问题。

经过多次全新安装和测试后,我想出了以下步骤 -应该可以通过 SSH 不间断地完成。

  1. 安装 NetworkManager sudo apt install network-manager(这将使nmclinmtui可用。
  2. 指示 NetworkManager 默认管理所有接口类型,创建/etc/NetworkManager/conf.d/manage-all.conf包含以下内容的文件:
[keyfile]
unmanaged-devices=none
  1. 使用 重新启动 NetworkManager sudo systemctl restart NetworkManager
  2. 使用 检查您的接口现在是否由 NetworkManager 管理nmcli
  3. 此步骤可能有点令人困惑 - 虽然 NetworkManager 显示了接口的当前配置,但这是基于通过 netplan 应用的配置,并且从 NetworkManager 的角度来看不是持久的。要保存当前配置(并采用从 netplan 移动到 NetworkManager 时会遗漏的一些默认配置选项),请运行以下命令:
sudo nmcli connection modify enp1s0 autoconnect yes
sudo nmcli connection modify enp1s0 ipv6.method ignore
sudo nmcli connection modify enp1s0 ipv4.dns 8.8.8.8
sudo nmcli device reapply enp1s0
  1. 确保配置已保存 -cat /etc/NetworkManager/system-connections/*
  2. 禁用 networkd 并清除 netplan:
sudo systemctl disable --now systemd-networkd.service systemd-networkd.socket networkd-dispatcher.service && sudo systemctl restart NetworkManager
sudo apt purge netplan netplan.io -y
  1. 如果 DNS 在此阶段似乎不起作用,请重新启动 NetworkManager -sudo systemctl restart NetworkManager

这应该会为您配置一个使用 NetworkManager 并完全绕过 netplan 的 Ubuntu 服务器。步骤可能略有不同,但这是我发现在全新安装的 Ubuntu 22.04 上可以运行的过程。

答案2

我相信您没有禁用 systemd-networkd(我想)这一事实与您的问题有关。

在测试机上尝试一下:

  • 安装网络管理器

  • 编辑安装程序创建的 netplan yaml 文件,并添加行渲染器:NetworkManager

  • netplan generate(生成网络管理器文件)并检查它是否存在(/run/NetworkManager/system-connections)

  • 再次编辑 netplan yaml 文件并将其更改为上面提到的内容

  • 掩码(systemctl mask)使用“systemctl | grep network”找到的所有网络服务

  • 重新启动系统(或者简单地应用 netplan,但它可能会获得不同的 IP 地址,并且你的连接仍然会断开)

我已经在 Ubuntu 22.04 服务器安装上对其进行了测试。

相关内容