虚拟机获取不到DHCP地址时,直接排查VMware或VirtualBox的虚拟网络服务、网卡模式和系统防火墙这三个环节,绝大多数情况几分钟内就能解决。
先搞清楚DHCP失效的常见场景
虚拟机里看网络图标一直在转,右下角黄色感叹号,登录系统后ipconfig(Windows)或ip addr(Linux)全是169.254开头的地址,这个169.254就是自动私有地址,说明DHCP请求根本没回应。
造成这个结果的原因通常在三个层面:
- 宿主机上的虚拟网络服务没跑起来
- 虚拟机的网卡模式和虚拟交换机没有对上号
- 客户机操作系统自身的DHCP客户端进程出了问题
第一步永远是确认虚拟网络服务,不是去虚拟机里改配置,这就是大多数人绕弯子的地方。
虚拟机DHCP获取失败怎么解决?先看虚拟网络服务
VMware和VirtualBox都有独立的网络服务进程,装完虚拟机软件后,这些服务默认开机自启,但某些优化软件、安全管家会把这些服务当成不必要的后台程序关掉,DHCP地址自然就分不下来了。
VMware用户的操作路径
在Windows宿主机上按Win + R输入services.msc,找到下面几个服务:
VMware DHCP ServiceVMware NAT ServiceVMware Authorization Service
逐一确认这些服务的状态,如果是“已停止”,右键点击并选择“启动”,启动后建议再右键查看属性,把启动类型改成自动,免得下次开机又出幺蛾子。
服务全部跑起来后,打开VMware菜单栏的编辑→虚拟网络编辑器,当看到提示“需要管理员权限”时点确定,在弹出来的这个界面里,留意右下角的还原默认设置按钮如果之前误改过虚拟交换机配置,直接点它恢复出厂。
还原完成后,选中VMnet8(NAT模式)那一行,确认底部的使用本地DHCP服务将IP地址分配给虚拟机复选框处于勾选状态。
VirtualBox用户的操作路径
VirtualBox的虚拟网络由VBoxSDS服务承载,同样打开services.msc,检查服务名中包含VirtualBox的那几项,VirtualBox 6.0以上版本,确保VirtualBox DHCP Server相关的进程没有缺失,如果服务列表里压根找不到VirtualBox相关服务,直接彻底卸载重装软件。
服务确认无误后,打开VirtualBox主界面,选中虚拟机→设置→网络,看一下连接方式的下拉框,如果你是家用宽带、没有特殊办公网络需求,通常选NAT或桥接网卡即可。
VMware虚拟机NAT模式设置的网卡挂接细节
服务层面的问题排除后,DHCP还是不通,下一个要排查的就是网卡配置了。
同一台虚拟机的多块网卡冲突
业内专家指出,虚拟机 DHCP 获取失败里相当一部分是人为在虚拟机里加了第二块、第三块网卡导致的,Windows的虚拟机装了两块网卡,一块NAT、一块仅主机模式,系统路由表会变得乱七八糟,DHCP客户端组件也会出现竞争。
打开虚拟机的网络适配器设置页,只保留一块启用状态的网卡,其余全部“移除”,再开机测试。
网卡类型选错了
虚拟机的网卡类型常见的选项有Intel PRO/1000、E1000(Ethernet)、VMXNET3、virtio-net等,某些精简版的Linux镜像只带了特定型号的驱动,选错了驱动加载不了,链路层都是断的,更别提DHCP了。
不确定驱动支持情况时,先切换到兼容性最好的Intel PRO/1000 MT(VMware)或Intel PRO/1000 MT Desktop(VirtualBox)测试,确认能拿到DHCP地址后,再改装半虚拟化网卡追求性能。
直接查看虚拟网络映射关系
VMware用户在虚拟网络编辑器里,能看到VMnet信息下面的类型,确认VMnet8的NAT类型和你的虚拟机网络适配器设置一致,可以用一个连接检测来快速验证链路状态:
- 在虚拟机里执行
ping 192.168.x.1(.1通常是NAT网关) - 如果网关能通,说明二层三层链路没问题,问题在DHCP服务本身
- 如果网关不通,接着检查IP地址是不是还是169.254开头的自动地址
客户机操作系统内部的DHCP防火墙拦截
如果是Windows客户机,别忘了防火墙可能直接把DHCP的UDP 67/68端口拦了。
到控制面板检查Windows Defender防火墙,点击允许应用或功能通过Windows Defender防火墙,确认文件共享和网络发现相关的入站规则处于启用状态,这个选项在默认状态下是只放行专用网络,如果你在虚拟机里误选了公用网络,DHCP请求一样会憋在网卡里出不去。
Linux客户机方面,用NetworkManager桌面的系统,直接右上角网络图标菜单里关闭再打开以太网,如果用systemd-networkd管理网络,执行systemctl restart systemd-networkd后观察日志:
journalctl -u systemd-networkd -f
虚拟机静态IP配置方法的临时备选方案
步骤全部走完还是拿不到地址,作为一个临时可用方案,给虚拟机手动配置静态IP能够救命,这不算根治,但干活要紧。
进入VMware虚拟网络编辑器,点NAT模式那栏的NAT设置,在弹出的框里能看到子网IP范围,比如子网是168.88.0,子网掩码255.255.0,给虚拟机设一个不在DHCP地址池范围内的固定IP,比如168.88.199,网关填168.88.2(VMware NAT网关通常是.2),DNS填5.5.5或114.114.114。
设置完能上外网了,再回头查为什么DHCP服务起不来,思路会更清楚。
虚拟机为什么获取不到IP地址的最终排查顺序
遇到这个问题,按下面这个顺序来滴水不漏:
- 先确认宿主机能正常上网,宿主机断网了虚拟机必然拿不到公网可用地址
- 打开
services.msc确认虚拟网络服务已启动 - 打开虚拟网络编辑器,确认DHCP服务已被勾选启用
- 检查虚拟机网络适配器是否连接、是否勾选“已连接”
- 进虚拟机看防火墙规则、DHCP客户端进程状态
按这个顺序排查下来,绝大部分情况都能当场解决,如果是公司入职发的定制镜像,装了个什么霸道的EDR安全软件把网卡驱动层劫持了,这属于越改越糟的情况,直接找IT管理员要一个干净的镜像,别自己折腾半天浪费时间。
关于虚拟机DHCP获取不了的几个高频问题
为什么虚拟机获取不到DHCP地址,但宿主机上网正常?
宿主机用的是物理网卡,走的是路由器上的DHCP服务,虚拟机走的是VMware或VirtualBox自带的虚拟DHCP服务,两者完全独立,宿主机正常但虚拟机不通,基本就是宿主机上的虚拟网络服务没启动,或者虚拟网卡驱动掉了,还有少数情况是无线网卡环境下,VMware的桥接模式和Wi-Fi接入点不兼容,这时改用NAT模式就行了。
桥接模式搜不到Wi-Fi热点的DHCP怎么设置?
桥接模式是把虚拟机直接暴露到物理局域网,DHCP请求经由物理无线路由器分配,如果你用的是笔记本电脑连着Wi-Fi,VMware桥接经常会遇到AP隔离导致的不通,解决方法是切到NAT模式,或者在无线网卡的高级选项里关闭AP隔离功能,再重连Wi-Fi。
网络重置了虚拟机一直转圈拿不到地址,恢复快照能解决吗?
网络重置指Windows系统设置里的“网络重置”,这会把宿主机上的所有虚拟网卡也一并重置掉,VMware和VirtualBox的虚拟交换机受这个操作影响,经常出现虚拟网卡丢失或服务冲突,恢复虚拟机快照通常解决不了问题,因为错不在虚拟机内部,正确操作是到控制面板网络连接里看看VMnet1和VMnet8是否还在,如果网卡没了,重装一次虚拟机软件(保留虚拟机文件)就行。
虚拟网络环境出问题的核心逻辑不复杂,服务优先,网卡其次,系统设置最后,按照这个顺序一步步走下来,不需要重装系统也不需要重装虚拟机软件,绝大多数DHCP故障都能亲手解决。DHCP是协议技术,只要链路通了、服务开着,它自己就能恢复。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/751356.html




