虚拟机IP地址总是变来变去,根源在于默认的DHCP动态分配机制,想让IP固定,最直接的办法是关闭DHCP,改为手动配置静态IP地址,具体操作取决于你用的虚拟机软件和客户机系统。
为什么虚拟机IP总变,固定IP到底卡在哪
虚拟机网络配置看着选项多,其实核心就三种模式:桥接模式、NAT模式、仅主机模式,不管选哪种,IP漂移的“罪魁祸首”基本都是虚拟网卡的DHCP租约到期后重新分配,VMware Workstation和VirtualBox默认都开启了自带DHCP服务,每次虚拟机重启或休眠唤醒,网卡都可能重新租约,拿到一个新地址,这就是你连SSH老断、配置文件里IP对不上的主要原因。
行业共识认为,生产环境里给服务器用静态IP是基本功,因为数据库连接、集群通信、端口转发都依赖固定地址,虚拟机和物理机在这点上的需求完全一样,只是虚拟机多了一层虚拟网卡的配置门槛。
先分清你的虚拟机网络模式
别急着敲命令,先看清自己现在用的是什么模式,在VMware里,右键虚拟机 -> 设置 -> 网络适配器,能看到三选一;VirtualBox则在 设置 -> 网络 里选“连接方式”,判断方法很简单:
- 桥接模式:虚拟机像一台独立电脑,直接占你局域网的一个IP,和物理机同一网段,这种模式最适合固定IP,因为你的路由器可以给它分配保留地址。
- NAT模式:虚拟机躲在宿主机后面,共享宿主机IP上网,VMware里一般对应VMnet8网卡,此模式下虚拟机通常使用192.168.x.x网段,由VMware的DHCP分配。
- 仅主机模式:虚拟机只能和宿主机通信,对应VMnet1网卡,默认也没法访问外网,适合本地测试,IP同样由虚拟DHCP下发。
如果你只是本地开发测试,固定IP的优先级其实没那么高,但你要是跑着Web服务、数据库或者定时任务,那IP一变等于服务地址失效,排查起来相当头疼。
VMware虚拟机静态网配置:两种方法彻底锁死IP
VMware的配置思路有两条路:改虚拟机内部系统配置,或者改VMware虚拟网络设置,前者最通用,后者更省心。
手动配置Linux虚拟机静态IP(以Ubuntu 22.04为例)
这是最传统的路子,在虚拟机里把网卡配置文件改成静态,Ubuntu 18.04之后用的是netplan,配置文件在

/etc/netplan/目录下,一般是01-network-manager-all.yaml或50-cloud-init.yaml。
具体操作步骤:
- 打开终端,输入
sudo nano /etc/netplan/01-network-manager-all.yaml(不同版本文件名可能有差异,用ls /etc/netplan/确认) - 改成:
network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: no
addresses:
- 192.168.10.100/24
routes:
- to: default
via: 192.168.10.1
nameservers:
addresses: [114.114.114.114, 8.8.8.8]
注意ens33是你的网卡名,用ip addr命令查看确认,别照抄,网关务必和VMware虚拟网络设置的网关一致,否则上不了网。
- 保存后执行
sudo netplan apply让配置生效 - 输入
ip addr确认IP已经变成192.168.10.100
这套做法的缺点是,一旦虚拟机换了网络环境(比如从家里拿到公司),这个IP可能和别的设备冲突,需要手动改回DHCP,但本地测试场景下,静态IP非常稳定。
修改VMware虚拟网络DHCP设置,固定分配
VMware提供了更“傻瓜”的方案直接改虚拟网卡的DHCP分配规则,让每次分配的IP都一样,这在编辑 -> 虚拟网络编辑器里操作:
- 打开虚拟网络编辑器,找到当前虚拟机用的网卡(NAT模式对应VMnet8,桥接模式对应桥接到你物理网卡的那个)
- 点击“NAT设置”,记住网关IP,比如192.168.10.2
- 回到主界面,点击“DHCP设置”,这里有个“起始IP地址”和“结束IP地址”範圍,你可以把范围缩成一个固定IP,比如192.168.10.100 到 192.168.10.100
这样一来,DHCP租约每次都给同一个地址,但有个细节要注意:若网卡原本的IP不在此范围内,需先把虚拟机改成DHCP自动获取,让它拿到租约后你再改回手动也行,或者直接用下面方法。
如果你用的是桥接模式,直接把虚拟机的IP设置为和物理机同网段且没人占用的地址即可,比如物理机是192.168.1.100,虚拟机就设192.168.1.101,网关填192.168.1.1,这种场景更贴近“局域网虚拟机IP固定”的需求,不用碰VMware的DHCP设置。
VirtualBox静态IP配置与VirtualBox固定IP设置
VirtualBox的默认NAT模式和VMware逻辑类似,但它的“端口转发”功能更适合本地开发,要是想让IP固定,主要还是靠改虚拟机内系统的配置。

