如何查看 DHCP 客户端的功能?

Gus*_*ave 19 linux dhcp

  • Linux 上的 dhcp 客户端是否写入任何日志?
  • 如果没有,是否可以启用日志以及如何启用?
  • 如果它写日志,在哪里可以找到它们?
  • 从 DHCP 服务器获取 IP 和名称服务器时,dhcp 客户端的典型日志是什么样的?
  • 在哪里可以找到 DHCP 客户端的源代码?

如果 Linux 之间存在相关差异:我对 Debian 8.1(默认最小安装 amd64)感兴趣。

Lar*_*end 7

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)

  • 在 Debian 8.1 journalctl 上,在 ubuntu-14.04.2-server 上,条目位于 /var/log/syslog 中。谢谢。但是:只有很少的条目,例如只记录 IP 地址,而不记录 DNS 服务器。是否可以配置更详细的输出? (2认同)

ako*_*kom 5

在许多 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)后检查您的日志