dhcpd服务需先安装并配置正确:检查版本、按系统安装对应包;配置文件须声明子网、地址池、网关和DNS,并显式指定监听接口;启动失败时查日志、验证语法、权限及防火墙;客户端租约需在dhcpd.leases中确认。

确认 dhcpd 服务是否已安装并可用
很多 Linux 发行版默认不装 dhcpd,直接运行会提示 command not found。先检查:运行 dhcpd -version,若报错,说明没装;Debian/Ubuntu 用 apt install isc-dhcp-server,CentOS/RHEL 用 yum install dhcp 或 dnf install dhcp。
注意:isc-dhcp-server 包名在 Debian 系是标准名称,但 Ubuntu 22.04+ 可能需额外启用仓库;RHEL 9 起 dhcp 包已默认包含服务单元,但 dhcpd 二进制路径可能是 /usr/sbin/dhcpd,需确保 $PATH 包含该路径或用绝对路径调用。
/etc/dhcp/dhcpd.conf 配置关键项怎么写
配置文件里最容易出错的是子网声明和接口绑定不一致——dhcpd 启动时会按 subnet 块匹配网卡,但不会自动猜你用哪张卡。必须明确指定监听接口,否则可能监听错网卡或干脆不响应请求。
-
subnet 192.168.1.0 netmask 255.255.255.0块内必须包含range 192.168.1.100 192.168.1.200,否则客户端拿不到地址 - 加
option routers 192.168.1.1和option domain-name-servers 192.168.1.1,不然客户端能拿 IP 但上不了网、也解析不了域名 - 如果服务器有多块网卡(比如 eth0 接外网、eth1 接内网),必须在
/etc/default/isc-dhcp-server(Debian)或/etc/sysconfig/dhcpd(RHEL)里显式设置INTERFACESv4="eth1",否则dhcpd可能监听所有接口甚至绑定失败
启动失败常见错误及快速定位方法
运行 systemctl start isc-dhcp-server 失败时,别急着重启,先看日志:journalctl -u isc-dhcp-server -n 50 -f。最常出现的三个错误:
-
No subnet declaration for eth1:配置文件里写了subnet,但网卡名拼错,或INTERFACESv4没设对 -
Can't open lease file /var/lib/dhcp/dhcpd.leases:目录不存在或权限不对,手动建目录并赋权:mkdir -p /var/lib/dhcp && chown dhcpd:dhcpd /var/lib/dhcp(RHEL)或chown dhcpd:dhcpd /var/lib/dhcp(Debian) -
Not configured to listen on any interfaces:配置文件语法有误,比如漏了分号、多了一个花括号,用dhcpd -t -cf /etc/dhcp/dhcpd.conf检查语法
客户端测试与租约验证
Windows 或 macOS 客户端执行 ipconfig /renew 或 sudo ipconfig set en0 DHCP 后,别只看 IP 是否变了——重点验证租约是否真由你的服务器发的。在服务器上运行:cat /var/lib/dhcp/dhcpd.leases,里面每条记录开头有 lease 192.168.1.105,后面跟着 hardware ethernet aa:bb:cc:dd:ee:ff 和 starts 9 2024/05/12 14:22:33,这才是真实分配证据。
如果客户端拿到 IP 但 dhcpd.leases 为空,大概率是防火墙挡了 UDP 67/68 端口,或者客户端连的不是你这台服务器所在的广播域——局域网里存在其他 DHCP 服务(比如光猫自带 DHCP)时,客户端会随机选一个响应快的,不一定是你配的。
复杂点在于:DHCP 是无状态广播协议,没有“连接”概念,所以排查时不能依赖连接跟踪,得靠抓包或租约日志交叉验证。容易被忽略的是,某些交换机或 VLAN 设置会隔离 DHCP 广播,导致客户端根本收不到 DHCPOFFER。


















