DHCP 服务器
传统手动配置参数的问题


DHCP基本概念

DHCP优点

DHCP工作原理

-
客户端使用DHCPv4配置网络接口时,网卡将 DHCP DISCOVER 数据包发送到 255.255.255.255 广播目标。因为路由器通常不转发该广播地址,所以必须将DHCP服务器与客户端安装在同一物理网络上,以便它可以接收DHCP DISCOVER数据包。您也可以将路由器配置为DHCP中继代理,转发DHCP消息到其他网络。
-
DHCP服务器收到 DHCP DISCOVER 数据包后,响应 DHCP OFFER 数据包,该数据包包含其自己 的IP地址和客户端应使用的IP地址。该数据包还包括一个租用期限,以指示所提供的IP地址有效的 时间,以及其他网络参数,例如默认网关和DNS服务器。
-
客户端收到DHCP服务器 DHCP OFFER 数据包后,发送 DHCP REQUEST 广播数据包,请求DHCP 服务器提供的IP地址。这似乎很多余,但是网络上可能有多个DHCP服务器,或者路由器可能会将 DHCP OFFER转发到多个网络。因此,客户端可能会从不同的DHCP服务器收到响应。客户端的 DHCP REQUEST数据包包括接受请求的DHCP服务器的IP地址。

-
DHCP服务器收到DHCP REQUEST数据包后,会发送 DHCP ACK 数据包,确认客户端对客户端IP地 址具有独占权限,直到租约到期为止。
Important 思考:为什么DHCP客户端收到Offer之后不直接使用该IP地址,还需要发送一个Request告知服务 器端? 广播的Request报文让网络中其他DHCP服务器端得知客户端已选择了某个服务器端分配的IP地址,保证 其他服务器端可以释放通过单播Offer分配给该客户端的IP地址。
DHCP租期更新
如果在50%租期时客户端未得到原服务器端的回应,则客户端在87.5%租期时会广播发送DHCP Request,任意一台DHCP服务器端都可回应,该过程称为重绑定。

-
租约到期后,重新向DHCP服务器续约。
-
DHCP服务器,同意客户端续约。
![]()
思考:租期时长 长还是短好
分场景:流动性大的场景(火车站,KTV,酒吧,超市)租期设置短 ,流动性小的场景(办公室,家庭)设置 长租期
在DHCP服务器上,可以使用journalctl --unit=dhcpd.service 命令来访问客户端与服务端通信消 息。 以下摘录显示了客户端通过DHCP请求IP地址。
[root@dhcp-server ~]# journalctl --unit dhcpd.service
Aug 01 15:49:43 dhcp-server dhcpd[1239]: DHCPDISCOVER from 00:0c:29:07:ec:8b via
ens33
Aug 01 15:49:44 dhcp-server dhcpd[1239]: DHCPOFFER on 10.1.8.102 to
00:0c:29:07:ec:8b (dhcp-client1) via ens33
Aug 01 15:49:44 dhcp-server dhcpd[1239]: DHCPREQUEST for 10.1.8.102 (10.1.8.10)
from 00:0c:29:07:ec:8b (dhcp-client1) via ens33
Aug 01 15:49:44 dhcp-server dhcpd[1239]: DHCPACK on 10.1.8.102 to
00:0c:29:07:ec:8b (dhcp-client1) via ens33
Aug 01 15:49:45 dhcp-server dhcpd[1239]: DHCPDISCOVER from 00:0c:29:02:49:2a via
ens33
Aug 01 15:49:45 dhcp-server dhcpd[1239]: DHCPOFFER on 10.1.8.88 to
00:0c:29:02:49:2a via ens33
Aug 01 15:49:45 dhcp-server dhcpd[1239]: DHCPREQUEST for 10.1.8.88 (10.1.8.10)
from 00:0c:29:02:49:2a via ens33
Aug 01 15:49:45 dhcp-server dhcpd[1239]: DHCPACK on 10.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服务器搭建场景
-
路由器、交换机
-
linux、windows server
-
tplink,小米路由器
-
家庭场景:tp-link
-
小公司(10人):tp-link
-
中公司(100-500人):路由器,交换机
-
大公司(1000+):linux服务器
路由器部署DHCP服务
接口地址池
路由器接口地址192.168.1.1/24属于192.168.1.0网段,该网段成为能够分配的地址池,接口地址自动成 为分配的网关地址

