拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

CentOS虚拟机固定IP配置指南:从VMware网络模式到实操详解

CentOS虚拟机固定IP配置指南:从VMware网络模式到实操详解

1. 为什么要给CentOS虚拟机配置固定IP

1.1 动态IP带来的那些坑

先说个场景:你装了台CentOS虚拟机,平时用DHCP自动分配IP,一切正常。某天重启一下机器,SSH连不上了,一看IP地址变了。你之前部署的Nginx、MySQL、Redis,所有配置里写的都是旧IP,全部作废。更郁闷的是,当你同时跑好几台虚拟机的时候,IP一变,整个测试环境全部乱套。

我在实际使用中碰到过更崩溃的场景:某次在虚拟机上搭了一套内网的代码仓库,第二天上班发现连不上了,排查了半天才发现是虚拟机的IP从192.168.88.128漂到了192.168.88.145。仓库配置里所有指向旧IP的镜像源、依赖包地址全部失效,光修复环境就折腾了一上午。从那以后,凡是装虚拟机,第一件事就是固定IP。

再一个很实际的问题:DHCP分配的IP有租期,CentOS默认的DHCP租期到了之后会续租,但续租不一定能拿到和原来一样的地址。尤其是在公司网络、宿舍路由器这类设备多的环境里,IP地址池紧张,很容易就被别人抢走了。虚拟机一多,IP冲突、抢租、地址漂移,都是家常便饭。

1.2 固定IP适合哪些场景

固定IP不是万能的,但它能解决绝大多数开发测试场景里的痛点。

  • 本机通过SSH/Xshell/MobaXterm远程连接虚拟机,IP不变才能把连接配置保存下来长期使用。
  • 虚拟机内部署了Web服务、数据库、消息队列等中间件,客户端配置里需要一个稳定的服务地址。
  • 用克隆方式批量创建虚拟机做集群实验(比如K8s、Hadoop),每一台都需要预先分配好独立的静态IP。
  • 局域网内其他设备要访问这台虚拟机提供的服务,固定IP是前提。

一句话总结:只要这台虚拟机不是一次性用完就扔的,建议直接固定IP。即使是临时测试机,固定IP也可以帮你省去每次启动后查IP的麻烦,毕竟ip addr敲来敲去也挺烦的。

2. VMware网络模式选择是最关键的一步

2.1 三种网络模式的区别

配置固定IP之前,必须先搞清楚VMware的三种网络模式。这一步选错了,后面配置文件写得再对也白搭。

VMware虚拟机的网络模式有三种:桥接模式、NAT模式、仅主机模式。

网络模式虚拟机与宿主机关系虚拟机能否访问外网外部设备能否访问虚拟机常见用途
桥接模式虚拟机像局域网里的一台独立主机能能需要虚拟机被局域网其他设备直接访问的场景
NAT模式虚拟机共享宿主机IP上网能不能直接访问最常见的模式,适合本机开发测试
仅主机模式虚拟机只能和宿主机通信不能不能隔离环境、安全测试

重点说NAT模式。这是大多数人装虚拟机时默认用的模式,VMware会自动创建VMnet8虚拟网卡,宿主机通过这块网卡和虚拟机通信。虚拟机对外网的请求由宿主机做NAT转发,外部设备摸不到虚拟机,但虚拟机访问宿主机、宿主机访问虚拟机都没问题。

桥接模式则是把虚拟机的网卡直接桥接到物理网卡上,虚拟机相当于和宿主机在同一网段里的另一台设备,直接占用局域网的一个IP地址。外部设备能直接访问虚拟机,但这也意味着你的局域网里多了一台设备,IP规划必须提前做好。

2.2 不同模式下的IP规划思路

选NAT模式的话,IP地址段要关注VMnet8的网段。打开VMware的"编辑"->"虚拟网络编辑器",选中VMnet8,可以看到子网IP通常类似192.168.88.0(不同版本可能不同),子网掩码是255.255.255.0。你的固定IP必须和这个网段一致,否则虚拟机访问不了外网。

NAT模式下,网关地址通常是X.X.X.2。这个值在虚拟网络编辑器的"NAT设置"里能看到,每个版本的VMware可能不一样。我见过有人机械地照搬别人的配置,网关写成了192.168.88.2,结果自己VMware的网关是192.168.88.2,那也是运气好。但如果你用的是新版本VMware,建议每次都进去看一眼。

