Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save MuXiu1997/3decb9b32282389a22ba2a8f243b39ff to your computer and use it in GitHub Desktop.

Select an option

Save MuXiu1997/3decb9b32282389a22ba2a8f243b39ff to your computer and use it in GitHub Desktop.
在 Debian / Ubuntu 中根据网卡 MAC 地址固定网络接口名称

在 Debian / Ubuntu 中根据网卡 MAC 地址固定网络接口名称

起因

在使用 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 在处理设备事件时,会按照规则文件的顺序执行匹配的规则,直到所有规则都被处理完毕。如果后面的规则与先前的规则冲突,那么后面的规则将会覆盖先前的规则

步骤

  1. 由于 Ubuntu 中通常已经存在 70-persistent-net.rules 文件,所以可以创建例如 71-net-name-by-mac.rules 文件:

    $ sudo touch /etc/udev/rules.d/71-net-name-by-mac.rules
  2. 编辑 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"
    
  3. 重启系统:

    $ 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment