在使用 Proxmox VE(简称 pve)
中,添加了新固态等设备后,由于 Predictable Network Interface Names(可预测的网络接口名称)
,网络接口的名称会发生变化,/etc/network/interfaces 中网络接口的配置可能就会对应不上,导致断网等。在 pve 中的 Ubuntu
虚拟机也存在这种情况,需要指名网络接口的一些功能可能会因为网络接口名称的变动而不再工作。因此对于这种情况,可以根据 MAC
地址来固定网络接口的名称。
udev 是一个动态设备管理器,可以根据设备的属性(如 MAC 地址)来定义设备的名称。udev
规则是一种用来定义 udev 如何处理设备的语法。这些规则通常写在 /etc/udev/rules.d/
目录下的文件中。每个规则文件都有一个特定的命名格式,例如 70-persistent-net.rules。数字部分决定了规则的执行顺序,较小的数字会先执行。
- (未测试)udev 在处理设备事件时,会按照规则文件的顺序执行匹配的规则,直到所有规则都被处理完毕。如果后面的规则与先前的规则冲突,那么后面的规则将会覆盖先前的规则
-
由于 Ubuntu 中通常已经存在
70-persistent-net.rules文件,所以可以创建例如71-net-name-by-mac.rules文件:$ sudo touch /etc/udev/rules.d/71-net-name-by-mac.rules
-
编辑
71-net-name-by-mac.rules文件,添加规则。如果网络接口的 MAC 地址是aa:bb:cc:dd:ee:ff,想将接口的名称设置为eth0,则可以添加以下规则:SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="eth0" -
重启系统:
$ sudo reboot
修改命令行中的 <MAC_ADDRESS> 和 <INTERFACE_NAME> 后执行:
$ echo 'SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="<MAC_ADDRESS>", NAME="<INTERFACE_NAME>"' | sudo tee /etc/udev/rules.d/71-net-name-by-mac.rules如果需要修改多个网络接口的名称:
$ echo 'SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="<MAC_ADDRESS1>", NAME="<INTERFACE_NAME1>"' | sudo tee -a /etc/udev/rules.d/71-net-name-by-mac.rules; echo 'SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="<MAC_ADDRESS2>", NAME="<INTERFACE_NAME2>"' | sudo tee -a /etc/udev/rules.d/71-net-name-by-mac.rules