在虚拟机里输入ifcfg相关命令后,真正让网络参数生效的核心是修改/etc/sysconfig/network-scripts/目录下的ifcfg-配置文件,并执行systemctl restart network(或nmcli connection reload),而不是简单敲几行ifconfig命令。 ifconfig只能临时改IP,重启虚拟机或重启网络服务后一切归零,这也是大多数“配置了却不生效”问题的根源,下面从排查思路到实际操作一步一步说清楚。
虚拟机ifcfg配置不生效?先检查这三处
很多人习惯在虚拟机里用ifconfig eth0 192.168.1.100直接配IP,发现当时能用,一重启就没了,这不算“配置不生效”,而是你压根没改对地方,真正要改的是 /etc/sysconfig/network-scripts/ifcfg-ens33(接口名可能不同),如果改了这个文件还是不生效,按下面顺序排查。
- NetworkManager是否在跟你抢控制权:CentOS 7之后的虚拟机默认开启NetworkManager,如果你同时用
systemctl restart network和nmcli管理网络,容易出现配置被覆盖,行业共识认为,在虚拟机场景下老老实实二选一,要么关闭NetworkManager,要么全程用nmcli管理。 - ONBOOT是否设为yes:ifcfg文件里如果
ONBOOT=no,重启后网卡默认不激活,配置自然不生效,很多模板机默认就是no,改IP时顺手把这项改成yes。 - 配置文件命名是否匹配接口名:ifcfg-eth0对应eth0,ifcfg-ens33对应ens33,用
ip link查一下实际接口名,别复制网上的教程写了ifcfg-eth0,但你的接口叫ens160。
三项都正常,再谈参数怎么写。
CentOS虚拟机ifcfg配置IP步骤:从编辑到生效全流程
假设你拿到的虚拟机是CentOS 7或CentOS 8,网卡名为ens33,想配静态IP,整个过程分四步。
第一步:用ip addr查看当前网络接口状态
先执行ip addr,确认接口名、当前IP和网段,这一步很关键,因为VMware或VirtualBox里网卡名可能不是eth0,而是ens33、ens160这类,你随后的配置文件名必须和这个接口名一致。
第二步:编辑ifcfg配置文件
用vim打开配置文件:
vim /etc/sysconfig/network-scripts/ifcfg-ens33
如下:
TYPE=Ethernet BOOTPROTO=static NAME=ens33 DEVICE=ens33 ONBOOT=yes IPADDR=192.168.1.100 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=223.5.5.5
几个重点参数:
- BOOTPROTO=static:明确是静态IP,别用dhcp。
- ONBOOT=yes:开机自动启用网卡。
- IPADDR、NETMASK、GATEWAY:必须和虚拟网络编辑器里的子网IP段对得上,VMware的NAT模式默认网段是192.168.x.0,x在虚拟网络编辑器中查看。
- DNS1、DNS2:配了域名解析地址,虚拟机才能解析域名。
改完后保存退出,注意,ifcfg文件里不要写UUID,即使系统自动生成了,手动指定IP时它不参与寻址逻辑,删掉反而少一点干扰。
第三步:让配置真正生效
保存文件后,执行下面任一命令,二选一,不要都敲:
systemctl restart network
或者如果你的系统是CentOS 8及以上,用NetworkManager推荐的做法:
nmcli connection reload nmcli connection up ens33
systemctl restart network是传统SysV风格的管理方式,在CentOS 8里可能提示找不到服务,这是正常的,因为NetworkManager接管了网络管理,此时应该用nmcli。
第四步:验证配置是否生效
运行ip addr show ens33,看到IP地址已经变成刚设置的值,再ping网关和公网地址,
ping -c 3 192.168.1.1 ping -c 3 223.5.5.5
两个都能通,说明内网和外网都正常,如果网关通但外网不通,大概率是DNS或路由问题,检查GATEWAY是否写对,以及虚拟机的“网络适配器”是否选了NAT模式。
ifcfg配置完成后的验证与故障排查
配置生效不代表万事大吉,虚拟机场景下还有几个后续动作。
为什么ifconfig看到的新IP重启就丢
ifconfig ens33 192.168.1.100 netmask 255.255.255.0这条命令改的是内核里的临时路由表,不写入任何文件,重启后网卡会读取ifcfg文件重新配置,临时设置自然消失,所以你要是想永久生效,只能修改ifcfg文件,这是ifconfig和ifcfg最核心的区别。
修改ifcfg后不重启系统,怎么让参数立即生效
除了上面说的systemctl restart network,还有两个更快的方法:
ifdown ens33 && ifup ens33
ifdown和ifup专门针对单块网卡做停用和启用,比重启整个network服务快,而且不影响其他网络连接,执行后同样用ip addr验证。
虚拟机克隆后ifcfg配置不生效的特殊情况
“复制虚拟机”或“克隆虚拟机”之后,新虚拟机的网卡MAC地址变了,但ifcfg文件里如果残留旧MAC地址(用HWADDR字段),系统会拒绝加载,CentOS 6/7的udev规则会把旧MAC绑定到eth0,导致新网卡变成eth1甚至eth2,ifcfg-eth0就失效了,此时删掉/etc/udev/rules.d/70-persistent-net.rules(如果有这个文件),再重启系统即可。
不同虚拟机平台下ifcfg配置的区别
VMware Workstation、VirtualBox、KVM在底层网卡模型上各有不同,但对ifcfg配置来说,差别主要在网卡命名和网络模式映射上。
| 虚拟机平台 | 常见网卡名 | 默认网络模式 | 需要特别注意的 |
|---|---|---|---|
| VMware Workstation | ens33、ens160 | NAT模式(192.168.x.0) | 虚拟网络编辑器里查看网段,别和物理机网段冲突 |
| VirtualBox | enp0s3、enp0s8 | NAT模式(10.0.2.x) | 桥接模式需要设置“混杂模式”才能让虚拟机互通 |
| KVM/QEMU | ens3、ens9 | 用户态NAT(192.168.122.x) | 默认virbr0网桥,桥接模式需要手动创建网桥 |
无论哪个平台,ifcfg里写的GATEWAY必须和虚拟网络编辑器或驱动里的网关一致,VMware NAT模式默认网关是192.168.x.2,VirtualBox NAT默认是10.0.2.2,KVM默认是192.168.122.1,写错了,虚拟机能上外网但访问不了宿主机,或者反过来。
如果ifcfg配置全对,但虚拟机还是连不上网
当你确认ifcfg文件内容、网络模式、服务状态都正确,虚拟机依然无法联网,从下面几个方向排查。
- 宿主机防火墙拦截:Windows宿主机上的VMware NAT服务或VirtualBox虚拟网卡可能被防火墙阻断,针对vmnet8或VirtualBox Host-Only网卡,在Windows防火墙里放行相关程序。
- 虚拟网络编辑器没有恢复默认设置:VMware里“虚拟网络编辑器”下方有一个“还原默认设置”按钮,点一下重建NAT和DHCP服务,注意这个操作会把自定义网段重置,需要重新配置。
- NetworkManager的DNS解析异常:ifcfg里写了DNS1,但
/etc/resolv.conf被NetworkManager改写了,可以执行systemctl restart systemd-resolved或直接编辑/etc/resolv.conf临时验证。
常见问题解答:虚拟机ifcfg配置相关疑问
虚拟机里ifcfg配置静态IP后,为什么ssh连不上?
先确认虚拟机内能ping通宿主机网关,再用ssh root@虚拟机IP测试,如果服务起来了但连不上,检查sshd_config是否允许root登录,以及宿主机防火墙是否放行22端口,大多数情况是VMware NAT模式下,宿主机ping不通虚拟机,这是因为NAT模式本身就不允许宿主机直连虚拟机的IP,改用桥接模式或添加一个Host-Only网卡即可。
ifcfg-ens33文件里没有UUID会导致什么后果?
UUID在ifcfg文件里是网卡的唯一标识,但对静态IP配置不是必需字段,没有UUID的ifcfg文件,NetworkManager在启动时会根据MAC地址自动关联网卡,如果你的虚拟机有多个网卡且MAC地址相同或冲突,才会出现问题,一般场景下删掉UUID不影响静态IP生效,反而避免克隆虚拟机后出现的MAC地址绑定混乱。
修改完ifcfg文件后,重启network服务提示“Job for network.service failed”
这个报错大多因为ifcfg文件里有语法错误,比如多写了空格、引号不匹配,或者IP地址段与当前网卡不在同一子网,执行systemctl status network.service或journalctl -u network查看详细日志,定位到具体行号再修正,还有一种情况是NetworkManager和network服务同时启用,互相冲突,建议关闭NetworkManager的自动管理接口功能。
说到底,虚拟机里配置ifcfg的核心就一句话:永远修改配置文件而不是用临时命令,改完用正确的服务重启方式加载,记住这个原则,无论是CentOS 7还是Ubuntu Server,你自己都能举一反三。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/620528.html





