Rocky Linux 下 DHCP 服务配置详细文档

简介: DHCP(动态主机配置协议)是局域网中用于自动分配IP地址、网关、DNS等网络参数的核心协议,工作于UDP 67/68端口。通过“发现-提供-请求-确认”四步租约机制,实现客户端即插即用,提升IP利用率。支持固定IP绑定、跨子网中继及多网段超级作用域配置,广泛应用于各类网络环境。

一、DHCP 简介

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是工作在应用层的局域网网络协议,依赖 UDP 不可靠传输协议实现数据传输,广泛应用于大型局域网环境。其核心作用是集中管理和分配网络资源,让网络中的主机能动态获取 IP 地址、网关(Gateway)地址、DNS 服务器地址等关键网络配置信息,同时有效提升 IP 地址的使用率,避免地址浪费。

二、DHCP 工作原理

DHCP 工作流程主要包括“租约四部曲”(DHCP Discover、DHCP Offer、DHCP Request、DHCP ACK/NAK)以及后续的续租过程,具体如下:

(一)租约四部曲

  1. DHCP Discover(客户端IP请求)
    当 DHCP 客户端启动时,会自动将自身 IP 地址配置为 0.0.0.0,由于该地址无法实现正常通信,客户端必须向 DHCP 服务器请求合法 IP。因客户端未知 DHCP 服务器 IP,会以 0.0.0.0 为源地址、255.255.255.255 为目标地址(广播地址),通过 UDP 67 端口广播 DHCP Discover 消息。该消息包含客户端的 MAC 地址和计算机名,便于 DHCP 服务器识别请求来源。
  2. DHCP Offer(服务器响应请求)
    DHCP 服务器接收到客户端的 IP 请求后,会在自身的 IP 地址池中检索是否有可用的合法 IP 地址。若存在可用 IP,服务器会对该 IP 做标记,并将其纳入 DHCP Offer 消息中,随后以自身 IP 为源地址、255.255.255.255 为目标地址、UDP 68 端口为源端口广播 DHCP Offer 消息。消息内容包括:客户端 MAC 地址、提供的合法 IP 地址、子网掩码、默认网关、IP 租约期限、DHCP 服务器 IP 地址等。
  3. DHCP Request(客户端选择IP)
    DHCP 客户端会从接收到的第一个 DHCP Offer 消息中选定 IP 地址,发送该 Offer 的 DHCP 服务器会将此 IP 保留,防止分配给其他客户端。之后,客户端会向所有 DHCP 服务器广播 DHCP Request 消息,表明已接受某台服务器提供的 IP 配置,消息中包含提供该配置的服务器 IP(服务标识符)。未被选中的服务器会取消之前的 Offer,收回 IP 地址以备后续分配。此过程中,客户端仍未配置 IP,故继续使用 0.0.0.0 为源地址、255.255.255.255 为目标地址、UDP 67 端口为目的端口广播消息。
  4. DHCP ACK/NAK(服务器确认租约)
  • DHCP ACK(确认租约):DHCP 服务器接收到 DHCP Request 消息后,若确认客户端请求合法,会以广播形式向客户端发送 DHCP ACK 消息,包含 IP 地址的有效租约及其他配置信息。广播时,服务器以自身 IP 为源地址、255.255.255.255 为目标地址、UDP 68 端口为源端口。客户端接收 ACK 消息后,完成 IP 配置及 TCP/IP 初始化。
  • DHCP NAK(拒绝租约):若客户端请求无效(如试图租用已不可用的旧 IP、客户端迁移到其他子网导致 IP 无效等),服务器会广播 DHCP NAK 消息。客户端接收 NAK 后,需重新启动 DHCP 租约申请流程。

(二)特殊情况说明

  1. 若 DHCP 客户端无法找到 DHCP 服务器,会从 TCP/IP 的 B 类网段 169.254.0.0/16 中随机选取一个 IP 作为临时地址,同时每隔 5 分钟尝试与 DHCP 服务器通信。一旦建立连接,客户端会放弃临时 IP,使用服务器分配的合法 IP。
  2. 客户端接收 DHCP ACK 报文后,若通过地址冲突检测(ARP)发现分配的 IP 存在冲突或因其他原因无法使用,会发送 DECLINE 报文,告知服务器该 IP 不可用。

