DHCP 服务器

文章目录

  • [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 地址存在两个关键问题:

  1. 是难以避免多个系统使用相同 IP 地址的冲突情况;

  2. 是新系统部署时通常要手动分配 IP,而云环境中实例网络需自动化配置。

动态主机配置协议(DHCP)能自动配置 IP 地址、默认网关、DNS 服务器、域或 NTP 服务器等网络参数,在网络中部署 DHCP 服务器可集中控制这些参数。
DHCP 包含两种协议,分别是

  • 用于 IPv4 网络的 DHCPv4
  • 用于 IPv6 网络的 DHCPv6

DHCP 通信过程

  1. 客户端配置 DHCPv4 网络接口时,会向 255.255.255.255 广播地址发送 DHCPDISCOVER 数据包。由于路由器一般不转发该广播地址,所以 DHCP 服务器需与客户端在同一物理网络,也可将路由器配置为 DHCP 中继代理转发 DHCP 消息。
  2. DHCP 服务器收到 DHCPDISCOVER 数据包后,会发送包含自身 IP 地址、客户端待使用 IP 地址、租用期限及其他网络参数的 DHCPOFFER 数据包。
  3. 客户端收到 DHCPOFFER 数据包后,会广播包含接受请求的 DHCP 服务器 IP 地址的 DHCPREQUEST 数据包,这是因为网络中可能存在多个 DHCP 服务器或路由器转发多个 DHCPOFFER。
  4. DHCP 服务器收到 DHCPREQUEST 数据包后,发送 DHCPACK 数据包,确认客户端在租约到期前对该 IP 地址拥有独占权限。
  5. 租约到期前,客户端会定期发送 DHCPREQUEST 数据包向服务器续约。
  6. 若 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
相关推荐
墨^O^2 小时前
网络通信协议全解析:HTTP/UDP/TCP核心要点
linux·服务器·网络·学习
_Re.2 小时前
DSC 参数ARCH_HANG_FLAG对集群的影响
linux·服务器·数据库
红尘客栈23 小时前
Ansible 入门到实战:自动化运维的瑞士军刀
运维·自动化·ansible
微风中的麦穗3 小时前
【远程桌面】运维强推工具之远程控制软件RustDesk 1.4.1 全面指南:开源远程桌面的终极解决方案
运维·远程工具·rustdesk·远程软件·运维神器·办公神器·局域网远程
望获linux3 小时前
【Linux基础知识系列:第一百三十九篇】使用Bash编写函数提升脚本功能
linux·运维·服务器·arm开发·chrome·性能优化·bash
hhhwx6663 小时前
Linux学习记录--利用信号量来调度共享资源(2)
linux·c语言·c++·学习
biubiubiu07063 小时前
coqui-ai/TTS 安装
linux·运维·服务器
麻雀无能为力4 小时前
Pytorch框架笔记
人工智能·pytorch·笔记
打不了嗝 ᥬ᭄4 小时前
【Linux】UDP 网络编程
linux·运维·服务器