news 2026/8/13 12:08:41

全网最全 DHCP 实验:单网段分配 + 跨网段中继双场景实操

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
全网最全 DHCP 实验:单网段分配 + 跨网段中继双场景实操

传统手动配置参数的问题

DHCP基本概念

DHCP优点

DHCP工作原理

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

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

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

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

思考:为什么DHCP客户端收到Offer之后不直接使用该IP地址,还需要发送一个Request告知服务器端?

广播的Request报文让网络中其他DHCP服务器端得知客户端已选择了某个服务器端分配的IP地址,保证

其他服务器端可以释放通过单播Offer分配给该客户端的IP地址。

DHCP租期更新

如果在50%租期时客户端未得到原服务器端的回应,则客户端在87.5%租期时会广播发送DHCP

Request,任意一台DHCP服务器端都可回应,该过程称为重绑定。

  1. 租约到期后,重新向DHCP服务器续约。
  2. DHCP服务器,同意客户端续约。

思考:租期时长 长还是短好

分场景:流动性大的场景(火车站,KTV,酒吧,超市)租期设置短 ,流动性小的场景(办公室,家庭)设置长租期

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

[root@dhcp-server ~]# journalctl --unit dhcpd.serviceAug 0115:49:43 dhcp-server dhcpd[1239]: DHCPDISCOVER from 00:0c:29:07:ec:8b via ens33 Aug 0115:49:44 dhcp-server dhcpd[1239]: DHCPOFFER on10.1.8.102 to 00:0c:29:07:ec:8b(dhcp-client1)via ens33 Aug 0115:49:44 dhcp-server dhcpd[1239]: DHCPREQUESTfor10.1.8.102(10.1.8.10)from 00:0c:29:07:ec:8b(dhcp-client1)via ens33 Aug 0115:49:44 dhcp-server dhcpd[1239]: DHCPACK on10.1.8.102 to 00:0c:29:07:ec:8b(dhcp-client1)via ens33 Aug 0115:49:45 dhcp-server dhcpd[1239]: DHCPDISCOVER from 00:0c:29:02:49:2a via ens33 Aug 0115:49:45 dhcp-server dhcpd[1239]: DHCPOFFER on10.1.8.88 to 00:0c:29:02:49:2a via ens33 Aug 0115:49:45 dhcp-server dhcpd[1239]: DHCPREQUESTfor10.1.8.88(10.1.8.10)from 00:0c:29:02:49:2a via ens33 Aug 0115:49:45 dhcp-server dhcpd[1239]: DHCPACK on10.1.8.88 to 00:0c:29:02:49:2a via ens33

多DHCP服务器场景

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

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

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

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

DHCP服务器搭建场景

1.路由器、交换机

2.linux、windos server

3.tplink,小米路由器

家庭场景:tp-link

小公司(10人):tp-link

中公司(100-500人):路由器,交换机

大公司(1000+):linux服务器

Linux部署 DHCP 服务

环境准备

由于workstaion自带DHCP功能,所以先将其关闭

节点规划

基础配置

服务器必须静态IP地址

dhcp-server:

[root@localhost ~]# nmcli connection modify ens33 ipv4.method manualipv4.addresses10.1.8.10/24 ipv4.gateway10.1.8.2 ipv4.dns10.1.8.2 autoconnectyes[root@localhost ~]# nmcli connection up ens33[root@localhost ~]# hostnamectl set-hostname dhcp-server

dhcp-client1:

[root@localhost ~]# hostnamectl set-hostname dhcp-client1

dhcp-client2:

[root@localhost ~]# hostnamectl set-hostname dhcp-client2

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

[root@dhcp-server ~]# ip addr | grep ens332: ens33:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdisc pfifo_fast state UP group default qlen1000inet10.1.8.10/24 brd10.1.8.255 scope global noprefixroute ens33

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

安装 DHCP 软件

# 安装软件包[root@dhcp-server ~]# yum install -y dhcp# 配置防火墙,放行dhcp服务[root@dhcp-server ~]# firewall-cmd --add-service=dhcp[root@dhcp-server ~]# firewall-cmd --add-service=dhcp --permanent

配置 DHCP 服务器

dhcpd服务使用 /etc/dhcp/dhcpd.conf 配置文件。 dhcp软件包提供/usr/share/doc/dhcp */dhcpd.conf.example 配置文件示例。