桥接模式就更简单了,固定IP直接规划到宿主机所在局域网网段就行。比如你家的路由器网段是192.168.1.0/24,宿主机IP是192.168.1.5,那虚拟机可以设为192.168.1.88,网关指向192.168.1.1。前提是确保这个IP没有被其他设备占用。

有个很隐蔽的坑:NAT模式的VMnet8网段不要和局域网真实网段冲突。比如你家路由器是192.168.88.0/24,而你VMware的VMnet8恰好也是192.168.88.0/24,就会出现路由冲突,虚拟机网络要么时断时续,要么完全不通。遇到这种情况,直接在虚拟网络编辑器里把子网IP改成别的网段,比如192.168.99.0/24,重新配置一下就行。

3. 配置前的环境准备

3.1 虚拟机网络适配器设置

正式开始之前,先确认虚拟机的网卡模式。右键虚拟机->"设置"->"网络适配器",确保选了"NAT模式"(或者你规划好的桥接模式)。这里最常见的错误是装虚拟机的时候选了"仅主机模式",后面死活上不了外网,还以为是自己IP配错了。

还有一个小细节:移除不必要的网卡。有些人在虚拟机里手动添加了好几块网卡,每块网卡对应不同的网络模式,CentOS系统起来后,路由表和默认网关会混乱,配置固定IP的时候往往无从下手。我现在的习惯是:一台虚拟机只保留一块网卡,用什么模式就选什么模式,简单干净。

生产环境里我见过更复杂的做法:有人用NAT模式网卡跑业务流量,再用仅主机模式网卡做管理通道。这种设计有它的道理,但对于绝大多数学习、测试场景来说,一块NAT网卡就足够了,多块网卡只会增加排查难度。

3.2 查看CentOS环境与网卡信息

打开CentOS虚拟机,登录系统之后,先做三件事:

第一,确认系统版本。不同版本的CentOS,网络配置方式有差异。

cat /etc/redhat-release

第二,查看网卡名称和IP信息。

ip addr

第三,确认当前网络是否正常、默认路由是什么。

ip route

最常见的网卡名是ens33、ens160、eth0。新版本CentOS用的是规范命名(如ens33),老版本CentOS 6及以下用的是eth0。这个网卡名后面配置的时候要用到,建议记下来。

CentOS 7和CentOS 8/9的网络管理方式差别很大。CentOS 7默认用NetworkManager管理网络,配置文件在/etc/sysconfig/network-scripts/目录下,以ifcfg-开头命名。CentOS 8/9还引入了nmcli命令,配置文件也兼容,但推荐用nmcli操作。下面会分版本说明。

3.3 备份原有网络配置

操作之前备份是个好习惯,这是无数次踩坑之后总结出来的教训。在修改配置文件之前,先把原始文件复制一份:

cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens33.bak

备份文件不参与系统启动,只是留个后路。如果配置改坏了,可以直接复制回来恢复,不用重新装系统。

4. 一步步配置固定IP

4.1 CentOS 7固定IP配置过程

CentOS 7是最常见的选择,相关热搜词里也出现了"centos 7.9下载"“centos 7 innovus安装”等,说明这个版本在开发者和EDA领域里确实用得多。配置分四步走。

第一步:明确你的IP规划

假设VMware VMnet8网段是192.168.88.0/24,网关是192.168.88.2。我规划这台虚拟机使用192.168.88.100这个地址。DNS可以用公共DNS,也可以用网关注册的DNS,国内环境推荐用223.5.5.5、119.29.29.29这类公共DNS,解析速度快、不容易被污染。

注意:IP地址不要和VMnet8 DHCP分配的地址范围重叠。VMware默认的DHCP地址池通常是192.168.88.128到192.168.88.254(具体看虚拟网络编辑器里的设置),所以192.168.88.100这个地址即使DHCP再活跃也抢不到,用起来很安全。

第二步:编辑网卡配置文件

vi /etc/sysconfig/network-scripts/ifcfg-ens33

修改成下面的样子:

TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="none" 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-xxxx" DEVICE="ens33" ONBOOT="yes" IPADDR="192.168.88.100" PREFIX="24" GATEWAY="192.168.88.2" DNS1="223.5.5.5" DNS2="192.168.88.2"

