首先確認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
。