VMware里装好CentOS,最让人头疼的往往不是安装过程本身,而是装完之后的网络配置。我帮人远程排查过太多次虚拟机网络问题,其中出现频率最高的报错就是这句:“ping: www.baidu.com: 未知的名称或服务”。很多人第一反应是网卡没驱动,或者系统装坏了,在宿主机和虚拟机之间来回折腾半天,最后才发现问题其实出在网络配置上。这篇内容就把我在VMware里配置CentOS网络的全过程完整写下来,包括三种网络模式的选择、静态IP配置步骤、DNS解析处理,以及“未知的名称或服务”出现时的系统化排查方法。不管你是第一次在VMware中安装CentOS的初学者,还是配过几次但总在某个环节卡住的运维新人,按这套流程走一遍,虚拟机基本都能正常连上外网。
1. 我为什么专门写这篇VMware网络配置:DNS报错几乎是必经之路
在动手之前,先聊清楚这个报错到底代表什么。最近一年内来找我排查VMware虚拟机网络问题的朋友,九成以上遇到的都是同一类现象:虚拟机里执行ping www.baidu.com,返回的既不是“请求超时”,也不是“目标主机不可达”,而是“未知的名称或服务”。这个提示的英文原文是“Unknown name or service”,很多人一看就慌了,以为是系统装坏了,实际上它传递的信息非常明确:系统不是连不上网络,而是根本不知道www.baidu.com这个域名对应哪个IP地址。
这里涉及到两个完全不同的网络层级。一个是IP层,负责把数据包从一个地址送到另一个地址;另一个是DNS解析层,负责把域名翻译成IP地址。可以把DNS理解成通讯录:你准备打电话,但手机里没有对方号码,电话自然打不出去。“未知的名称或服务”就是在告诉你,通讯录里翻不到这个条目,而不是电话线断了。
问题在于,大多数教程只教你配置IP、掩码、网关,却很少解释DNS在整个链路里的位置。于是出现了两种典型情况:
ping 8.8.8.8或者ping 223.5.5.5这种纯IP地址能通,但ping www.baidu.com立刻报“未知的名称或服务”。这说明网络链路本身是通的,只是DNS解析挂了。- 两个命令都不通,那才需要回头检查IP、掩码、网关这些基础配置。
我在排查时习惯先用这两条命令做第一步分流,十秒钟就能判断问题的方向。可很多人在这个报错面前浪费了大量时间,去重装网卡驱动、重建虚拟机,其实都跑偏了。
这篇教程先讲清楚网络模式的选择逻辑,再给出详细到“每一步看到什么界面”的配置过程,然后专门拆解DNS报错的处理方式,最后补上我自己实际遇到过的各种坑。按顺序看完,你自己也能建立一套排查网络问题的方法,而不是永远靠复制别人的命令碰运气。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. VMware的三种虚拟网络模式:模式选不对,后面怎么配都没用
VMware Workstation的虚拟网络设置里,有三种模式:桥接模式、NAT模式、仅主机模式。绝大多数网络配置失败,根源都在于选错了模式,或者选了模式但没搞清楚它背后的机制。
2.1 三种模式的基本原理
先看一张对比表,把三种模式的核心差异点列出来:
| 模式 | 虚拟机IP来源 | 能否访问外网 | 外部能否访问虚拟机 | 适用场景 |
|---|---|---|---|---|
| 桥接模式 | 与宿主机同网段,由路由器分配 | 可以 | 可以 | 需要虚拟机作为独立主机对外提供服务 |
| NAT模式 | VMware虚拟子网,由VMware DHCP分配 | 可以,经宿主机转发 | 不可以,默认情况下外部无法直接访问 | 绝大部分个人学习、开发测试场景 |
| 仅主机模式 | VMware虚拟子网,与宿主机互通 | 不可以 | 不可以 | 纯本地测试,不需要外网 |
桥接模式的原理最简单,虚拟机的网卡直接桥接到宿主机的物理网卡上,虚拟机就像局域网里的另一台真实设备,能拿到同一个网段的IP,能被局域网里其他设备访问。但它的前提条件是宿主机所处网络环境允许额外的设备接入。如果宿主机连接的是公司办公网,做了MAC地址绑定或者接入认证,桥接模式很容易失败。
NAT模式则是把虚拟机的流量经由宿主机的IP转发出去。对虚拟机来说,它看到的网关是VMware虚拟网络里的网关;对外部网络来说,所有流量都来自宿主机。这种方式不占用局域网额外IP,不依赖路由器的放行策略,只要宿主机能上网,虚拟机基本就能上网。
仅主机模式更像一个封闭的试验台,虚拟机只能和宿主机通信,连外网的机会都没有。适合做隔离测试,不适合需要访问外网的场景。
2.2 为什么大多数场景都推荐NAT模式
我给大多数用户推荐NAT模式,原因很直接:它的成功率高,受外部环境影响小。不管是家庭宽带、公司网络还是校园网,宿主机能上网的情况下,NAT模式基本就能通。
桥接模式虽然听起来更“真实”,但它在不同网络环境下的变数太多了。举例来说,我曾经在一家公司的办公网络里帮同事配虚拟机,桥接模式无论如何都不通,排查一圈发现办公网的接入认证只允许已登记的设备MAC地址上网,虚拟机随机生成的新MAC地址根本没有上网权限。切回NAT模式,一分钟搞定。家庭宽带的场景下,如果路由器开启了AP隔离或端口隔离,桥接模式也可能出现虚拟机有IP却无法正常上网的情况。
如果你的需求只是学习Linux操作、跑开发环境、练习部署服务,NAT模式完全足够了。只有当虚拟机需要对外提供网络服务,而且宿主机所在网络环境允许时,才需要考虑桥接模式。这也是我在这篇教程里主推NAT的原因。
3. 图文级配置流程:从虚拟网络编辑器到CentOS网卡,一步步连上网
这一章是整个教程的核心操作部分,按顺序走完,网络就能通。我以VMware Workstation Pro和CentOS 7.9为例,其他版本界面稍有差异,但核心配置项是一致的。
3.1 第一步:确认VMware虚拟网络编辑器中的NAT子网参数
打开VMware Workstation,点击菜单栏的“编辑”->“虚拟网络编辑器”。你会看到一个包含VMnet0、VMnet1、VMnet8等条目的窗口。VMnet8对应的就是NAT模式,默认情况下它应该存在并且在右下角显示了“NAT模式”几个字。
这里要把注意力放到“子网IP”和“子网掩码”两栏。子网IP是给虚拟机所在虚拟网络划定的网段,比如192.168.88.0,子网掩码是255.255.255.0。你还需要点一下“NAT设置”按钮。在弹出的窗口里能看到“网关IP”这个字段,这个IP就是虚拟机配置文件里要填的网关地址,比如192.168.88.2。
关键提醒:网关IP必须从这里读出来,而不是自己在脑子里编一个。很多人在这一步会犯一个隐蔽的错误,比如子网是192.168.88.0,网关通常会是192.168.88.2,但如果你手动把VMware的DHCP设置改过,或者历史遗留问题导致网关变成了别的IP,你必须以虚拟网络编辑器里显示的数值为准。
3.2 第二步:把虚拟机的网络适配器设置为NAT模式
选中虚拟机,点击右键进入“设置”,在“硬件”选项卡里选择“网络适配器”。右侧会列出三种连接方式以及“自定义”下拉框。
这里直接勾选“NAT模式”,或者在下拉框里选择“VMnet8(NAT模式)”,效果是一样的。如果你之前在这台虚拟机上折腾过网络,建议先恢复到默认状态,把“网络适配器”改回NAT模式,再继续后面操作。检查完这一步之后,启动虚拟机,进入CentOS系统。
3.3 第三步:查看当前网卡接口名称
进入CentOS后,先执行一条命令确认网卡名称:
bash复制ip addr
找到状态为UP或者至少被系统识别到的网卡接口,最常见的是ens33或者ens160。为什么强调这一步?因为CentOS 7的网卡命名规则不再是传统的eth0,而是基于硬件位置生成的ens33之类名字。后面编辑配置文件时需要用到这个名字,填错了等于白改。
如果你执行完ip addr之后发现所有网卡都没有看到状态为UP的接口,别急着继续往下配IP,先把网卡状态提起来,可以用:
bash复制ifup ens33
命令执行成功之后再看ip addr。如果提示Failed to start LSB: Bring up/down networking,说明systemd服务或NetworkManager服务有问题,我会在第五章的排查链路里细说。
3.4 第四步:编辑网卡配置文件,写清IP、网关和DNS
网卡的配置文件位于/etc/sysconfig/network-scripts/目录下,文件名格式是ifcfg-网卡名。以ens33为例,备份之后打开:
bash复制cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens33.bak
vi /etc/sysconfig/network-scripts/ifcfg-ens33
修改或确认以下关键项:
ini复制TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=ens33
UUID=6a0f7b6f-xxxx-xxxx-xxxx-xxxxxxxxxxxx
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.88.131
NETMASK=255.255.255.0
GATEWAY=192.168.88.2
DNS1=223.5.5.5
DNS2=119.29.29.29
逐个解释这些参数的含义。
BOOTPROTO=static是将IP获取方式改为静态配置。如果你只想快速上网,保留BOOTPROTO=dhcp也行,由VMware的DHCP服务自动分配IP。但静态IP的好处是稳定、固定,下次重启虚拟机IP不会变,后续配置服务和软件时更省心。
ONBOOT=yes必须写对。CentOS 7刚装完时,这个值默认是no,意思是开机不自动启动网络接口。我见过不少“为什么我配置了网卡但还是不通”的问题,最后发现就是ONBOOT=no导致网卡压根没启动。
IPADDR就填你想要给虚拟机分配的固定IP,要求必须和VMware虚拟网络编辑器的子网处在同一个网段。比如子网是192.168.88.0,那IP可以填192.168.88.131,只要不和其他虚拟机或宿主机冲突就行。NETMASK保持255.255.255.0,GATEWAY必须填刚才从“NAT设置”里看到的网关IP。
DNS1和DNS2是域名解析服务器的地址。这里我填的是大陆地区使用很广泛的两个公共DNS:223.5.5.5是阿里云的,119.29.29.29是腾讯DNSPod的。如果这两个不可用,备选还可以用114.114.114.114。DNS这一项也是解决本章标题那个DNS报错的核心参数,必须认真填。
修改完保存退出,执行下面命令重启网络服务:
bash复制systemctl restart network
或者用传统的方式:
bash复制service network restart
执行后没有提示错误,说明配置基本没问题了。
3.5 第五步:按顺序验证IP、网关、外网和DNS
重启网络服务后,按照下面顺序验证,每一条都通过才算配置成功。
第一步,看网卡IP是否生效:
bash复制ip addr show ens33
正常情况下,inet字段后面会出现你配置的IP地址,比如192.168.88.131/24,并且网卡状态是UP。
第二步,ping网关:
bash复制ping -c 4 192.168.88.2
这里填你自己的网关地址。能收到reply from 192.168.88.2说明虚拟机到宿主机这一层的通路没问题。
第三步,ping一个纯IP地址的外网目标:
bash复制ping -c 4 223.5.5.5
能通说明NAT转发正常,虚拟机可以访问外部网络。
第四步,ping域名:
bash复制ping -c 4 www.baidu.com
如果这里返回了百度服务器的IP地址,并且有正常的回复,说明DNS解析也正常,网络完全通了。如果前三条通过,最后一条报“未知的名称或服务”,直接看下一章。
4. 专门处理“ping: www.baidu.com: 未知的名称或服务”:从根因到修复
前面准备工作的意义在这里就体现出来了。你按照上一章的顺序配置完,如果网络还是不通,大概率就卡在这一节。先把报错拆开看,然后按顺序排查和修复。
4.1 用两条命令快速定位问题层
在虚拟机里执行下面两组命令:
bash复制ping -c 4 223.5.5.5
ping -c 4 www.baidu.com
如果第一组能通,第二组报“未知的名称或服务”,问题100%出在DNS解析链路。这说明虚拟机能上网,但它无法把www.baidu.com这个域名翻译成IP地址。这个结论的重心要牢记,能省掉后面很多无谓的操作。
如果第一组都不通,那说明还轮不到DNS背锅,需要回到第三章检查IP、网关和网卡状态。很多时候系统会混淆这两类问题,但专业排查的逻辑是分层的:先确认底层IP通,再谈上层域名解析。
4.2 检查本机DNS配置是否生效
刚才我们在ifcfg-ens33文件里写入了DNS1和DNS2,但配置生效以后,系统还会生成一个文件叫/etc/resolv.conf,它是Linux系统真正读取的DNS配置。执行:
bash复制cat /etc/resolv.conf
正常情况应该看到类似下面的输出:
bash复制nameserver 223.5.5.5
nameserver 119.29.29.29
如果这个文件里的nameserver是空的,或者指向了一个错误地址,DNS解析就会失败。顺手还可以用dig或nslookup测试一下解析:
bash复制nslookup www.baidu.com
返回了IP地址,说明解析服务本身是好的。
4.3 如果resolv.conf内容正确但还是报错
有一种很常见的场景:/etc/resolv.conf内容明明写了nameserver 223.5.5.5,ping www.baidu.com还是报“未知的名称或服务”。这时候大多数人会陷入困惑,实际上还需要检查DNS服务器是否可达。
执行:
bash复制ping -c 4 223.5.5.5
如果DNS服务器的IP都不通,那无论resolv.conf写得多正确都没有用。这种场景往往是因为网关没配好,或者NAT转发有问题。我遇到过一台虚拟机里,网关填成了192.168.88.254,但VMware NAT网关实际上是192.168.88.2,导致虚拟机根本找不到出口。这就是为什么第三章要专门强调网关必须从虚拟网络编辑器里读。
4.4 修改了resolv.conf却不生效的深层原因
这里要讲一个CentOS用户几乎都会踩的坑。有些人网上搜到解决办法,直接去改/etc/resolv.conf,把nameserver改成其他地址,然后立刻ping www.baidu.com,发现确实通了。但重启虚拟机或者重启网络服务之后,又变回老样子。
问题根源在于,CentOS 7默认使用的网络管理工具是NetworkManager。它会接管/etc/resolv.conf文件,以ifcfg-*文件里配置的DNS为准来重写这个文件。也就是说,你直接改resolv.conf是治标不治本,NetworkManager一刷新就给你盖回去。
正确做法是在/etc/sysconfig/network-scripts/ifcfg-ens33里配置DNS1和DNS2。每次重启NetworkManager或者重启网络服务,它会自动从配置文件读DNS并更新resolv.conf。这也是我在第三章坚持把DNS写进网卡配置文件的原因。
如果确认配置了DNS1和DNS2,但resolv.conf还是没有正确生成,可以在配置文件末尾追加一行:
ini复制PEERDNS=yes
这个参数表示网卡激活时允许DHCP或配置中的DNS设置覆盖resolv.conf,保险起见可以加上。
4.5 临时生效但需要立刻恢复网络的办法
排查过程中如果网络处于断网状态,但你又急需临时上网,可以直接手动修改/etc/resolv.conf,把它变成如下内容:
bash复制nameserver 223.5.5.5
nameserver 119.29.29.29
保存后马上再试ping www.baidu.com。这个方法的作用是帮你临时恢复DNS解析,方便后续验证,但它不是持久化方案,重启之后极有可能失效。把这一步理解成“先用临时方案让网络跑起来”,核心修复还是要落回到网卡配置文件。
5. 更完整的排查链路:从网卡没起来到路由表丢失,逐步定位故障点
如果有人报“ping: www.baidu.com: 未知的名称或服务”,我的排查顺序是固定的。这套链路在多次实战里证明有效,可以让你不用从头乱猜,每一步都能缩小范围。
5.1 排查链路第一步:确认网卡与IP
在虚拟机里执行:
bash复制ip addr
先看有没有ens33这类网卡,再看是否有合法IP。如果只有127.0.0.1的回环地址,网卡明显没有启动。执行ifup ens33尝试拉起。如果起不来,检查网卡配置文件里ONBOOT=yes有没有写对。
5.2 排查链路第二步:确认路由表
执行:
bash复制ip route
正常会有一条默认路由,类似:
bash复制default via 192.168.88.2 dev ens33
如果没有这一条,数据包不知道该往哪个方向走,自然无法连接外部网络。这种情况先查GATEWAY是否填写正确,再确认网络配置文件有没有生效。一个常见坑是:系统里同时存在多个网卡配置文件,默认路由被指向了错误的网卡。修改完后systemctl restart network,再检查ip route。
5.3 排查链路第三步:逐层ping检测
按顺序执行下面三条命令:
bash复制ping -c 4 网关IP
ping -c 4 223.5.5.5
ping -c 4 www.baidu.com
我把每一层对应的结论列成表格,方便直接对照:
| 测试命令 | 结果 | 说明 |
|---|---|---|
| ping网关IP | 通,且网关即VMnet8 NAT网关 | 内网通路正常 |
| ping网关IP | 不通 | 网卡、IP、网关配置有误,回到第三章 |
| ping 223.5.5.5 | 通 | NAT转发正常,问题可能集中在DNS |
| ping 223.5.5.5 | 不通 | NAT转发或宿主机网络有问题,检查VMware服务和宿主机本身能否上网 |
| ping www.baidu.com | 通 | 网络完全正常 |
| ping www.baidu.com | 报“未知的名称或服务” | DNS解析问题,按第四章处理 |
这条链路基本覆盖了绝大多数场景。它的核心思想是先确认低层,再判断高层。底层不通的时候排查高层纯粹浪费时间。
5.4 排查链路第四步:检查Windows宿主机侧的VMware服务
很多人把精力全部放在虚拟机和CentOS里,却忘了VMware网络服务在Windows侧也有依赖。在Windows里按下快捷键Win + R,输入services.msc,找到以下服务:
VMware NAT ServiceVMware DHCP ServiceVMware Authorization Service
这三个服务的启动状态必须保证是“正在运行”。如果被禁用或者中断,虚拟机里的NAT和DHCP都会失效,表现就是虚拟机拿不到IP或者网关不通。启动方式改为“自动”,然后重启虚拟机里的网络服务。
这一步虽然听起来和“未知的名称或服务”无关,但NAT服务挂掉会导致整个虚拟网络瘫痪,后续所有配置都无从谈起。
5.5 排查链路第五步:检查防火墙是否拦截了DNS请求
CentOS自带的firewalld防火墙默认不会拦截DNS出站请求,但如果之前有人改过规则,或者安装了额外的安全软件,就可能拦截到DNS流量。快速验证方法是将防火墙直接停掉再测试:
bash复制systemctl stop firewalld
systemctl disable firewalld
然后执行ping www.baidu.com。如果能通,说明防火墙规则有问题。虽然这种场景不常见,但胜在操作快、排除效率高。
6. 写了几年配置教程才积累的经验和避坑提醒
最后一章分享几个真正实用的经验,都是我在实际配置和运维过程中总结出来的建议。
6.1 备份文件永远比手速快重要
网卡配置文件非常小,但修改它造成的影响非常大。每次开始改配置前,先复制一份备份:
bash复制cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens33.bak
走完排查流程后如果发现网络更差了,或者想回退,直接恢复备份文件就行。有一次我在CentOS 8的虚拟机里把网卡配置文件改成静态IP之后忘记检查NM_CONTROLLED参数,NetworkManager直接不接管网卡,整个虚拟机网络断了。还好有备份,两秒钟就回滚了。没有备份就只能靠记忆改回来,效率天差地别。
6.2 切忌在一个网卡配置文件里同时设置IPv4和IPv6
code复制# 错误的做法
IPADDR=192.168.88.131
IPV6ADDR=fe80::xxxx
有一种报错是配置文件写入了IPV6ADDR字段,但未配置正确的IPv6路由,导致NetworkManager报错。实际中至少我见过很多次。如果没有明确需要,建议把IPv6相关配置项保持默认,不要在配置文件里手动添加。专注把IPv4配好,对大多数场景已经足够。
6.3 CentOS 8/9的网卡配置方式有变化
如果你装的是CentOS 8或更新的版本,/etc/sysconfig/network-scripts/目录默认可能不存在ifcfg-*文件,因为系统不再默认使用这套传统方式,而是由NetworkManager直接管理。这时候最稳妥的办法是用nmcli命令行工具:
bash复制nmcli connection show
查看当前连接名称(通常叫ens33),然后修改:
bash复制nmcli connection modify ens33 ipv4.addresses 192.168.88.131/24
nmcli connection modify ens33 ipv4.gateway 192.168.88.2
nmcli connection modify ens33 ipv4.dns "223.5.5.5 119.29.29.29"
nmcli connection modify ens33 ipv4.method manual
nmcli connection up ens33
这套命令完全绕开了手写文件的步骤,直接把配置交给NetworkManager管理,而且不容易手滑写错格式。在CentOS 6、7上可以直接用文件方式,到了8、9就优先用nmcli。
6.4 验证网络连通性时,不要只ping一次
ping包有可能因为网络波动偶尔丢包,导致误判。我的习惯是每次至少发4个包,比如命令写成ping -c 4 www.baidu.com。如果全都通了,再确认一下返回的延迟是否正常。如果延迟高得离谱,比如几百毫秒以上,网络即便“通”了,实际使用体验也会很糟糕,这时候要检查是不是NAT模式占用了宿主机过多性能,或者宿主机本身网络不稳。
6.5 别忘了重启之后再次验证
这部分是经验中的经验:很多人配置完网络后当时测试一切正常,但隔天重启虚拟机又发现网络消失。原因基本集中在ONBOOT=no没改,或者NetworkManager与network服务冲突,导致网卡没有在开机时自动启动。配置完成后顺手重启一次虚拟机,确认重启后网络仍然正常,这才算真正搞定。
我自己给这些流程做了很多次总结,说实话,只要按照第三章的步骤把网络参数填对,第四章和第五章八成用不上。但一旦出了问题,有这套排查链路在,你就能像老手一样稳定定位,不再陷入“瞎试命令、越试越乱”的循环。
