CentOS 7虚拟机装好了,进入系统第一件事就是配置网络。很多人卡在第一步:ping www.baidu.com死活不通,报错信息换来换去,就是找不着原因。这种场景我见了太多次,几乎每个刚接触虚拟机装Linux的人都会在"配置网络"这一步栽跟头。说实话,这件事本身不难,难的是很多人根本不了解虚拟机的网络到底是怎么转起来的,自然也不知道该从哪里排查。
这篇文章我就把"CentOS 7虚拟机配置网络"完整讲透:三种网络模式怎么选、VMware的虚拟网卡怎么规划、CentOS 7系统里网卡配置文件应该怎么改,以及最常见的"ping不通百度"问题到底卡在哪一环。内容适合刚装好虚拟机还没配通网络的新手,也适合已经能上网、但想改成固定IP、搭实验环境的人。后面所有步骤都是我反复操作过的,照做基本一次能成。
1. 动手前必须搞懂的三种虚拟机网络模式
1.1 三种模式的核心区别
VMware里创建虚拟机时,网络连接类型默认有三档:桥接模式、NAT模式、仅主机模式。很多人在向导页面直接点了"下一步",根本没留意这个选项,结果后面配置网络的时候一脸懵。花两分钟搞清楚这三个模式,后面能少走很多弯路。
用不严谨但很好理解的方式说:
- 桥接模式(Bridged):虚拟机直接"插"到你的局域网里,跟宿主机一样拥有一个局域网IP。它最大的特点是虚拟机可以和局域网内所有设备互相访问。比如家里路由器是 192.168.1.1,宿主机是 192.168.1.100,桥接模式下虚拟机可以分配到 192.168.1.101 这样的地址。前提是路由器得有多余的IP能分配,而且虚拟机和宿主机实际处于同一个二层网络里。
- NAT模式(Network Address Translation):虚拟机躲在宿主机后面上网。VMware会创建一个私有网段,比如 192.168.88.0,虚拟机在这个网段里分IP,然后通过宿主机"代理"访问外网。虚拟机跟外网通信时,别人看到的都是宿主机的IP。
- 仅主机模式(Host-Only):虚拟机只能和宿主机通信,完全不能访问外网,一般用于隔离测试或纯本地实验,日常使用频率不高。
选择模式时别只看名字,要看你到底想干什么。仅仅是让虚拟机上网、装软件、跑服务,NAT模式是最省心的;想模拟一台跟宿舍或公司局域网里其他电脑平等的设备,或者要让局域网其他设备直接访问虚拟机里的服务,再考虑桥接。
1.2 为什么推荐用NAT模式配固定IP
三种模式我都长期用过,做实验、搭服务、学Linux命令,我强烈推荐NAT模式。原因有三个。
第一,NAT模式不依赖外部网络环境。桥接模式依赖路由器DHCP,如果你所在的网络没有DHCP、不允许新增设备,或者网段冲突(比如公司网段恰好也是VMware默认的192.168.x.0),桥接模式很容易上不了网。NAT模式下虚拟机网络完全由VMware自己管理,跟外部物理网络隔离,稳定性高得多。
第二,NAT模式下宿主机能稳定访问虚拟机。桥接模式下虚拟机IP可能被外部DHCP重新分配,一旦变了,用SSH连接或者浏览器访问服务时,IP也要跟着改。NAT模式下手动把虚拟机IP固定成VMnet8网段里的某个值,只要VMware的虚拟网卡不动,IP永远不变。
第三,NAT模式天然隔绝了外部设备直接访问虚拟机。虚拟机里的实验环境不会直接暴露给局域网其他设备,安全性更好,对新手也更友好。我个人的习惯是:平时学习、搭服务、练手一律用NAT模式;只有需要让同网段其他电脑直接访问虚拟机上的服务时,才切桥接模式。
2. 规划VMware虚拟网络:VMnet8网段是关键
2.1 虚拟网络编辑器里到底有什么
选好NAT模式之后,打开VMware菜单栏的"编辑" -> "虚拟网络编辑器",会看到几个VMnet开头的虚拟网络:
- VMnet0:默认桥接模式
- VMnet1:默认仅主机模式
- VMnet8:默认NAT模式
关键就在VMnet8。NAT模式下,数据流的走向是:虚拟机 -> VMware NAT服务 -> 宿主机真实网卡 -> 互联网。VMnet8就是连接虚拟机和宿主机之间的一台虚拟交换机。很多人只知道在虚拟机里改IP,却不知道VMware这边也有一个网段需要同步,这就是配置失败的根源。
2.2 子网IP、网关、DHCP三个参数的关系
在虚拟网络编辑器里选中VMnet8,下方有"子网IP"、"NAT设置"、"DHCP设置"三个入口。默认配置通常长这样:
- 子网IP:192.168.x.0,子网掩码 255.255.255.0
- NAT网关:192.168.x.2
- DHCP分配的地址范围:192.168.x.128 到 192.168.x.254
这里的"x"是VMware安装时随机生成的,每台电脑都可能不一样。物理世界里,一个局域网需要网关、子网掩码、IP地址;虚拟机世界也一样,宿主机在VMnet8这个虚拟网段里通常占用 192.168.x.1,网关固定在 192.168.x.2。你给CentOS 7配置静态IP时,写进去的GATEWAY必须和虚拟网络编辑器里的NAT网关完全一致,否则虚拟机连宿主机都找不到。
2.3 我的固定IP规划习惯
我建议把VMnet8子网IP固定成一个自己熟悉的网段,比如 192.168.100.0。这样以后看到这个网段的IP,就知道是虚拟机环境,不会跟物理网络混淆。修改方法很简单:在虚拟网络编辑器里选中VMnet8,把子网IP改成 192.168.100.0,然后点"NAT设置",把网关设为你喜欢的值,比如 192.168.100.2。
改完之后,建议关掉这个网段的DHCP,或者把DHCP地址池缩小。原因很实在:固定IP比动态IP稳定,重启虚拟机和宿主机后IP不会变,SSH连接、Web服务、K8s集群实验都依赖固定IP。另外,如果同网段的DHCP范围很大,你还留了一堆自动获取地址的虚拟机,可能会和其他手动指定的IP产生冲突。
注意:修改VMnet8子网IP之前,如果虚拟机已经安装过系统并且配置过IP,系统里的网关、IP都要跟着改,不然重启后虚拟机直接断网。建议先把虚拟机关机再修改,改完再开机,避免系统运行中网络状态错乱。
3. CentOS 7网卡配置:从定位网卡到改配置文件
3.1 先找到网卡接口名称
进入CentOS 7系统,打开终端,输入:
ip addr你会看到类似 lo、ens33、ens160 这样的接口。CentOS 7在VMware虚拟机里最常见的网卡名是 ens33,某些版本或者自定义安装过的也可能是 ens160。这个名称后面要用,别搞错了。
如果输出里只有 lo 没有其他网卡,说明虚拟机创建时可能根本没添加网络适配器,或者网卡驱动没加载。这种时候先去检查虚拟机设置里的"网络适配器"是否存在,再回来执行ip addr。不要上来就改配置文件,命名都对不上,后面全是白忙活。
3.2 用vi编辑网卡配置文件
CentOS 7的网卡配置文件在 /etc/sysconfig/network-scripts/ 目录下,文件名叫 ifcfg-网卡名。以 ens33 为例:
vi /etc/sysconfig/network-scripts/ifcfg-ens33进去之后,你会看到类似这样的默认内容:
TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=dhcp DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=xxxx-xxxx-xxxx DEVICE=ens33 ONBOOT=no几个关键参数逐个说:
BOOTPROTO=dhcp:表示启动时自动获取IP。要配静态IP,改成static。ONBOOT=no:表示开机时不启用网卡。这是超多人踩的坑,不改成 yes,重启系统后网卡根本不会起来,连IP都没有。NAME和DEVICE:必须和实际网卡名一致,改成 ens33 或者你机器上对应的名字。IPADDR:你要给这台虚拟机分配的固定IP,比如 192.168.100.100。NETMASK:子网掩码,C类网段写 255.255.255.0。GATEWAY:网关,必须和VMware NAT设置里的网关一致,比如 192.168.100.2。DNS1/DNS2:DNS服务器。我习惯把DNS1写网关地址,DNS2写公共DNS。
按照我的规划,完整配置文件这样写:
TYPE=Ethernet BOOTPROTO=static NAME=ens33 DEVICE=ens33 ONBOOT=yes IPADDR=192.168.100.100 NETMASK=255.255.255.0 GATEWAY=192.168.100.2 DNS1=192.168.100.2 DNS2=223.5.5.5保存退出后,重启网络服务。
3.3 重启网络服务与常见状态检查
CentOS 7重启网络服务用:
systemctl restart network执行完不要急着去ping百度,按顺序检查:
ip addr show ens33这里会看到网卡上是否绑定了 192.168.100.100,状态是否为UP。然后ping一下网关确认底层链路:
ping -c 4 192.168.100.2再ping一下外网IP确认是否出得去:
ping -c 4 223.5.5.5最后再ping域名:
ping -c 4 www.baidu.com这四个步骤全通,网络就算彻底配好了。哪一步不通,就接着往下看排查部分。顺便提一句,CentOS 7默认装有NetworkManager,它和network服务偶尔会打架。如果配置文件改了之后重启不生效,可以试试停掉NetworkManager:
systemctl stop NetworkManager systemctl disable NetworkManager systemctl restart network这一步建议在确认是NetworkManager干扰时再执行,因为有些环境还依赖它做网络管理。
4. CentOS 7虚拟机ping不通百度?按顺序排查
4.1 先按链路的四个环节自查
排查网络问题最忌讳瞎试。我的顺序是:网卡本身 -> 网关 -> 外网IP -> DNS。按这个链路一步步走,问题出在哪一环一目了然。
第一步查网卡。ip addr show ens33如果显示没有IP,大概率是ONBOOT没改或者BOOTPROTO还是dhcp。这种情况直接把配置文件改对,systemctl restart network。如果网卡有IP,但显示DOWN,试着执行ip link set ens33 up手动拉起网卡。
第二步查网关。ping -c 4 192.168.100.2如果不同,说明虚拟机和宿主机之间的链路有问题。这时候去Windows宿主机上打开服务管理器(services.msc),查看 VMware NAT Service 和 VMware DHCP Service 是否正在运行。这两兄弟没启动,NAT模式下虚拟机一定上不了网。
第三步查外网IP。ping -c 4 223.5.5.5如果通,说明外网链路没问题,继续查DNS。如果不通,多半是路由或防火墙问题,执行ip route查看默认路由是否指向网关。如果默认路由缺失,手动加一条:
ip route add default via 192.168.100.2 dev ens33第四步查域名。ping -c 4 www.baidu.com如果IP通但域名不通,可以确定是DNS问题。检查 /etc/resolv.conf 里是否有DNS配置,或者在ifcfg文件里检查 DNS1/DNS2 是否写对。不要迷信只写网关就能解析,有些环境网关确实不提供DNS转发,DNs2写公共DNS更保险。
4.2 我实际操作中踩过的几个坑
坑一:VMware NAT服务被优化软件关掉。有些人电脑上装了各种"加速""优化"工具,会把VMware的后台服务当成无用进程停掉。现象就是虚拟机里什么都是对的,但ping任何外部地址都不通。到服务管理器看看 VMware NAT Service 状态,设成自动启动。
坑二:CentOS 7的firewalld防火墙拦截。虽然firewalld默认不挡ping,但挡你后续要开启的服务很常见。排查阶段我习惯先临时关闭:
systemctl stop firewalld确认不是防火墙问题后,再按需放行端口,而不是一直关着。
坑三:Windows防火墙拦截VMware转发。VMware NAT服务需要借助宿主机网络栈转发,Windows自带防火墙有时会拦截。最直接的验证方法:临时关闭Windows防火墙(记得之后恢复),如果通了,就去防火墙高级设置里放行VMware相关程序。
坑四:克隆虚拟机后网卡不识别。用VMware的克隆功能复制出来的虚拟机,网卡可能是ens37这种新名字,而且没有对应配置文件。解决办法是复制原网卡配置文件并改名,或者删掉ifcfg文件里的UUID,让系统重新生成。
坑五:重启后IP又变回DHCP。配置文件明明改成了static,重启却回到自动获取,十有八九是NetworkManager接管了网卡。禁用NetworkManager后重启network服务,问题基本能解决。
4.3 排查速查表
| 现象 | 可能原因 | 排查命令/操作 |
|---|---|---|
| 完全没有IP | ONBOOT=no 或配置没生效 | 检查ifcfg文件,重启network |
| 能ping网关但ping不通百度 | DNS或路由问题 | 检查DNS1/DNS2,执行ip route |
| ping所有外网IP都不通 | VMware NAT服务未启动 | 查看Windows服务VMware NAT Service |
| 虚拟机间互通但上不了外网 | 网关配置错误 | 检查GATEWAY是否与NAT网关一致 |
| 重启后IP变回DHCP | NetworkManager接管 | systemctl disable NetworkManager |
| SSH连接超时 | 防火墙拦22端口 | firewall-cmd --add-port=22/tcp --permanent |
| 宿主机访问虚拟机Web超时 | 虚拟机防火墙拦80/443 | firewall-cmd --add-port=80/tcp --permanent |
这张表我每次排查看一眼,基本不会漏。排查的时候别急躁,链路检查是线性的,按顺序来十分钟就能定位问题。
5. 固定IP配置完成后的几个实用延伸
5.1 用SSH远程管理虚拟机
网络通了、IP也固定了,下一步就是接上SSH,彻底告别每次都打开VMware窗口操作的麻烦。CentOS 7默认可能没装openssh-server,先装一下:
yum install -y openssh-server systemctl start sshd systemctl enable sshd然后确认22端口在监听:
ss -lntp | grep 22宿主机上用XShell、MobaXterm或者命令行ssh都能直接连。注意虚拟机防火墙如果开着,需要放行22端口:
firewall-cmd --add-port=22/tcp --permanent firewall-cmd --reloadSSH通了的体验是完全不一样的,你可以把VMware窗口最小化,用宿主机终端直接操作虚拟机,复制粘贴也方便得多。固定IP在SSH场景下价值很大,不然哪天IP变了,你还要去VMware窗口里现查地址。
5.2 宿主机浏览器直接访问虚拟机里的Web服务
配完网络很多人会顺手在虚拟机里装Nginx、Apache练手。我在虚拟机里启动Nginx之后,直接在宿主机浏览器访问虚拟机的IP:
yum install -y nginx systemctl start nginx浏览器打开 http://192.168.100.100 就能看到Nginx默认页面。如果打不开,除了前面说的防火墙问题,还有可能是SELinux的干扰。SELinux在CentOS 7里默认Enforcing,会影响Nginx这类服务访问。排查时可以临时宽松:
setenforce 0如果确认是SELinux的问题,可以按服务写allow规则,或者直接把SELinux配置成permissive(改 /etc/selinux/config 里的 SELINUX=permissive)。生产环境不建议直接关闭SELinux,但实验环境怎么方便怎么来。
这一步是很多人成就感最强的时刻:虚拟机里的服务,宿主机浏览器直接打开,说明网络配置真的到位了。
5.3 顺手把yum源换成国内源
网络通了之后第一件事,我建议把yum源换成国内镜像,不然在CentOS 7上装软件包的速度会很感人。操作方法:
# 备份原源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak # 下载阿里源,注意CentOS 7的仓库文件路径 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo # 清理缓存并生成新缓存 yum clean all yum makecache执行完之后,yum install的速度会明显提升。注意CentOS 7已经停止维护,部分镜像站的源可能已经归档,建议先 curl 确认能下载到文件后再替换。如果阿里源不可用,也可以试试清华源:
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.tuna.tsinghua.edu.cn/help/centos/清华源的路径结构有变化,最好先去官网看一下最新的repo内容再替换。
换源这个操作其实也依赖网络配置。如果你的虚拟机没联网,curl是下载不了repo文件的,所以一定要先把网络搞定再换源,这个顺序不能反。
最后再分享一条我的使用习惯
配置虚拟机网络这件事,最核心的就是把三个IP的关系理清楚:VMnet8虚拟网段的子网IP、虚拟机的固定IP、NAT网关IP。三者都在同一个网段里,网关统一指向VMware NAT设置里的地址,基本不会出问题。我自己的习惯是:新装一台CentOS 7,先把VMnet8网段固定成 192.168.100.0,再给每台虚拟机分一个固定IP,并写一张小表格记录用途。比如 192.168.100.100 是Nginx实验机、192.168.100.101 是数据库实验机,后面搭集群或者做测试都省心得多。这套方法用熟了,从创建虚拟机到能ping通百度,五分钟之内就能完成。希望这篇文章能帮你少走点弯路。