Orange的运维学习日记--33.DHCP详解与服务部署
Orange的运维学习日记–33.DHCP详解与服务部署
文章目录
- Orange的运维学习日记--33.DHCP详解与服务部署
- DHCP 服务概述
- DHCP 工作原理
- 四阶段租约流程
- 租约续订与释放
- 常见报文类型
- 部署 DHCP 服务器
- 准备工作
- 安装与初始配置
- 核心配置示例
- 配置项详解
- 扩展配置
- 启用与验证
- 客户端配置与验证
- NetworkManager 集成
- dhclient 工具
- 基于 MAC 地址的预留
- DHCP 中继服务器
- 中继作用
- 报文转发流程
- 部署步骤
- 环境概览
- 配置服务器路由
- 安装中继服务
- 启用 IP 转发
- 使用 Dnsmasq 提供轻量化 DHCP 与中继
- 功能概览
- 安装与基本配置
- DHCP 服务器示例
- DHCP 中继示例
- 常见故障排查
- 常见故障排查
DHCP 服务概述
动态主机配置协议 DHCP(Dynamic Host Configuration Protocol)通过自动化方式分配 IP 地址、子网掩码、默认网关、DNS 服务器、NTP 服务器等网络参数
在大规模网络环境中,手动静态分配 IP 地址容易出现地址冲突并增加运维成本
部署集中式 DHCP 服务器能够实现网络参数统一管理、简化新主机部署流程并提升网络稳定性
DHCP 分为两种主要协议版本
- DHCPv4 针对 IPv4 网络
- DHCPv6 针对 IPv6 网络
本指南重点介绍 DHCPv4 的工作原理、服务器与中继部署及使用 Dnsmasq 轻量化解决方案
DHCP 工作原理
四阶段租约流程
客户端与服务器通过 Discover–Offer–Request–Ack 四步完成租约协商
- 客户端通过广播发送 DHCPDISCOVER 包到 255.255.255.255 寻找可用服务器
- 服务器收到 Discover 后根据可用地址池生成 DHCPOFFER 包,包含待分配 IP、租约时长、网关、DNS 等信息
- 客户端收到多个 Offer 后通过广播发送 DHCPREQUEST 指定所选服务器并确认所用地址
- 服务器接收 Request 后发送 DHCPACK 确认租约生效,或在地址不可用时发送 DHCPNAK
租约续订与释放
- 客户端在租期到达一半时发送单播 DHCPREQUEST 向同一服务器续约
- 若续约失败或服务器返回 NAK,客户端会重新进入 Discover 阶段申请新地址
- 客户端在不再需要时发送 DHCPRELEASE 释放当前租约以便服务器回收地址
常见报文类型
报文名称 | 方向 | 用途说明 |
---|---|---|
DHCPDISCOVER | 客户端 → 广播 | 客户端发现网络中的 DHCP 服务器 |
DHCPOFFER | 服务器 → 客户端 | 提供可用 IP 地址及网络参数 |
DHCPREQUEST | 客户端 → 广播 | 客户端确认所选服务器并请求使用该地址 |
DHCPACK | 服务器 → 客户端 | 确认租约生效 |
DHCPNAK | 服务器 → 客户端 | 否认请求,客户端需重新申请 |
DHCPRELEASE | 客户端 → 服务器 | 客户端主动释放已分配地址 |
DHCPDECLINE | 客户端 → 广播 | 客户端检测到冲突拒绝 Offer |
部署 DHCP 服务器
准备工作
服务器需配置静态 IP 以保证网络可达性
确保 67/UDP 与 68/UDP 端口在防火墙或安全组中打开
使用命令 ip addr
确认网卡具备 BROADCAST 标志及正确网段地址
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 …inet 10.1.8.10/24 brd 10.1.8.255 scope global ens160
安装与初始配置
yum install -y dhcp
firewall-cmd --add-service=dhcp --permanent
firewall-cmd --reload
示例配置文件位于 /usr/share/doc/dhcp-*/dhcpd.conf.example
复制到 /etc/dhcp/dhcpd.conf
并根据实际网络调整
cp /usr/share/doc/dhcp-*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
vim /etc/dhcp/dhcpd.conf
核心配置示例
## 将本服务器设为子网权威
authoritative## 定义子网和地址池
subnet 10.1.8.0 netmask 255.255.255.0 {range 10.1.8.101 10.1.8.200option routers 10.1.8.2option broadcast-address 10.1.8.255option domain-name-servers 223.5.5.5,223.6.6.6option domain-name "laoma.cloud"default-lease-time 600max-lease-time 7200
}
配置项详解
- authoritative
声明本服务器对配置子网具有最终管理权限 - subnet … netmask
定义 DHCP 管理的子网网段与掩码 - range
指定可自动分配的 IP 地址池起止范围 - option routers
指定客户端默认网关 - option domain-name-servers
提供一或多个 DNS 服务器地址 - option domain-name
设置 DHCP 客户端的 DNS 搜索域 - default-lease-time 与 max-lease-time
分别定义客户端默认租期及允许的最大租期,单位秒
扩展配置
- shared-network
跨 VLAN 或物理网段共享同一地址池 - ddns-update-style
动态 DNS 更新策略,可设置为 none 或 interim - include
从/etc/dhcp/dhcpd.conf.d/
目录下加载分割配置文件
启用与验证
dhcpd -t ## 检查配置语法
systemctl enable dhcpd --now
systemctl status dhcpd
journalctl -u dhcpd -f ## 实时查看客户请求日志
租约数据库位于 /var/lib/dhcp/dhcpd.leases
,可检查历史分配记录
客户端配置与验证
NetworkManager 集成
nmcli connection add con-name dynamic type ethernet ifname ens192
nmcli connection up dynamic
查看分配结果
ip addr show ens192
dhclient 工具
手动申请 IP
dhclient -v ens192 ## 请求租约并打印详细过程
释放并重新申请
dhclient -r ens192
dhclient -v ens192
浏览租约文件 /var/lib/dhclient/dhclient.leases
可查看租约详情
基于 MAC 地址的预留
在 /etc/dhcp/dhcpd.conf
中添加 host 段,实现固定分配
host client01 {hardware ethernet 00:0c:29:26:13:b5fixed-address 10.1.8.30option host-name "client01"
}
systemctl restart dhcpd
客户端重连后即可获取指定 IP 并保持租期续约
DHCP 中继服务器
中继作用
当 DHCP 客户端与服务器不在同一广播域时,客户端广播 Discover 不会被路由器转发
DHCP 中继(Relay Agent)在客户端与服务器之间转发 DHCP 报文,支持跨子网分配
报文转发流程
客户端广播 Discover → 同网段 Relay Agent 接收并将报文封装成单播发送到服务器
服务器单播 Offer → Relay Agent 接收后转发给客户端
部署步骤
环境概览
节点 | 接口 IP | 网络 |
---|---|---|
dhcp-server | 10.1.8.10/24 | vmnet8 |
dhcp-relay (eth0) | 10.1.8.20/24 | vmnet8 |
dhcp-relay (eth1) | 10.1.1.20/24 | vmnet1 |
dhcp-client | 动态获取 | vmnet1 |
配置服务器路由
服务器需能单播回复到中继子网地址
nmcli connection modify ens160 ipv4.routes "10.1.1.20/32 10.1.8.20"
nmcli connection up ens160
安装中继服务
yum install -y dhcp
cp /usr/lib/systemd/system/dhcrelay.service /etc/systemd/system/
vim /etc/systemd/system/dhcrelay.service
在 ExecStart 行末尾添加服务器地址
ExecStart=/usr/sbin/dhcrelay -d --no-pid 10.1.8.10
重新加载并启动
systemctl daemon-reload
systemctl enable dhcrelay --now
启用 IP 转发
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
使用 Dnsmasq 提供轻量化 DHCP 与中继
功能概览
Dnsmasq 集成 DNS 缓存、DHCP 服务器、DHCP 中继、TFTP/PXE 引导功能
适合资源受限或小规模网络环境快速部署
安装与基本配置
yum install -y dnsmasq
vim /etc/dnsmasq.conf
可将配置拆分至 /etc/dnsmasq.d/
目录管理
DHCP 服务器示例
## 权威模式
dhcp-authoritative## 定义地址池 10.1.8.50–10.1.8.150 /24 租期 12 小时
dhcp-range=10.1.8.50,10.1.8.150,255.255.255.0,12h## 固定分配 hostname 与 MAC
dhcp-host=00:0c:29:26:13:b5,client01,10.1.8.30,45m## 默认网关与 DNS
dhcp-option=option:router,10.1.8.2
dhcp-option=option:dns-server,218.2.135.1,223.5.5.5## NTP 服务器
dhcp-option=option:ntp-server,10.1.8.2
启动并验证
systemctl enable dnsmasq --now
systemctl status dnsmasq
journalctl -u dnsmasq -f
DHCP 中继示例
在 /etc/dnsmasq.conf
中添加 dhcp-relay 设置
## 将来自 eth1(10.1.1.20)的请求转发到服务器 10.1.8.10
dhcp-relay=10.1.1.20,10.1.8.10
同样启用 IP 转发后重启服务
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
systemctl restart dnsmasq
常见故障排查
- 检查服务器与中继网络连通性
- 确认防火墙允许 UDP 67/68 端口进出
- 使用 tcpdump 抓包验证 Discover 与 Offer 是否到达
- 查看日志
/var/log/messages
或journalctl -u dhcpd
/dnsmasq
- 确认中继服务中指定的服务器 IP 与客户端报文一致
- 检查租约数据库是否异常增长或锁定情况
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
systemctl restart dnsmasq
常见故障排查
- 检查服务器与中继网络连通性
- 确认防火墙允许 UDP 67/68 端口进出
- 使用 tcpdump 抓包验证 Discover 与 Offer 是否到达
- 查看日志
/var/log/messages
或journalctl -u dhcpd
/dnsmasq
- 确认中继服务中指定的服务器 IP 与客户端报文一致
- 检查租约数据库是否异常增长或锁定情况