(三)DHCP 客户端续租

  1. 当 IP 租约期限过去 50% 时,客户端会直接向为其分配 IP 的 DHCP 服务器发送 DHCP Request 消息,请求续租。若收到服务器回复的 DHCP ACK 消息,客户端会根据消息中的新租约期限及更新的 TCP/IP 参数,更新自身配置,完成续租。若未收到回复,客户端继续使用当前 IP,因剩余租约仍可支持正常通信。
  2. 若在租约 50% 时未完成续租,客户端会在租约过去 87.5% 时再次向原 DHCP 服务器发送续租请求。若此次仍未成功,当租约到期(100%)时,客户端必须放弃当前 IP,重新发起 IP 申请。若此时无可用 DHCP 服务器,客户端会从 169.254.0.0/16 网段随机选取 IP,并每隔 5 分钟重复尝试连接 DHCP 服务器。

三、DHCP 服务搭建准备

(一)实验环境准备

  1. 准备两台虚拟机,将网络连接模式设置为“自定义 VMnet*”模式(如 VMnet1、VMnet8 等,确保两台机器处于同一虚拟网络)。
  2. 关闭相关防护机制,避免影响 DHCP 服务通信:
  • 关闭防火墙:执行systemctl stop firewalld
  • 关闭 SELinux:执行 getenforce 查看 SELinux 状态,若为 Enforcing 模式,执行 setenforce 0 临时关闭,若需永久关闭,编辑 /etc/selinux/config 文件,将 SELINUX=enforcing 改为 SELINUX=disabled,重启系统生效。
  • 关闭 VMware 虚拟网络编辑器的 DHCP 功能:打开 VMware,进入“编辑”->“虚拟网络编辑器”,选择对应虚拟网络(如 VMnet*),取消勾选“使用本地 DHCP 服务将 IP 地址分配给虚拟机”,点击“确定”保存。

(二)DHCP 相关基础信息

  1. 软件包
  • dhcp:DHCP 服务核心软件包,提供 DHCP 服务器功能。
  • dhcp-common:DHCP 命令工具软件包,包含 DHCP 相关辅助命令。
    dnf install dhcp-server dhcp-common -y
    
  1. 服务名
  • dhcpd:DHCP 服务器服务名,用于启动、停止、重启 DHCP 服务。
  • dhcrelay:DHCP 中继服务名,实现不同子网间 DHCP 消息转发时使用。
  1. 端口号
  • UDP 67:作为 DHCP 客户端的目标端口,客户端向服务器发送请求时使用。
  • UDP 68:作为 DHCP 服务器的源端口,服务器向客户端回复消息时使用。
  1. 配置文件
  • /etc/dhcp/dhcpd.conf:DHCP 服务器主配置文件,默认为空,需从模板文件复制并修改后使用。
  • /usr/share/doc/dhcp-server/dhcpd.conf.example:DHCP 配置模板文件,提供标准配置示例,需根据实际需求调整。
  • /etc/sysconfig/dhcrelay:DHCP 中继服务配置文件,配置 DHCP 中继时使用。

四、DHCP 服务配置实操

