DHCP 服务器

文章目录

  • [DHCP 服务器](#DHCP 服务器)
    • [DHCP 服务介绍](#DHCP 服务介绍)
    • [DHCP 通信过程](#DHCP 通信过程)
    • [多 DHCP 服务器场景](#多 DHCP 服务器场景)
    • [DHCP 服务器部署](#DHCP 服务器部署)
    • [基于 MAC 地址的 IP 预留](#基于 MAC 地址的 IP 预留)

DHCP 服务器

DHCP 服务介绍

DHCP(Dynamic Host Configuration Protocol)即动态主机配置协议,是一种应用于局域网的网络协议,采用 UDP 协议和 C/S 模式,用于集中管理和分配 IP 地址等网络参数。

  1. 核心功能:为网络中的主机动态分配 IP 地址、默认网关、DNS 服务器地址、子网掩码等网络参数,实现网络配置的自动化,提升地址使用率 。比如在大型公司局域网中,员工的设备接入网络时可自动获取 IP 等参数,无需手动配置。
  2. 协议版本:主要有用于 IPv4 网络的 DHCPv4 和用于 IPv6 网络的 DHCPv6,本文重点介绍 DHCPv4。
  3. 通信端口:DHCP 服务器使用 67/udp 端口,DHCPv4 客户端使用 68/udp 端口,DHCPv6 客户端使用 546/udp 端口 。
  4. 分配方式
    • 自动分配:客户端首次获取到 IP 地址后永久使用。
    • 手动分配:由管理员指定 IP 地址。
    • 动态分配:客户端暂时使用 IP 地址,使用完毕或租约到期后释放,供其他客户端使用,能有效解决 IP 地址不足的问题。

DHCP 通信过程

  1. 发现阶段(DISCOVER)
    • 客户端未分配 IP 时,通过网卡向广播地址255.255.255.255发送DHCPDISCOVER数据包。
    • 限制:路由器默认不转发该广播,需 DHCP 服务器与客户端在同一物理网络,或配置DHCP 中继代理转发消息。
  2. 提供阶段(OFFER)
    • DHCP 服务器接收DHCPDISCOVER后,发送DHCPOFFER数据包响应。
    • 包含内容:服务器自身 IP、分配给客户端的 IP、IP 租用期限、默认网关、DNS 服务器等参数。
  3. 请求阶段(REQUEST)
    • 客户端收到DHCPOFFER后,广播DHCPREQUEST数据包,确认接受目标服务器的 IP 配置。
    • 必要性:网络中可能存在多台 DHCP 服务器,该数据包需指定目标服务器 IP,避免冲突。
  4. 确认阶段(ACK)
    • 目标 DHCP 服务器接收DHCPREQUEST后,发送DHCPACK数据包,确认客户端对该 IP 的独占使用权(至租约到期)。

租约续约流程

  1. 租约到期前,客户端主动向 DHCP 服务器发送DHCPREQUEST(renew)数据包申请续约。
  2. 服务器同意后,回复DHCPACK(renew)数据包,延长租约;若拒绝,客户端需重新请求新 IP。

多 DHCP 服务器场景

冲突处理机制

  1. 首次分配 IP :客户端收到多台服务器的DHCPOFFER后,仅接受一台的配置,广播DHCPREQUEST指定目标服务器,其他服务器释放预留 IP。
  2. 租约续约
    • 非权威服务器:忽略未知 IP 的DHCPREQUEST
    • 权威服务器:若请求 IP 在自身管理范围但未记录,发送DHCPNAK拒绝,客户端需重新申请新 IP。
  3. 默认状态:DHCP 服务器默认是非权威的,避免接管权威服务器的 IP 地址。

DHCP 服务器部署

安装 DHCP 软件包

bash 复制代码
[root@server ~ 10:11:58]# yum install -y dhcp

文件配置

配置参数说明

参数 作用
subnet ... netmask ... 定义管理的子网及子网掩码
range 指定可分配的 IP 地址范围
option routers 设置客户端的默认网关
option broadcast-address 设置子网广播地址
option domain-name-servers 指定 DNS 服务器 IP
option domain-search 指定 DNS 域搜索列表(用于简化域名访问)
default-lease-time 客户端未指定租约时的默认有效期(秒)
max-lease-time 服务器允许的最长租约有效期(秒)
authoritative 声明服务器对该子网的 IP 分配具有权威性
bash 复制代码
[root@server ~ 10:11:58]# cat /etc/dhcp/dhcpd.conf 
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#
[root@server ~ 10:13:02]# cp /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
cp:是否覆盖"/etc/dhcp/dhcpd.conf"? y
[root@server ~ 10:13:52]# vim /etc/dhcp/dhcpd.conf 
[root@server ~ 16:51:37]# cat /etc/dhcp/dhcpd.conf 
# option definitions common to all supported networks...
# 设置域名
option domain-name "yang.cloud";
#设置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;
}
# Fixed IP addresses can also be specified for hosts.   These addresses
# should not also be listed as being available for dynamic assignment.
# Hosts for which fixed IP addresses have been specified can boot using
# BOOTP or DHCP.   Hosts for which no fixed address is specified can only
# be booted with DHCP, unless there is an address range on the subnet
# to which a BOOTP client is connected which has the dynamic-bootp flag
# set.
#根据Mac地址配置固定IP
host fantasia {
  hardware ethernet 08:00:07:26:c0:a5;
  fixed-address fantasia.fugue.com;
}

启用并启动服务

bash 复制代码
[root@server ~ 10:39:41]# systemctl enable dhcpd --now
Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service.
[root@server ~ 10:39:55]# 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 10:39:55 CST; 12s ago
...
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)

客户端配置

在客户端添加一张NAT网卡

bash 复制代码
[root@client ~ 10:41:26]# ip -br a
lo               UNKNOWN        127.0.0.1/8 ::1/128 
ens33            UP             10.1.8.11/24 fe80::20c:29ff:fef5:b10b/64 
ens37            UP             10.1.8.101/24 fe80::fef1:2cec:159a:4343/64 

基于 MAC 地址的 IP 预留

应用场景

为 Web 服务器、数据库服务器等需要固定 IP 的设备,绑定 MAC 地址与 IP,确保每次分配相同 IP。

配置步骤

查看客户端 MAC 地址

bash 复制代码
[root@client ~ 11:08:28]# ip -br link 
lo               UNKNOWN        00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP> 
ens33            UP             00:0c:29:f5:b1:0b <BROADCAST,MULTICAST,UP,LOWER_UP> 
ens37            UP             00:0c:29:f5:b1:15 <BROADCAST,MULTICAST,UP,LOWER_UP> 

修改 DHCP 服务器配置

/etc/dhcp/dhcpd.conf末尾添加

bash 复制代码
# Fixed IP addresses can also be specified for hosts.   These addresses
# should not also be listed as being available for dynamic assignment.
# Hosts for which fixed IP addresses have been specified can boot using
# BOOTP or DHCP.   Hosts for which no fixed address is specified can only
# be booted with DHCP, unless there is an address range on the subnet
# to which a BOOTP client is connected which has the dynamic-bootp flag
# set.
#根据Mac地址配置固定IP
host client.cloud {
  hardware ethernet 00:0c:29:f5:b1:15;
# 预留的固定IP为10.1.8.100
  fixed-address 10.1.8.100;
}

重启 DHCP 服务

bash 复制代码
[root@server ~ 11:08:51]# systemctl restart dhcpd

客户端验证

bash 复制代码
[root@client ~ 11:09:33]# ip -br a
lo               UNKNOWN        127.0.0.1/8 ::1/128 
ens33            UP             10.1.8.11/24 fe80::20c:29ff:fef5:b10b/64 
ens37            UP             10.1.8.100/24 fe80::fef1:2cec:159a:4343/64 
相关推荐
春夜喜雨2 小时前
linux下如何检查与设置程序与服务崩溃时生成coredump文件--包括systemctl启动的服务
linux
小狗爱吃黄桃罐头2 小时前
正点原子【第四期】Linux之驱动开发学习笔记-6.1 pinctrl和gpio子系统
linux·驱动开发·学习
小心草里有鬼3 小时前
Linux 数据库 Mysql8 主从复制
linux·运维·数据库·sql·mysql
czhc11400756633 小时前
Linux925 shell 变量:本地、环境变量、全局变量;数组:普通数组、关联数组;交互定义、basename、dirname
linux·交互
chen_note3 小时前
Keepalived两个集群实验
linux·服务器·数据库·keepalived·高可用集群
Akshsjsjenjd3 小时前
HAProxy 使用指南:从基础到实战部署
linux·负载均衡
黄昏恋慕黎明3 小时前
javaEE初阶 网络编程(socket初识)
运维·服务器·网络
key_Go3 小时前
06.容器存储
运维·服务器·网络·docker
宁雨桥3 小时前
Nginx反向代理配置全流程实战:从环境搭建到HTTPS部署
运维·nginx·https