DHCP 服务器
文章目录
- DHCP 服务器
- DHCP 服务介绍
- DHCP 通信过程
- 多 DHCP 服务器场景
- DHCP 服务器部署
- 安装 DHCP 软件包
- 文件配置
- 启用并启动服务
- 客户端配置
- 基于 MAC 地址的 IP 预留
- 配置步骤
DHCP 服务器
DHCP 服务介绍
DHCP(Dynamic Host Configuration Protocol)即动态主机配置协议,是一种应用于局域网的网络协议,采用 UDP 协议和 C/S 模式,用于集中管理和分配 IP 地址等网络参数。
- 核心功能:为网络中的主机动态分配 IP 地址、默认网关、DNS 服务器地址、子网掩码等网络参数,实现网络配置的自动化,提升地址使用率 。比如在大型公司局域网中,员工的设备接入网络时可自动获取 IP 等参数,无需手动配置。
- 协议版本:主要有用于 IPv4 网络的 DHCPv4 和用于 IPv6 网络的 DHCPv6,本文重点介绍 DHCPv4。
- 通信端口:DHCP 服务器使用 67/udp 端口,DHCPv4 客户端使用 68/udp 端口,DHCPv6 客户端使用 546/udp 端口 。
- 分配方式
- 自动分配:客户端首次获取到 IP 地址后永久使用。
- 手动分配:由管理员指定 IP 地址。
- 动态分配:客户端暂时使用 IP 地址,使用完毕或租约到期后释放,供其他客户端使用,能有效解决 IP 地址不足的问题。
DHCP 通信过程
- 发现阶段(DISCOVER)
- 客户端未分配 IP 时,通过网卡向广播地址
255.255.255.255
发送DHCPDISCOVER
数据包。 - 限制:路由器默认不转发该广播,需 DHCP 服务器与客户端在同一物理网络,或配置DHCP 中继代理转发消息。
- 客户端未分配 IP 时,通过网卡向广播地址
- 提供阶段(OFFER)
- DHCP 服务器接收
DHCPDISCOVER
后,发送DHCPOFFER
数据包响应。 - 包含内容:服务器自身 IP、分配给客户端的 IP、IP 租用期限、默认网关、DNS 服务器等参数。
- DHCP 服务器接收
- 请求阶段(REQUEST)
- 客户端收到
DHCPOFFER
后,广播DHCPREQUEST
数据包,确认接受目标服务器的 IP 配置。 - 必要性:网络中可能存在多台 DHCP 服务器,该数据包需指定目标服务器 IP,避免冲突。
- 客户端收到
- 确认阶段(ACK)
- 目标 DHCP 服务器接收
DHCPREQUEST
后,发送DHCPACK
数据包,确认客户端对该 IP 的独占使用权(至租约到期)。
- 目标 DHCP 服务器接收
租约续约流程
- 租约到期前,客户端主动向 DHCP 服务器发送
DHCPREQUEST(renew)
数据包申请续约。 - 服务器同意后,回复
DHCPACK(renew)
数据包,延长租约;若拒绝,客户端需重新请求新 IP。
多 DHCP 服务器场景
冲突处理机制
- 首次分配 IP:客户端收到多台服务器的
DHCPOFFER
后,仅接受一台的配置,广播DHCPREQUEST
指定目标服务器,其他服务器释放预留 IP。 - 租约续约
- 非权威服务器:忽略未知 IP 的
DHCPREQUEST
。 - 权威服务器:若请求 IP 在自身管理范围但未记录,发送
DHCPNAK
拒绝,客户端需重新申请新 IP。
- 非权威服务器:忽略未知 IP 的
- 默认状态:DHCP 服务器默认是非权威的,避免接管权威服务器的 IP 地址。
DHCP 服务器部署
安装 DHCP 软件包
[root@server ~ 10:11:58]# yum install -y dhcp
文件配置
配置参数说明
参数 | 作用 |
---|---|
subnet ... netmask ... | 定义管理的子网及子网掩码 |
range | 指定可分配的 IP 地址范围 |
option routers | 设置客户端的默认网关 |
option broadcast-address | 设置子网广播地址 |
option domain-name-servers | 指定 DNS 服务器 IP |
option domain-search | 指定 DNS 域搜索列表(用于简化域名访问) |
default-lease-time | 客户端未指定租约时的默认有效期(秒) |
max-lease-time | 服务器允许的最长租约有效期(秒) |
authoritative | 声明服务器对该子网的 IP 分配具有权威性 |
[root@server ~ 10:11:58]# cat /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
#
[root@server ~ 10:13:02]# cp /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
cp:是否覆盖"/etc/dhcp/dhcpd.conf"? y
[root@server ~ 10:13:52]# vim /etc/dhcp/dhcpd.conf
[root@server ~ 16:51:37]# cat /etc/dhcp/dhcpd.conf
# option definitions common to all supported networks...
# 设置域名
option domain-name "yang.cloud";
#设置DNS
option domain-name-servers 223.5.5.5, 223.6.6.6;#默认租约时间
default-lease-time 600;
#最大租约时间
max-lease-time 7200;#日志级别
log-facility local7;#配置DHCP池
subnet 10.1.8.0 netmask 255.255.255.0 {range 10.1.8.101 10.1.8.130;#option domain-name-servers ns1.internal.example.org;#option domain-name "internal.example.org";option routers 10.1.8.2;option broadcast-address 10.1.8.255;#default-lease-time 600;#max-lease-time 7200;
}
# Fixed IP addresses can also be specified for hosts. These addresses
# should not also be listed as being available for dynamic assignment.
# Hosts for which fixed IP addresses have been specified can boot using
# BOOTP or DHCP. Hosts for which no fixed address is specified can only
# be booted with DHCP, unless there is an address range on the subnet
# to which a BOOTP client is connected which has the dynamic-bootp flag
# set.
#根据Mac地址配置固定IP
host fantasia {hardware ethernet 08:00:07:26:c0:a5;fixed-address fantasia.fugue.com;
}
启用并启动服务
[root@server ~ 10:39:41]# systemctl enable dhcpd --now
Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service.
[root@server ~ 10:39:55]# systemctl status dhcpd
● dhcpd.service - DHCPv4 Server DaemonLoaded: loaded (/usr/lib/systemd/system/dhcpd.service; enabled; vendor preset: disabled)Active: active (running) since 四 2025-09-25 10:39:55 CST; 12s ago
...Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)Active: inactive (dead)Docs: man:firewalld(1)
客户端配置
在客户端添加一张NAT网卡
[root@client ~ 10:41:26]# ip -br a
lo UNKNOWN 127.0.0.1/8 ::1/128
ens33 UP 10.1.8.11/24 fe80::20c:29ff:fef5:b10b/64
ens37 UP 10.1.8.101/24 fe80::fef1:2cec:159a:4343/64
基于 MAC 地址的 IP 预留
应用场景
为 Web 服务器、数据库服务器等需要固定 IP 的设备,绑定 MAC 地址与 IP,确保每次分配相同 IP。
配置步骤
查看客户端 MAC 地址
[root@client ~ 11:08:28]# ip -br link
lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
ens33 UP 00:0c:29:f5:b1:0b <BROADCAST,MULTICAST,UP,LOWER_UP>
ens37 UP 00:0c:29:f5:b1:15 <BROADCAST,MULTICAST,UP,LOWER_UP>
修改 DHCP 服务器配置
在/etc/dhcp/dhcpd.conf
末尾添加
# Fixed IP addresses can also be specified for hosts. These addresses
# should not also be listed as being available for dynamic assignment.
# Hosts for which fixed IP addresses have been specified can boot using
# BOOTP or DHCP. Hosts for which no fixed address is specified can only
# be booted with DHCP, unless there is an address range on the subnet
# to which a BOOTP client is connected which has the dynamic-bootp flag
# set.
#根据Mac地址配置固定IP
host client.cloud {hardware ethernet 00:0c:29:f5:b1:15;
# 预留的固定IP为10.1.8.100fixed-address 10.1.8.100;
}
重启 DHCP 服务
[root@server ~ 11:08:51]# systemctl restart dhcpd
客户端验证
[root@client ~ 11:09:33]# ip -br a
lo UNKNOWN 127.0.0.1/8 ::1/128
ens33 UP 10.1.8.11/24 fe80::20c:29ff:fef5:b10b/64
ens37 UP 10.1.8.100/24 fe80::fef1:2cec:159a:4343/64