(一)基本功能配置(动态分配IP)

  1. 生成主配置文件
    执行以下命令,将模板配置文件复制到 DHCP 主配置文件路径,覆盖默认空文件:
    cp -a /usr/share/doc/dhcp-4.*.*/dhcpd.conf.sample /etc/dhcp/dhcpd.conf
    (注:需将命令中的“dhcp-4..”替换为实际系统中存在的版本目录,可通过 ls /usr/share/doc/ | grep dhcp 查看具体版本)
  2. 修改主配置文件
    使用文本编辑器(如 vim)打开主配置文件:vim /etc/dhcp/dhcpd.conf
  • 注释掉文件中前几个默认的 subnet 声明(通常以 subnet 10.0.0.0 netmask... 开头),避免冲突。
  • 保留并修改最后一个 subnet 声明,配置实际网络参数,示例如下:
    subnet 192.168.88.0 netmask 255.255.255.0{  # 声明要分配的网段及子网掩码
      range 192.168.88.3 192.168.88.254;  # 声明可用IP地址池范围
      option domain-name "atguigu.com";  # 设置DNS域名
      option domain-name-servers 8.8.8.8;  # 设置DNS服务器IP(此处使用谷歌DNS,可替换为其他DNS)
      option routers 192.168.88.2;  # 设置默认网关IP
      option broadcast-address 192.168.88.255;  # 设置广播地址(可选,可省略)
      default-lease-time 600;  # 设置默认租约期限,单位为秒(此处为10分钟)
      max-lease-time 7200;  # 设置最大租约期限,单位为秒(此处为2小时)
    }
    
  • 保存并退出编辑器(vim 中执行 :wq),注意配置文件中每行结尾需加英文分号,大括号需成对出现,避免语法错误。
  1. 启动 DHCP 服务
    执行命令启动 DHCP 服务:systemctl start dhcpd
  • 若需设置 DHCP 服务开机自启动,执行:systemctl enable dhcpd
  • 执行 systemctl status dhcpd 查看服务状态,确保服务正常运行(状态显示“active (running)”)。
  1. 客户端验证
    在 DHCP 客户端虚拟机上,执行以下命令重启网卡,获取 DHCP 服务器分配的 IP:
    ifdown eth0; ifup eth0(若网卡名称为 ens33 等,需替换为实际网卡名,可通过 ip addr 查看)
  • 执行 ip addrifconfig 查看客户端 IP 地址,确认是否从配置的地址池(如 192.168.88.3-192.168.88.254)中获取到合法 IP。
  • 执行 ping 网关IP(如 ping 192.168.88.2)和 ping DNS服务器IP(如 ping 8.8.8.8),验证网络连通性。

(二)保留地址配置(固定IP分配)

当需要为特定客户端(如服务器、打印机等)分配固定 IP 时,可通过配置保留地址实现,具体步骤如下:

  1. 获取客户端 MAC 地址
    在 DHCP 服务器或客户端上,执行 arp -a 命令查看客户端的 MAC 地址(格式如 00:0c:29:3a:b4:5c),或在客户端执行 ip link show 查看(“link/ether”后即为 MAC 地址)。
  2. 修改 DHCP 主配置文件
    打开 /etc/dhcp/dhcpd.conf 文件,在之前配置的 subnet 声明内部或外部(推荐在 subnet 内部)添加 host 声明,配置固定 IP 映射,示例:
    subnet 192.168.88.0 netmask 255.255.255.0{
     # 其他已配置参数(如 range、option 等)...
     host fantasia{  # 自定义主机名(可任意命名,便于识别)
         hardware ethernet 00:0c:29:3a:b4:5c;  # 客户端的 MAC 地址
         fixed-address 192.168.88.10;  # 分配给该客户端的固定 IP(可使用地址池外的 IP)
     }
    }
    
  • 保存并退出配置文件。
  1. 重启 DHCP 服务
    执行 systemctl restart dhcpd 重启服务,使配置生效,执行 systemctl status dhcpd 确认服务正常。
  2. 客户端验证
    在目标客户端上重启网卡(ifdown eth0; ifup eth0),执行 ip addr 查看 IP,确认是否已分配到配置的固定 IP(如 192.168.88.10)。

(三)超级作用域配置(同一局域网多网段分配)

