如果 Linux 之间存在相关差异:我对 Debian 8.1(默认最小安装 amd64)感兴趣。
ISC 的 DHCP 客户端通常dhclient
在大多数 Linux 发行版中被调用。来自man dhclient
:
客户端通常在其启动序列期间不打印任何输出。通过提供 -v 命令行参数,它可以发出显示启动序列事件的详细消息,直到它获得地址。在任何一种情况下,客户端都使用 syslog(3) 工具记录消息。
有两种可能的方法来读取系统日志。在大多数使用 systemd 的系统上,您必须使用journalctl
, 而cat /var/log/syslog
对于仍然使用传统 init 系统的系统有效。
因此,如果您的系统正在使用 systemd 的日志记录工具,您可以使用journalctl | grep -Ei 'dhcp'
获取 DHCP 客户端日志。否则,输入cat /var/log/syslog | grep -Ei 'dhcp'
。
这是我的 DHCP 客户端日志通常的样子:
Jul 20 14:17:39 trueclient1 NetworkManager[2622]: <info> (wlan1): canceled DHCP transaction, DHCP client pid 3325
Jul 20 14:17:42 trueclient1 NetworkManager[2622]: <info> Activation (wlan1) Beginning DHCPv4 transaction (timeout in 45 seconds)
Jul 20 14:17:42 trueclient1 dhclient: Internet Systems Consortium DHCP Client 4.2.2
Jul 20 14:17:42 trueclient1 dhclient: For info, please visit https://www.isc.org/software/dhcp/
Jul 20 14:17:42 trueclient1 NetworkManager[2622]: <info> (wlan1): DHCPv4 state changed nbi -> preinit
Jul 20 14:17:42 trueclient1 dhclient: DHCPREQUEST on wlan1 to 255.255.255.255 port 67
Jul 20 14:17:42 trueclient1 dhclient: DHCPACK from 10.8.8.1
Jul 20 14:17:42 trueclient1 NetworkManager[2622]: <info> (wlan1): DHCPv4 state changed preinit -> reboot
Run Code Online (Sandbox Code Playgroud)
在许多 Linux 平台上调试 dhclient 的一种黑客(但有效)方法是在/sbin/dhclient-script 中启用bash 跟踪。
dhclient 在我检查过的大多数操作系统变体(RedHat、Debian 等)上运行该脚本。
简单地添加-x
到该脚本中的shebang(第一行)应该能够跟踪每一行到控制台,例如:
#!/bin/bash -x
Run Code Online (Sandbox Code Playgroud)
然后你可以运行,例如
dhclient -r #release lease
dhclient #re-acquire lease
Run Code Online (Sandbox Code Playgroud)
您应该会看到大量输出,不仅来自 dhclient-script,还来自.d
/etc/dhcp* 中包含的所有脚本。
跟踪输出应该允许您弄清楚发生了什么以及代码正在做出什么决定(在查看输出时参考脚本本身)。
您通常可以推断出脚本从该输出接收到的输入(例如,包括 IP、GATEWAY 等的参数),但如果没有,您可以在退出前临时向脚本添加类似这样的内容:
env | logger -t dhclient-debugging
Run Code Online (Sandbox Code Playgroud)
然后在运行 dhclient(/var/log/messages 或 /var/log/syslog)后检查您的日志
归档时间: |
|
查看次数: |
68498 次 |
最近记录: |