虚拟机里搭建DHCP服务,核心就四步:选对网络模式、装好DHCP角色、配好作用域、排完常见故障,下面按Windows Server和Linux两条路线,把实操步骤和踩坑点一次说清。
搭建前必须想清楚的网络模式
在动手之前,先把虚拟机的网络模型理清楚,否则后面配了也白配。
VMware Workstation和VirtualBox的默认网络模式差别很大,直接影响DHCP的广播是否能到达客户端。
VMware三种网络模式的DHCP差异
- 桥接模式:虚拟机直接接入物理局域网,此时应该禁用VMware自带的DHCP,把地址分配交给物理网络里的真实DHCP服务器,如果不关,会和物理网络抢地址,造成IP冲突。
- NAT模式:VMware自带DHCP默认开启,网段是192.168.x.0,默认网关是192.168.x.2,如果你要在虚拟机里自建DHCP,需要先进入NAT设置把默认DHCP关掉。
- 仅主机模式:默认网段是192.168.x.0,网关是192.168.x.1,适合测试,这个模式下客户端只有虚拟机网卡,隔离性最好,是练习DHCP的推荐场景。
业内专家指出,大多数DHCP配置跑不通的案例,根源都在于虚拟交换机没有开启“混杂模式”或者多张网卡同时响应了请求。
VirtualBox需要额外注意的机制
VirtualBox的NAT模式和内部网络模式都不转发DHCP广播,只有桥接模式才真正暴露在物理网络中,如果你用VirtualBox做实验室,建议选内部网络模式,所有虚拟机挂在同一块虚拟网卡下,DHCP广播就能正常穿透。
Windows Server虚拟机搭建DHCP完整流程
这里以Windows Server 2019/2026为例,图形化操作,适合第一次接触的朋友。
第一步:固定服务器IP地址
打开网络连接设置,把虚拟机的IP改为静态地址,比如192.168.10.10,子网掩码255.255.255.0,网关192.168.10.1,DNS先用114.114.114.114。
这一步漏掉的话,DHCP服务重启后地址变了,客户端就找不到了。
第二步:安装DHCP角色
- 打开“服务器管理器”,点击“添加角色和功能”
- 一路下一步,在“服务器角色”里勾选DHCP服务器
- 安装完成后,点击通知栏的黄色感叹号,选择“完成DHCP配置”
- 授权DHCP服务器,这一步在域环境中是必选项,工作组环境可以跳过
第三步:新建作用域
- 打开DHCP管理控制台,右键IPv4,选择“新建作用域”
- 输入名称后,设置地址范围,比如192.168.10.100到192.168.10.200
- 添加排除范围,把服务器固定IP排除在外
- 租约期限默认8天,测试环境建议改短,比如1小时,方便验证效果
- 网关和DNS按实际填写,最后选择“是,我想现在激活此作用域”
第四步:验证客户端自动获取
把一台Windows测试虚拟机的网络改为自动获取IP地址,重启网卡,在命令行输入ipconfig /all,能看到IP地址、子网掩码、网关都从192.168.10.100段开始分配,说明服务已经生效。
Linux虚拟机搭建DHCP服务(以Ubuntu 22.04为例)
Linux环境更轻量,生产环境也常用,命令操作更可控。
安装isc-dhcp-server
sudo apt update sudo apt install isc-dhcp-server -y
安装后先不要启动服务,否则会因为缺少配置文件直接报错,先编辑主配置文件/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 114.114.114.114;
default-lease-time 600;
max-lease-time 7200;
}
注意这里routers要指向你虚拟网络里真实存在的网关地址,如果虚拟机场景里没有路由器,可以写宿主机的虚拟网卡IP。
指定监听网卡
编辑/etc/default/isc-dhcp-server,在INTERFACESv4这一行填上你的虚拟网卡名,
INTERFACESv4="ens33"
网卡名用ip addr命令查,别想当然填eth0。
启动与验证
sudo systemctl restart isc-dhcp-server sudo systemctl status isc-dhcp-server
看到active (running)后,在客户端虚拟机里执行dhclient -r释放旧地址,再执行dhclient重新获取,用ip addr确认地址段是否正确。
故障排查:虚拟机获取不到IP怎么办
这是后台问我最多的问题,按照优先级排查以下环节,一般在五分钟内能定位。
检查物理链路与网卡设置
先用ping命令测试客户机和DHCP服务器之间的连通性,如果网关都ping不通,说明网络模式选错了。两步验证:在同一台虚拟机上ping网关地址,再ping DHCP服务器地址,哪一步不通就排查哪一段。
抓包确认DHCP四步握手
安装Wireshark,在DHCP服务器网卡上抓包,正常情况下会看到Discover、Offer、Request、Ack四个包,如果只有Discover没有Offer,说明服务器没收到广播或者作用域配置有问题。
常见错误对照表
| 故障现象 | 可能原因 | 解决方式 |
|---|---|---|
| 客户端显示“无法获取IP” | 虚拟网卡未启用DHCP | 检查客户机网卡属性是否选了自动获取 |
| 获取的IP不在地址池内 | 虚拟平台自带DHCP未关闭 | 关闭VMware NAT或VirtualBox自带DHCP |
| 多个虚拟机IP冲突 | 服务器自身IP也在DHCP范围中 | 把服务器IP加入排除范围 |
| 服务启动失败 | 配置文件语法错误 | 运行dhcpd -t检查配置语法 |
| 跨网段获取不到地址 | 未配置DHCP中继 | 在路由器上添加ip helper-address指向DHCP服务器 |
防火墙拦路由的怪问题
Windows Server安装后默认防火墙会放行DHCP,但如果手动改过防火墙策略,记得放行UDP 67和68端口,Linux下用ufw or iptables查看对应端口,一个很容易遗漏的细节是:DHCPv4只走UDP不放行TCP,别建错规则。
虚拟机DHCP和物理机DHCP到底有什么区别
很多人在百度搜这个关键词,说明确实是选型困惑,简单梳理一下:
- 隔离性:虚拟机里的DHCP只能覆盖同一虚拟网络下的设备,物理机DHCP可以管理全公司网络,两者不能互通,除非用桥接模式接进物理网络。
- 性能:虚拟机DHCP性能取决于宿主机资源,百台以内的设备没问题,上千台场景建议还是用物理服务器或者专门的网络设备。
- 成本:虚拟机DHCP成本接近零,适合测试环境和小型办公场景;物理机DHCP需要考虑硬件、系统维护和冗余方案。
- 维护便利性:快照是虚拟机DHCP最大的优势,配置崩了直接回滚,物理服务器就得重装或者手动恢复配置。
高级场景:防止内部私建DHCP导致全网瘫痪
企业网络里经常有人为了省事私自搭DHCP,结果地址池冲突,用户上不了网,这个问题在虚拟化环境里更容易发生,因为桌面虚拟化用户拥有一台“虚拟小主机”的完全控制权。
解决方案是在物理交换机上配置DHCP Snooping,把可信端口指向合法DHCP服务器所在的接口,其他端口收到的DHCP Offer直接丢弃,如果用的是VMware vSphere,建议在标准交换机层面启用Forged Transmits和Promiscuous Mode的安全策略限制。
测试完成后的一些补充
排查完如果一切正常,建议做一次重启持久化验证:把DHCP服务器虚拟机整个重启一遍,再让客户端续租地址,很多故障是在开机启动顺序上客户机先起来,DHCP服务器后起来,导致第一次获取失败,这种场景下,可以在DHCP服务器系统服务里设置启动延迟或依赖项。
最终结论:虚拟机DHCP服务搭建本身不超过半小时,绝大多数时间都花在排查网络模式和广播转发上,只要记住“固定服务器IP、关掉平台自带DHCP、检查端口放行”这三大要点,就能稳稳跑起来。
虚拟机DHCP服务搭建常见问题解答
Q1:虚拟机DHCP服务搭建完成后,宿主机能通过它获取IP吗?
如果宿主机网卡连接的是桥接模式的虚拟网络,而且物理交换机允许跨VLAN转发,那么宿主机的物理网卡可以收到来自虚拟DHCP的广播,但在纯NAT模式下,宿主机和虚拟机属于不同子网,无法直接从虚拟机DHCP获取地址。
Q2:为什么公司里的虚拟机DHCP服务有时会突然失效?
多数情况下是虚拟机快照回滚导致配置丢失,或者宿主机做了资源清理把DHCP虚拟机关机了,另一个高发原因是虚拟交换机上的多播过滤策略阻止了DHCP广播,尤其出现在启用安全加固策略的vSphere环境中。
Q3:CentOS Stream 9和Ubuntu的DHCP配置有区别吗?
CentOS Stream 9默认使用dhcp-server包,配置文件语法和数据目录与Ubuntu的isc-dhcp-server完全不同,CentOS需要自己创建/etc/dhcp/dhcpd.conf并手动指定监听网卡,SELinux还要求放行dhcpd的监听端口。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/624569.html





