DHCP 全流程拆解:通信原理 + Linux 配置 + 客户端调试一站式指南
网络服务配置实战:DHCP 与 DNS 服务器部署
DHCP 服务器
DHCP 服务介绍
在大规模网络环境中,静态分配 IP 地址存在两大核心问题:
- 难以避免多台设备重复使用同一 IP 地址,引发地址冲突;
- 新设备入网需手动配置 IP,在云环境等自动化部署场景中效率极低。
动态主机配置协议(DHCP,Dynamic Host Configuration Protocol)可实现 IP 地址、默认网关、DNS 服务器、域或 NTP 服务器等网络参数的自动分配,通过部署 DHCP 服务器能够集中管控全网的网络配置参数。
DHCP 分为两个版本:
- DHCPv4:适用于 IPv4 网络环境;
- DHCPv6:适用于 IPv6 网络环境。
本文仅聚焦 DHCPv4 的配置与部署。
DHCP 通信过程

origin_url=%2FD%3A%2FDesktop%2FFile%2F%E6%96%87%E4%BB%B6%2Fpictures%2Fdhcp.png&pos_id=img-5JWISvPy-1779800445299)

DHCPv4 客户端与服务器的完整通信流程如下:
- 客户端初始化网络接口时,会向广播地址
255.255.255.255发送DHCPDISCOVER报文,用于发现网络中的 DHCP 服务器。由于路由器默认不转发该广播报文,DHCP 服务器需与客户端处于同一物理网络;若跨网段部署,需将路由器配置为 DHCP 中继代理,负责转发 DHCP 消息。 - DHCP 服务器接收到
DHCPDISCOVER报文后,会回复DHCPOFFER报文,包含服务器自身 IP、分配给客户端的 IP 地址、IP 租用期限及网关、DNS 等网络参数。 - 客户端收到
DHCPOFFER报文后,会广播DHCPREQUEST报文确认使用该 IP 地址。此步骤的核心作用是:当网络中存在多台 DHCP 服务器时,客户端仅选择其中一台的配置,并在报文中携带目标服务器的 IP 地址,告知其他服务器释放预留的 IP。 - 目标 DHCP 服务器收到
DHCPREQUEST报文后,发送DHCPACK报文确认,客户端自此获得该 IP 的独占使用权,直至租约到期。