# 首先cat dhcp主配置文件,发现提示我们去参考这个/usr/share/doc/dhcp*/dhcpd.conf.example[root@dhcp-server ~]# cat /etc/dhcp/dhcpd.conf## DHCP Server Configuration file.#see /usr/share/doc/dhcp*/dhcpd.conf.example##see dhcpd.conf(5)manpage# 窗口A,参考/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example修改/etc/dhcp/dhcpd.conf[root@dhcp-server ~]# cat /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example# 窗口B,典型的DHCP配置示例,加在/etc/dhcp/dhcpd.conf末尾[root@dhcp-server ~]# vim /etc/dhcp/dhcpd.confsubnet10.1.8.0 netmask255.255.255.0{#给10.1.8.0/24这个网络段设备分配IPrange10.1.8.10110.1.8.130;#IP分配范围10.1.8.101-10.1.8.130option domain-name-servers223.5.5.5;#分配给dhcp客户端dns地址为223.5.5.5(阿里云公共DNS)option domain-name"laogao.cloud";#局域网设备的域名后缀 = laogao.cloudoption routers10.1.8.2;#分配给客户端的额网关地址为10.1.8.2option broadcast-address10.1.8.255;#局域网广播地址。DHCP、ARP依赖它default-lease-time600;#默认租期600秒max-lease-time7200;#最大租期7200秒}

配置说明:

  • **authoritative,**指示服务器对其所管理的子网具有权威性。
  • subnet,提供的子网详细。
  • range,指定服务器在该范围内分配IP地址。
  • option routers,指定服务器提供默认网关地址。
  • option domain-name-servers,指定服务器提供DNS名称服务器。
  • option domain-search,指定服务器提供DNS域搜索列表。
  • default-lease-time,提供网络信息默认租期,如果客户端不要求任何特定的租期。单位秒。
  • max-lease-time,指示服务器可以从客户端请求接受的最大租期。单位秒。

客户端系统上的NetworkManager使用domain-name-serversdomain-search更新resolv.conf文 件中的nameserversearch参数。

验证 DHCP 配置

# 验证配置文件语法[root@dhcp-server ~]# dhcpd -tInternet Systems Consortium DHCP Server4.2.5 Copyright2004-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 specifiedinthe configfile

启用并启动服务

# 启用并启动服务[root@dhcp-server ~]# systemctl enable dhcpd --noww# 查看服务状态[root@dhcp-server ~]# systemctl status dhcpd

配置 DHCP 客户端

dhcp-client1(普通员工)
# 添加一个自动获取ip连接,假设网卡设备名为ens33[root@dhcp-client1 ~]# nmcli connection add con-name dynamic type ethernetipv4.method auto ifname ens33[root@dhcp-client1 ~]# nmcli connection up dynamic# 验证[root@dhcp-client1 ~]# ip addr show ens332: ens33:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdisc pfifo_fast state UP group default qlen1000link/ether 00:0c:29:07:ec:8b brd ff:ff:ff:ff:ff:ff inet`10.1.8.102/24`brd10.1.8.255 scope global noprefixroute dynamic ens33 valid_lft 451sec preferred_lft 451sec inet6 fe80::fd60:8109:ed08:cd78/64 scopelinknoprefixroute valid_lft forever preferred_lft forever[root@dhcp-client1 ~]# cat /etc/resolv.conf# Generated by NetworkManagersearch laogao.cloud nameserver223.5.5.5[root@dhcp-client1 ~]# route -n
基于 MAC 地址预留IP地址

在配置文件中,host声明可以将MAC地址绑定到IP地址。 此配置对于始终为特定系统的网络接口提供相 同的IP地址特别有用,尤其是Web或数据库系统之类的服务器。

**dhcp-client2(经理)**MAC地址查看

[root@dhcp-client2 ~]# ip link show ens332: ens33:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdisc pfifo_fast state UP mode DEFAULT group default qlen1000link/ether`00:0c:29:02:49:2a`brd ff:ff:ff:ff:ff:ff

在以下示例中,服务器始终为MAC地址是00:0c:29:02:49:2a的系统分配10.1.8.88地址。

# 在/etc/dhcp/dhcpd.conf最后添加如下内容:[root@dhcp-server ~]# vim /etc/dhcp/dhcpd.confhostclient.laogao.cloud{hardware ethernet 00:0c:29:02:49:2a;fixed-address10.1.8.88;}

重启服务

[root@dhcp-server ~]# systemctl restart dhcpd

客户端验证

# 创建并激活连接[root@dhcp-client2 ~]# nmcli connection add con-name dynamic type ethernetipv4.method auto ifname ens33[root@dhcp-client2 ~]# nmcli connection up dynamic# 验证[root@dhcp-client2 ~]# ip addr show ens332: ens33:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdisc pfifo_fast state UP group default qlen1000link/ether 00:0c:29:02:49:2a brd ff:ff:ff:ff:ff:ff inet10.1.8.88/24 brd10.1.8.255 scope global noprefixroute dynamic ens33 valid_lft 555sec preferred_lft 555sec inet6 fe80::e068:efe7:110b:1b25/64 scopelinknoprefixroute valid_lft forever preferred_lft forever[root@dhcp-client2 ~]# cat /etc/resolv.conf# Generated by NetworkManagersearch laogao.cloud nameserver223.5.5.5[root@dhcp-client2 ~]# route -nKernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface0.0.0.010.1.8.20.0.0.0 UG10000ens3310.1.8.00.0.0.0255.255.255.0 U10000ens33

