centos修改网卡名称

Catalogue
  1. 1. 网卡配置文件参数详解
  2. 2. 在线修改网卡名(重启机器会失效)
  3. 3. 内核启用biosdevname,禁用net.ifnames
  4. 4. 启用udev的60-net.rules规则
  5. 5. 修改网卡配置文件
  6. 6. 重启机器
  7. 7. 原理

网卡配置文件参数详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# cat /etc/sysconfig/network-scripts/ifcfg-eth0

TYPE=Ethernet # 设备类型 以太网
DEVICE=eth0 # 网卡设备名称
NAME=eth0 # 网卡连接名称
BOOTPROTO=static # 地址分配模式 启用静态IP地址
ONBOOT=yes # 开机自动启用网络连接

DEFROUTE=yes # 把这个eth0设置为默认路由
PEERDNS=no # 不允许DHCP获得的DNS覆盖本地的DNS
PEERROUTES=yes # 不从DHCP服务器获取用于定义接口的默认网关的信息的路由表条目
IPV4_FAILURE_FATAL=no # 如果ipv4配置失败不禁用设备

IPADDR=192.168.56.12 # IP地址
NETMASK=255.255.255.0 # 子网掩码
PREFIX=24 # 子网掩码(与NETMASK一样)
GATEWAY=192.168.56.2 # 网关地址
DNS1=223.5.5.5 # DNS地址

USERCTL=no # 普通用户不能控制网卡
NM_CONTROLLED=no # 不让Network Manager托管
PROXY_METHOD=none # 代理方式:关闭状态
BROWSER_ONLY=no # 支持浏览器:否

网卡配置文件的DNS优先于 /etc/resolv.conf

在线修改网卡名(重启机器会失效)

把eth0改成em1

1
2
3
ifconfig eth0 down  
ip link set eth0 name em1
ifconfig em1 up

内核启用biosdevname,禁用net.ifnames

biosdevname详解

net.ifnames(也是一种网卡的命名规范)

修改/etc/default/grub

在GRUB_CMDLINE_LINUX后添加 net.ifnames=0 biosdevname=1

1
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet net.ifnames=0 biosdevname=1")

重设一下引导

1
sudo grub2-mkconfig -o /etc/grub2.cfg

启用udev的60-net.rules规则

/usr/lib/udev/rules.d/60-net.rules文件中的规则指示udev辅助工具/lib/udev/renamedevice查看所有/etc/sysconfig/networkscripts/ifcfg-suffix文件。如果是ifcfg文件如果发现包含 HWADDR 条目与接口的 MAC 地址匹配,它将将该接口重命名为 ifcfg 文件中的 DEVICE 指令指定的名称。如果不相符,则按照/etc/udev/rules.d/60-net.rules下的规则来

1
2
3
4
cp /usr/lib/udev/rules.d/60-net.rules /etc/udev/rules.d/

cat /etc/udev/rules.d/60-net.rules
ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{type}=="1", PROGRAM="/lib/udev/rename_device", RESULT=="?*", NAME="$result"

通过udev指定网卡名

1
ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{type}=="1", ATTR{address}=="d8:9e:*:10:*11", NAME="eth0"

修改网卡配置文件

如果要把em2网卡改成eth0

1
2
3
4
cd /etc/sysconfig/network-scripts/
mv ifcfg-em2 ifcfg-eth0
把配置文件里的NAME、DEVICE改为eth0
在对应网卡的配置文件中添加对应网卡的mac地址,HWADDR=ec:**:**:e1:0*:c5

如果没有配置文件,可使用以下命令添加

1
2
3
4
nmcli connection add type ethernet ifname em1 con-name em1 autoconnect yes

警告:名为 'em1' 的连接已存在。使用 uuid '3b563e41-be15-4a21-98b9-9ca9e8777e25' 来指代连接
连接 "em1" (3b563e41-be15-4a21-98b9-9ca9e8777e25) 已成功添加。

重启机器

1
reboot

原理

上述的方法用了两个网卡命名规范,一个是biosdevname、一个是systemd

经测试,biosdevname命名规范必须启用,否则修改网卡为eth0(ethX系列)会出现莫名的错误,而非eth的名字则可正常修改

内核在boot过程是默认使用ethX方式来命名的,每次启动的时候都不确定,启动会后再通过udev等方式去rename,这种不确定因素太多,所以启用biosdevname比较好

启用biosdevname,禁用net.ifnames,(两种规范用一个就行)

!!!如果用户自定义了udev rules,则用户自定义的rules优先!

使用biosdevname命名规范,所命名的网卡名如下

1
2
3
em1 板载网卡
p3p4 pci网卡
p3p4_1 虚拟网卡

参考文档

centos7中的网卡名称相关知识

systemd.net-naming_scheme - 网络设备命名方案

RHEL7/centos7 修改网卡名称为eth0

CentOS 7 CentOS 8 网卡命名规则

Centos 7 中网卡配置文件的优先级

一致的网络设备命名