网卡重命名
前言
在早期版本的操作系统(如Fedora 13、Ubuntu 15、CentOS 6及更早版本)中,网络接口的命名方式为eth0、eth1、eth2等。Linux内核通过组合固定前缀和索引为网络接口分配名称。在系统初始化时,内核会根据索引顺序为网络设备分配名称,例如eth0代表系统启动时检测到的第一个以太网接口。如果添加了额外的网络接口,设备名称的分配顺序则不再固定,因为系统重启后设备可能会按不同的顺序初始化。
为了解决这一问题并提高网络设备的可识别性和一致性,现代Linux发行版采用了一致的网络设备命名规范,并通过udev设备管理器来实现这一规范。udev支持多种命名方案,默认情况下,它根据固件信息、拓扑结构及设备物理位置分配网络接口的名称。系统中的网卡设备重命名服务由systemd-udevd提供支持,以确保网络设备名称的一致性和稳定性。
一致的网络命名规则
命名规范为:设备类型 + 设备位置。
设备类型:
- en:以太网
- wl:无线局域网
- ww:无线广域网
设备位置
格式 |
含义 |
---|---|
o<on-board_index_number> |
主板bios内置的网卡 |
s<hot_plug_slot_index_number>[f<function>][d<device_id>] |
主板bios内置的PCI-E网卡 |
x<MAC> |
MAC地址 |
p<bus>s<slot>[f<function>][d<device_id>] |
PCI-E独立网卡 |
P<domain_number>]p<bus>s<slot>[f<function>][u<usb_port>][.][c<config>][i<interface>] |
USB网卡 |
网卡重命名步骤
本小节详细介绍网卡重命名方法。以将ens5修改为eth0为例。
- 修改网卡配置文件。
- 如果网卡的配置文件/etc/sysconfig/network-scripts/ifcfg-ens5存在,将原配置文件ifcfg-ens5重命名为ifcfg-eth0:
mv /etc/sysconfig/network-scripts/ifcfg-ens5 /etc/sysconfig/network-scripts/ifcfg-eth0
编辑ifcfg-eth0配置文件,将NAME和DEVICE参数的值修改为新网卡名eth0。
- 如果网卡的配置文件/etc/sysconfig/network-scripts/ifcfg-ens5不存在,请直接创建配置文件/etc/sysconfig/network-scripts/ifcfg-eth0,并添加以下内容:
DEFROUTE=yes BOOTPROTO=dhcp NAME=eth0 DEVICE=eth0 ONBOOT=yes
- 如果网卡的配置文件/etc/sysconfig/network-scripts/ifcfg-ens5存在,将原配置文件ifcfg-ens5重命名为ifcfg-eth0:
- 修改GRUB配置。
编辑/etc/default/grub,添加net.ifnames=0 biosdevname=0到GRUB_CMDLINE_LINUX项中。修改完成后,执行以下命令重新加载GRUB配置:
grub2-mkconfig -o /boot/grub2/grub.cfg
- 创建持久化规则文件。
在/etc/udev/rules.d/中创建70-persistent-net.rules文件,并添加以下规则内容:
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="xx:xx:xx:xx:xx:xx", NAME="eth0"
- 重启节点。
此外,用户也可以通过执行以下脚本来修改网卡名称。执行脚本后,按照提示输入修改前的网卡名称和修改后的网卡名称。完成操作后,重新启动系统,网卡将被重命名为新的名称。
#!/bin/bash function check_networkcard() { while true; do echo "请输入要修改的网卡名称(例如:ens33):" read interface_name if [[ -z "$interface_name" ]]; then echo "输入不能为空,请重新输入" continue fi ifconfig -a | grep -q "$interface_name" if [[ $? -eq 0 ]]; then break else echo "网卡 $interface_name 不存在,请重新输入" fi done } function modify_grub() { sed -i 's/resume/net.ifnames=0 biosdevname=0 &/' /etc/sysconfig/grub grub2-mkconfig -o /boot/grub2/grub.cf } function modify_adaptername() { while true; do echo "请输入修改后的网卡名称(例如:eth0):" read new_interface_name if [[ -z "$new_interface_name" ]]; then echo "输入不能为空,请重新输入" continue else break fi done cd /etc/sysconfig/network-scripts/ if [[ -e ifcfg-$interface_name ]]; then mv ifcfg-$interface_name ifcfg-$new_interface_name sed -i "s/$interface_name/$new_interface_name/g" ifcfg-$new_interface_name else sudo cat <<EOF >/etc/sysconfig/network-scripts/ifcfg-$new_interface_name DEFROUTE=yes BOOTPROTO=dhcp NAME="$new_interface_name" DEVICE="$new_interface_name" ONBOOT=yes EOF fi } function reload_network() { mac=$(ip link show $interface_name | awk '/ether/{print $2}') echo "SUBSYSTEM==\"net\", ACTION==\"add\", DRIVERS==\"?*\", ATTR{address}==\"$mac\", NAME=\"$new_interface_name\"" >> /etc/udev/rules.d/70-persistent-net.rules } function clear_variable() { unset interface_name unset interface_cardname unset mac } function main() { check_networkcard modify_adaptername modify_grub reload_network clear_variable echo "网卡名称修改完成,请使用reboot命令重启节点后生效" } main

在修改网卡名称的过程中,如果原网卡的配置文件不存在,在新配置文件中将默认添加DHCP配置。如果用户需要设置静态IP地址,需在执行完脚本后手动修改网络配置文件以进行相应调整。