这里有几个点要特别说明:

  • BOOTPROTO改成none或static都可以,none在某些版本上更稳定,不会触发多余的DHCP行为。
  • ONBOOT必须为yes,否则每次重启系统,这个网卡不会自动激活。
  • PREFIX="24"等价于NETMASK="255.255.255.0",两者写一个就行。
  • UUID是安装系统时生成的唯一标识,不用动它,保留原来的值。
  • GATEWAY必须和VMware NAT网段里的网关一致,这是外网能不能通的关键。

第三步:重启网络服务

CentOS 7的习惯是用systemctl重启网络,但要注意,这里有个版本差异。

systemctl restart network

如果这个命令报错,可以试试:

systemctl restart NetworkManager

还有另一种情况:服务器上装了NetworkManager,也启用了network服务,两个管理方式互相打架。我一般建议统一用NetworkManager管理,也就是重启NetworkManager。配置固定IP的话,可以确保NetworkManager不会在后台把配置改回去:

nmcli networking off && nmcli networking on

第四步:验证配置

ip addr show ens33 ping -c 3 192.168.88.2 ping -c 3 223.5.5.5

第一行确认IP是否是192.168.88.100,第二行确认网关通不通,第三行确认外网通不通。三个都正常,就说明配置成功了。

4.2 CentOS 8/9的差异

CentOS 8停止维护之后,很多人开始用CentOS 8 Stream或者转向其他发行版。相关热搜词里就有"centos 8 stream下载"“centos 8更换yum源”。如果你用的是CentOS 8/9,固定IP配置思路不变,但有两个新变化。

第一个变化是NetworkManager的优先级更高了。虽然/etc/sysconfig/network-scripts/目录下还能看到ifcfg文件,但官方已经不推荐手动编辑了,更建议用nmcli命令操作。

查看当前连接:

nmcli connection show

修改连接为静态IP:

nmcli connection modify ens33 ipv4.addresses 192.168.88.100/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

第二个变化是ifcfg文件里的参数兼容性。CentOS 8以后对某些参数(比如IPV6INIT)的处理方式略有调整,但如果你之前已经通过nmcli配置好了,再回看文件,会发现nmcli自动把对应字段写进了ifcfg。所以现在的建议是:CentOS 8/9直接用nmcli,别手动改文件,省的被NetworkManager回写覆盖。

不过有一种情况例外:如果你用的是纯命令行最小化安装的CentOS 8,并且故意禁用了NetworkManager,那手动改ifcfg文件依然有效。但这种情况较少见,这里不展开说。

5. 配置后的系统级确认

5.1 重启系统验证

仅仅systemctl restart network成功还不够,我强烈建议做一次完整的重启验证:

reboot

重启完成后重新登录,再次执行ip addr,确认IP还是192.168.88.100。这一步能验证ONBOOT=yes是否真的生效。如果重启后IP又变回了DHCP,多半是配置文件里BOOTPROTO没改干净,或者存在多个网卡配置文件互相干扰。

这里分享一个排查思路:如果你发现重启后网卡拿到的还是DHCP地址,可以去查一下NetworkManager的连接状态:

nmcli device status

看是不是有个"connection"还在尝试用DHCP连接这块网卡,如果有,nmcli修改连接为manual即可。

5.2 外部访问验证

本机验证通过了还不够,从宿主机侧再验证一下更稳妥。

在宿主机(Windows)打开终端:

ping 192.168.88.100 ssh root@192.168.88.100

如果你使用的是Xshell、MobaXterm这类工具,提前把SSH会话配置好固定保存。以后不管虚拟机重启多少次,这个会话永远有效,不会再因为IP漂移反复改配置。

提示:如果虚拟机开启了防火墙,外部ping和SSH可能会被拦。CentOS系统默认开了firewalld,建议在固定IP配置完成后同时放行SSH端口,以免后续连不上:

systemctl status firewalld firewall-cmd --permanent --add-service=ssh firewall-cmd --reload

如果是自己在虚拟机上测试,很多人会直接把firewalld关掉,这也是图省事,但生产环境别学。安全底线还是要有的。

6. 常见问题与排查技巧实录

6.1 高频问题的直接解答

