DHC服务器

文章目录

DHC服务器

DHCP服务介绍

在大型网络中,系统静态分配IP地址面临问题:

  1. 确保不要同时在多个系统上使用同一个地址。

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

动态主机配置协议(DHCP-Dynamic Host Configuration Protocol)提供了一种自动配置网络参数的方法,例如IP地址,默认网关,DNS服务器和域或NTP服务器。在网络中部署DHCP服务器,

您可以集中控制这些参数。

DHCP有两种协议:

  • 用于IPv4网络的DHCPV4.

  • 用于IPv6网络的DHCPv6。

DHCP通信过程

  1. 客户端使用DHCP4配置网络接口时,网卡将DHCPDiscoVER 数据包发送到255.255.255.255广播目标。因为路由器通常不转发该广播地址,所以必须将DHCP服务器与客户端安装在同一物理网络上,以便它可以接收DHCPDISCOVER数据包。您也可以将路由器配置为DHCP中继代理,转发DHCP消息到其他网络。

  2. DHCP服务器收到DHCPDISCOVER 数据包后,响应 DHCPOFFER数据包,该数据包包含其自己的IP地址和客户端应使用的IP地址。该数据包还包括一个租用期限,以指示所提供的IP地址有效的时间,以及其他网络参数,例如默认网关和DNS服务器。

  3. 客户端收到DHCP服务器DHCPOFFER 数据包后,发送 DHCPREQUEST 广播数据包 ,请求DHCP服务器提供的IP地址。这似乎很多余,但是网络上可能有多个DHCP服务器,或者路由器可能会将DHCPOFFER转发到多个网络。因此,客户端可能会从不同的DHCP服务器收到响应。客户端的DHCPREQUEST数据包包括接受请求的DHCP服务器的IP地址。

  4. DHCP服务器收到DHCPREQUEST数据包后,会发送DHCPACK数据包,确认客户端对客户端IP地址具有独占权限,直到租约到期为止。

  5. 租约到期后,重新向DHCP服务器续约。

  6. DHCP服务器,同意客户端续约,发送DHCPACK(续约确认)数据包。

    序号 时间 源 IP 源 MAC 目标 MAC 目标 IP 协议 长度 描述 事务 ID
    53 21:03:12.189041 0.0.0.0 00:00:29:54:fd:88 ff:ff:ff:ff:ff:ff 255.255.255.255 DHCP 326 DHCP Discover 0x8a1ba7167
    54 21:03:12.198275 10.1.8.10 00:0c:29:00:00:18 00:00:29:54:fd:88 10.1.8.20 DHCP 360 DHCP Offer 0x8a1ba7167
    55 21:03:12.198869 0.0.0.0 00:00:29:54:fd:88 ff:ff:ff:ff:ff:ff 255.255.255.255 DHCP 333 DHCP Request 0x8a1ba7167
    56 21:03:12.191342 10.1.8.10 00:0c:29:00:00:18 00:00:29:54:fd:88 10.1.8.20 DHCP 363 DHCP ACK 0x8a1ba7167

在DHCP服务器上,可以使用journalct1 --unit= dhcpd.service命令来访问客户端与服务端通信消息。以下摘录显示了客户端通过DHCP请求IP地址。

bash 复制代码
DHCPDISCOVER from 52:54:00:01:fa:0b via eth0
2 DHCPOFFER on 10.1.8.150 to 52:54:00:01:fa:0b(hosta)via eth0
3 DHCPREQUEST for 10.1.8.150(10.1.8.2)from 52:54:00:01:fa:0b(hosta)via
4 eth0
5 DHCPACK on 10.1.8.150 to 52:54:00:01:fa:0b(hosta)via eth0

在租约到期之前,客户端会定期向服务器发送DHCPREQUEST数据包,以确保服务器不会收回IP地址。

多个 DHCP服务器

尽管DHCP支持在物理网络上运行多个DHCP服务器,但不建议这么做。正常情况下,同一个物理网络中只需要一台DHCP服务器应回答客户端的请求即可。

在同一网络上运行多个服务器的情况下,当新客户端发送DHCPDISCOVER 数据包以获取地址时,它可能会收到多个DHCPOFFER 数据包。客户端仅接受其中一台服务器提供的配置,并广播包含该服务器IP地址的DHCPREQUEST 数据包。其他DHCP服务器释放它们为客户端准备的IP地址。

但是,当客户端使用 DHCPREQUEST 数据包更新其IP地址时,服务器行为取决于服务器是否具有权威性。非权威的DHCP服务器会忽略DHCPREQUEST 数据包中不知道的地址。当客户端发送的IP地址在权威DHCP服务器管理的地址范围内,但服务器以前不知道该IP地址时,它将拒绝该请求并发回DHCPNAK 数据包。这可能意味着客户端最初是从网络上的另一台非权威的DHCP服务器获得其地址的。任何收到DHCPNAK数据包的客户端都不能再使用该地址,而必须请求一个新的地址。