超级作用域允许 DHCP 服务器为单个物理网络上的客户端提供多个网段的 IP 租约,适用于网络中客户端数量较多、单个网段地址不足的场景,配置步骤如下:

  1. 实验环境准备
    准备三台虚拟机:1 台作为 DHCP 服务器,2 台作为客户端,所有机器设置为同一自定义虚拟网络模式(如 VMnet8)。
  2. 配置 DHCP 服务器单臂路由(子网卡)
    为 DHCP 服务器添加子网卡,实现多网段路由:
  • 配置子接口:

    # 创建 VLAN 子接口
    sudo nmcli connection add type vlan \
    con-name vlan-eth0-200 \
    ifname eth0.200 \
    dev eth0 \
    id 200
    
    # 配置 IP 地址
    sudo nmcli connection modify vlan-enp3s0-200 \
    ipv4.method manual \
    ipv4.addresses 192.168.99.10/24 \
    ipv4.gateway 192.168.99.1 \
    ipv4.dns "192.168.99.1"
    
    # 启用连接
    sudo nmcli connection up vlan-enp3s0-200
    
  1. 开启 DHCP 服务器路由转发
    编辑内核参数配置文件,开启 IP 转发功能:
  • 执行 vim /etc/sysctl.conf,添加或修改以下参数:net.ipv4.ip_forward = 1
  • 执行 sysctl -p 刷新配置,使路由转发立即生效(无需重启系统)。
  1. 修改 DHCP 主配置文件
    打开 /etc/dhcp/dhcpd.conf,注释掉之前的 subnet 声明和 host 声明(若有),添加 shared-network 声明(超级作用域),配置多网段参数,示例:
    shared-network public {  # 超级作用域名称(自定义,如 public)
     subnet 192.168.88.0 netmask 255.255.255.0{  # 第一个网段
         option routers 192.168.88.10;  # 该网段默认网关(DHCP服务器原网卡IP)
         range 192.168.88.100 192.168.88.110;  # 该网段IP地址池
     }
     subnet 192.168.99.0 netmask 255.255.255.0{  # 第二个网段
         option routers 192.168.99.10;  # 该网段默认网关(DHCP服务器子网卡IP)
         range 192.168.99.100 192.168.99.110;  # 该网段IP地址池
     }
     # 可根据需求添加更多 subnet 声明(多网段)
    }
    
  • 保存并退出文件,确保语法正确(分号、大括号完整)。
  1. 重启 DHCP 服务
    执行 systemctl restart dhcpd 重启服务,确认服务状态正常(systemctl status dhcpd)。
  2. 客户端验证
    分别在两台客户端上重启网卡(ifdown eth0; ifup eth0),执行 ip addr 查看 IP 地址,确认两台客户端分别从不同网段(如 192.168.88.0/24 和 192.168.99.0/24)获取到 IP,且网关配置正确。

(四)DHCP 中继配置(跨子网IP分配)

当网络中存在多个子网,且仅部署一台 DHCP 服务器时,需通过 DHCP 中继实现跨子网的 IP 分配,DHCP 中继负责在不同子网间转发 DHCP 消息,配置步骤如下:

1. 实验环境准备

  • DHCP 服务器:1 台,网卡 eth0 配置静态 IP 192.168.10.10,网络模式为 VMnet10。
  • DHCP 中继服务器:1 台,双网卡配置,eth0(VMnet10)IP 192.168.10.20,eth1(VMnet11)IP 100.100.100.20。
  • 客户端:1 台(外网客户端),网卡 eth0 设为自动获取 IP,网络模式为 VMnet11。
  • 关闭所有机器的防火墙(firewalld/iptables)和 SELinux,确保网络互通。

2. 配置 DHCP 服务器

  1. 安装 DHCP 软件包
    执行 yum -y install dhcp 安装 DHCP 服务(若已安装可跳过)。
  2. 修改 DHCP 主配置文件
    打开 /etc/dhcp/dhcpd.conf,配置两个子网(分别对应 VMnet10 和 VMnet11 网段),示例:
    # 第一个子网(VMnet10,DHCP服务器所在子网,实验中可暂不使用该地址池)
    subnet 192.168.10.0 netmask 255.255.255.0 {
     range 192.168.10.100 192.168.10.110;  # 该子网IP地址池
     option routers 192.168.10.20;  # 网关为中继服务器eth0 IP
    }
    # 第二个子网(VMnet11,外网客户端所在子网)
    subnet 100.100.100.0 netmask 255.255.255.0 {
     range 100.100.100.100 100.100.100.110;  # 该子网IP地址池
     option routers 100.100.100.20;  # 网关为中继服务器eth1 IP
    }
    
  • 保存并退出文件,删除或注释其他无关配置。
  1. 启动并设置 DHCP 服务自启
    执行 systemctl start dhcpd 启动服务,systemctl enable dhcpd 设置开机自启,systemctl status dhcpd 确认服务正常。