问题现象根本原因解决方案
配完固定IP后外网不通网关写错,或DNS配置错误重点检查GATEWAY是否与VMware NAT设置一致,DNS改成公共DNS后再试
重启后IP又变回自动获取ONBOOT=yes未设置,或BOOTPROTO没改确认配置文件里两处关键参数
虚拟机网卡名称不是ens33系统版本不同,网卡命名规则不同用ip addr自己确认实际网卡名,别照抄教程里的ens33
宿主机能ping通,但其他局域网设备访问不了NAT模式下外网设备确实访问不了虚拟机换桥接模式,或配置端口转发
配置时提示"Device does not seem to be present"配置文件里的DEVICE名和实际网卡名不一致打开ip addr核对真实网卡名,修改配置文件中的DEVICE
固定IP设置成功后,DNS解析时好时坏DNS1和DNS2填写了不可达的地址改成223.5.5.5、119.29.29.29这类公共DNS

6.2 我踩过的一个典型坑

有一次给一台CentOS 7.9配固定IP,配置一切正常,网关也能ping通,但外网就是不通。排查了半天,最后发现是宿主机开启了多个虚拟网络适配器,VMnet8被改到了VMnet19,而系统默认还是走VMnet8。这种情况在VMware里创建多个虚拟网络之后很常见。

解决方法是,进入"虚拟网络编辑器",确认当前虚拟机用的是哪个VMnet,再在NAT设置里把网关地址记准。有时候你以为你配的X.X.X.2是对的,其实VMware的实际网关是X.X.X.1。记住我们前面说过的:NAT模式网关一般是X.X.X.2,但每个环境都不一样,打开设置看得一目了然。

6.3 快速定位网络问题的检查顺序

如果固定IP配完发现网络不通,按下面顺序检查,基本能解决90%的问题:

  1. 先检查本机网络:ip addr,看IP、掩码、网卡状态。
  2. 再检查网关:ping 192.168.88.2,不通就说明VMware网络配置或网卡模式有问题。
  3. 检查DNS:cat /etc/resolv.conf,确认DNS配置,再用ping 223.5.5.5测试纯外网链路。
  4. 最后检查路由:ip route,确认默认路由指向了正确的网关。

这个顺序其实就是网络排查的经典思路:从底层往上查,一层层排除。不要一上来就去看防火墙、改DNS,那只会把自己绕晕。

7. 清理环境与进一步延伸

7.1 删除和克隆时的IP处理

配置好一台虚拟机之后,很多人会用它做模板来克隆。克隆出来的CentOS虚拟机网卡UUID和原始机器一样,IP也相同,会导致两台机器IP冲突。这是相关热搜词里"克隆故障"类问题的高发点。

克隆之后一定要修改新虚拟机的IP,并且删除ifcfg文件里的UUID行,让系统下次启动时重新生成UUID。还要记得修改CentOS的hostname,避免和模板机重名给后续管理带来混乱。

7.2 固定IP与DHCP保留的替代方案

如果你用的是桥接模式,还可以在路由器上配置DHCP保留(DHCP Reservation),把某个IP永久绑定给虚拟机的MAC地址。这样虚拟机依然用DHCP自动获取,但每次拿到的都是同一个IP。好处是不用进虚拟机改任何配置文件,坏处是每台新虚拟机都要去路由器上绑定一次,管理起来比较繁琐。

我个人更推荐直接在虚拟机里配置静态IP,因为这种方法不依赖外部设备,换一台宿主机、换一个网络环境,只要IP规划和网段匹配,还能继续用。而DHCP保留方案一旦换了个路由器,就得重新绑定。

我在实际使用中发现,配置固定IP这件事,看似简单,但涉及的细节非常散。网卡命名、VMware网络模式、网关地址、DNS设置、防火墙策略,每一样都可能成为断网的元凶。但只要按上面说的思路走一遍,多数问题都能当场解决。这中间最重要的是先明确自己的网络拓扑,再动手改配置,不要一上来就复制网上的配置命令。最后再分享一个小技巧:改完网络配置后别急着重启机器,先执行一下nmcli connection up ens33(CentOS 8/9)或systemctl restart network(CentOS 7),确认网络功能正常后再重启。这样即使配置有问题,你也还在一个可以随时改回来的状态里,不会因为重启后连不上虚拟机而抓狂。记住,退路永远是给自己的从容。

返回列表