Windows平台轻量级DHCP服务器V2.3:配置、服务化与PXE引导实战 简介DHCP Server for Windows V2.3 是一款面向 Windows 平台的轻量级 DHCP 服务端工具适合网络管理员、运维人员及需要搭建小型局域网或远程启动环境的用户使用。它能为 TCP/IP 网络中的其他计算机自动分配 IP 地址并额外集成 TFTP、DNS 与 HTTP 协议支持便于快速部署简易网络满足远程引导等场景需求。压缩包共 9 个文件约 101KB包含 dhcpwiz.exe 与 dhcpsrv.exe 两个可执行程序、xsl 样式表、html 页面、jpg 示意图、ico 图标及 readme.txt 说明文档覆盖配置向导、服务运行与界面展示等用途。目前已有 391 人学习下载说明该工具在小型网络搭建中具有一定参考价值。借助配置向导与说明文档读者可快速完成服务端参数设置理解 DHCP 分配流程与 TFTP、DNS 协同机制并掌握远程启动环境的搭建思路适合作为网络实验与日常运维的实用参考。1. 为什么还有人需要一个跑在 Windows 上的 DHCP 服务办公室角落那台工控机、测试台上三台瘦客户机、家里用旧笔记本搭的 PXE 装机环境——这些场景有个共同点网络里没有路由器愿意管地址分配或者路由器在楼上机房够不着。你总不能为了给五台机器发 IP 就搬一台三层交换机过来。DHCP Server for Windows V2.3 就是冲着这种「小规模、临时性、Windows 环境」的地址分发需求来的一个绿色单文件服务端双击就能跑配置文件是纯文本日志直接写本地文件。它解决的不是「企业级 DHCP 高可用」那种问题而是「我现在就要一个能用的 DHCP别让我装 Linux、别让我配 ISC DHCP 那一堆语法」。适合谁做嵌入式联调的、搞机房临时布线的、玩 PXE 网络启动的、以及需要在隔离网段里快速拉起一套地址池的运维。如果你手里正好有一台常年开机的 Windows 机器这东西比开虚拟机装 dnsmasq 省事得多。2. 先搞懂 DHCP 交互流程再动手配地址池2.1 四次握手到底发生了什么DHCP 的交互不是「客户端问一句、服务端答一句」这么简单。标准流程是 DISCOVER → OFFER → REQUEST → ACK 四步中间还夹着 NAK、DECLINE、RELEASE 这些状态。理解这个流程你才知道配置文件里每个字段对应的是哪一步。客户端开机后没有 IP只能广播 DISCOVER源地址 0.0.0.0目标 255.255.255.255目标端口 67。服务端收到后从地址池里挑一个没被占用的回 OFFER里面带上拟分配的 IP、租期、网关、DNS。客户端可能收到多个 OFFER选一个回 REQUEST 广播确认。服务端收到 REQUEST 后回 ACK同时把这条租约写进数据库。到这里地址才算真正分配出去。关键点在于OFFER 阶段服务端只是「预留」并不锁定。如果客户端没发 REQUEST这个地址过一会儿还能给别人。这也是为什么你有时候会看到日志里同一个 IP 出现两次 OFFER 但只有一次 ACK。提示排查 DHCP 问题时抓包看这四个包的顺序比看配置文件快得多。Wireshark 过滤bootp就能看到全部交互。2.2 地址池、租期、保留地址怎么设DHCP Server for Windows 的配置走的是 ini 风格文本文件核心就三块网段声明、地址池范围、选项参数。下面是一个能直接抄的配置骨架# dhcpsrv.ini - 最小可用配置 [General] # 绑定的网卡留空表示监听所有接口 Interface192.168.10.1 # 日志级别0 静默1 常规2 调试 LogLevel1 # 租约数据库文件路径 LeaseFileleases.dat [Subnet_192_168_10_0] # 声明本服务负责的网段和掩码 Network192.168.10.0 Mask255.255.255.0 # 地址池起止注意不要包含服务端自己的 IP RangeStart192.168.10.100 RangeEnd192.168.10.200 # 默认租期单位秒86400 即一天 LeaseTime86400 # 网关和 DNS 通过选项下发 Option_Router192.168.10.1 Option_DNS192.168.10.1,114.114.114.114 Option_Domainlab.local [Reservation_001] # MAC 地址绑定固定 IP用于打印机、服务器等 MAC00-1A-2B-3C-4D-5E IP192.168.10.50逐段说明。Interface指定监听哪块网卡多网卡机器上不写清楚会出现「地址发错网段」的经典翻车。RangeStart和RangeEnd划出可分配区间服务端自身 IP 必须在这个区间之外否则会自己跟自己抢地址。LeaseTime设太短会导致客户端频繁续租、日志暴涨设太长则地址回收慢测试环境里机器换得勤的话建议 3600 到 7200。Option_Router和Option_DNS是下发给客户端的多个 DNS 用逗号隔开。保留地址段用 MAC 绑定MAC 格式用短横线分隔大小写不敏感。2.3 启动服务与验证分配结果配置写完后用管理员权限打开命令行进入程序目录# 以控制台模式前台启动方便看实时日志 dhcpsrv.exe -c -v # 参数说明 # -c 前台控制台运行不注册为系统服务 # -v 输出详细日志到标准输出 # 调试阶段强烈建议用这个模式能看到每个包的收发前台跑起来后拿一台客户端机器设成自动获取 IP或者用ipconfig /release再ipconfig /renew触发重新申请。服务端控制台会打印类似OFFER 192.168.10.101 to 00-1A-2B-3C-4D-5E的日志。客户端侧用ipconfig /all确认拿到的地址、网关、DNS 是否和配置一致。如果客户端一直拿不到地址先确认三件事服务端防火墙有没有放行 UDP 67 和 68客户端和服务端是不是在同一个二层广播域跨网段需要 DHCP 中继这个工具本身不做中继地址池是不是已经耗尽。日志里如果出现大量 DISCOVER 但没有 OFFER基本就是防火墙拦了。3. 把服务注册成系统服务让它开机自启3.1 服务模式与前台模式的差别前台模式适合调试但你不能指望每次重启都手动去点一下。DHCP Server for Windows 支持注册成 Windows 服务开机自动运行不需要用户登录。注册命令# 安装为系统服务服务名 DHCP-Server dhcpsrv.exe -install # 启动服务 net start DHCP-Server # 停止并卸载 net stop DHCP-Server dhcpsrv.exe -remove服务模式下日志不再打到控制台而是写进配置文件里LogFile指定的路径。默认是程序目录下的dhcpsrv.log。服务模式跑起来后用sc query DHCP-Server确认状态是 RUNNING。如果启动失败先看 Windows 事件查看器里的应用程序日志常见原因是配置文件路径写的是相对路径而服务的工作目录和你想的不一样。注意服务模式下如果配置文件有语法错误服务会启动失败但不会弹窗提示。养成改完配置先用-c前台跑一遍的习惯。3.2 多网段与多地址池的配置方式一台机器两块网卡、分别接两个隔离网段这种拓扑在实验室很常见。配置里可以声明多个[Subnet_xxx]段每个段绑定不同的Interface[Subnet_10_0_0_0] Network10.0.0.0 Mask255.255.255.0 Interface10.0.0.1 RangeStart10.0.0.100 RangeEnd10.0.0.150 LeaseTime7200 Option_Router10.0.0.1 [Subnet_172_16_0_0] Network172.16.0.0 Mask255.255.255.0 Interface172.16.0.1 RangeStart172.16.0.100 RangeEnd172.16.0.150 LeaseTime7200 Option_Router172.16.0.1每个网段独立维护地址池和选项互不干扰。Interface字段在这里的作用是「只在这个网段的接口上响应广播」避免一个网卡的请求被另一个网段的池子接走。如果两块网卡都接在同一个交换机上那就要小心了——客户端广播会从两个接口都进来服务端可能用错误的池子回应。这种场景下建议只在一个接口上启用服务。3.3 租约数据库的备份与迁移租约信息默认存在leases.dat里二进制格式不能直接编辑。迁移到另一台机器时把配置文件和leases.dat一起拷过去服务启动后会接着用。但要注意如果新机器的网卡 MAC 变了Interface字段要跟着改否则服务起不来。备份策略很简单写个计划任务每天拷一次leases.dat和配置文件就行。恢复的时候先停服务覆盖文件再启动。如果leases.dat损坏服务会拒绝启动并在日志里报错这时候删掉它让服务重建一个空库代价是所有客户端要重新申请一次地址——在测试环境里这通常无所谓。4. 避坑与排查那些让我加班到半夜的细节4.1 客户端拿到 169.254 开头的地址现象客户端ipconfig显示 169.254.x.x这是 Windows 在没收到 DHCP 响应时自动分配的链路本地地址。原因服务端根本没收到 DISCOVER或者收到了但没回 OFFER。常见于防火墙拦截、服务没启动、或者客户端和服务端不在同一广播域。解决先在服务端netstat -an | findstr 67确认 UDP 67 在监听。然后临时关掉 Windows 防火墙测试一轮。如果关了防火墙就好了加一条入站规则放行 UDP 67 和 68。跨网段的情况需要在上游路由器配 DHCP 中继指向这台机器这个工具本身不处理中继。4.2 地址池耗尽但日志显示还有空闲 IP现象客户端申请不到地址但配置文件里明明还有没分配的 IP。原因租约没释放。客户端非正常关机、拔网线服务端不知道它走了租约还占着。或者LeaseTime设得太长地址回收慢。解决把LeaseTime调短测试环境 3600 秒足够。另外检查leases.dat里有没有大量过期但没清理的记录。服务重启会重新加载租约过期的会被标记为空闲。如果急需释放停服务删掉leases.dat再启动代价是全部重新分配。4.3 同一网段出现 IP 冲突现象两台机器拿到同一个 IP或者客户端报「检测到 IP 冲突」。原因地址池范围里包含了已经被静态配置的机器。比如某台打印机手动设了 192.168.10.150而你的池子是 100 到 200服务端不知道 150 被占了照样发出去。解决把所有静态 IP 挪到地址池范围之外或者用保留地址段绑定 MAC。规划的时候养成习惯1 到 99 留给静态设备100 到 200 做动态池200 以上做保留。这样永远不会撞。4.4 服务启动报「配置文件解析失败」现象net start报错事件日志里写「无法解析配置文件」。原因ini 文件里有多余空格、中文标点、或者字段名拼错。这个解析器对格式比较严格Option_DNS192.168.10.1, 114.114.114.114里逗号后面的空格在某些版本会出问题。解决用前台模式-c跑它会打印具体哪一行出错。把所有逗号后面的空格去掉确认没有全角字符。改完再注册服务。4.5 虚拟机里跑服务端客户端拿不到地址现象Hyper-V 或 VMware 里的 Windows 跑 DHCP 服务宿主机或其他虚拟机申请不到地址。原因虚拟交换机的类型不对。如果虚拟网卡接的是 NAT 或 Host-Only 网络广播包可能到不了其他虚拟机。另外虚拟网卡的 MAC 地址是动态生成的Interface字段如果写死了物理网卡 IP 会失效。解决把虚拟网卡接到「外部虚拟交换机」或者桥接模式确保广播能通。Interface字段改成虚拟网卡的 IP或者干脆留空监听所有接口。测试的时候先用两台虚拟机对接排除物理网络干扰。5. 用保留地址做 PXE 引导和批量部署保留地址Reservation这个功能很多人只拿来给打印机绑 IP其实它在 PXE 网络引导场景里更有用。PXE 客户端在 DISCOVER 阶段会带上自己的 MAC 和架构标识服务端可以根据 MAC 返回特定的启动文件路径。虽然这个工具的下发选项里没有完整的 PXE 参数但配合Option_NextServer和Option_BootFile可以做到基础引导。配置片段[Reservation_PXE_01] MAC00-1A-2B-3C-4D-5E IP192.168.10.60 # 指定 TFTP 服务器地址通常是另一台机器 Option_NextServer192.168.10.10 # 指定引导文件名路径相对于 TFTP 根目录 Option_BootFilepxelinux.0Option_NextServer告诉客户端去哪里下载引导文件Option_BootFile告诉它下载哪个文件。这两个选项只在保留地址段里生效普通动态分配不会下发。批量部署的时候把每台目标机器的 MAC 和对应 IP 写进保留段再统一指向同一个 TFTP 服务器就能做到「插网线自动装系统」。验证方法客户端设成网卡启动看屏幕有没有出现 PXE 的获取 IP 提示。如果卡在PXE-E51: No DHCP or proxyDHCP offers were received说明 DISCOVER 没得到响应回到第 4 章排查。如果拿到了 IP 但下载引导文件失败检查 TFTP 服务是否正常、防火墙有没有放行 UDP 69。我自己的习惯是每次改完保留地址配置先拿一台虚拟机用ipconfig /release ipconfig /renew跑一遍确认拿到的 IP 和预期一致再上物理机。这个工具没有图形界面所有改动都是文本改错了不会有人提醒你只能靠日志和客户端反馈。从那以后我每次动配置文件之前都先复制一份.bak改完前台跑一遍看日志确认没问题再注册服务。希望帮到你。本文还有配套的精品资源点击获取