第一步:基础配置
R1:
<Huawei>system-view #用户视图切换到系统视图 [Huawei]undo info-center enable #关闭消息提示 [Huawei]sysname r1 #设置主机名r1 [r1]int e0/0/0 #进入e0/0/0接口 [r1-Ethernet0/0/0]ip add 192.168.1.1 24 #配置IP地址192.168.1.1/24 [r1-Ethernet0/0/0]quit #返回系统视图
SW1:
<Huawei>system-view [Huawei]sysname sw1 [sw1]stp disable #关闭生成树 Warning: The global STP state will be changed. Continue? [Y/N]y #回答y
第二步:配置路由器DHCP
R1:
[r1]dhcp enable #全局使能dhcp功能 [r1]int e0/0/0 [r1-Ethernet0/0/0]dhcp select interface #接口dhcp [r1-Ethernet0/0/0]dhcp server lease day 3 #dhcp租期3天 [r1-Ethernet0/0/0]dhcp server dns-list 223.5.5.5 #dns分配223.5.5.5(阿里云公共DNS地址) [r1-Ethernet0/0/0]dhcp server excluded-ip-address 192.168.1.4 #地址池排除 192.168.1.4
第三步:PC自动获取地址
PC1:

通过DHCP获取地址
第四步:抓包观察DHCP工作原理

PC2:


看抓包过程

动态的给PC3分配 192.168.1.88

记录PC3 MAC地址,绑定
通过display mac-address 查看

R1:
<r1>system-view [r1]int e0/0/0 [r1-Ethernet0/0/0]dhcp server static-bind ip-address 192.168.1.88 mac-address 5489-98f3-5b43 #将192.168.1.88绑定到PC3 MAC
观察现象:
PC3:


全局地址池

第一步:基础配置
R1:
<Huawei>system-view #用户视图切换到系统视图 [Huawei]undo info-center enable #关闭消息提示 [Huawei]sysname r1 #设置主机名r1 [r1]int e0/0/0 #进入e0/0/0接口 [r1-Ethernet0/0/0]ip add 192.168.1.1 24 #配置IP地址192.168.1.1/24 [r1-Ethernet0/0/0]quit #返回系统视图
SW1:
<Huawei>system-view [Huawei]sysname sw1 [sw1]stp disable #关闭生成树 Warning: The global STP state will be changed. Continue? [Y/N]y #回答y
第二步:配置路由器DHCP
R1:
<Huawei>system-view [Huawei]undo info en [Huawei]sysname r1 [r1]int e0/0/0 [r1-Ethernet0/0/0]ip add 192.168.1.1 24 [r1-Ethernet0/0/0]quit [r1]ip pool net1 #创建地址池 [r1-ip-pool-net1]network 192.168.1.0 mask 24 #设置地址池范围 [r1-ip-pool-net1]gateway-list 192.168.1.1 #指定网关地址 [r1-ip-pool-net1]dns-list 223.5.5.5 [r1-ip-pool-net1]lease day 3 hour 12 minute 30 [r1-ip-pool-net1]excluded-ip-address 192.168.1.4 [r1-ip-pool-net1]excluded-ip-address 192.168.1.44 [r1-ip-pool-net1]static-bind ip-address 192.168.1.88 mac-address 5489-98f3-5b43 [r1-ip-pool-net1]quit [r1]dhcp enable [r1]int e0/0/0 [r1-Ethernet0/0/0]dhcp select global #调用全局地址池
第三步:PC自动获取地址
PC1:


PC3:

DHCP中继
B楼的PC获取地址,要将dhcp discover报文发送到A楼的R1,跨路由器,由于dhcp discover报文是广 播,所以发送不过去,无法获取地址

配置dhcp 中继,R2将接收到的广播报文dhcp discover转成单播发送给dhcp服务器R1,从而获取地址

