改网卡名是为了兼容旧脚本、Ansible Playbook等硬编码eth0的场景,解决Predictable Network Interface Names导致的命名不一致问题;主要通过禁用net.ifnames=0和biosdevname=0实现全局回退,或用udev规则按MAC精准重命名。

为什么要改网卡名?不是所有场景都需要
CentOS 7 默认启用 net.ifnames=1 和 biosdevname=1,导致网卡叫 ens33、eno1、enp0s3 这类名字。这不是 bug,是 systemd 的 Predictable Network Interface Names 机制在起作用——它靠硬件位置、BIOS索引、MAC 地址等生成稳定名称,避免克隆虚拟机或热插拔后网卡名乱跳。
但如果你维护的是旧脚本、Ansible Playbook 里硬写了 eth0,或者团队习惯用 ifconfig eth0 直接操作,那确实得改。改之前先确认:你真需要全局改,还是只改某一块卡?后者用 udev 规则更稳妥。
改全局命名:禁用 Predictable Names 并重生成 GRUB
这是最常用也最彻底的方式,让整个系统回归 eth0、eth1 风格。关键不是改配置文件名,而是关掉内核层面的命名逻辑:
- 编辑
/etc/default/grub,找到GRUB_CMDLINE_LINUX行,在引号内末尾追加net.ifnames=0 biosdevname=0 - 确保没有拼错空格或漏掉等号,例如错误写法:
net.ifnames = 0(带空格)或net.ifnames0(缺等号) - 运行
grub2-mkconfig -o /boot/grub2/grub.cfg(UEFI 系统可能还要写入/boot/efi/EFI/centos/grub.cfg) - 重启生效;
ip link show应该看到eth0而不是ens33
注意:biosdevname=0 必须一起加,否则某些 Dell/HP 服务器仍会走 biosdevname 命名逻辑,出现 em1 这类名字。
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
只改某块网卡:用 udev rules 绑定 MAC 地址
适用于多网卡环境,比如你想把主网卡叫 eth0、管理口叫 mgmt0、存储口叫 stor0。这时不能靠全局关命名,得用 udev 规则精准控制:
- 先查目标网卡 MAC:
ip link | grep -A1 "state UP" | grep ether | awk '{print $2}' - 创建规则文件:
/etc/udev/rules.d/70-persistent-net.rules(数字越小优先级越高,别用 99) - 写入规则:
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="00:0c:29:aa:bb:cc", NAME="eth0"(MAC 必须小写,不能有冒号分隔符以外的空格) - 执行
udevadm control --reload和udevadm trigger --subsystem-match=net,不重启也能测试是否生效
常见坑:ATTR{address} 是 sysfs 路径下的值,不是 ip link 输出里的格式;如果规则不生效,检查 udevadm info /sys/class/net/ens33 | grep ID_NET_NAME 是否还显示 ID_NET_NAME_PATH —— 如果有,说明 net.ifnames=0 没生效,udev 规则被绕过了。
配套动作:同步更新 network-scripts 和 service
光改名字不够,系统服务和配置文件必须对齐,否则 systemctl restart network 会失败或静默忽略:
- 重命名配置文件:
mv /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-eth0 - 编辑新文件,确保
NAME=eth0和DEVICE=eth0两行一致,且删掉旧的UUID和HWADDR(它们已失效) -
ifcfg-ens33文件必须删掉或重命名,否则network服务启动时会尝试加载两个同名设备,报错Device ens33 does not exist - 最后执行
systemctl restart network,再用ip addr show eth0验证 IP 是否正常绑定
真正容易被忽略的是:修改后第一次重启,ifconfig 可能仍显示旧名(因为缓存),务必用 ip link show 或 ls /sys/class/net/ 看真实设备名;另外,Docker、Kubernetes 等依赖网卡名的服务,需同步更新其配置中引用的接口名。

















