文章目录
- [DHCP 服务器](#DHCP 服务器)
-
- [DHCP 服务介绍](#DHCP 服务介绍)
- [DHCP 通信过程](#DHCP 通信过程)
- [多个 DHCP 服务器](#多个 DHCP 服务器)
- [部署 DHCP 服务器](#部署 DHCP 服务器)
-
- [安装 DHCP 软件](#安装 DHCP 软件)
- [配置 DHCP 服务器](#配置 DHCP 服务器)
- [验证 DHCP 配置](#验证 DHCP 配置)
- 启用并启动服务
- [配置 DHCP 客户端](#配置 DHCP 客户端)
- [基于 MAC 地址预留 IP 地址](#基于 MAC 地址预留 IP 地址)
-
- [查看客户端 MAC 地址](#查看客户端 MAC 地址)
- [配置 IP 预留](#配置 IP 预留)
DHCP 服务器
DHCP 服务介绍
在大型网络中,系统静态分配 IP 地址存在两个关键问题:
是难以避免多个系统使用相同 IP 地址的冲突情况;
是新系统部署时通常要手动分配 IP,而云环境中实例网络需自动化配置。
动态主机配置协议(DHCP)能自动配置 IP 地址、默认网关、DNS 服务器、域或 NTP 服务器等网络参数,在网络中部署 DHCP 服务器可集中控制这些参数。
DHCP 包含两种协议,分别是
- 用于 IPv4 网络的 DHCPv4
- 用于 IPv6 网络的 DHCPv6
DHCP 通信过程
- 客户端配置 DHCPv4 网络接口时,会向 255.255.255.255 广播地址发送 DHCPDISCOVER 数据包。由于路由器一般不转发该广播地址,所以 DHCP 服务器需与客户端在同一物理网络,也可将路由器配置为 DHCP 中继代理转发 DHCP 消息。
- DHCP 服务器收到 DHCPDISCOVER 数据包后,会发送包含自身 IP 地址、客户端待使用 IP 地址、租用期限及其他网络参数的 DHCPOFFER 数据包。
- 客户端收到 DHCPOFFER 数据包后,会广播包含接受请求的 DHCP 服务器 IP 地址的 DHCPREQUEST 数据包,这是因为网络中可能存在多个 DHCP 服务器或路由器转发多个 DHCPOFFER。
- DHCP 服务器收到 DHCPREQUEST 数据包后,发送 DHCPACK 数据包,确认客户端在租约到期前对该 IP 地址拥有独占权限。
- 租约到期前,客户端会定期发送 DHCPREQUEST 数据包向服务器续约。
- 若 DHCP 服务器同意续约,会发送 DHCPACK(renew)数据包。
在 DHCP 服务器上,可使用 journalctl --unit=dhcpd.service 命令查看客户端与服务端的通信消息。
多个 DHCP 服务器
虽然 DHCP 支持在物理网络上运行多个 DHCP 服务器,但通常不建议这样做,同一物理网络一般只需一台 DHCP 服务器响应客户端请求。
当网络中有多个 DHCP 服务器时,新客户端发送 DHCPDISCOVER 数据包后可能收到多个 DHCPOFFER 数据包,客户端仅接受其中一个并广播包含该服务器 IP 地址的 DHCPREQUEST 数据包,其他 DHCP 服务器会释放为该客户端准备的 IP 地址。
客户端更新 IP 地址时,服务器行为取决于其是否具有权威性:
- 非权威 DHCP 服务器会忽略 DHCPREQUEST 数据包中未知的地址。
- 若客户端发送的 IP 地址在权威 DHCP 服务器管理的地址范围内但服务器此前未知,会拒绝请求并发送 DHCPNAK 数据包,客户端需重新请求新地址。
部署 DHCP 服务器
用 ip addr 命令确认网络接口配置是否指定 BROADCAST 地址
bash
[root@server named 16:11:20]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:a5:1f:86 brd ff:ff:ff:ff:ff:ff
inet 10.1.8.10/24 brd 10.1.8.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fea5:1f86/64 scope link
valid_lft forever preferred_lft forever
安装 DHCP 软件
bash
# 安装软件包
[root@server named 16:31:19]# yum install -y dhcp
# 关闭防火墙,防止防火墙阻挡dhcp服务
[root@server ~ 16:38:33]# systemctl stop firewalld.service
配置 DHCP 服务器
bash
# 配置域名
option domain-name "server.wan";
# 配置 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;
}
# 根据 Mac 地址配置固定 IP
host fantasia {
hardware ethernet 00:0c:29:41:12:79;
fixed-address 10.1.8.100;
}
配置说明:
- authoritative:指示服务器对所管理的子网具有权威性。
- subnet:提供子网详情。
- range:指定服务器分配 IP 地址的范围。
- option routers:指定默认网关地址。
- option domain-name-servers:指定 DNS 名称服务器。
- option domain-search:指定 DNS 域搜索列表。
- default-lease-time:客户端未指定租期时的默认网络信息租期,单位为秒。
- max-lease-time:服务器可接受的客户端请求的最大租期,单位为秒。
验证 DHCP 配置
bash
# 验证配置文件语法
[root@server ~ 16:44:37]# 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
# 若输出结果中返回 0,表明配置文件无问题
[root@server ~ 16:46:06]# echo $?
0
启用并启动服务
bash
# 启用并启动服务
[root@server ~ 16:47:05]# systemctl enable dhcpd --now
# 查看服务状态
[root@server ~ 16:48:40]# systemctl status dhcpd
● dhcpd.service - DHCPv4 Server Daemon
Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; enabled; vendor preset: disabled)
Active: active (running) since 四 2025-09-25 13:36:19 CST; 3h 12min ago
...
配置 DHCP 客户端
bash
# 添加自动获取 IP 连接,并激活
[root@client ~ 16:50:41]# nmcli connection up 有线连接\ 1
# 验证
[root@client ~ 16:50:58]# ip addr show ens37
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:41:12:79 brd ff:ff:ff:ff:ff:ff
inet 10.1.8.100/24 brd 10.1.8.255 scope global noprefixroute dynamic ens37
valid_lft 556sec preferred_lft 556sec
inet6 fe80::3788:7a2d:3ec4:f69f/64 scope link noprefixroute
valid_lft forever preferred_lft forever
基于 MAC 地址预留 IP 地址
在配置文件中,通过 host 声明可将 MAC 地址与 IP 地址绑定,此配置对 Web 服务器、数据库系统等需固定 IP 的特定系统非常有用。
查看客户端 MAC 地址
bash
[root@client ~ 16:51:42]# ip link show ens37
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 00:0c:29:41:12:79 brd ff:ff:ff:ff:ff:ff
配置 IP 预留
bash
# 在/etc/dhcp/dhcpd.conf末尾添加如下内容:
[root@server ~ 16:52:41]# vim /etc/dhcp/dhcpd.conf
host client.wan{
hardware ethernet 00:0c:29:41:12:79;
fixed-address 10.1.8.11;
}
# 重启服务
[root@server ~ 16:56:39]# systemctl restart dhcpd
# 激活连接
[root@client ~ 17:00:58]# nmcli connection up 有线连接\ 1
# 验证
[root@client ~ 17:01:08]# ip addr show ens37
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:41:12:79 brd ff:ff:ff:ff:ff:ff
inet 10.1.8.11/24 brd 10.1.8.255 scope global noprefixroute dynamic ens37
valid_lft 576sec preferred_lft 576sec
inet6 fe80::3788:7a2d:3ec4:f69f/64 scope link noprefixroute
valid_lft forever preferred_lft forever