第一步:基础配置
R1:
<Huawei>system-view [Huawei]undo info en [Huawei]sysname r1 [r1]int e0/0/0 [r1-Ethernet0/0/0]ip add 192.168.1.1 24 [r1-Ethernet0/0/0]int e0/0/1 [r1-Ethernet0/0/1]ip add 12.1.1.1 24 [r1-Ethernet0/0/1]quit [r1]ip route-static 192.168.2.0 24 12.1.1.2
R2:
<Huawei>system-view [Huawei]undo info en [Huawei]sys r2 [r2]int e0/0/0 [r2-Ethernet0/0/0]ip add 192.168.2.1 24 [r2-Ethernet0/0/0]int e0/0/1 [r2-Ethernet0/0/1]ip add 12.1.1.2 24 [r2-Ethernet0/0/1]quit [r2]ip route-static 192.168.1.0 24 12.1.1.1
SW1:
<Huawei>system-view [Huawei]undo info en [Huawei]sys sw1 [sw1]stp disable Warning: The global STP state will be changed. Continue? [Y/N]y
SW2:
<Huawei>system-view [Huawei]undo info en [Huawei]sys sw2 [sw1]stp disable Warning: The global STP state will be changed. Continue? [Y/N]y
第二步:配置路由器DHCP
R1:
# 创建地址池1 [r1]ip pool net1 [r1-ip-pool-net1]network 192.168.1.0 mask 24 [r1-ip-pool-net1]gateway-list 192.168.1.1 [r1-ip-pool-net1]dns-list 8.8.8.8 [r1-ip-pool-net1]quit # 创建地址池2 [r1]ip pool net2 [r1-ip-pool-net2]network 192.168.2.0 mask 24 [r1-ip-pool-net2]gateway-list 192.168.2.1 [r1-ip-pool-net2]dns-list 114.114.114.114 [r1-ip-pool-net2]quit # 全局使能dhcp功能 [r1]dhcp enable # 接口调用全局地址池 [r1]int e0/0/0 [r1-Ethernet0/0/0]dhcp select global [r1-Ethernet0/0/0]int e0/0/1 [r1-Ethernet0/0/1]dhcp select global
第三步:配置DHCP中继
R2:
[r2]dhcp enable [r2]int e0/0/0 [r2-Ethernet0/0/0]dhcp select relay #开启dhcp中继 [r2-Ethernet0/0/0]dhcp relay server-ip 12.1.1.1 #中继给12.1.1.1(r1 dhcp服务器)
第四步:PC自动获取地址
抓包R2 E0/0/0 E0/0/1 观察收到广播的dhcp discover通过dhcp中继单播发给 R1


观察获取的地址


Linux部署 DHCP 服务
环境准备
由于workstaion自带DHCP功能,所以先将其关闭



