当前位置: 首页 > news >正文

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 四步完成租约协商

  1. 客户端通过广播发送 DHCPDISCOVER 包到 255.255.255.255 寻找可用服务器
  2. 服务器收到 Discover 后根据可用地址池生成 DHCPOFFER 包,包含待分配 IP、租约时长、网关、DNS 等信息
  3. 客户端收到多个 Offer 后通过广播发送 DHCPREQUEST 指定所选服务器并确认所用地址
  4. 服务器接收 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-server10.1.8.10/24vmnet8
dhcp-relay (eth0)10.1.8.20/24vmnet8
dhcp-relay (eth1)10.1.1.20/24vmnet1
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/messagesjournalctl -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/messagesjournalctl -u dhcpd / dnsmasq
  • 确认中继服务中指定的服务器 IP 与客户端报文一致
  • 检查租约数据库是否异常增长或锁定情况
http://www.dtcms.com/a/319900.html

相关文章:

  • Linux 系统启动、systemd target 与 root 密码重置指南
  • vector模拟实现
  • Seelen UI:高效的设计与原型制作工具
  • 解决winform中的listbox实现拖拽时,遇到combox控件会闪烁的问题
  • APM-SigNoz可观测性系统搭建
  • TDengine IDMP 文档介绍
  • 密集场所漏检率↓78%!陌讯自适应多模态口罩识别算法实战解析
  • 【bioinfo】ncbiRefSeq数据库下载
  • 零基础-动手学深度学习-9.1. 门控循环单元(GRU)及代码实现
  • 解决 npm i node-sass@4.12.0 安装失败异常 npm i node-sass异常解决
  • 如何使用 pnpm创建Vue 3 项目
  • 玳瑁的嵌入式日记D14-0807(C语言)
  • 蓝凌EKP产品:列表查询性能优化全角度
  • C++引用专题(上):详解C++传值返回和传引用返回
  • JavaScript核心概念解析:从基础语法到对象应用
  • 部署 AddressSanitizer(ASan)定位内存泄漏、内存越界
  • Java+Vue合力开发固定资产条码管理系统,移动端+后台管理,集成资产录入、条码打印、实时盘点等功能,助力高效管理,附全量源码
  • 【保姆级喂饭教程】python基于mysql-connector-python的数据库操作通用封装类(连接池版)
  • SPI TFT全彩屏幕驱动开发及调试
  • Sentinel原理之责任链详解
  • imx6ull-驱动开发篇12——GPIO子系统驱动LED
  • C++高频知识点(十五)
  • Qwen-Image开源模型实战
  • 【Floyd】Shortest Routes II
  • 显卡服务器的作用主要是什么?-哈尔滨云前沿
  • 使用内网穿透工具1分钟上线本地网站至公网可访问,局域网电脑变为服务器
  • Mysql数据仓库备份脚本
  • 2.7 (拓展)非父子通信(事件总线和provide-inject)详解
  • 2025 年华数杯全国大学生数学建模竞赛B题 网络切片无线资源管理方案设计--完整成品、思路、代码、模型结果分享,仅供学习~
  • java 生成pdf导出