在 Ubuntu 上调试 DHCP(通常是 isc-dhcp-server 或 systemd-networkd / NetworkManager 场景)可以从服务端和客户端两个角度入手。下面按常见情况说明。
Ubuntu 中 DHCP 服务日志一般写入 syslog:
sudo grep dhcpd /var/log/syslog
或实时查看:
sudo tail -f /var/log/syslog | grep dhcpd
编辑 DHCP 服务配置:
sudo systemctl edit isc-dhcp-server
添加以下内容(覆盖启动参数):
[Service]
ExecStart=
ExecStart=/usr/sbin/dhcpd -f -d -cf /etc/dhcp/dhcpd.conf -lf /var/lib/dhcp/dhcpd.leases
参数说明:
-f:前台运行-d:调试模式(输出详细日志)-cf:指定配置文件-lf:指定租约文件然后重启服务:
sudo systemctl daemon-reload
sudo systemctl restart isc-dhcp-server
此时日志会非常详细,可直接看到 DISCOVER / OFFER / REQUEST / ACK。
sudo systemctl stop isc-dhcp-server
sudo /usr/sbin/dhcpd -f -d -cf /etc/dhcp/dhcpd.conf
Ctrl+C 退出。
sudo dhclient -v eth0
-v 显示详细过程。
释放并重新获取:
sudo dhclient -r eth0
sudo dhclient -v eth0
查看客户端日志:
journalctl -u dhclient
sudo nmcli general logging level DEBUG
查看日志:
journalctl -u NetworkManager -f
恢复:
sudo nmcli general logging level INFO
如果你用的是 systemd-networkd:
sudo systemctl status systemd-networkd
journalctl -u systemd-networkd -f
在 .network 文件中确保:
[Network]
DHCP=yes
sudo tcpdump -i eth0 port 67 or port 68 -e -n
你应该看到:
dhcpd.conf 中声明dhcp relay如果你能补充说明:
isc-dhcp-server / NetworkManager / systemd-networkd我可以给你更精准的调试命令。