如何在 CentOS 上将网络接口重命名为 eth0
在这篇文章中,我们将学习Linux接口命名。它是为基于 RHEL 的 Linux 发行版(例如 AlmaLinux、CentOS 和 Rocky Linux)编写的。您将了解 Linux 上名为 eth(X)、ens(X)、eno(X) 等的网络接口如何使用。
首先,我们了解Linux系统上网络接口的命名概念,包括经典的命名方案、biosdevname和系统udev策略。
1. 传统命名约定
传统命名约定是 Linux 内核驱动程序提供的默认传统接口命名方案。众所周知,传统的命名约定是例如 eth(n) 代表以太网设备,wlan(n) 代表无线 LAN 设备,usb(n) 代表 USBnet。
在传统的命名约定中,所有网络硬件都将由内核驱动程序以相同的方式处理。它足以告诉我们有关连接的类型,但对于您习惯的自然硬件来说就不够了。
2.Biosdev名称
Biosdevname 是由 Dell 发起的一个项目,旨在提供网络设备的一致命名。 Biosdevname 是一个 udev 实用程序帮助程序,它根据系统 BIOS 建议的硬件物理位置为网络设备提供一致的命名机制。
下面是biosdevname提供的默认命名方案:
- 对于板载网络设备,将命名为“em
[_<虚拟实例>] ” - 对于附加 NIC 设备,将命名为“p
p [_<虚拟实例>]”
更多细节:
- em=板载网络设备
- <插槽>=相应的 PCI 插槽
=NIC 的端口号(如果有多端口 NIC) - <虚拟实例>=SRIOV 和/或 NPAR 实例索引
- 附加网卡上的“p”分别代表 pci 插槽和端口
3. Systemd Udev 规则
如今,一些流行的 Linux 发行版(例如 Ubuntu、CentOS 和 Debian)都使用 Systemd 作为系统和服务管理器。从版本 197 开始,systemd 已添加到网络接口的本机命名策略和方案中,类似于 Biosdevname。
以下是基于 Systemd 的系统的 5 种网络接口命名策略:
- 对于板载网络设备,它将被命名为“eno1”、“eno2”等。
- 为了合并固件/BIOS,提供了 PCI Express 热插拔插槽索引号,命名为“ens1”。如果第一个策略失败,则将应用此策略。主要由VMWare、KVM等虚拟机使用。
- 如果适用,则应用包含硬件连接器物理位置的名称(例如:enp2s0),否则在所有其他情况下直接回落到方案 5。
- 默认情况下不使用包含接口 MAC 地址的名称(例如:enx78e7d1ea46da),但如果用户选择,则可以使用。
- 如果所有其他方法都失败,则使用传统的不可预测的内核命名方案(例如:eth0)。
现在我们已经了解了 Linux 接口命名约定。
接下来,我们将向您展示如何将网络接口名称更改为传统的“et0”、eth1等。有两种方法可以做到这一点,通过“biosdevname”和通过“systemd udev”更改网络接口名称规则'。
1. 通过禁用 Biosdevname 将接口名称更改为 eth0
正如我们在顶部所知,biosdevname 是 Dell 创建的 udev 实用程序,用于按照系统 BIOS 的建议命名网络接口。默认情况下,biosdevname 软件包安装在 Linux 系统上。
要在 Linux 系统上禁用 biosdevname,您需要通过编辑系统上的 grub 配置在引导级别禁用它。
在继续之前,让我们使用以下命令检查系统上的当前接口。
ifconfig -a
ip addr
下面是结果。
因此,我们有两个网络接口“ens3”和“ens8”。
接下来,我们将通过编辑每个接口的 grub 配置和网络配置,将 CentOS 8 系统上的两个接口重命名为“eth0”和“eth1”。
- 设置 Grub2
转到“/etc/sysconfig/”目录并使用 vim 编辑器编辑“grub”配置。
cd /etc/sysconfig/
vim grub
在“GRUB_CMDLINE_LINUX”配置上,添加以下配置以禁用 biosdevname 和 net.ifnames 内核参数。
net.ifnames=0 biosdevname=0
保存并关闭。
之后,使用“grub2-mkconfig”命令生成新的 grub 配置,如下所示。
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
你会得到如下结果。
- 编辑网络脚本
接下来,我们需要重命名位于“/etc/sysconfig/network-scripts/”目录中的配置上的两个网络接口。
转到“/etc/sysconfig/network-scripts/”。
cd /etc/sysconfig/network-scripts/
将两个接口名称重命名为“ifcfg-ethX”。
mv ifcfg-enp0s3 ifcfg-eth0
mv ifcfg-enp0s8 ifcfg-eth1
之后,使用下面的 sed 命令将两个文件上的两个接口更改为“ethX”。
sed -i -e 's/enp0s3/eth0/g' ifcfg-eth0
sed -i -e 's/enp0s8/eth1/g' ifcfg-eth1
现在重新启动CentOS 8系统。
sudo reboot
- 测试
再次登录后,使用以下命令检查可用的网络接口。
ifconfig
ip addr
您将看到如下结果。
CentOS 8 系统上的两个网络接口都已更改,现在使用传统的命名约定。通过在系统引导期间禁用“biosdevname”来更改网络接口。
- 可选
如果您想查看系统启动变化的详细信息,可以运行以下命令。
dmesg | grep -i eth
您将看到默认接口名称已更改为传统名称“ethX”,通过自定义 udev 规则进行更改。
2. 使用 Udev 规则将接口名称更改为 eth0
将网络接口名称更改为传统命名(例如 eth0 等)的另一种方法是创建自定义 udev 规则。并且通过使用自定义的udev规则,网络接口将在系统之后更改。
- 创建自定义 Udev 规则
现在转到“/etc/udev/rules.d/”目录并使用 vim 编辑器创建名为“70-persistent-net.rules”的自定义规则。
cd /etc/udev/rules.d/
vim 70-persistent-net.rules
将 MAC 地址和默认接口“ens3”和“ens8”更改为您自己的并粘贴到其中。
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="52:54:00:6c:a8:e6", ATTR{type}=="1", KERNEL=="ens3", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="52:54:00:97:cf:33", ATTR{type}=="1", KERNEL=="ens8", NAME="eth1"
保存并关闭。
- 编辑网络脚本
接下来,转到“/etc/sysconfig/network-scripts”目录。
cd /etc/sysconfig/network-scripts/
将两个接口名称重命名为“ifcfg-ethX”。
mv ifcfg-enp0s3 ifcfg-eth0
mv ifcfg-enp0s8 ifcfg-eth1
之后,使用下面的 sed 命令将两个文件上的两个接口更改为“ethX”。
sed -i -e 's/enp0s3/eth0/g' ifcfg-eth0
sed -i -e 's/enp0s8/eth1/g' ifcfg-eth1
现在重新启动 CentOS 8 服务器。
sudo reboot
- 测试
再次登录后,请使用以下命令检查所有可用的网络接口。
ifconfig
ip addr
您将获得已分配的新接口“ethX”。
- 可选
如果您想查看系统启动变化的详细信息,可以运行以下命令。
dmesg | grep -i eth
您将看到“ensX”名称更改为传统名称“ethX”,这是通过自定义 udev 规则更改的。
参考
- https://access.redhat.com/documentation/