260119-260119-Ubuntu20-04(systemd-networkd&netplan apply不能共用谁先启动谁就把另一份冲掉)

你现在同时用了两条“指挥棒”:

  1. /etc/systemd/network/10-enp1s0.network
    手工写给 systemd-networkd 的“原生”配置,让 enp1s0 走 DHCP,但禁止默认路由。
  2. /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

这样有冲突吗

有冲突,而且重启后只能有一半配置生效——谁先启动谁就把另一份冲掉。

  1. 两套“管理员”
    • /etc/systemd/network/10-enp1s0.networksystemd-networkd 直接读取
    • /etc/systemd/system/50-cloud-init.yamlcloud-init 留给 netplan 的,netplan apply 时会根据它生成
      /run/systemd/network/10-netplan-eno1.network
      /run/systemd/network/10-netplan-enp1s0.network
      然后重启 systemd-networkd
      结果:networkd 重启后会把 /run/… 下面的“临时文件”当做最新配置,/etc 里你手写的那份就被静默覆盖了。
  2. 冲突点
    • 对 enp1s0 的定义完全矛盾:
      – 你手写版:DHCP=yes,还要加 5 条主机路由
      – netplan 版:dhcp4: no,addresses: [192.168.0.110/24]
      重启后最后生效的是 netplan 生成的“静态地址”版本,DHCP 和 5 条路由全部丢失。
  3. 对 eno1 的影响
    netplan 会把 eno1 的默认路由 metric=10 写进 /run/…/10-netplan-eno1.network,和你手工文件不冲突(因为没手写 eno1),但*
    *一旦以后你想手动改 eno1,也会遇到同样被覆盖的问题**。
  4. 结论 & 做法
    “一个接口只能由一个管家管”
    选 A 或选 B,不要混用:
    选 A 或选 B,不要混用:
    选 A 或选 B,不要混用:
    选 A 或选 B,不要混用: