systemd 网络基础知识:无法从 DHCP 切换到静态 IP 地址

systemd 网络基础知识:无法从 DHCP 切换到静态 IP 地址

我刚刚开始使用 systemd 网络,无法设置具有静态 IP 地址的新系统。这是默认的 Ubuntu 20.04 服务器,未安装网络管理器和 ifupdown(因此没有 /etc/network/interfaces 等)。

默认情况下,服务器启动时会启用 DHCP,并获取 IP 地址,一切正常。我现在添加了一个 /etc/systemd/network/static.network 文件,其中包含基本设置:

[Match]
Name=e*

[Network]
Address=192.168.1.20/24
Gateway=192.168.1.40

如果我执行systemctl restart systemd-networkd此操作,则会忽略此操作,并systemctl status显示从 DHCP ( ) 分配了地址 192.168.1.10 enp1s0: DHCPv4 address 192.168.1.10/24 via 192.168.1.40。如果我重新启动,我会得到相同的结果;地址仍然是 DHCP 地址。似乎文件static.network被完全忽略了,但它正在被处理 - 如果我向文件中添加明显的错误,status 命令会报告它。有什么想法我做错了吗?

该服务器实际上是在 RHEL 8 下运行的虚拟机,我希望这无关紧要。

答案1

嗯,这看起来像是 20.04 上的一个错误。.network根据以下摘录,文件应该按词汇顺序进行处理systemd-networkd 文档

.network 文件是从位于系统网络目录 /usr/lib/systemd/network 和 /usr/local/lib/systemd/network、易失性运行时网络目录 /run/systemd/network 和本地管理网络目录 /etc/systemd/network 中的文件读取的。所有配置文件都按词汇顺序集体排序和处理,无论它们位于哪个目录中。

但是,如果我打开systemd-networkd调试(参见这里如果你不知道怎么做),那么最低-lexically-sorted 文件优先。我不能完全确定,因为日志不显示处理顺序,并且只在相关网络接口的第一次命中时停止。

对于普通的 Ubuntu 20.04 服务器安装,这是我所知道的:

  1. .network整个系统有 5 个文件
  2. 其中一个是由 netplan 在运行时创建的,并且/run/systemd/network/10-netplan-enp1s0.network
  3. 我的新文件是/etc/systemd/network/static.network
  4. systemctl restart systemd-networkdnetplan 文件上优先于我​​自己的
  5. 如果我手动删除 netplan 文件并重新启动网络,我的文件就会生效。不过,这只是暂时的,直到下次重新启动
  6. 如果我将文件重命名为,05-static.network则其优先级高于 netplan 文件

因此,处理顺序被破坏,除非我做了一些愚蠢的事情。

作为临时修复,您需要通过在文件前添加类似 的前缀来赋予文件较低的词汇顺序05-。但是,如果处理顺序被反转,这可能会在未来的更新中中断。更好的修复方法是禁用 netplan(不确定如何执行此操作),但如果其他程序决定必须创建一个.network文件来弥补缺失的 netplan 文件,这也可能会中断。

编辑-删除 netplan

您可以使用 完全删除 netplan apt purge netplan.io。但是,这可能不是一个好主意 -cloud-init例如,它还会删除 DigitalOcean 所需的 。因此:

# cd /etc/netplan
# rm 00-installer-config.yaml
# netplan apply

重新启动后,您不再获得自动生成的.network文件,并且可以在文件中使用正常的文件命名.network而不会发生冲突。

相关内容