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报文交互是否正常)。