下面我将为您详细介绍几种常用且有效的方法。

第一步:确认您使用的 DHCP 服务器
在开始之前,最好先确认系统上运行的是哪个 DHCP 服务,通常有以下几种:
- ISC DHCP Server (
isc-dhcp-server):这是最常见、最标准的实现,在 Debian、Ubuntu 等发行版中默认使用。 - ISC DHCP Server (
dhcpd):在 RHEL、CentOS、Fedora、Rocky Linux、AlmaLinux 等发行版中,软件包名通常是dhcp,服务名为dhcpd。 dnsmasq:一个轻量级的 DNS 和 DHCP 服务器,常用于小型网络、家庭路由器或容器中。
您可以使用以下命令来检查:
# 检查 dhcpd 服务是否存在并运行 (适用于 RHEL/CentOS) systemctl status dhcpd # 检查 isc-dhcp-server 服务是否存在并运行 (适用于 Debian/Ubuntu) systemctl status isc-dhcp-server # 检查 dnsmasq 服务是否存在并运行 systemctl status dnsmasq
第二步:根据服务器类型进行查看
这里我们主要介绍最主流的 ISC DHCP Server 的查看方法,最后会补充 dnsmasq 的查看方法。
查看服务运行状态和日志(最常用)
这是排查问题的第一步,可以快速了解服务是否正在运行以及最近的错误信息。

检查服务状态
# 对于 Debian/Ubuntu sudo systemctl status isc-dhcp-server # 对于 RHEL/CentOS sudo systemctl status dhcpd
如果服务没有运行,可以使用 sudo systemctl start dhcpd 或 sudo systemctl start isc-dhcp-server 来启动它。
查看实时日志
DHCP 服务器的日志通常会记录在系统日志中,使用 journalctl 可以非常方便地查看。