DHCP 中继服务器

DHCP 中继介绍

前文,我们介绍了DHCP客户端和DHCP服务器在同一个广播域中时,DHCP的工作机制。 如果DHCP客户端与DHCP服务器不处于同一个广播域,那么DHCP客户端广播的DHCP Discover报文, 会被网络中的三层设备丢弃,无法被DHCP服务器接收,此时,就需要DHCP中继代理(DHCP Relay Agent)。 DHCP中继可以实现在不同广播域(如子网、Vlan)之间处理和转发DHCP工作时的广播报文,使得 DHCP客户端可以跨网段获取IP地址及相关参数。

DHCP 中继工作原理

有DHCP中继的场景中,DHCP中继在DHCP服务器和DHCP客户端之间转发DHCP报文,以保证DHCP服 务器和DHCP客户端可以正常交互,下图示意了中继情形下,DHCP客户端与DHCP服务器的报文交互过 程。

在有中继的情形下,DHCP客户端申请IP地址仍然分为四个阶段:发现、提供、请求和确认(否认)。只 是客户端发送的报文会被同广播域内的DHCP中继收到,然后由DHCP中继将DHCP报文以单播的形式转 发给服务器。同样,服务器响应的DHCP报文以单播形式发给DHCP中继,然后再由中继转发给客户端。

DHCP中继实践

使用centos 7模板克隆出3台机器(dhcp-server,dhcp-relay,dhcp-client),然后开机

实验主机

vmnet1和vmnet8关闭dhcp功能。

实验拓扑

先将dhcp-client机器的网卡改为vmnet1

给dhcp-relay添加第二块网卡(vmnet1)

配置3台服务器IP地址,主机名

dhcp-server:

[root@localhost ~]# hostnamectl set-hostname dhcp-server[root@localhost ~]# nmcli connection modify ens33 ipv4.method manualipv4.addresses10.1.8.10/24 ipv4.gateway10.1.8.2 ipv4.dns10.1.8.2 autoconnectyes[root@localhost ~]# nmcli connection up ens33

dhcp-relay:

[root@localhost ~]# hostnamectl set-hostname dhcp-relay[root@localhost ~]# nmcli connection modify ens33 ipv4.method manualipv4.addresses10.1.8.20/24 ipv4.gateway10.1.8.2 ipv4.dns10.1.8.2 autoconnectyes[root@localhost ~]# nmcli connection up ens33[root@localhost ~]# nmcli connection add ifname ens36 con-name ens36 typeethernet ipv4.method manual ipv4.addresses10.1.1.20/24[root@localhost ~]# nmcli connection up ens36

dhcp-client:

[root@localhost ~]# hostnamectl set-hostname dhcp-client

配置 dhcp-server

配置 dhcp
# 安装软件包[root@dhcp-server ~]# yum install -y dhcp# 配置防火墙,放行dhcp服务[root@dhcp-server ~]# firewall-cmd --add-service=dhcp[root@dhcp-server ~]# firewall-cmd --add-service=dhcp --permanent# A窗口[root@dhcp-server ~]# vim /usr/share/doc/dhcp-*/dhcpd.conf.example# B窗口,从A窗口复制案例[root@dhcp-server ~]# vim /etc/dhcp/dhcpd.conf
subnet10.1.8.0 netmask255.255.255.0{range10.1.8.10010.1.8.200;option routers10.1.8.20;option broadcast-address10.1.8.255;option domain-name-servers223.5.5.5;option domain-search"laogao.cloud";default-lease-time600;max-lease-time7200;}# 新增一个地址池subnet10.1.1.0 netmask255.255.255.0{range10.1.1.10010.1.1.200;option routers10.1.1.20;option broadcast-address10.1.1.255;option domain-name-servers223.5.5.5;option domain-search"laogao.cloud";default-lease-time600;max-lease-time7200;}# 启用并启动服务[root@dhcp-server ~]# systemctl enable dhcpd --now# 查看服务状态[root@dhcp-server ~]# systemctl status dhcpd

配置路由

DHCP server必须配置一个到达 DHCP relay 接收 DHCP 广播网卡的路由。

如果不配置该路由,dhcp server 无法将数据包返回给 10.1.1.20 服务器,最终导致无法提供dhcp给 dhcp-client。