使用默认配置启动DHCP服务器时,服务器不是权威服务器,这样可以防止非权威DHCP服务器接管权威服务器提供的地址。

部署DHCP服务器

要配置DHCPv4服务器,请首先使用ip addr命令确认您的网络接口配置是否指定了BROADCAST地址。

服务器必须具有静态IP地址。

前提条件

  1. 确认网络接口配置:使用ip addr命令确认网络接口已指定BROADCAST地址,示例如下:

    bash 复制代码
    2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:e5:be:0f brd ff:ff:ff:ff:ff:ff
        inet 10.1.8.10/24 brd 10.1.8.255 scope global ens160
            valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fee5:be0f/64 scope link
            valid_lft forever preferred_lft forever

实例:

配置server服务端
安装 DHCP 软件
bash 复制代码
#查看DHCP下载包
[root@server ~ 10:03:02]# yum list dhcp*
已加载插件:fastestmirror
... ...
可安装的软件包
dhcp.x86_64                12:4.2.5-83.el7.centos.2         updates  
dhcp-common.x86_64         12:4.2.5-83.el7.centos.2         updates  
dhcp-devel.i686            12:4.2.5-83.el7.centos.2         updates  
dhcp-devel.x86_64          12:4.2.5-83.el7.centos.2         updates  
dhcp-libs.i686             12:4.2.5-83.el7.centos.2         updates  
dhcp-libs.x86_64           12:4.2.5-83.el7.centos.2         updates  
dhcpcd.x86_64              9.5.2-2.el7                      epel     
dhcpd-pools.x86_64         3.2-1.el7                        epel     
dhcpdump.x86_64            1.9-1.el7                        epel     
dhcping.x86_64             1.2-13.el7                       epel     

#下载
[root@server ~ 10:11:27]# yum install -y dhcp
已加载插件:fastestmirror
... ...     

作为依赖被升级:
  dhclient.x86_64 12:4.2.5-83.el7.centos.2                           
  dhcp-common.x86_64 12:4.2.5-83.el7.centos.2                        
  dhcp-libs.x86_64 12:4.2.5-83.el7.centos.2    
完毕!
配置 DHCP 服务器

DHCP 服务器的核心配置文件为/etc/dhcp/dhcpd.conf,系统提供示例配置文件/usr/share/doc/dhcp-*/dhcpd.conf.example.

bash 复制代码
#查看
[root@server ~ 10:11:57]# ls /etc/dhcp/
dhclient.d/            dhcpd.conf
dhclient-exit-hooks.d/ scripts/
dhcpd6.conf            

#查看文件信息
[root@server ~ 10:11:57]# 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:57]# cp /usr/share/doc/dhcp*/dhcpd.conf.example 
/etc/dhcp/dhcpd.conf
cp:是否覆盖"/etc/dhcp/dhcpd.conf"? yes

#修改模版
[root@server ~ 10:25:50]# vim /etc/dhcp/dhcpd.conf
[root@server ~ 10:42:03]# cat /etc/dhcp/dhcpd.conf
#配置域名
option domain-name "dyx.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;
}

#根据MAC地址配置固定IP
host fantasia {
  hardware ethernet 08:00:07:26:c0:a5;
  fixed-address fantasia.fugue.com;
}
配置参数说明
参数 说明
authoritative 指示服务器对其所管理的子网具有权威性,防止非权威服务器干扰
subnet 子网 netmask 子网掩码 定义要管理的子网
range 起始IP 结束IP 指定动态分配的 IP 地址池范围
option routers 网关IP 为客户端分配默认网关地址
option broadcast-address 广播IP 为客户端分配广播地址
option domain-name-servers DNSIP 为客户端分配 DNS 服务器地址(可多个,用逗号分隔)
option domain-search "域名" 为客户端分配 DNS 域搜索列表(可多个,用逗号分隔)
default-lease-time 秒数 客户端未指定租约时的默认租约时间
max-lease-time 秒数 客户端可请求的最大租约时间
验证 DHCP配置
bash 复制代码
# 验证配置文件语法
[root@server ~ 16:04:32]# 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

4# 输出结果为0,表明配置文件没有问题
[root@server ~ 17:08:28]# echo $?
0
启动 DHCP 服务
bash 复制代码
#启动DHCP
[root@server ~ 10:40:05]# 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:40:11]# 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:40:11 CST; 21s ago
     Docs: man:dhcpd(8)
           man:dhcpd.conf(5)
 Main PID: 11374 (dhcpd)
   Status: "Dispatching packets..."
   CGroup: /system.slice/dhcpd.service
           └─11374 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -us...

