问题,

问题,

我有一个Ubuntu 服务器 14.04具有 2 个网络接口的虚拟机

  • eth0- 用于网页管理,SSH
  • eth1- 用于传入跨度网络分析

我已经为机器配置了 udev 规则(以确保一致性以及 mac 地址与逻辑网络接口名称的正确绑定。

  • 我在安装服务器时只做了一次
  • 将这些规则写入/etc/udev/rules.d/70-persistent-net.rules

    SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:f5:aa:02", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="eth1"
    SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:f5:aa:f8", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="eth0"
    

在此处输入图片描述


此设置按预期工作直到新的网络接口添加到机器需要提醒的是,新接口未添加到 udev 规则. (因为我在设置过程中只做了一次)

我希望新的网络接口名称是任何通用名称(例如eth3/ p2p1/ em1/ ...)只要名称未被占用根据 udev 规则。

这是我添加接口并启动机器后的体验:

在此处输入图片描述

  1. 我的 udev 规则被忽略/冲突并命名rename3
  2. eth0被劫持了。现在有一个新的接口eth0。这在安全方面非常成问题(可能导致数据泄露)

这是我在/var/log/dmesg

systemd-udevd[126]: starting version 204

...

vmxnet3 0000:04:00.0 eth0: NIC Link is Up 10000 Mbps
vmxnet3 0000:0b:00.0 eth1: NIC Link is Up 10000 Mbps
vmxnet3 0000:13:00.0 eth2: NIC Link is Up 10000 Mbps
vmxnet3 0000:1b:00.0 eth3: NIC Link is Up 10000 Mbps

...

vmxnet3 0000:0b:00.0 rename3: renamed from eth1
vmxnet3 0000:13:00.0 eth1: renamed from eth2
systemd-udevd[396]: renamed network interface eth1 to rename3
systemd-udevd[405]: renamed network interface eth2 to eth1
  • 在我看来,这是一种竞争条件。驱动程序/内核占用了名称。稍后,当我的 udev 规则执行时,被占用的名称会回退到rename*

问题,

有没有办法在驱动程序/内核占用接口名称之前改变顺序并确定 udev 规则的优先级?

注意-这些解决方法(POC级别)对我有用:

  • 在 udev 规则中使用不同的命名约定(例如management0span0) - 没有问题,因为它与默认值不冲突。
  • 启动时运行的脚本 - 将重新定义硬件更改的 udev 规则 - 有效,但需要额外重启(简单的方法) - 有效,没有问题

相关内容