3. 配置 DHCP 中继服务器

  1. 配置双网卡静态 IP
  • eth0 网卡配置,命令如下:

    sudo nmcli connection modify eth0 \
    ipv4.method manual \
    ipv4.addresses 192.168.10.20/24 \
    ipv4.gateway 192.168.10.1 \
    ipv4.dns "8.8.8.8 8.8.4.4"
    
    sudo nmcli connection up eth0
    
  • eth1 网卡配置,命令如下:

    sudo nmcli connection modify eth0 \
    ipv4.method manual \
    ipv4.addresses 192.168.20.20/24 \
    ipv4.gateway 192.168.20.1 \
    ipv4.dns "8.8.8.8 8.8.4.4"
    
    sudo nmcli connection up eth1
    

    执行 ip addr 确认双网卡 IP 配置正确。

  1. 安装 DHCP 软件包
    执行 yum -y install dhcp 安装(需包含 dhcrelay 组件)。
  2. 修改 DHCP 中继配置文件
    编辑 /etc/sysconfig/dhcrelay 文件,配置中继监听接口和 DHCP 服务器地址:
    INTERFACES="eth0 eth1"  # 中继监听的网卡接口(eth0 连接 DHCP 服务器,eth1 连接客户端子网)
    DHCPSERVERS="192.168.10.10"  # DHCP 服务器的 IP 地址
    
  • 保存并退出文件。
  1. 开启路由转发
    编辑 /etc/sysctl.conf,确保 net.ipv4.ip_forward = 1(若未设置则添加),执行 sysctl -p 生效。
  2. 启动并设置中继服务自启
    执行 systemctl start dhcrelay 启动中继服务,systemctl enable dhcrelay 设置开机自启,systemctl status dhcrelay 确认服务正常。

  3. 客户端验证
    在 VMnet11 子网的客户端上,执行 ifdown eth0; ifup eth0 重启网卡,执行 ip addr 查看 IP 地址,确认是否从 DHCP 服务器配置的 192.168.20.20.100-192.168.20.20.110 地址池中获取到 IP。同时执行 ping 192.168.10.10(DHCP 服务器 IP)和 ping 192.168.20.20.20(中继服务器 eth1 IP),验证跨子网通信是否正常。

(七):配置 IP 与 MAC 绑定

编辑 DHCP 主配置文件 /etc/dhcp/dhcpd.conf,在 subnet 声明内部或外部添加 host 节点(推荐在 subnet 内部,确保网段匹配):

vim /etc/dhcp/dhcpd.conf

添加绑定配置(以“绑定 MAC 为 00:0c:29:3a:b4:5c 的设备到 IP 192.168.88.10 为例):