节点规划
| 节点名称 | 节点IP | 作用 |
|---|---|---|
| dhcp-server | 10.1.8.10/24 | 服务器必须静态IP |
| dhcp-client1(普通员工) | - | 从dhcp-server自动获取随机IP |
| dhcp-client2(经理) | - | 从dhcp-server自动获取固定IP 10.1.8.88 |
基础配置
服务器必须静态IP地址 dhcp-server:
[root@localhost ~]# nmcli connection modify ens33 ipv4.method manual ipv4.addresses 10.1.8.10/24 ipv4.gateway 10.1.8.2 ipv4.dns 10.1.8.2 autoconnect yes [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 ens33 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 inet 10.1.8.10/24 brd 10.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) man page
#
# 窗口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.conf
subnet 10.1.8.0 netmask 255.255.255.0 { #给10.1.8.0/24这个网络段设备分配IP
range 10.1.8.101 10.1.8.130; #IP分配范围10.1.8.101-10.1.8.130
option domain-name-servers 223.5.5.5; #分配给dhcp客户端dns地址为223.5.5.5(阿里云公共DNS)
option domain-name "laogao.cloud"; #局域网设备的域名后缀 = laogao.cloud
option routers 10.1.8.2; #分配给客户端的额网关地址为10.1.8.2
option broadcast-address 10.1.8.255; #局域网广播地址。DHCP、ARP依赖它
default-lease-time 600; #默认租期600秒
max-lease-time 7200; #最大租期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-servers和domain-search更新resolv.conf文件中的nameserver和search参数。
验证 DHCP 配置
# 验证配置文件语法 [root@dhcp-server ~]# 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
启用并启动服务
# 启用并启动服务 [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 ethernet ipv4.method auto ifname ens33 [root@dhcp-client1 ~]# nmcli connection up dynamic # 验证 [root@dhcp-client1 ~]# 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:07:ec:8b brd ff:ff:ff:ff:ff:ff inet 10.1.8.102/24 brd 10.1.8.255 scope global noprefixroute dynamic ens33 valid_lft 451sec preferred_lft 451sec inet6 fe80::fd60:8109:ed08:cd78/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@dhcp-client1 ~]# cat /etc/resolv.conf # Generated by NetworkManager search laogao.cloud nameserver 223.5.5.5 [root@dhcp-client1 ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.1.8.2 0.0.0.0 UG 100 0 0 ens33 10.1.8.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
基于 MAC 地址预留IP地址
在配置文件中,host声明可以将MAC地址绑定到IP地址。此配置对于始终为特定系统的网络接口提供相同的IP地址特别有用,尤其是Web或数据库系统之类的服务器。
查看 dhcp-client2 MAC 地址
[root@dhcp-client2 ~]# ip link show ens33 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/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地址。
配置绑定IP地址
# 在/etc/dhcp/dhcpd.conf最后添加如下内容:
[root@dhcp-server ~]# vim /etc/dhcp/dhcpd.conf
host client.laogao.cloud {
hardware ethernet 00:0c:29:02:49:2a;
fixed-address 10.1.8.88;
}
重启服务
[root@dhcp-server ~]# systemctl restart dhcpd
客户端验证
# 创建并激活连接 [root@dhcp-client2 ~]# nmcli connection add con-name dynamic type ethernet ipv4.method auto ifname ens33 [root@dhcp-client2 ~]# nmcli connection up dynamic # 验证 [root@dhcp-client2 ~]# 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:02:49:2a brd ff:ff:ff:ff:ff:ff inet 10.1.8.88/24 brd 10.1.8.255 scope global noprefixroute dynamic ens33 valid_lft 555sec preferred_lft 555sec inet6 fe80::e068:efe7:110b:1b25/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@dhcp-client2 ~]# cat /etc/resolv.conf # Generated by NetworkManager search laogao.cloud nameserver 223.5.5.5 [root@dhcp-client2 ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.1.8.2 0.0.0.0 UG 100 0 0 ens33 10.1.8.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
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),然后开机
实验主机
| 主机名 | IP 地址 | 虚拟网络 |
|---|---|---|
| dhcp-server.laogao.cloud | 10.1.8.10/24 | vmnet8 |
| dhcp-relay.laogao.cloud | 10.1.8.20/24 | vmnet8 |
| dhcp-relay.laogao.cloud | 10.1.1.20/24 | vmnet1 |
| dhcp-client1.laogao.cloud | 自动获取 | vmnet1 |
| dhcp-client2.laogao.cloud | 自动获取 | vmnet1 |
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 manual ipv4.addresses 10.1.8.10/24 ipv4.gateway 10.1.8.2 ipv4.dns 10.1.8.2 autoconnect yes [root@localhost ~]# nmcli connection up ens33
dhcp-relay:
[root@localhost ~]# hostnamectl set-hostname dhcp-relay [root@localhost ~]# nmcli connection modify ens33 ipv4.method manual ipv4.addresses 10.1.8.20/24 ipv4.gateway 10.1.8.2 ipv4.dns 10.1.8.2 autoconnect yes [root@localhost ~]# nmcli connection up ens33 [root@localhost ~]# nmcli connection add ifname ens36 con-name ens36 type ethernet ipv4.method manual ipv4.addresses 10.1.1.20/24 [root@localhost ~]# nmcli connection up ens36
dhcp-client:
[root@localhost ~]# hostnamectl set-hostname dhcp-client
配置 dhcp-server
# 安装软件包
[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
subnet 10.1.8.0 netmask 255.255.255.0 {
range 10.1.8.100 10.1.8.200;
option routers 10.1.8.20;
option broadcast-address 10.1.8.255;
option domain-name-servers 223.5.5.5;
option domain-search "laogao.cloud";
default-lease-time 600;
max-lease-time 7200;
}
# 新增一个地址池
subnet 10.1.1.0 netmask 255.255.255.0 {
range 10.1.1.100 10.1.1.200;
option routers 10.1.1.20;
option broadcast-address 10.1.1.255;
option domain-name-servers 223.5.5.5;
option domain-search "laogao.cloud";
default-lease-time 600;
max-lease-time 7200;
}
# 启用并启动服务
[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/32
10.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 Daemon Documentation=man:dhcrelay(8) Wants=network-online.target After=network-online.target [Service] Type=notify # 在 ExecStart 参数末尾添加 DHCP 服务器 IP 地址 ExecStart=/usr/sbin/dhcrelay -d --no-pid 10.1.8.10 StandardError=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.conf
net.ipv4.ip_forward = 1
客户端测试
[root@dhcp-client ~]# nmcli connection add con-name dynamic type ethernet
ipv4.method auto ifname ens33
[root@dhcp-client ~]# nmcli connection up dynamic
[root@dhcp-client ~]# ip -br a
lo UNKNOWN 127.0.0.1/8 ::1/128
ens33 UP 10.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.5
server-duid "\000\001\000\0012\004\\\034\000\014)6\302w";
lease 10.1.1.100 {
starts 2 2026/08/04 08:20:43;
ends 2 2026/08/04 08:30:43;
cltt 2 2026/08/04 08:20:43;
binding state active;
next binding state free;
rewind binding state free;
hardware ethernet 00:0c:29:d8:9d:e6;
client-hostname "dhcp-client";
}
lease 10.1.1.100 {
starts 2 2026/08/04 08:21:14;
ends 2 2026/08/04 08:31:14;
cltt 2 2026/08/04 08:21:14;
binding state active;
next binding state free;
rewind binding state free;
hardware ethernet 00:0c:29:d8:9d:e6;
client-hostname "dhcp-client";
}
DHCP 服务器-Dnsmasq(扩展)
Dnsmasq 介绍
Dnsmasq 是一个集 DNS 缓存、DHCP 、DHCP 中继、PXE一体的软件。多个功能即可以同时实施,也可以独立实施。
作为 DNS 缓存服务器,可以通过缓存 DNS 请求来提高对访问过的网址的连接速度。
作为 DHCP 服务器,可用于为局域网电脑分配内网ip地址和提供路由。
作为 DHCP 中继服务器,为局域网提供 DHCP 中继服务。
作为 TFTP 服务器,提供网络 PXE 网络引导。
Dnsmasq 轻量且易配置,适用于个人用户或小型网络。
接下来我们分别介绍这些功能。
节点规划
dhcp-client1 \ dhcp-client2 复用上个实验,dnsmasq重新克隆产生
| 节点名称 | 节点IP | 作用 |
|---|---|---|
| dnsmasq | 10.1.8.10/24(服务器必须静态IP) | DHCP服务器 |
| dhcp-client1(普通员工) | 从dhcp-server自动获取随机IP | DHCP客户端 |
| dhcp-client2(经理) | 从dhcp-server自动获取固定IP10.1.8.66 | DHCP客户端 |
dnsmasq 安装
# 基础配置
[root@localhost ~]# nmcli connection modify ens33 ipv4.method manual ipv4.addresses 10.1.8.10/24 ipv4.gateway 10.1.8.2 ipv4.dns 10.1.8.2 autoconnect yes
[root@localhost ~]# nmcli connection up ens33
[root@localhost ~]# hostnamectl set-hostname dnsmasq
# 安装软件
[root@dnsmasq ~]# yum install -y dnsmasq
# 配置防火墙,放行dhcp服务
[root@dnsmasq ~]# firewall-cmd --add-service=dhcp
[root@dnsmasq ~]# firewall-cmd --add-service=dhcp --permanent
dnsmasq 配置
/etc/dnsmasq.conf 配置文件提供大量的注释说明。 比较重要参数:
-
listen-address,定义监听的地址,默认是监控本机的所有网卡上。
-
dhcp-authoritative,DHCP 权威服务器。
-
dhcp-range,IP 地址池范围。可以配置多个。
-
dhcp-host,给特定 MAC 地址主机分配主机名和IP地址。
-
dhcp-lease-max,DHCP 租约最长时间。
-
dhcp-option,定义 dhcp 选项。
-
设置网关:
dhcp-option=option:router,1.2.3.4 -
设置域名服务器:
dhcp-option=option:dns-server,1.2.3.4,1.2.3.5 -
设置查找域:
dhcp-option=option:domain-search,laogao.cloud,example.com -
设置对时服务器:
dhcp-option=option:ntp-server,1.2.3.4,1.2.3.5
-
配置示例
# 文件末尾加上 [root@dnsmasq ~]# vim /etc/dnsmasq.conf # IP地址范围是10.1.8.50-150,掩码24位,租约时间是12小时 dhcp-range=10.1.8.50,10.1.8.101,255.255.255.0,12h # 给Mac地址是00:0c:29:02:49:2a的主机分配IP地址:10.1.8.66,租约时间:45分钟 dhcp-host=00:0c:29:02:49:2a,10.1.8.66,45m # 设置网关 dhcp-option=option:router,10.1.8.2 # 设置DNS dhcp-option=option:dns-server,8.8.8.8
dnsmasq 启用
[root@dnsmasq ~]# pkill -9 dnsmasq
[root@dnsmasq ~]# systemctl enable dnsmasq.service --now
[root@dnsmasq ~]# systemctl status dnsmasq.service
客户端测试
dhcp-client1
[root@dhcp-client1 ~]# nmcli connection up dynamic [root@dhcp-client1 ~]# ip add 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:07:ec:8b brd ff:ff:ff:ff:ff:ff inet 10.1.8.95/24 brd 10.1.8.255 scope global noprefixroute dynamic ens33 valid_lft 43177sec preferred_lft 43177sec inet6 fe80::fd60:8109:ed08:cd78/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@dhcp-client1 ~]# cat /etc/resolv.conf # Generated by NetworkManager nameserver 8.8.8.8 [root@dhcp-client1 ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.1.8.2 0.0.0.0 UG 100 0 0 ens33 10.1.8.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
dhcp-client2
[root@dhcp-client2 ~]# nmcli connection up dynamic [root@dhcp-client2 ~]# ip add 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:02:49:2a brd ff:ff:ff:ff:ff:ff inet 10.1.8.66/24 brd 10.1.8.255 scope global noprefixroute dynamic ens33 valid_lft 2696sec preferred_lft 2696sec inet6 fe80::e068:efe7:110b:1b25/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@dhcp-client2 ~]# cat /etc/resolv.conf # Generated by NetworkManager nameserver 8.8.8.8 [root@dhcp-client2 ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.1.8.2 0.0.0.0 UG 100 0 0 ens33 10.1.8.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
DHCP 中继服务器-Dnsmasq(扩展-自学)
这里采用上文中的环境,中继服务通过Dnsmasq实现。
配置 dnsmasq
[root@dhcp-relay ~]# yum install -y dnsmasq [root@dhcp-relay ~]# vim /etc/dnsmasq.conf # 在末尾增加一条记录 # 作用:来自于网卡10.1.1.20的dhcp请求转发到10.1.8.10 dhcp-relay=10.1.1.20,10.1.8.10 # dhcp-relay可多次使用,为不同网段提供relay功能 [root@dhcp-relay ~]# systemctl enable dnsmasq.service --now
配置路由转发
# 开启路由转发 [root@dhcp-relay ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf [root@dhcp-relay ~]# sysctl -p /etc/sysctl.conf net.ipv4.ip_forward = 1
客户端测试
[root@dhcp-client1 ~]# nmcli connection up dynamic
[root@dhcp-client2 ~]# nmcli connection up dynamic
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)