一、为什么网卡名会变?(先把底层逻辑说清)

Rocky 9 默认使用 systemd predictable network interface names,规则大概是:

名称 含义
eno1 主板板载网卡(onboard)
enp0s31f6 PCI 拓扑路径
eth0 传统命名(被禁用时才会出现)

你这个 U 盘系统插到不同机器

  • 主板不同

  • PCI 拓扑不同

  • BIOS/ACPI 描述不同

👉 udev 算出来的名字必然不同


二、如果你想更“无脑”:只要有网卡就 DHCP

一个通配 DHCP + 允许自动切换 + 不绑死接口

nmcli con add type ethernet \
  con-name usb-auto-dhcp \
  ifname "*" \
  connection.autoconnect yes \
  connection.autoconnect-priority 100 \
  ipv4.method auto \
  ipv4.may-fail yes \
  ipv6.method ignore

关键参数解释(这几个才是灵魂)

参数 作用
ifname "*" 匹配所有以太网
autoconnect yes 网线一插就起
autoconnect-priority 100 抢最高优先级
ipv4.may-fail yes 没插线/没 DHCP 不会卡死

效果:

  • 哪张网卡 先 link up

  • DHCP 成功 → 这张就活

  • 其它没插线的 → DHCP 失败直接放弃

  • 后续拔线/插线 → NM 会自动切换

✔ 插哪张都行
✔ 多网卡不需要事先知道名字
✔ 不用脚本、不用 udev hack

三、⚠️ 一个你必须知道的现实限制

如果 两张网卡同时插着有效网线
NetworkManager 一定会都给 IP

这是设计如此,不是你命令写错。

如果你真的要做到:

  • 同一时刻

  • 系统里 只允许一张以太网有 IP

那就只能上:

  • dispatcher 脚本

  • udev + nmcli down

  • 或者 systemd-networkd + RequiredForOnline

👉 如果你真有这个硬需求,我可以直接给你一份 dispatcher 脚本,插线自动踢掉其他网卡。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