如果你也遇到这种情况,输入了 ip addr
命令以后,从输出结果来看,CentOS 虚拟机网络存在问题。核心问题是:主网络接口 ens33
没有分配到 IP 地址。
虽然接口状态是 UP
(已开启),但没有 inet
地址行,这意味着它无法与网络通信。virbr0
是虚拟化桥接接口,通常由 KVM/libvirt 创建,与您当前的上网问题关系不大。
别担心,这个问题很常见,通常由虚拟机软件的网络配置或 CentOS 自身的网络服务导致。请按照以下步骤排查和解决:
第一步:检查虚拟机软件的网络设置(最常见原因)
这是最可能的问题所在。请先关闭您的 CentOS 虚拟机,然后检查虚拟机软件(如 VMware Workstation 或 VirtualBox)的设置。
-
网络连接模式:确保虚拟机的网络适配器处于 「NAT 模式」 或 「桥接模式」。
- NAT 模式:虚拟机通过宿主机的网络上网,会由虚拟机软件内置的 DHCP 服务器自动分配 IP。这是最简单推荐的模式。
- 桥接模式:虚拟机会像一台真实设备一样接入您家的局域网,由您的路由器分配 IP。
- 请勿选择「仅主机模式」,此模式下虚拟机只能与宿主机通信,无法上网。
-
连接状态:确保网络适配器选项已勾选 「启动时连接」。
-
还原设置:如果之前修改过高级网络设置,可以尝试将其恢复默认。
修改完虚拟机设置后,重启 CentOS 虚拟机,再次运行 ip addr
查看 ens33
是否获取到 IP 地址。
第二步:在 CentOS 内部重启网络服务
如果虚拟机网络设置正确但问题依旧,请在系统内部尝试重启网络。
-
使用 root 权限:在终端中执行以下命令(需要输入 root 密码):
su -
或者使用
sudo
:sudo -i
-
重启网络服务(CentOS 7):
systemctl restart network
-
或者尝试重启 NetworkManager(较新版本):
systemctl restart NetworkManager
-
再次检查:
ip addr show ens33
查看是否出现了
inet
地址(通常是192.168.x.x
或10.x.x.x
)。
第三步:强制 DHCP 客户端重新获取 IP
如果重启服务无效,可以命令网络接口主动去请求一个 IP 地址。
-
先释放当前可能的无效配置:
dhclient -r ens33
-
然后重新请求:
dhclient ens33
-
再次运行
ip addr
检查结果。
第四步:检查并手动配置网络(前述方法均无效时)
如果以上方法都失败,可能是 DHCP 获取失败,您可以尝试手动配置一个静态 IP。
-
编辑网络配置文件(需要使用
sudo
或root
权限):sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
-
确保文件中有以下关键配置(如果不存在就添加,如果存在就修改):
BOOTPROTO=dhcp # 如果是DHCP自动获取,就保持这样 ONBOOT=yes # 这一项必须为yes,表示开机自启
如果您想改用静态IP(例如在桥接模式下),可以修改为:
BOOTPROTO=static # 改为静态 ONBOOT=yes IPADDR=192.168.1.150 # 您想设置的IP,需在路由器网段内且未被占用 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 # 您的路由器网关地址 DNS1=8.8.8.8 # DNS服务器地址
-
保存退出后,重启网络服务:
sudo systemctl restart network
总结与排查顺序
- 首要检查:虚拟机软件的 「网络适配器」 是否设置为 NAT 并勾选了 「启动时连接」。
- 内部重启:在 CentOS 内以 root 身份执行
systemctl restart network
。 - 强制获取:执行
dhclient -r ens33
和dhclient ens33
。 - 最终手段:检查
/etc/sysconfig/network-scripts/ifcfg-ens33
文件中的ONBOOT=yes
配置,或改为静态 IP。
按照这个流程,99% 的虚拟机无网络访问问题都能得到解决。请从第一步开始尝试。