温馨提示×

如何调试linux dhcp

小樊
55
2026-10-09 15:56:30
栏目: 智能运维

在 Linux 上“调试 DHCP”通常分为几种场景:客户端拿不到 IP、DHCP 服务器不分配地址、中继(relay)有问题。下面按常见使用场景给你一个系统性的排查和调试方法。


一、先明确你调试的是哪一端

  • DHCP 客户端(如笔记本、服务器网卡)
  • DHCP 服务器(通常为 isc-dhcp-server / dnsmasq / kea)
  • DHCP 中继(relay)

二、调试 DHCP 客户端(拿不到 IP)

1. 手动释放并重新获取

# DHCP 客户端为 dhclient
sudo dhclient -r eth0
sudo dhclient -v eth0

-v 会显示详细交互过程。


2. 使用 dhcpcd(部分发行版)

sudo dhcpcd -d eth0

3. 查看系统日志

journalctl -u NetworkManager
journalctl -u dhclient
dmesg | grep eth0

4. 抓包看 DHCP 交互(最重要)

sudo tcpdump -i eth0 port 67 or port 68 -e -n

正常流程应看到:

  • DHCP Discover
  • DHCP Offer
  • DHCP Request
  • DHCP ACK

如果只看到 Discover 没有 Offer → 服务端或网络问题。


三、调试 DHCP 服务器(不分配地址)

1. 确认服务在运行

systemctl status isc-dhcp-server
# 或
systemctl status dnsmasq

2. 开启调试模式

isc-dhcp-server

/usr/sbin/dhcpd -f -d -cf /etc/dhcp/dhcpd.conf eth0
  • -f 前台运行
  • -d 调试日志

3. 检查配置文件语法

dhcpd -t -cf /etc/dhcp/dhcpd.conf

4. 查看服务器日志

journalctl -u isc-dhcp-server
/var/log/syslog | grep dhcpd

常见错误:

  • 子网未声明
  • 地址池冲突
  • 接口未监听

5. 确认监听接口

ss -lunp | grep 67

四、调试 DHCP 中继(relay)

dhcrelay -d -i eth0 192.168.1.1

抓包:

tcpdump -i eth0 port 67 or port 68

确认:

  • 收到 Discover
  • 转发到服务器
  • 收到 Offer 并回传

五、常见问题速查表

现象 可能原因
只有 Discover 服务端没收到 / 防火墙
有 Offer 无 ACK 地址冲突 / 配置错误
客户端超时 VLAN / 防火墙 / 中继
拿到错误网段 IP 多 DHCP / 中继配置错

六、防火墙注意事项

iptables -A INPUT -p udp --dport 67 -j ACCEPT
iptables -A INPUT -p udp --dport 68 -j ACCEPT

如果你能告诉我:

  • 用的 发行版
  • DHCP 软件(isc / dnsmasq / kea)
  • 是 客户端还是服务器问题

我可以直接给你更精确的命令和排错步骤。

0 踩