虚拟机里的DHCP服务器罢工,多半是虚拟网卡选错模式,或者系统内的DHCP服务没起来,先按“网络模式→服务状态→防火墙→IP池配置”的顺序排查,九成能解决。
排查第一步:先看虚拟机的网卡接对了没有
很多人折腾半天,最后发现是VMware或VirtualBox里的虚拟网卡模式没选对,DHCP服务器要靠广播包“喊话”,虚拟网卡如果接错了“房间”,广播根本传不出去。
虚拟机DHCP服务器获取不到IP怎么办
这其实是两个问题:一个是虚拟机里的DHCP服务不给别人发IP,另一个是虚拟机自己获取不到IP,如果你遇到的是自己这台虚拟机拿不到IP,先打开虚拟机的“网络适配器”设置,确认当前接的是NAT模式还是桥接模式。
- NAT模式:虚拟机通过宿主机上网,由虚拟NAT设备分配IP,一般不需要你手动配DHCP。
- 桥接模式:虚拟机直接和宿主机在同一个局域网,需要上层路由器或你搭建的DHCP服务器来分配IP。
- 仅主机模式(Host-Only):虚拟机只能和宿主机通信,和外部网络隔离,DHCP服务由虚拟化软件自带。
在大多数情况下,虚拟机自己获取不到IP,是因为网络适配器没有勾选“已连接”,或者虚拟网络编辑器里的DHCP功能被关闭了,打开VMware的“编辑→虚拟网络编辑器”,选中VMnet8(NAT模式)或VMnet1(仅主机模式),看一眼下方“使用本地DHCP服务将IP地址分配给虚拟机”这个复选框是否勾选,VirtualBox则是在“管理→主机网络管理器”里调整DHCP开关。
虚拟DHCP服务和系统内DHCP服务,先分清是哪个
这里有个关键区分:你用的是虚拟化软件自带的DHCP(比如VMware的虚拟DHCP服务),还是虚拟机系统里装的DHCP服务器软件(比如Windows Server的DHCP角色或Linux的isc-dhcp-server)?
- 用VMware自带DHCP:主要看虚拟网络编辑器里的配置,以及宿主机上的VMware DHCP Service是否在运行。
- 用系统内DHCP服务:主要看虚拟机防火墙、服务进程状态、IP地址池是否设置正确。
打开Windows服务管理器(Win+R输入services.msc),找到名字里带“VMware”或“VirtualBox”的DHCP服务,看状态是不是“正在运行”,如果没运行,右键点击“启动”,并把启动类型设为“自动”。
桥接模式下DHCP分配失败,卡在物理网络环境
不少人在桥接模式下搭DHCP服务器,结果客户端设备收不到地址,桥接模式相当于把虚拟机直接插到你的路由器上,这时候问题往往出在物理网络环境里。
虚拟机网卡桥接模式DHCP分配失败原因排查
桥接模式DHCP分配失败,相当一部分原因是物理路由器开启了“DHCP Snooping”或“端口隔离”功能。 这两个安全特性会拦截来自非信任端口的DHCP Offer报文,如果你把虚拟机桥接到电脑的有线网口,而电脑又插在交换机上,交换机可能默认不信任这个端口,直接扔掉DHCP广播包。
还要确认虚拟机桥接到的是正确的物理网卡,很多笔记本同时有有线网卡和无线网卡,VMware里默认桥接的可能是“自动”,此时虚拟机一会儿走Wi-Fi,一会儿走有线,DHCP请求发出去的路径不稳定,手动指定桥接到当前正在上网的那张网卡,问题往往迎刃而解。
还有一个容易忽视的点:宿主机防火墙是否拦截了DHCP流量,Windows自带的防火墙在“专用网络”配置下,可能阻止虚拟机访问宿主机的DHCP服务,如果你把DHCP服务器直接装在了宿主机上(而非虚拟机里),记得在防火墙入站规则里放行UDP 67和UDP 68端口。
VirtualBox和VMware虚拟机DHCP设置区别
不同虚拟化软件对DHCP的管理方式差异很大,如果你在两款软件之间切换,很容易按惯性操作踩坑。
VirtualBox和VMware虚拟机DHCP设置区别
| 对比项 | VMware Workstation | VirtualBox |
|---|---|---|
| NAT模式DHCP | 默认开启,可关闭 | 默认不启用,需手动配置端口转发和DHCP |
| 仅主机模式DHCP | 默认开启,可在虚拟网络编辑器改IP段 | 默认开启,但只在“主机网络管理器”里可调 |
| 桥接模式DHCP | 由外部网络决定,虚拟软件不干预 | 由外部网络决定,虚拟软件不干预 |
| 自定义IP段 | 直接修改子网IP和DHCP地址池 | 需先创建Host-Only网络,再启用DHCP服务器 |
| 配置入口 | 编辑→虚拟网络编辑器 | 管理→主机网络管理器 |
VMware的NAT模式默认自带DHCP,但很多人发现虚拟机上网正常却拿不到IP,是因为NAT模式的DHCP只对使用VMnet8网卡的虚拟机生效,如果你新建了一个自定义VMnet2网卡,即使选了NAT模式,DHCP默认也是关闭的。
VirtualBox的情况正好相反,它的NAT模式默认没有DHCP服务器,虚拟机只能通过NAT地址转换上网,无法直接通过主机名访问其他虚拟机,如果你想在VirtualBox里做DHCP实验,建议走“仅主机(Host-Only)网络”方案先建一个Host-Only网络,在网络管理器的“DHCP服务器”选项卡里勾选启用,设置服务器地址和最大/最小地址范围。
虚拟化软件自带的DHCP只做“基本的IP分配”,不能做保留地址、租约策略等高级配置,行业共识认为,生产环境中的DHCP服务应当部署在专门的操作系统上(如Windows Server或Linux),并配置为静态IP。
为什么要分清两个DHCP
假设你在VMware里跑了一台Windows Server 2008虚拟机,打算用它给整个局域网分配IP,如果VMware虚拟网络编辑器的DHCP没关,就会出现“两台DHCP服务器抢答”的现象:虚拟机的DHCP响应慢半拍,VMware自带的DHCP先回了包,客户端拿到的是VMnet网段的地址,业内专家指出,这种IP地址冲突是导致“时好时坏”类故障的主要原因。
如果你打算在虚拟机里自己搭DHCP服务,记得先去虚拟网络编辑器里关掉VMware自带的DHCP,只保留一个“DHCP权威”。
虚拟机DHCP服务器IP地址池怎么设置
设置IP地址池是DHCP服务正常工作的最后一道工序,很多人卡在“服务跑起来了,但分配出去的IP不在同一网段”,以最常用的Linux上的isc-dhcp-server为例,实际配置路径大致如下:
确认网卡接口和DHCP服务绑定
编辑 /etc/default/isc-dhcp-server 文件,找到 INTERFACESv4 这一行,填入你希望DHCP监听的网卡名称,ens33,如果这里为空或填错网卡,DHCP服务会启动失败,或者启动了但收不到请求。
修改主配置文件
在 /etc/dhcp/dhcpd.conf 里,你需要至少定义一段地址池,示例配置为:
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.100 192.168.10.200;
option routers 192.168.10.1;
option domain-name-servers 223.5.5.5;
default-lease-time 600;
max-lease-time 7200;
}
这里 range 就是IP地址池。注意,地址池不能包含DHCP服务器自己的IP,也不能和路由器静态IP冲突,建议把服务器的IP设为固定地址,168.10.2,然后地址池从 .100 开始,留出安全缓冲区。
重启服务并验证
systemctl restart isc-dhcp-server systemctl status isc-dhcp-server
看到 active (running) 后,在客户端虚拟机里执行 ipconfig /renew(Windows)或 dhclient(Linux),如果能获取到 168.10.100~200 之间的地址,说明DHCP服务器配置成功。
Windows Server里的地址池配置
在Windows Server上,打开“服务器管理器→工具→DHCP”,右键IPv4选择“新建作用域”,向导会让你填写作用域名称、起始IP和结束IP,这就是地址池范围,还需要设置租约期限,默认是8天,对于测试环境,行业共识是建议把租约期改短到1小时以内,方便观察分配和续租过程。
虚拟机DHCP服务和防火墙之间的爱恨情仇
配置全对了,服务也跑了,但客户端就是拿不到IP,这时候八成是防火墙在作祟,DHCP通信依靠UDP 67和UDP 68端口,很多系统的默认防火墙策略没有放行这两个端口。
- Windows Server:安装DHCP角色时,系统会提示你自动创建防火墙规则,如果你用的是老版本系统或精简版,需要手动在“高级安全Windows防火墙”里添加入站规则,允许UDP 67和UDP 68。
- CentOS/RHEL:firewalld或iptables默认可能拦截DHCP请求,执行
firewall-cmd --add-service=dhcp --permanent && firewall-cmd --reload即可放行。 - Ubuntu/Debian:ufw状态的系统,需要执行
ufw allow 67/udp和ufw allow 68/udp。
还有一个隐蔽的坑:如果DHCP服务器装在虚拟机里,虚拟机的“安全选项”中如果启用了“MAC地址欺骗防护”或“NIC Teaming”,DHCP请求可能被虚拟机管理程序拦截,在VMware的虚拟机设置里,把安全选项恢复为默认,或者取消勾选“放弃混杂模式”相关的限制。
Q&A:虚拟机DHCP服务器常见故障问答
问:为什么虚拟机重启后,DHCP服务器就不工作了,但服务显示正在运行?
答:虚拟机重启后,网卡的MAC地址可能发生了变化,查看网络连接详情里的“物理地址”是否和DHCP地址池的保留绑定一致,解决办法是为DHCP服务器网卡设置静态MAC地址,在VMware虚拟机设置的高级选项里手动指定MAC地址,并在DHCP作用域里将服务器IP绑定到这个固定的MAC。
问:宿主机休眠后再唤醒,虚拟机里的DHCP服务器就失效了,怎么恢复?
答:宿主机休眠会让虚拟机的虚拟网卡断线重连,DHCP服务无法自动感知网络变化,在虚拟机里执行DHCP服务的重启命令,或直接重启虚拟机,如果问题频繁出现,可以在宿主机电源设置里关闭“快速启动”功能,这个功能会干扰虚拟网络设备的初始化流程。
问:DHCP服务器分配IP速度很慢,客户端要等很久才拿到地址?
答:最常见的原因是虚拟机的虚拟网卡配置了IPv6和IPv4双栈,系统先尝试DHCPv6请求,超时后才转向IPv4,在客户端网卡的IPv6设置里改为“仅链路本地”,同时确认DHCP服务器配置了 authoritative; 指令,这个指令让服务器直接返回NACK作为响应,避免客户端等待代理超时。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/790730.html


