装好CentOS虚拟机后连不上网,不是网卡坏了,多半是网络模式没选对或者网卡配置没改完,按本文顺序检查并修改网卡配置文件,五分钟内就能搞定。
CentOS虚拟机连不上网络怎么回事?先分清网络模式
很多人在虚拟机里装完CentOS,敲ping www.baidu.com后提示Name or service not known或者直接超时,第一反应是系统坏了,其实CentOS的安装镜像默认不会自动启用网卡,加上VMware或VirtualBox的网络连接模式不同,最终表现也不同。
NAT模式与桥接模式的本质区别
你新建虚拟机的时候,VMware默认给你选了NAT模式,这个模式下,物理机的IP地址类似168.x.x,虚拟机则是168.137.x或168.56.x这类私有网段,所有流量经过物理机转发出去,外表看上去就像物理机自己在上网,好处是物理机不联网时虚拟机也同样无法上网,且局域网内其他设备无法直接访问这台虚拟机。
桥接模式则完全不同,虚拟机会直接通过物理网卡获取同一个局域网内的独立IP地址,看起来就是一台真实的局域网主机,如果你要部署网站给别人访问,或需要与其他物理机互通,就必须选桥接。
行业共识认为,个人学习环境下绝大多数情况用NAT即可满足需要,涉及真实服务部署时才建议切换桥接。
如何判断你当前的模式是否匹配场景
- 虚拟机里执行
ip addr,看网卡是否显示有inet地址(类似192.168.x.x),如果没有,说明网卡尚未自动获取到地址。 - 执行
route -n查看默认网关是否存在,缺网关则说明DHCP可能未生效。 - 用
systemctl status NetworkManager或systemctl status network检查网络服务是否处于active状态。 - 打开物理机命令行执行
ipconfig(Windows)或ip addr(Linux),对比物理机网段和虚拟机的网段,网段不一致时,NAT模式下DNS可能无法解析。
用nmcli还是改配置文件?两种配置方式对比选择
CentOS 7及以后的版本建议使用nmcli命令操作NetworkManager服务,而CentOS 6或较早习惯直接改/etc/sysconfig/network-scripts/ifcfg-
文件,很多新手从老教程里拷贝了配置代码,结果在CentOS 8或9上完全不生效,因为新版本默认不读取ifcfg文件了。
nmcli命令行方式适合快速测试
nmcli connection show
如果你看到类似ens33 d91622aa-... ethernet connected这样的输出,说明网卡本身已经被识别,然后执行:
nmcli con mod ens33 ipv4.method auto nmcli con up ens33
这是最简单的动态获取IP方式,只适合NAT模式下快速测试网络连通性,但国内很多内网测试环境需要静态IP,使用纯命令行配置较为繁琐,此时推荐直接用编辑配置文件的方式,一次写清所有参数。
配置文件方式适合长期固定IP环境
以VMware中常见网卡名ens33为例,配置文件路径为/etc/sysconfig/network-scripts/ifcfg-ens33,编辑前先备份原文件:
cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens33.bak vi /etc/sysconfig/network-scripts/ifcfg-ens33
长的类似这样。关键字段是ONBOOT=yes,新装的CentOS默认是no,这基本就是连不上网的最大原因,其余字段根据是否需要静态IP填写。
| 字段名 | 值示例 | 作用 |
|---|---|---|
| BOOTPROTO | static或dhcp | 地址获取方式 |
| ONBOOT | yes或no | 开机是否启用网卡 |
| IPADDR | 168.137.100 | 手动指定的IP |
| NETMASK | 255.255.0 | 子网掩码 |
| GATEWAY | 168.137.1 | 默认网关 |
| DNS1 | 5.5.5 | 首选DNS(阿里) |
| DNS2 | 114.114.114 | 备用DNS |
填写时有一个经常出错的点:网关必须与NAT子网对应,NAT模式下网关通常是VMware虚拟网卡VMnet8的IP地址,多数情况是168.x.1,以虚拟机内执行route -n实际显示的为准,如果网关填错,即使有IP地址也出不了网。
改完后执行:
systemctl restart network
或
nmcli con reload && nmcli con up ens33
不同版本的NetworkManager重启行为略有差异,反正两个都试一次总没有坏处。
CentOS虚拟机配置静态IP完整步骤详解
如果你不想每次开机IP地址都变来变去,建议直接配置静态IP,这套流程适用于VMware和VirtualBox,命令和文件路径完全相同,只有NAT网段要按各自工具调整。
第一步,确定虚拟机使用的NAT网段,VMware菜单栏选择“编辑” -> “虚拟网络编辑器”,选中VMnet8,记下子网IP范围,例如子网为168.137.0,那么你的静态IP可设为168.137.100,网关为168.137.1。
第二步,编辑网卡配置文件。
vi /etc/sysconfig/network-scripts/ifcfg-ens33
注意如果你的网卡名不是ens33,文件名也要改成对应的名字,用ls /etc/sysconfig/network-scripts/查看:
TYPE=Ethernet BOOTPROTO=static NAME=ens33 DEVICE=ens33 ONBOOT=yes IPADDR=192.168.137.100 NETMASK=255.255.255.0 GATEWAY=192.168.137.1 DNS1=223.5.5.5 DNS2=114.114.114.114
第三步,保存退出后重启网络。
systemctl restart network
第四步,验证连通性,先ping网关再ping外网:
ping -c 3 192.168.137.1 ping -c 3 223.5.5.5 ping -c 3 www.baidu.com
网关通而外网不通,说明DNS问题或默认路由缺失,若连网关都不通,往下看防火墙和SELinux部分。
配置完成后仍然不通?防火墙与SELinux排查
你可能会遇到配置文件看着完全正确,但就是ping不通的情况,在CentOS 7及以上系统中,firewalld会拦截来自虚拟网卡的ICMP请求,但注意拦截的是其他设备ping这台虚拟机,不影响虚拟机主动访问外网,如果你发现虚拟机访问外网正常,只是物理机无法ping通虚拟机,那是防火墙没有放行ICMP协议。
防火墙放行规则
systemctl status firewalld
确认防火墙为running后,执行:
firewall-cmd --permanent --add-icmp-block-inversion firewall-cmd --reload
因为这个操作放行了所有ICMP类型,如果你的机器面向公网,尽量细化规则,比如只允许来自物理机IP的ICMP:
firewall-cmd --permanent --rich-rule='rule family=ipv4 source address=物理机IP accept' firewall-cmd --reload
SELinux干扰网络服务
CentOS强制开启的SELinux可能导致某些网络服务监听异常,特别是你配置了Apache、Nginx等服务时,建议查看一下当前状态:
getenforce
输出Enforcing说明SELinux开启。不建议直接永久关闭,临时测试可以用setenforce 0,如果服务恢复正常,再考虑配置SELinux策略模块,而不是直接禁用。
虚拟机新建CentOS后的网络连接问题,突破口集中在三处:检查网络模式与物理机网段的对应关系、确认ONBOOT=yes和静态IP字段无冲突、排查防火墙和SELinux的干扰,采用NAT模式的个人学习环境,直接配置静态IP加阿里DNS,基本一次就能连上网。
虚拟机的CentOS网络配置常见问题
问题1:安装CentOS时选的是最小安装,没有图形界面,怎么配置网络?
最小化安装完全可以用命令操作,你只需要修改/etc/sysconfig/network-scripts/ifcfg-ens33文件,把ONBOOT改为yes,如果有DHCP需求再把BOOTPROTO改为dhcp,重启网络服务后就能获取到地址,平时维护尽量用nmcli命令,因为CentOS 8版本起NetworkManager对ifcfg文件的兼容性有所下降。
问题2:在虚拟机里配置了静态IP,重启后IP地址丢失是什么原因?
多数情况下是配置文件中ONBOOT=no,系统重启后网卡没有被激活,另外也可能你使用的是systemd-networkd而不是NetworkManager,CentOS默认网络管理服务是NetworkManager,你执行systemctl status NetworkManager来确认服务是否正常启动,还有一个常见错误是配置文件里同时写了DHCP和静态IP参数,造成服务启动时参数冲突,删掉多余的BOOTPROTO=dhcp这行即可。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/614403.html





