DHCP 服务器完整详解:原理、华为设备配置、Linux 部署、DHCP 中继、Dnsmasq 轻量 DHCP
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%租期时会广播发送DHCPRequest,任意一台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服务器搭建场景
1.路由器、交换机
2.linux、windos server3.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服务器 |
| dhcp-client1(普通员工) | 从dhcp-server自动获取随机IP | DHCP客户端 |
| dhcp-client2(经理) | 从dhcp-server自动获取固定IP 10.1.8.88 | DHCP客户端 |
基础配置
服务器必须静态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 1000inet 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 --now
# 查看服务状态
[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地址。
# 在/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 RelayAgent)。
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
配置 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
[root@dhcp-server ~]# /bin/cp /usr/share/doc/dhcp-*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
[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
[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 轻量且易配置,适用于个人用户或小型网络。
接下来我们分别介绍这些功能。
节点规划
| 节点名称 | 节点IP | 作用 |
|---|---|---|
| dnsmasq | 10.1.8.10/24(服务器必须静态IP) | DHCP服务器 |
| dhcp-client1(普通员工) | 从dhcp-server自动获取随机IP | DHCP客户端 |
| dhcp-client2(经理) | 从dhcp-server自动获取固定IP 10.1.8.88 | DHCP客户端 |
dnsmasq 安装
[root@server ~]# yum install -y dnsmasq
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.30,租约时间:45分钟
dhcp-host=00:0c:29:02:49:2a,10.1.8.30,45m
# 设置网关
dhcp-option=option:router,10.1.8.2
# 设置DNS
dhcp-option=option:dns-server,8.8.8.8
dnsmasq 启用
[root@dnsmasq ~]# systemctl enable dnsmasq.service --now
客户端测试
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.30/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
总结
DHCP 解决静态 IP 运维繁琐、地址浪费、移动设备适配差三大痛点,是企业局域网基础服务;
核心四步报文:Discover→Offer→Request→ACK,租期机制保障地址循环利用;
小型网络用路由器 / Dnsmasq,大型企业部署独立 Linux ISC-DHCP;
跨 VLAN / 子网场景必须配置 DHCP 中继,实现单服务器统一分配全网络 IP;
MAC 静态绑定可给服务器、高管终端分配永久固定 IP,兼顾自动化与稳定性。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)