常見原因:配置文件語法錯誤、服務未安裝/未啟動、網絡接口未正確綁定、防火墻阻止DHCP流量、端口沖突。
解決方法:
systemctl status dhcpd
(Systemd系統)或service isc-dhcp-server status
(SysVinit系統)查看服務是否運行。若未啟動,用sudo systemctl start dhcpd
啟動服務,并通過sudo systemctl enable dhcpd
設置開機自啟。sudo dhcpd -t
(部分系統為sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf
)檢查/etc/dhcp/dhcpd.conf
是否有語法錯誤,根據提示修正。/etc/dhcp/dhcpd.conf
)中是否指定了正確的網絡接口(如interface eth0;
),并通過ip addr show
確認接口處于UP
狀態(有state UP
標識)。sudo iptables -L -n | grep 67
和sudo iptables -L -n | grep 68
查看是否允許UDP端口67(服務器)和68(客戶端)的流量。若未允許,添加規則:sudo iptables -A INPUT -p udp --dport 67 -j ACCEPT
和sudo iptables -A INPUT -p udp --dport 68 -j ACCEPT
(CentOS/Fedora系統用firewall-cmd --add-port=67/udp --permanent
和firewall-cmd --add-port=68/udp --permanent
,再執行firewall-cmd --reload
)。netstat -tuln | grep 67
或ss -tuln | grep 67
檢查端口是否被其他程序占用,若有,停止占用程序或修改DHCP服務器端口。常見原因:DHCP服務器未運行/配置錯誤、網絡連接中斷、IP地址池耗盡、客戶端防火墻阻止DHCP請求。
解決方法:
ping 8.8.8.8
檢查是否能訪問外網,若不通,用traceroute 8.8.8.8
排查網絡中間故障(如路由器、交換機問題)。systemctl status dhcpd
,確保服務正在運行;若未運行,按“服務無法啟動”的解決方法處理。/etc/dhcp/dhcpd.conf
中的subnet
聲明(如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;
)、DNS(option domain-name-servers 8.8.8.8;
)配置正確。sudo systemctl stop firewalld
或sudo ufw disable
),測試是否能獲取IP;若能獲取,調整防火墻規則允許DHCP流量(sudo ufw allow dhcp
)。sudo dhclient -r eth0
釋放當前IP,再用sudo dhclient eth0
重新獲取,觀察是否能成功。常見原因:DHCP地址池與靜態IP重疊、設備手動配置了重復IP、DHCP服務器租約數據庫損壞。
解決方法:
/etc/dhcp/dhcpd.conf
中的range
(地址池范圍)與網絡中靜態IP設備(如服務器、打印機)的IP,確保無重疊。若有重疊,調整地址池范圍(如將靜態IP段排除在地址池外,使用range 192.168.1.201 192.168.1.254;
)。sudo tail -f /var/log/syslog | grep dhcpd
或journalctl -u dhcpd
查找“Duplicate IP address”(重復IP)的日志,定位沖突設備,修改其IP地址。/var/lib/dhcp/dhcpd.leases
),然后重啟DHCP服務:sudo rm /var/lib/dhcp/dhcpd.leases
→ sudo systemctl restart dhcpd
(系統會自動生成新的租約文件)。sudo dhclient -r eth0
釋放IP,再用sudo dhclient eth0
重新獲取新IP。常見原因:dhcpd.conf
語法錯誤(如缺少分號、括號不匹配)、參數配置錯誤(如子網掩碼、網關填寫錯誤)。
解決方法:
sudo dhcpd -t
命令測試配置文件語法,若報錯,根據提示定位錯誤行(如“expecting a parameter or declaration”表示缺少參數),修正后保存。subnet
聲明包含以下必要參數: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服務器
option subnet-mask 255.255.255.0; # 子網掩碼(可選,部分系統會自動填充)
}
/etc/dhcp/dhcpd.conf
,Debian/Ubuntu為/etc/dhcp/dhcpd.conf
),避免因路徑錯誤導致配置未生效。解決方法:
sudo tail -f /var/log/syslog | grep dhcpd
(Ubuntu/Debian)或sudo tail -f /var/log/messages | grep dhcpd
(CentOS/RHEL)實時查看DHCP服務日志,獲取錯誤詳情(如“no free leases”表示地址池耗盡、“failed to bind to socket”表示端口被占用)。sudo tcpdump -i eth0 port 67 or port 68 -vv
抓取DHCP請求/響應流量,分析客戶端是否發送了DHCPDISCOVER
包、服務器是否響應了DHCPOFFER
包(若無響應,可能是網絡阻斷或服務器未運行)。/etc/netplan/*.yaml
、CentOS的/etc/sysconfig/network-scripts/ifcfg-eth0
)中DHCP設置為開啟(dhcp4: true
或BOOTPROTO=dhcp
),避免手動配置靜態IP導致沖突。