确认DHCP服务(客户端/服务器)是否正常运行,是排查故障的第一步。
systemctl命令检查dhclient状态(Ubuntu默认DHCP客户端),例如:sudo systemctl status dhclient
若服务未运行,启动它:sudo systemctl start dhclient。dhcpd状态:sudo systemctl status isc-dhcp-server
启动服务:sudo systemctl start isc-dhcp-server。配置文件错误是常见故障原因,需提前检查语法。
/etc/dhcp/dhcpd.conf,使用以下命令验证语法:sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf
若输出无错误,说明配置正确;若有错误,根据提示修复(如缺少分号、IP范围错误)。日志是诊断故障的关键,Ubuntu中DHCP日志主要分布在/var/log/syslog或通过journalctl查看。
sudo tail -f /var/log/syslog | grep dhcp
sudo journalctl -u isc-dhcp-server.service --since "1 hour ago"
日志中会显示DHCP请求/响应详情、错误信息(如“no free leases”“interface not found”)。DHCP依赖网络连通性,需先排除物理层和网络层问题。
ping命令测试网关IP(如192.168.1.1):ping 192.168.1.1
/etc/resolv.conf中的DNS服务器配置:cat /etc/resolv.conf
若自动获取IP失败,可手动释放并重新获取租约。
sudo dhclient -r <interface> # 如eth0、ens33
sudo dhclient <interface>
-v参数显示详细日志(有助于定位请求/响应问题):sudo dhclient -v <interface>
DHCP服务依赖UDP 67(服务器)和68(客户端)端口,若被占用会导致服务失效。
sudo netstat -tuln | grep -E '67|68'
若发现其他进程占用(如dnsmasq),需停止冲突服务或修改DHCP服务器端口(不推荐)。使用抓包工具查看DHCP请求/响应流程,确认是否正常通信。
eth0)的DHCP数据包(UDP 67/68):sudo tcpdump -i eth0 port 67 or port 68 -vv
sudo apt install dhcpdump):sudo dhcpdump -i eth0
抓包时可观察是否有“DHCP Discover”“DHCP Offer”等关键步骤,若缺失则说明通信问题。防火墙可能阻止DHCP流量,需临时禁用或放行端口。
sudo ufw disable
若禁用后能获取IP,说明防火墙拦截,需放行UDP 67/68端口:sudo ufw allow 67/udp
sudo ufw allow 68/udp
sudo ufw enable
DHCP服务器分配的IP地址会记录在租约文件中,可用于确认服务器是否正常分配IP。
/var/lib/dhcp/dhcpd.leases(ISC-DHCP-Server),查看当前租约:sudo cat /var/lib/dhcp/dhcpd.leases
文件中包含分配的IP地址、客户端MAC地址、租约时间等信息。确保网络接口配置正确,尤其是使用netplan(Ubuntu 18.04及以上版本)的系统。
/etc/netplan/目录下的.yaml文件(如01-netcfg.yaml),检查是否启用DHCP:network:
version: 2
ethernets:
eth0:
dhcp4: true # 开启DHCP
sudo netplan apply