DHCP故障可分为客户端无法获取IP和服务器无法分配IP两类,以下是系统化的排查步骤:
使用ip link show命令确认网络接口是否启用(显示UP状态)。若未启用,用sudo ip link set dev <接口名> up(如eth0)开启接口。
检查/etc/sysconfig/network-scripts/ifcfg-<接口名>(如ifcfg-eth0)文件,确保以下关键参数正确:
BOOTPROTO=dhcp(必须为dhcp,静态模式无法自动获取IP);ONBOOT=yes(开机自动激活接口)。sudo systemctl restart network。sudo systemctl status dhclient查看服务是否运行;sudo systemctl start dhclient;sudo systemctl enable dhclient。用sudo dhclient <接口名>(如eth0)手动获取IP,观察是否能成功分配。若失败,会显示具体错误(如“no DHCPOFFER received”)。
通过journalctl -u dhclient.service或tail -f /var/log/messages查看DHCP客户端日志,定位错误原因(如“DHCPDISCOVER timeout”表示未收到服务器响应)。
用arp -a命令查看局域网内IP地址分配情况,若发现重复IP,需释放冲突IP(sudo dhclient -r <接口名>)并重新获取。
防火墙可能阻止DHCP流量(UDP 67/68端口),用sudo systemctl stop firewalld暂时关闭防火墙,测试是否能获取IP。若成功,需调整防火墙规则允许DHCP服务:sudo firewall-cmd --add-service=dhcp --permanent,然后sudo firewall-cmd --reload。
用sudo systemctl status dhcpd查看服务是否运行。若未运行,启动服务:sudo systemctl start dhcpd;设置开机自启:sudo systemctl enable dhcpd。
DHCP主配置文件为/etc/dhcp/dhcpd.conf,用dhcpd -t命令检查语法。若输出“Syntax check passed”表示正常;若有错误(如“unknown option”),根据提示修改配置文件(如subnet块中的IP范围、网关等)。
用ss -tulpn | grep dhcpd命令检查DHCP服务是否监听UDP 67端口(服务器端)。若未监听,可能是配置文件中未指定接口(如CentOS 7需在/etc/sysconfig/dhcpd中设置DHCPDARGS="<接口名>",如eth0)。
确保dhcpd.conf中的地址池(range参数)与服务器接口IP在同一网段,且地址池内有可用IP(未被占用或过期)。用sudo dhcpd -t可检查地址池配置是否正确。
通过tail -f /var/log/dhcpd.log或journalctl -u dhcpd查看服务器日志,常见错误包括:
若SELinux处于Enforcing模式,可能阻止DHCP服务。用setenforce 0临时禁用SELinux测试,若服务恢复正常,需修改SELinux策略(如setsebool -P dhcpd_enable_homedirs 1)或永久关闭SELinux(/etc/selinux/config中设置SELINUX=permissive)。
确保服务器与客户端在同一网段,且网络设备(如交换机、路由器)允许DHCP流量通过(UDP 67/68端口未被过滤)。
通过以上步骤逐步排查,可定位并解决大部分CentOS DHCP故障。若问题仍未解决,建议结合日志信息进一步分析(如客户端与服务器之间的DHCP报文交互是否正常)。