# 查看 DHCP 服务器的实时日志,按时间倒序排列 sudo journalctl -u dhcpd -f # 或者对于 Debian/Ubuntu sudo journalctl -u isc-dhcp-server -f
关键日志信息:
No subnet declaration for eth0:表示 DHCP 服务器配置文件中没有为网络接口eth0定义子网。No free leases on subnet ...:表示该子网内的 IP 地址池已经用完。failed to start up:服务启动失败,通常是配置文件有语法错误。
检查配置文件语法
如果您修改了配置文件,最好先检查语法是否正确。
# 对于 RHEL/CentOS sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf # 对于 Debian/Ubuntu sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf
如果命令没有输出,说明语法正确,如果有错误,它会提示你具体的错误位置和原因。
查看 DHCP 服务器配置文件
直接查看服务器的配置文件,可以了解 IP 地址池、租期、网关、DNS 等核心设置。
定位配置文件
- RHEL/CentOS/Fedora:
/etc/dhcp/dhcpd.conf - Debian/Ubuntu:
/etc/dhcp/dhcpd.conf
查看配置文件内容
sudo cat /etc/dhcp/dhcpd.conf
配置文件关键信息解读:
# 核心配置示例
default-lease-time 600; # 默认租约时间(秒)
max-lease-time 7200; # 最大租约时间(秒)
# 为特定的网络接口(如 eth0)定义子网
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200; # 可分配的 IP 地址池
option routers 192.168.1.1; # 客户端的默认网关
option domain-name-servers 8.8.8.8, 8.8.4.4; # 客户端的 DNS 服务器
option subnet-mask 255.255.255.0; # 客户端的子网掩码
}
查看 DHCP 租约信息(非常重要)
这部分信息显示了当前哪些客户端(设备)正在从 DHCP 服务器获取 IP 地址,以及租约的详细信息。
租约文件位置
- RHEL/CentOS/Fedora:
/var/lib/dhcpd/dhcpd.leases - Debian/Ubuntu:
/var/lib/dhcp/dhcpd.leases
查看租约文件
sudo cat /var/lib/dhcp/dhcpd.leases
租约文件内容解读:
这个文件是二进制格式,但 cat 可以查看其文本内容,每一项租约通常包含以下信息:
lease 192.168.1.101 {
starts 4 2025/10/27 10:00:00;
ends 4 2025/10/27 12:00:00;
hardware ethernet 00:1a:2b:3c:4d:5e; # 客户端的 MAC 地址
client-hostname "My-Laptop";
}
字段说明:
lease <ip_address>:分配给客户端的 IP 地址。starts:租约开始的时间。ends:租约到期的时间。hardware ethernet <mac_address>:客户端的 MAC 地址,这是标识客户端的关键。client-hostname <hostname>:客户端报告的主机名。
手动管理租约(可选)
-
查看当前租约:
# 查看 DHCP 服务器当前管理的所有租约 sudo dhcpdleases -l /var/lib/dhcp/dhcpd.leases
注意:
dhcpdleases工具可能需要单独安装。 -
释放特定 IP 的租约: 如果某个设备不再使用 IP 但租约未到期,导致新设备无法获取 IP,可以手动释放。
# 假设要释放 192.168.1.101 的租约 echo "lease 192.168.1.101 { hardware ethernet 00:1a:2b:3c:4d:5e; }" > /tmp/release_lease.conf # 使用 dhcpd 命令释放租约 sudo dhcpd -cf /etc/dhcp/dhcpd.conf -tf /tmp/release_lease.conf -pf /var/run/dhcpd.pid -lf /var/lib/dhcp/dhcpd.leases release注意:这种方法比较复杂,更简单的方式是重启 DHCP 服务,但这会中断所有现有连接。
使用 dhcputils 工具(高级)
dhcputils 包含了一些强大的命令行工具,用于与 DHCP 服务器交互。
安装工具
# Debian/Ubuntu sudo apt-get install dhcpdump # RHEL/CentOS sudo yum install dhcpdump
使用 dhcpdump 抓包分析
dhcpdump 可以抓取网络上的 DHCP 数据包,用于分析客户端和服务器之间的交互,是网络排错的利器。
# 在 DHCP 服务器所在的网络接口上抓包,eth0 sudo dhcpdump -i eth0
使用 dhcdbd (可选)
这是一个守护进程,可以让你通过 DBus 或其他接口远程管理 DHCP 服务器状态和配置,比较复杂,不常用。
补充:查看 dnsmasq 的 DHCP 信息
如果您的服务器使用的是 dnsmasq,查看方法会更简单。
查看服务状态
sudo systemctl status dnsmasq
查看配置文件
配置文件通常是 /etc/dnsmasq.conf 或 /etc/dnsmasq.d/ 目录下的配置文件。
sudo cat /etc/dnsmasq.conf | grep -E 'dhcp-range|dhcp-option'
查看 DHCP 租约
dnsmasq 的租约文件通常在 /var/lib/misc/dnsmasq.leases。
# 查看租约信息,格式更易读 sudo cat /var/lib/misc/dnsmasq.leases
租约文件格式(比 ISC 的更简洁):
mac_address ip_address hostname lease_start lease_end
总结与排错思路
| 想要查看的信息 | 推荐命令/方法 | 说明 |
|---|---|---|
| 服务是否运行 | sudo systemctl status dhcpd |
首要检查,确保服务已启动且无错误。 |
| 服务日志/错误 | sudo journalctl -u dhcpd -f |
排查问题的核心,查看启动失败、配置错误等信息。 |
| IP 地址池和设置 | sudo cat /etc/dhcp/dhcpd.conf |
了解服务器的分配策略,检查 IP 池是否定义正确。 |
| 当前谁在使用 IP | sudo cat /var/lib/dhcp/dhcpd.leases |
查看当前活跃的 DHCP 租约,关联 MAC 地址和 IP。 |
| 网络数据交互 | sudo dhcpdump -i eth0 |
高级排错工具,用于分析 DHCP 报文,定位客户端无法获取 IP 的原因。 |
| 客户端无法获取 IP | 检查服务状态和日志。 检查 dhcpd.conf 中的子网和 range。检查防火墙是否阻止了 UDP 67/68 端口。 检查客户端是否在正确的 VLAN 或网络中。 |
这是最常见的问题,按此顺序排查通常能找到原因。 |
希望这份详细的指南能帮助您有效地查看和管理 Linux DHCP 服务器!
