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 
相关推荐
啟明起鸣几秒前
【Nginx 网关开发】上手 Nginx,简简单单启动一个静态 html 页面
运维·c语言·前端·nginx·html
小生不才yz3 分钟前
shell编程 - 数据流指南
linux
lisanmengmeng9 分钟前
添加ceph节点
linux·服务器·ceph
Tinyundg12 分钟前
Linux系统分区
linux·运维·服务器
要做一个小太阳15 分钟前
华为Atlas 900 A3 SuperPoD 超节点网络架构
运维·服务器·网络·华为·架构
江畔何人初20 分钟前
service发现
linux·运维·云原生
life码农26 分钟前
Linux系统清空文件内容的几种方法
linux·运维·chrome
zbguolei31 分钟前
虚拟机安装Ubuntu后无法登录
linux·运维·ubuntu
UP_Continue34 分钟前
Linux--基础IO
linux·运维·服务器
驱动探索者38 分钟前
linux hwspinlock 学习
linux·运维·学习