# 当前实验环境: DHCP relay的第二个网卡,地址是:10.1.1.20/24 。# dhcp-server 去往 10.1.1.20/32 路由下一跳是 10.1.8.20[root@dhcp-server ~]# nmcli connection modify ens33 ipv4.routes '10.1.1.20/3210.1.8.20'[root@dhcp-server ~]# nmcli connection up ens33

配置 dhcp-relay

配置 dhcp relay
[root@dhcp-relay ~]# yum install -y dhcp[root@dhcp-relay ~]# cp /usr/lib/systemd/system/dhcrelay.service/etc/systemd/system/dhcrelay.service[root@dhcp-relay ~]# vim /etc/systemd/system/dhcrelay.service
[Unit]Description=DHCP Relay Agent DaemonDocumentation=man:dhcrelay(8)Wants=network-online.targetAfter=network-online.target[Service]Type=notify# 在 ExecStart 参数末尾添加 DHCP 服务器 IP 地址ExecStart=/usr/sbin/dhcrelay-d--no-pid10.1.8.10StandardError=null[Install]WantedBy=multi-user.target[root@dhcp-relay ~]# systemctl enable dhcrelay.service --now
配置路由转发
# 开启路由转发[root@dhcp-relay ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf[root@dhcp-relay ~]# sysctl -p /etc/sysctl.confnet.ipv4.ip_forward=1

客户端测试

[root@dhcp-client ~]# nmcli connection add con-name dynamic type ethernetipv4.method auto ifname ens33[root@dhcp-client ~]# nmcli connection up dynamic[root@dhcp-client ~]# ip -br alo UNKNOWN127.0.0.1/8 ::1/128 ens33 UP10.1.1.100/24 fe80::32c5:ad2b:c0d6:f3ab/64#获取到地址# 验证确实是dhcp-server分配的[root@dhcp-server ~]# 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.5server-duid"\000\001\000\0012\004\\\034\000\014)6\302w";lease10.1.1.100{starts22026/08/04 08:20:43;ends22026/08/04 08:30:43;cltt22026/08/04 08:20:43;binding state active;next binding statefree;rewind binding statefree;hardware ethernet 00:0c:29:d8:9d:e6;client-hostname"dhcp-client";}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/13 12:07:41

基于Docker的AI代理安全沙箱:原理、部署与工程实践

这次我们来看一个专门为 AI 代理设计的 Docker 沙箱项目。它的核心目标很明确&#xff1a;为那些需要执行不确定或潜在风险任务的 AI 助手&#xff0c;提供一个即用即弃、完全隔离的运行时环境。想象一下&#xff0c;你有一个 AI 代理需要联网搜索、安装第三方包、执行系统命令…

作者头像 李华
网站建设 2026/8/13 12:02:21

SAP FI计税基础选择:基于净额与基于总额的差异详解

1. 一个看似简单的选择&#xff0c;背后是税务逻辑的差异 在SAP FI模块的日常操作中&#xff0c;录入一张手工发票&#xff08;FB60/FB70&#xff09;是财务人员再熟悉不过的流程。然而&#xff0c;当涉及到含税业务时&#xff0c;界面上一个不起眼的选项——“基于净额计税”和…

作者头像 李华
网站建设 2026/8/13 12:01:25

HarmonyOS 7.0 / API 26 跨设备续接一致性:手机到平板后筛选条件、滚动位置和任务进度如何恢复

先把问题摆出来 这篇只讲一个点&#xff1a;跨设备续接一致性。我不按官方说明书那种顺序铺概念&#xff0c;而是按开发时最容易出事的路径来拆&#xff1a;什么时候会坏、怎么复现、怎么修、怎么验证&#xff0c;以及这个判断以后能不能复用。 跨设备续接最容易漏的是细节状态…

作者头像 李华
网站建设 2026/8/13 12:00:49

终极PDF对比神器diff-pdf:5分钟快速上手,告别手动核对烦恼!

终极PDF对比神器diff-pdf&#xff1a;5分钟快速上手&#xff0c;告别手动核对烦恼&#xff01; 【免费下载链接】diff-pdf A simple tool for visually comparing two PDF files 项目地址: https://gitcode.com/gh_mirrors/di/diff-pdf 还在为PDF文档版本对比而烦恼吗&a…

作者头像 李华
网站建设 2026/8/13 12:00:42

串口通信全解析:从硬件连接到协议配置与调试实战

1. 项目概述&#xff1a;从“线”到“话”的旅程 干了这么多年嵌入式开发&#xff0c;调试过无数板子&#xff0c;要说最让我又爱又恨的通信接口&#xff0c;串口绝对排第一。爱它&#xff0c;是因为它简单、直接、无处不在&#xff0c;是工程师和硬件“对话”最原始也最可靠的…

作者头像 李华