IP 租约续约流程:
- 租约到期前,客户端会定期向服务器发送
DHCPREQUEST报文申请续约; - 服务器确认后,回复报文同意续约,客户端继续使用该 IP。
可通过以下命令查看 DHCP 客户端与服务器的通信日志:
# 查看dhcpd服务的通信消息
journalctl --unit=dhcpd.service
DHCPDISCOVER from 00:0c:29:26:13:b5 via eth0 # 客户端发送发现报文
DHCPOFFER on 10.1.8.101 to 00:0c:29:26:13:b5 (hosta) via eth0 # 服务器发送提供报文
DHCPREQUEST for 10.1.8.101 (10.1.8.2) from 00:0c:29:26:13:b5 (hosta) via eth0 # 客户端确认请求
DHCPACK on 10.1.8.101 to 00:0c:29:26:13:b5 (hosta) via eth0 # 服务器确认分配
多 DHCP 服务器场景说明
尽管 DHCP 支持同一物理网络部署多台服务器,但不推荐此做法,通常单台服务器即可满足需求。
-
新客户端发送
DHCPDISCOVER时,可能收到多台服务器的DHCPOFFER,客户端仅选择其一,并广播包含目标服务器 IP 的DHCPREQUEST,其他服务器释放预留 IP; -
客户端续约时,服务器行为取决于 “权威性”:
- 非权威服务器:忽略未知 IP 的
DHCPREQUEST报文; - 权威服务器:若客户端请求的 IP 属于自身管理网段但未记录,会发送
DHCPNAK报文拒绝,客户端需重新申请 IP。
- 非权威服务器:忽略未知 IP 的
-
默认配置下,DHCP 服务器为非权威状态,可避免非权威服务器抢占权威服务器的地址分配权限。
部署 DHCP 服务器
前置检查
配置 DHCPv4 服务器前,需通过ip addr命令确认网络接口已配置广播地址(BROADCAST),且服务器需配置静态 IP 地址。
接口配置示例:
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:e5:be:0f brd ff:ff:ff:ff:ff:ff
inet 10.1.8.10/24 brd 10.1.8.255 scope global ens160
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fee5:be0f/64 scope link
valid_lft forever preferred_lft forever
安装 DHCP 软件
# 安装软件包
[root@server ~ 17:28:29]# yum install -y dhcp
配置 DHCP 服务器
DHCP 服务的核心配置文件为/etc/dhcp/dhcpd.conf,官方提供了配置示例文件,可先复制示例文件再修改:
# 复制示例配置文件到默认路径
[root@server ~ 17:57:02]# /bin/cp /usr/share/doc/dhcp-*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
# 编辑配置文件
[root@server ~ 18:34:07]# vim /etc/dhcp/dhcpd.conf
典型配置示例
# 定义10.1.8.0/24网段的DHCP配置
subnet 10.1.8.0 netmask 255.255.255.0 {
range 10.1.8.101 10.1.8.130; # 可分配的IP地址范围
option domain-name-servers 223.5.5.5; # DNS服务器地址
option domain-name "liu.cloud"; # 域名
option routers 10.1.8.2; # 默认网关
option broadcast-address 10.1.8.255; # 广播地址
default-lease-time 600; # 默认租约时长(秒)
max-lease-time 7200; # 最大租约时长(秒)
}
配置项说明
| 配置项 | 作用 |
|---|---|
| authoritative | 声明服务器对所在子网具有权威性 |
| subnet | 定义待管理的子网段 |
| range | 指定可分配的 IP 地址范围 |
| option routers | 分配给客户端的默认网关地址 |
| option domain-name-servers | 分配给客户端的 DNS 服务器地址 |
| option domain-search | 分配给客户端的 DNS 域搜索列表 |
| default-lease-time | 客户端未指定租约时的默认租期(秒) |
| max-lease-time | 服务器允许的最大租约时长(秒) |
验证 DHCP 配置
# 检查配置文件语法正确性
[root@server ~ 18:36:48]# dhcpd -t
Internet Systems Consortium DHCP Server 4.2.5
Copyright 2004-2013 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file
启用并启动服务
# 设置DHCP服务开机自启并立即启动
[root@server ~ 18:37:49]# systemctl enable dhcpd --now
# 查看DHCP服务运行状态
[root@server ~ 18:38:13]# systemctl status dhcpd
查看日志和租约记录
# 实时监控DHCP日志(含分配、报错、地址冲突、授权问题等)
[root@server ~18:38:41]# tail -f /var/log/messages
配置 DHCP 客户端
配置网卡自动获取 IP
通过 NetworkManager 配置网卡自动获取 IP,示例中网卡设备名为 ens36:
# 创建动态IP连接配置
[root@client ~ 18:40:47]# nmcli connection add con-name dynamic type ethernet ifname ens36
连接 "dynamic" (176349ba-b257-440a-b568-1399c9b6f890) 已成功添加。
# 激活该连接
[root@client ~ 18:40:57]# nmcli connection up dynamic
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/29)
# 验证IP获取结果
[root@client ~ 18:41:24]# ip addr show ens36
3: ens36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:34:d1:d8 brd ff:ff:ff:ff:ff:ff
inet 10.1.8.110/24 brd 10.1.8.255 scope global noprefixroute dynamic ens36
valid_lft 573sec preferred_lft 573sec
inet6 fe80::56c8:a958:1c7b:6d0a/64 scope link noprefixroute
valid_lft forever preferred_lft forever
dhclient 工具
dhclient 是 DHCP 客户端工具,用于手动触发 IP 申请、释放等操作。
命令帮助
[root@client ~ 18:41:51]# dhclient --help
Internet Systems Consortium DHCP Client 4.2.5
Copyright 2004-2013 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Usage: dhclient [-4|-6] [-SNTPI1dvrxc] [-nw] [-p <port>] [-D LL|LLT]
[-s server-addr] [-cf config-file] [-lf lease-file]
[-pf pid-file] [--no-pid] [-e VAR=val]
[-I <dhcp-client-identifier>] [-B]
[-H <host-name> | -F <fqdn.fqdn>] [-timeout <timeout>]
[-V <vendor-class-identifier>]
[-R <request option list>]
[-sf script-file] [interface]
This version of ISC DHCP is based on the release available
on ftp.isc.org. Features have been added and other changes
have been made to the base software release in order to make
it work better with this distribution.
Please report for this software via the CentOS Bugs Database:
http://bugs.centos.org/
exiting.
基于 MAC 地址预留 IP 地址
通过host声明可将 MAC 地址与 IP 地址绑定,适用于需固定 IP 的服务器(如 Web、数据库服务器)。
步骤 1:查看客户端 MAC 地址
[root@client ~ 18:42:45]# ip link show ens36
3: ens36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 00:0c:29:34:d1:d8 brd ff:ff:ff:ff:ff:ff
步骤 2:配置 IP 绑定
在/etc/dhcp/dhcpd.conf末尾添加以下配置,将 MAC 地址00:0c:29:34:d1:d8绑定到10.1.8.130:
host client.liu.cloud {
hardware ethernet 00:0c:29:34:d1:d8# 客户端网卡MAC地址
fixed-address 10.1.8.130; # 预留的固定IP地址
}
步骤 3:重启服务并验证
# 重启DHCP服务使配置生效
[root@server ~ 18:51:21]# systemctl restart dhcpd
# 客户端激活连接并验证IP
[root@client ~ 18:51:49]# nmcli connection up dynamic
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/30)
[root@client ~ 18:51:58]# ip addr show ens36
3: ens36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:34:d1:d8 brd ff:ff:ff:ff:ff:ff
inet 10.1.8.130/24 brd 10.1.8.255 scope global noprefixroute dynamic ens36
valid_lft 590sec preferred_lft 590sec
inet6 fe80::56c8:a958:1c7b:6d0a/64 scope link noprefixroute
valid_lft forever preferred_lft forever
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)