確認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