我有一个ubuntu服务器14.04具有 2 个网络接口的虚拟机
eth0
- 用于Web管理,SSHeth1
- 用于传入跨度网络分析
我已经使用 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 规则。
这是我添加接口并启动机器后的体验:
- 我的 udev 规则被忽略/冲突并被命名
rename3
eth0
被劫持了。现在的新界面之一是eth0
.这在安全方面是一个超级问题(可能导致数据泄漏)
这是我在中找到的相关流程/var/log/messages
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
- IMO 这是一个竞争条件。驱动程序/内核占用名称。稍后当我的 udev 规则执行时,占用的名称回退到
rename*
问题,
在驱动程序/内核占用接口名称之前,有没有办法更改顺序并确定 udev-rules 的优先级?
注意 - 这些解决方法(POC 级别)对我有用:
- 在 udev 规则中使用不同的命名约定(例如
management0
和span0
) - 工作没有问题,因为它不与默认值冲突。- 运行 @ boot 的脚本 - 将重新定义有关硬件更改的 udev 规则 - 有效,但需要额外的重新启动(天真的方法) - 没有问题