VirtualBox中把系统改为静态IP
在VirtualBox里,如果你用的是NAT模式,虚拟机的IP一般是10.0.2.15,网关是10.0.2.2,注意这个网段和VMware完全不一样,改静态IP时,网关必须填10.0.2.2,DNS可以填8.8.8.8或宿主机IP。
如果用的是桥接模式,操作和VMware桥接类似,直接参照上面Ubuntu的netplan配置,把地址改成局域网内没人用的IP即可。
VirtualBox的“仅主机网络”固定IP方案
VirtualBox有个“主机网络管理器”(全局工具里),可以创建仅主机的虚拟网卡,默认网段一般是192.168.56.0/24,在这个模式里,宿主机固定占用192.168.56.1,虚拟机手动设置为192.168.56.100之类的即可,几乎不会冲突,缺点是没有外网访问,但适合做集群内网通信测试。
Windows虚拟机固定IP怎么弄
Windows系统的虚拟机同样面临IP漂移,但配置路径更直观,在图形界面里就能完成。
- 打开Windows虚拟机,进入 控制面板 -> 网络和共享中心 -> 更改适配器设置
- 右键以太网适配器 -> 属性 -> 选择“Internet协议版本4(TCP/IPv4)”
- 改为“使用下面的IP地址”,填上你规划的地址、掩码、网关
- 首选DNS服务器建议填114.114.114.114或223.5.5.5,备用DNS填8.8.8.8
Windows的静态IP生效是即时的,通常不用重启网卡命令,但偶尔需要ipconfig /renew刷新一下,要是你开启了Hyper-V虚拟化平台,管理器的虚拟交换机设置里也可以保留静态IP。
配置完验证与常见故障排查
固定IP配置完后不要直接关掉,花两分钟验证一下,能省下后面一堆麻烦。
| 验证命令 | 预期结果 |
|---|---|
| ip addr(Linux) / ipconfig(Windows) | 显示你手动设置的IP地址 |
| ping 宿主机IP | 能通,说明虚拟网卡正常 |
| ping 网关IP | 能通,说明路由正常 |
| ping 114.114.114.114 | 能通,说明DNS和出网正常 |
| nslookup baidu.com | 能解析出IP,说明DNS配置正确 |
常见问题基本集中在三个地方:
- 网关写错:虚拟机内网关必须和虚拟网络编辑器的网关一致,VMware NAT的网关在NAT设置里看,VirtualBox的在NAT模式下默认10.0.2.2。
- IP冲突:你手填的IP被同网段其他设备占用,先ping一下这个IP,如果有响应说明被占用了,换一个地址。
- service network restart失败:有些Linux发行版需要重载配置文件,Ubuntu用
sudo netplan apply,CentOS用systemctl restart network。

还有个很多人忽略的点:验证虚拟机重启后IP是否保持不变,你可以执行reboot命令,重启后再看IP地址,确认没变才算大功告成。
关于虚拟机IP固定的几个问答
虚拟机改成静态IP之后,重启系统就失效了怎么办?
大概率是配置文件没生效或者被NetworkManager接管了,Ubuntu的netplan有些版本和桌面版的NetworkManager冲突,需要改/etc/netplan/下配置时同时关闭NetworkManager,或者在配置里指定renderer: NetworkManager,改完执行sudo netplan apply确认无报错,如果你用的是CentOS,检查/etc/sysconfig/network-scripts/ifcfg-ens33里的ONBOOT=yes是否带上,不带这行网卡不会自动启动,配置自然不生效。
VMware虚拟机的NAT模式固定IP后,虚拟机连不上外网是什么原因?
先检查是否配置了正确的网关和DNS,NAT模式下网关就是虚拟网络编辑器里的“NAT设置”里的网关,一定要保持一致,NAT模式的DNS可以填114.114.114.114,然后试着把宿主机上的VMware NAT Service服务(在Windows服务管理器里)重启一下,有时候这个服务挂了,所有NAT模式的虚机都会断网,配合虚拟网络编辑器里的“恢复默认设置”有时也能解决,但这会重置所有自定义配置,别乱点。
局域网里其他电脑访问不到我的虚拟机静态IP,为什么?
如果虚拟机用的是NAT模式,那局域网内的其他电脑天然就访问不到,因为NAT模式是单向的,只有虚拟机访问外网,解决办法是用桥接模式,把虚拟机和你的物理机放到同一个网段,然后用静态IP地址绑定到局域网里的空余地址,另一种思路是给宿主机加一条端口转发规则,把物理机的某个端口转发到虚拟机的固定IP,这样外部就能通过宿主机IP和端口来访问虚拟机服务,不过这事得在虚拟网络编辑器或路由器上做。