如何在 CentOS 7 上更改网络接口名称
问题:在 CentOS 7 上,我想将网络接口的分配名称更改为其他名称。在 CentOS 或 RHEL 7 上重命名网络接口的正确方法是什么?
传统上,Linux 中的网络接口被枚举为 eth[0123...],但这些名称不一定对应于实际的硬件插槽、PCI 地理位置、USB 端口号等。这会引入不可预测的命名问题(例如,由于不确定的设备探测行为),从而可能导致各种网络错误配置(例如,由于无意的接口重命名而导致禁用接口或防火墙绕过)。基于 MAC 地址的 udev
规则在 MAC 地址与端口号一样短暂的虚拟化环境中没有多大帮助。
CentOS/RHEL 6 引入了一种为网络接口提供一致且可预测的网络设备命名的方法。这些功能唯一地确定网络接口的名称,以便更轻松地定位和区分接口,并使其在以后的启动、时间和硬件更改中保持不变。但是,在 CentOS/RHEL 6 上默认情况下并未启用此命名规则。
从CentOS/RHEL 7开始,默认采用可预测的命名规则。在此规则下,接口名称是根据固件、拓扑和位置信息自动确定的。现在,即使添加或删除 NIC 硬件而无需重新枚举,接口名称也保持固定,并且可以无缝替换损坏的硬件。
* Two character prefixes based on the type of interface:
* en -- ethernet
* sl -- serial line IP (slip)
* wl -- wlan
* ww -- wwan
*
* Type of names:
* b<number> -- BCMA bus core number
* ccw<name> -- CCW bus group name
* o<index> -- on-board device index number
* s<slot>[f<function>][d<dev_port>] -- hotplug slot index number
* x<MAC> -- MAC address
* [P<domain>]p<bus>s<slot>[f<function>][d<dev_port>]
* -- PCI geographical location
* [P<domain>]p<bus>s<slot>[f<function>][u<port>][..][c<config>][i<interface>]
* -- USB port number chain
这种新命名方案的一个小缺点是接口名称比传统名称更难阅读。例如,您可能会找到类似 enp0s3
的名称。此外,您不再能够控制此类接口名称。

如果出于某种原因,您更喜欢旧方法,并且希望能够将您选择的任意名称分配给 CentOS/RHEL 7 上的接口,则需要覆盖默认的可预测命名规则,并定义基于 MAC 地址的 udev
规则。
在 CentOS 或 RHEL 7 或更高版本上重命名网络接口
以下是如何在 CentOS 或 RHEL 7 上重命名网络接口。
首先,让我们禁用可预测的命名规则。为此,您可以在引导期间通过 GRUB 传递 net.ifnames=0
内核参数。这是通过编辑 /etc/default/grub
并将 net.ifnames=0
添加到 GRUB_CMDLINE_LINUX
变量来实现的。

然后运行此命令以使用更新的内核参数重新生成 GRUB 配置。
$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg

接下来,编辑(或创建)udev
网络命名规则文件 (/etc/udev/rules.d/70-persistent-net.rules
),并添加以下行。将 MAC 地址和接口替换为您自己的。
$ sudo vi /etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:a9:7a:e1", ATTR{type}=="1", KERNEL=="eth*", NAME="sushi"
最后,重新启动计算机,并验证新的接口名称。

请注意,配置重命名的接口仍然是您的责任。如果网络配置(例如 IPv4 设置、防火墙规则)基于旧名称(更改前),则需要更新网络配置以反映名称更改。