你现在同时用了两条“指挥棒”:
/etc/systemd/network/10-enp1s0.network
手工写给 systemd-networkd 的“原生”配置,让 enp1s0 走 DHCP,但禁止默认路由。/etc/systemd/system/50-cloud-init.yaml(应为/etc/netplan/50-cloud-init.yaml)
写给 netplan 的 YAML,把 eno1、enp1s0 都设成静态地址,且声明renderer: networkd(你没写,但 Ubuntu 服务器版默认就是
networkd)。
问题就出在“同一接口被两边描述”:
- netplan 在
netplan apply或开机时,会重新生成/run/systemd/network/10-netplan-enp1s0.network
这样有冲突吗
有冲突,而且重启后只能有一半配置生效——谁先启动谁就把另一份冲掉。
- 两套“管理员”
/etc/systemd/network/10-enp1s0.network由 systemd-networkd 直接读取/etc/systemd/system/50-cloud-init.yaml是 cloud-init 留给 netplan 的,netplan apply 时会根据它生成/run/systemd/network/10-netplan-eno1.network/run/systemd/network/10-netplan-enp1s0.network
然后重启 systemd-networkd
结果:networkd 重启后会把/run/…下面的“临时文件”当做最新配置,/etc 里你手写的那份就被静默覆盖了。
- 冲突点
- 对 enp1s0 的定义完全矛盾:
– 你手写版:DHCP=yes,还要加 5 条主机路由
– netplan 版:dhcp4: no,addresses: [192.168.0.110/24]
重启后最后生效的是 netplan 生成的“静态地址”版本,DHCP 和 5 条路由全部丢失。
- 对 enp1s0 的定义完全矛盾:
- 对 eno1 的影响
netplan 会把 eno1 的默认路由 metric=10 写进/run/…/10-netplan-eno1.network,和你手工文件不冲突(因为没手写 eno1),但*
*一旦以后你想手动改 eno1,也会遇到同样被覆盖的问题**。 - 结论 & 做法
“一个接口只能由一个管家管”。
选 A 或选 B,不要混用:
选 A 或选 B,不要混用:
选 A 或选 B,不要混用:
选 A 或选 B,不要混用: