首先确认DHCP服务是否处于运行状态,这是排查故障的基础步骤。使用以下命令查看服务状态:
sudo systemctl status isc-dhcp-server 或 sudo systemctl status dhcpd(服务名称因发行版而异);sudo service isc-dhcp-server status。sudo systemctl start isc-dhcp-server或sudo service isc-dhcp-server start启动服务。配置文件错误是DHCP服务无法启动的常见原因。DHCP主配置文件通常位于/etc/dhcp/dhcpd.conf,需检查以下内容:
sudo dhcpd -t命令测试配置文件语法,若输出“Syntax check passed”则表示无语法错误;若有错误,根据提示定位并修正(如缺少分号、括号不匹配)。subnet)、IP地址池(range)、默认网关(option routers)、DNS服务器(option domain-name-servers)等参数配置正确。例如: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 8.8.8.8, 8.8.4.4;
}
日志文件是排查故障的关键线索,DHCP服务的日志通常位于:
/var/log/syslog(Debian/Ubuntu);/var/log/messages(CentOS/RHEL);journalctl命令查看服务专属日志:sudo journalctl -u dhcpd(Systemd系统)。tail -f /var/log/syslog | grep dhcpd实时监控日志,重点关注“error”“failed”等关键词,例如“no subnet declaration for eth0”表示未为接口配置子网。DHCP服务需绑定到正确的网络接口(如eth0、ens33),否则无法接收客户端请求。检查步骤:
ip addr show;/etc/default/isc-dhcp-server,修改INTERFACESv4="eth0";/etc/sysconfig/dhcpd,修改DHCPDARGS="eth0"。DHCP使用UDP端口67(服务器)和68(客户端),需确保防火墙允许这些端口的流量:
sudo ufw allow udp 67:68;sudo firewall-cmd --add-service=dhcp --permanent,然后sudo firewall-cmd --reload;sudo iptables -A INPUT -p udp --dport 67 -j ACCEPT,sudo iptables -A INPUT -p udp --dport 68 -j ACCEPT。租约文件(/var/lib/dhcp/dhcpd.leases)记录了已分配的IP地址,若文件损坏可能导致地址分配失败:
ls -l /var/lib/dhcp/dhcpd.leases;sudo mv /var/lib/dhcp/dhcpd.leases /var/lib/dhcp/dhcpd.leases.bak),然后重启服务(sudo systemctl restart isc-dhcp-server),系统会自动生成新文件。若客户端无法获取IP,可使用tcpdump捕获DHCP流量,确认客户端是否发送了DHCP Discover请求,以及服务器是否响应了Offer:
sudo tcpdump -i eth0 port 67 or port 68 -vv
正常情况下,应看到“DHCP Discover”(客户端请求)和“DHCP Offer”(服务器响应)的数据包。
使用客户端工具验证服务是否正常:
sudo dhcping -c 192.168.1.100 -s 192.168.1.1(-c为客户端IP,-s为服务器IP),若输出“DHCPOFFER received”则表示服务正常;sudo dhclient -v eth0(-v显示详细过程),观察是否能获取到IP地址。若客户端获取到IP后无法上网,可能是IP冲突。检查步骤:
ip addr show查看分配的IP;/var/lib/dhcp/dhcpd.leases,确认该IP是否已被其他设备占用;sudo dhclient -r eth0),然后重新获取(sudo dhclient -v eth0)。过时的系统或DHCP软件可能存在已知bug,导致服务异常。定期更新系统:
sudo apt update && sudo apt upgrade # Debian/Ubuntu
sudo yum update # CentOS 7及以下
sudo dnf update # CentOS 8及以上