- Linux 上的 dhcp 客户端会写入任何日志吗?
- 如果没有,可以启用日志吗?如何启用?
- 如果它写入日志,那么可以在哪里找到它们?
- 从 DHCP 服务器获取 IP 和名称服务器时,dhcp 客户端的典型日志是什么样的?
- 在哪里可以找到 DHCP 客户端的源代码?
如果 Linux 之间存在相关差异:我对 Debian 8.1(默认最小安装 amd64)感兴趣。
答案1
dhclient
在大多数 Linux 发行版中,通常会调用 ISC 的 DHCP 客户端。来自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
答案2
在许多 Linux 平台上调试 dhclient 的一个简单(但有效)的方法是启用bash 跟踪在/sbin/dhclient 脚本。
dhclient 在我检查过的大多数操作系统版本(RedHat、Debian 等)上运行该脚本。
只需-x
在该脚本中添加 shebang(第一行)即可将每一行跟踪到控制台,例如:
#!/bin/bash -x
然后你可以运行,例如
dhclient -r #release lease
dhclient #re-acquire lease
您应该会看到大量输出,不仅来自 dhclient-script,还来自.d
/etc/dhcp* 中包含的所有脚本。
跟踪输出应该允许您弄清楚发生了什么以及代码正在做出什么决定(查看输出时参考脚本本身)。
您通常可以从此输出推断出脚本收到的输入(例如包括 IP、GATEWAY 等的参数),但如果不能,您可以在退出之前临时将类似这样的内容添加到脚本中:
env | logger -t dhclient-debugging
然后运行 dhclient 后检查您的日志(/var/log/messages 或 /var/log/syslog)
答案3
正如本文所提到的回答对于类似的问题,dhcpdump
以可读格式查看 dhcp 数据包很有用:
dhcpdump -i eth0
带有删节值的示例转储:
---------------------------------------------------------------------------
TIME: 2023-12-29 04:44:26.672
IP: 1.2.3.4 (00:00:00:00:00:00d) > 1.2.3.4 (00:00:00:00:00:009)
OP: 2 (BOOTPREPLY)
HTYPE: 1 (Ethernet)
HLEN: 6
HOPS: 0
XID: dd99df6c
SECS: 1
FLAGS: 0
CIADDR: 1.2.3.4
YIADDR: 1.2.3.4
SIADDR: 1.2.3.4
GIADDR: 1.2.3.4
CHADDR: 00:00:00:00:00:009:00:00:00:00:00:000:00:00:00:00
SNAME: .
FNAME: .
OPTION: 53 ( 1) DHCP message type 5 (DHCPACK)
OPTION: 54 ( 4) Server identifier 1.2.3.4
OPTION: 51 ( 4) IP address leasetime 461 (7m41s)
OPTION: 1 ( 4) Subnet mask 1.2.3.4
OPTION: 6 ( 8) DNS server 1.2.3.4,1.2.3.4
OPTION: 15 ( 6) Domainname .local
OPTION: 28 ( 4) Broadcast address 1.2.3.4
OPTION: 121 ( 8) Classless Static Route deadbeefdeadbeef ........
OPTION: 3 ( 4) Routers 1.2.3.4
OPTION: 249 ( 8) MSFT - Classless route deadbeefdeadbeef ........
---------------------------------------------------------------------------
答案4
请在线查找答案。
Linux 上的 dhcp 客户端会写入任何日志吗?
是的,它确实。如果没有,可以启用日志吗?如何启用?
1. Edit dhcpd.conf and add this line
log-facility local7;
2. Edit syslog.conf and append
local7.* /var/log/dhcpd.log
如果它写入日志,那么可以在哪里找到它们?
/var/log/dhcpd.log
- 从 DHCP 服务器获取 IP 和名称服务器时,dhcp 客户端的典型日志是什么样的?
galaxy dhcpd:通过 eth0 从 00:0d:62:d7:a0:12 发出 DHCPDISCOVER
galaxy dhcpd:通过 eth0 从 192.168.1.5 发出 DHCPOFFER 到 00:0d:62:d7:a0:12
galaxy dhcpd:通过 eth0 从 00:0d:62:d7:a0:12 发出针对 192.168.1.5 (192.168.1.1) 的 DHCPREQUEST
galaxy dhcpd:通过 eth0 从 192.168.1.5 发出 DHCPACK 到 00:0d:62:d7:a0:12