我有一台主机正在获取 DHCP 分配的地址,该地址错误的具体来说,MAC 地址被保留给 DHCP 服务器中的特定地址,并且客户端不会获取该地址,而是被其他程序接收,从而获取另一个随机地址。
我正在尝试弄清楚网络上是否有其他东西提供 DHCP 租约(这将非常具体地解释这一切),但不幸的是,随着从旧的 dhcp 客户端切换到网络管理器,不再可能做到这一点这边走因为没有 dhclient.leases 文件。DHCPOFFER 也没有日志条目,/var/lib/NetworkManager/*.lease 中也没有 dhcp-server-identifier
tcpdump
这看起来像是有价值的调试信息,所以如果它存在于系统的某个地方而不是被简单地丢弃,那就太好了;如果在启动过程中已经分配了地址,那么检查数据包就不那么简单了……
答案1
A) DHCP客户端诊断
这很简单,但有时还不够。“多个 DHCP 服务器问题”有时需要更高级的分析。
IP地址释放与续费:
sudo dhclient -v -r
sudo dhclient -v
命令响应的简化示例为:
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 3 (xid=0xc4b0e053)
DHCPACK of 10.1.1.110 from 10.1.1.1 (xid=0xeb675d5d)
搜索从列表中的子句,例如... from 10.1.1.1 ...
。这是您的客户端从中获取 IP 地址的 DHCP 服务器地址。
B) 网络数据包诊断
这是一种非常有用且可靠的诊断方法。安装 Wireshark 并捕获 DHCP 数据包。
sudo apt-get install wireshark
在 Wireshark 安装过程中确认选项全部用户可以捕获数据。
添加wireshark群组到您的用户:
sudo usermod -aG wireshark <your_user_name>
groups <your_user_name>
上面的第二个命令验证 wireshark 组是否已添加到您。
注销并登录或重启 PC。然后启动 Wireshark。从接口列表中选择您的 LAN 接口并开始捕获。
在Wireshark窗口的捕获过滤器字段中输入bootp
或udp.port==67 or udp.port==68
字符串。该字段位于顶部。您可以很容易地找到它,里面是文本:“应用显示过滤器”。输入过滤子句文本后按回车键。
在终端中输入命令来强制 DHCP 活动:
sudo dhclient -v -r
sudo dhclient -v
在 Wireshark 主字段中查看数据包。您将看到发送 DHCP 提供的远程设备的 IP 地址。
解压“动态主机配置协议”行并检查详细信息。