首先确认DHCP服务是否处于运行状态,这是最基础的排查步骤。使用以下命令查看服务状态:
sudo systemctl status dhcpd # 大多数现代Linux系统(如CentOS 7+、Ubuntu 16.04+)
# 或
sudo systemctl status isc-dhcp-server # 较旧系统(如Ubuntu 14.04)
若服务未启动,使用sudo systemctl start dhcpd启动服务;若启动失败,需进一步排查原因(如配置文件错误、端口占用等)。
DHCP服务器的核心配置文件(通常为/etc/dhcp/dhcpd.conf)语法错误会导致服务无法启动或运行异常。使用以下命令检查语法:
sudo dhcpd -t # 专用语法检查工具
若输出Syntax check passed: file is valid则表示配置正确;若有错误,会根据提示定位问题(如子网声明遗漏、IP范围格式错误),修正后重新检查。
日志是排查故障的关键线索,DHCP服务的日志通常位于/var/log/syslog(Debian/Ubuntu)或/var/log/messages(CentOS/RHEL)。使用以下命令过滤DHCP相关日志:
sudo tail -f /var/log/syslog | grep dhcpd # 实时查看日志
# 或
sudo journalctl -u dhcpd -f # systemd系统专用日志查看命令
日志中常见的错误包括“Port already in use”(端口占用)、“No subnet declaration for eth0”(未指定监听接口)、“Duplicate IP address”(IP冲突)等,根据提示针对性解决。
DHCP服务必须绑定到正确的网络接口(如eth0、ens33),否则无法接收客户端的DHCP请求。检查配置文件中是否指定了监听接口:
/etc/default/isc-dhcp-server,确认INTERFACESv4参数(如INTERFACESv4="eth0");/etc/sysconfig/dhcpd,确认DHCPDARGS参数(如DHCPDARGS="eth0")。ip addr show命令确认接口处于UP状态且有正确的IP地址。DHCP使用UDP端口67(服务器端)和UDP端口68(客户端),需确保防火墙允许这些端口的流量通过:
# 检查端口是否开放(iptables)
sudo iptables -L -n | grep 67
sudo iptables -L -n | grep 68
# 若未开放,添加规则(iptables)
sudo iptables -A INPUT -p udp --dport 67 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 68 -j ACCEPT
# 若使用firewalld(CentOS 7+)
sudo firewall-cmd --add-service=dhcp --permanent
sudo firewall-cmd --reload
若系统启用了SELinux,需临时禁用测试(setenforce 0),若禁用后服务正常,需调整SELinux策略(如setsebool -P dhcpd_enable_homedirs 1)。
DHCP租约文件(通常为/var/lib/dhcp/dhcpd.leases)记录了已分配的IP地址信息,若文件损坏会导致IP分配异常。检查文件是否存在及权限是否正确:
ls -l /var/lib/dhcp/dhcpd.leases # 确认文件存在
ls -l /var/lib/dhcp/dhcpd.leases~ # 确认备份文件存在(可选)
若文件损坏,可删除后重启DHCP服务(服务会自动生成新文件):
sudo rm /var/lib/dhcp/dhcpd.leases
sudo systemctl restart dhcpd
注意:删除前需备份重要数据。
使用客户端工具验证DHCP服务是否能正常分配IP地址:
sudo dhclient -v eth0(eth0为客户端接口)命令,查看是否能获取到IP地址及网关、DNS等信息;dhcping(sudo apt install dhcping),测试服务器响应:sudo dhcping -c 192.168.1.100 -s 192.168.1.1 # -c为客户端IP,-s为服务器IP
若输出Reply from server: DHCPACK则表示服务正常。若服务端正常但客户端无法获取IP,需检查客户端配置:
tcpdump捕获客户端DHCP请求(sudo tcpdump -i eth0 port 67 or port 68),查看是否有请求发出及服务器响应;ping 192.168.1.1,192.168.1.1为服务器IP)。确认DHCP配置文件中的IP地址池(range参数)设置正确,且未与其他设备(如静态IP服务器、路由器)冲突:
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; # 确认DNS正确
}
可使用ip addr show命令查看网络中已有的IP地址,避免冲突。
确保系统和DHCP服务软件为最新版本,修复已知漏洞及bug:
sudo apt update && sudo apt upgrade # Debian/Ubuntu
# 或
sudo yum update # CentOS/RHEL
更新后重启DHCP服务:sudo systemctl restart dhcpd。