subnet 192.168.88.0 netmask 255.255.255.0{
    # 原有动态分配配置(range、option 等)...

    # IP 与 MAC 绑定配置(自定义 host 名称,如 fantasia)
    host fantasia{
        hardware ethernet 00:0c:29:3a:b4:5c;  # 客户端 MAC 地址(需与实际一致)
        fixed-address 192.168.88.10;         # 绑定的固定 IP(可在地址池内/外)
    }

    # 可添加多个绑定(复制 host 节点即可)
    # host printer{
    #     hardware ethernet 00:0c:29:4d:c8:7e;
    #     fixed-address 192.168.88.11;
    # }
}
相关文章
|
16天前
|
弹性计算 Linux 数据安全/隐私保护
阿里云幻兽帕鲁联机服务器搭建全攻略,速来抄作业!2026新版教程
阿里云推出2026年幻兽帕鲁一键开服教程,提供4核16G(89元/月,支持8人)和8核32G(160元/月,支持20人)配置,10M带宽,自动部署游戏服务。用户只需在STEAM购买游戏,输入服务器地址即可联机畅玩,全流程简单便捷。
315 3
|
24天前
|
Java 编译器 C++
google protobuf3中文手册
本文介绍 Protocol Buffers proto3 语言的使用规范,涵盖 `.proto` 文件语法、消息与字段定义、枚举、映射、服务接口及代码生成等内容,指导开发者正确设计和更新数据结构,确保跨语言兼容性与二进制安全。
|
8天前
|
人工智能 应用服务中间件 API
刚刚,阿里云上线Clawdbot全套云服务!
阿里云上线Moltbot(原Clawdbot)全套云服务,支持轻量服务器/无影云电脑一键部署,可调用百炼平台百余款千问模型,打通iMessage与钉钉消息通道,打造开箱即用的AI智能体助手。
3173 30
刚刚,阿里云上线Clawdbot全套云服务!
|
21天前
|
数据采集 人工智能 IDE
告别碎片化日志:一套方案采集所有主流 AI 编程工具
本文介绍了一套基于MCP架构的轻量化、多AI工具代码采集方案,支持CLI、IDE等多类工具,实现用户无感、可扩展的数据采集,已对接Aone日志平台,助力AI代码采纳率分析与研发效能提升。
395 46
告别碎片化日志:一套方案采集所有主流 AI 编程工具
|
27天前
|
存储 弹性计算 对象存储
阿里云服务器租用费用价格:2026手动整理一年、1个月和1小时收费标准
2026年阿里云服务器租用价格出炉,涵盖轻量应用服务器、ECS、GPU服务器等多种类型。提供38元/年起秒杀价,99元/年起爆款套餐,支持按年、月、小时计费,覆盖个人开发者至企业级应用场景,附带详细选型建议与附加费用说明。
280 10
|
1月前
|
人工智能 安全 API
Nacos 安全护栏:MCP、Agent、配置全维防护,重塑 AI Registry 安全边界
Nacos安全新标杆:精细鉴权、无感灰度、全量审计!
621 66
|
21天前
|
SQL 人工智能 Java
告别传统 Text-to-SQL:基于 Spring AI Alibaba 的数据分析智能体 DataAgent 深度解析
DataAgent是基于Spring AI Alibaba生态构建的企业级AI数据分析师,融合NL2SQL、多智能体协作与RAG技术,支持多数据源分析、自动纠错与可视化报告生成,让业务人员零代码获取深度数据洞察。
1034 42
告别传统 Text-to-SQL:基于 Spring AI Alibaba 的数据分析智能体 DataAgent 深度解析
|
28天前
|
人工智能 自然语言处理 API
数据合成篇|多轮ToolUse数据合成打造更可靠的AI导购助手
本文提出一种面向租赁导购场景的工具调用(Tool Use)训练数据合成方案,以支付宝芝麻租赁助理“小不懂”为例,通过“导演-演员”式多智能体框架生成拟真多轮对话。结合话题路径引导与动态角色交互,实现高质量、可扩展的合成数据生产,并构建“数据飞轮”推动模型持续优化。实验表明,该方法显著提升模型在复杂任务中的工具调用准确率与多轮理解能力。
279 43
数据合成篇|多轮ToolUse数据合成打造更可靠的AI导购助手
|
23天前
|
数据采集 监控 数据可视化
快速上手:LangChain + AgentRun 浏览器沙箱极简集成指南
AgentRun Browser Sandbox 是基于云原生函数计算的浏览器沙箱服务,为 AI Agent 提供安全、免运维的浏览器环境。通过 Serverless 架构与 CDP 协议支持,实现网页抓取、自动化操作等能力,并结合 VNC 实时可视化,助力大模型“上网”交互。
410 43