9月 25 10:40:11 server dhcpd[11374]: Copyright 2004-2013 Interne....
9月 25 10:40:11 server dhcpd[11374]: All rights reserved.
9月 25 10:40:11 server dhcpd[11374]: For info, please visit http.../
9月 25 10:40:11 server dhcpd[11374]: Wrote 0 deleted host decls ....
9月 25 10:40:11 server dhcpd[11374]: Wrote 0 new dynamic host de....
9月 25 10:40:11 server dhcpd[11374]: Wrote 0 leases to leases file.
9月 25 10:40:11 server dhcpd[11374]: Listening on LPF/ens33/00:0...4
9月 25 10:40:11 server dhcpd[11374]: Sending on   LPF/ens33/00:0...4
9月 25 10:40:11 server dhcpd[11374]: Sending on   Socket/fallbac...t
9月 25 10:40:11 server systemd[1]: Started DHCPv4 Server Daemon.
Hint: Some lines were ellipsized, use -l to show in full.

#确定防火墙是关闭状态
[root@server ~ 10:40:32]# systemctl status firewalld.service 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)
配置 DHCP 客户端
添加一块网卡
bash 复制代码
#查询网卡信息,此时属于动态获取
[root@client ~ 09:58:31]# ip -br a
lo               UNKNOWN        127.0.0.1/8 ::1/128 
ens33            UP             10.1.8.11/24 fe80::20c:29ff:fe87:c2b0/64 
ens37            UP             10.1.8.101/24 fe80::5e76:2ad1:7d10:d129/64 
bash 复制代码
#对比网卡信息
[root@client ~ 10:41:36]# ip -br link
lo               UNKNOWN        00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP> 
ens33            UP             00:0c:29:87:c2:b0 <BROADCAST,MULTICAST,UP,LOWER_UP> 
ens37            UP             00:0c:29:87:c2:ba <BROADCAST,MULTICAST,UP,LOWER_UP> 
[root@client ~ 10:45:48]# #00:0c:29:87:c2:ba
bash 复制代码
#重新激活
[root@client ~ 11:14:17]# nmcli connection up 有线连接\ 1 
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/4)

#固定之后的网卡查询
[root@client ~ 11:14:49]# ip -br a
lo               UNKNOWN        127.0.0.1/8 ::1/128 
ens33            UP             10.1.8.11/24 fe80::20c:29ff:fe87:c2b0/64 
ens37            UP             10.1.8.100/24 fe80::5e76:2ad1:7d10:d129/64 
基于 MAC 地址预留 IP 地址

通过host声明将客户端 MAC 地址与固定 IP 绑定,适用于需要固定 IP 的服务器(如 Web、数据库服务器)。

获取客户端 MAC 地址
bash 复制代码
#查看客户端MAC地址
[root@server ~ 10:44:51]# cat /var/lib/dhcpd/dhcpd.leases
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-4.2.5

server-duid "\000\001\000\0010gh\013\000\014)S\311\236";

lease 10.1.8.101 {
  starts 4 2025/09/25 02:41:13;
  ends 4 2025/09/25 02:51:13;
  cltt 4 2025/09/25 02:41:13;
  binding state active;
  next binding state free;
  rewind binding state free;
  hardware ethernet 00:0c:29:87:c2:ba;
  client-hostname "client";
}
配置 IP 预留
bash 复制代码
#修改,配置固定client
[root@server ~ 11:09:17]# vim /etc/dhcp/dhcpd.conf
[root@server ~ 11:09:00]# cat /etc/dhcp/dhcpd.conf
#配置域名
option domain-name "dyx.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;
}

#根据MAC地址配置固定IP
host client.dyx.cloud {
  hardware ethernet 00:0c:29:87:c2:ba;
  fixed-address 10.1.8.100;
}

[root@server ~ 11:12:28]# systemctl restart dhcpd
客户端验证
bash 复制代码
[root@client ~ 18:54:57]# nmcli connection up ens33
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/16)
[root@client ~ 19:10:22]# ip addr show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:87:c2:b0 brd ff:ff:ff:ff:ff:ff
    inet 10.1.8.11/24 brd 10.1.8.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
相关推荐
EMTime3 小时前
Docker运行OpenWRT
运维·docker·容器
lolo大魔王3 小时前
Linux 文件系统超全面详解(原理、结构、挂载、分区、inode、日志、管理命令)
linux·运维·服务器
磊 子5 小时前
详细讲解一下epoll
linux·io·epoll·io多路复用
printfLILEI5 小时前
php中的类与对象以及反序列化
linux·开发语言·php
zyl837216 小时前
Docker 使用手册
运维·docker·容器
古月方枘Fry6 小时前
MGRE实验
运维·服务器
叠叠乐6 小时前
redmi k90 pro max 强解BL,刷海外rom, 并刷入sukisu ultra
linux
stolentime6 小时前
FreeDomain 本地开发环境快速搭建指南
运维·服务器·网络
xiaoye-duck7 小时前
《Linux系统编程》Linux 进程间通信之管道基础解析:从匿名管道原理到基于管道的进程池实现
linux