DHCP服务器

传统手动配置参数的问题

参数多、理解难

  • 普通用户对于网络参数不了解,经常配置错误,导致无法正常访问网络。随意配置 ip 地址导致地址冲突更是时常发生。

工作量大

  • 交由网络管理员统一配置,工作量巨大,属于重复性劳动。
  • 网络管理员需要提前对 ip 地址进行规划、分配到个人。

利用率低

  • 企业网中每个人固定使用一个 IP 地址,IP 地址利用率低,有些地址可能长期处于未使用状态。

灵活性差

  • WLAN(Wireless Local Area Network,无线局域网)的出现使终端位置不再固定,当无线终端移动到另外一个无线覆盖区域时,可能需要再次配置 IP 地址。

DHCP 基本概念

在这里插入图片描述

  • 为解决传统的静态手工配置方式的不足,DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)应运而生,其可以实现网络动态合理地分配 IP 地址给主机使用。
  • DHCP 采用 C/S 架构,主机无需配置,从服务器端获取地址,可实现接入网络后即插即用。

DHCP 优点

统一管理
在这里插入图片描述

  • IP 地址由从服务器端的地址池中获取,服务器端会记录维护 IP 地址的使用状态,做到 IP 地址统一分配、管理。

地址租期
在这里插入图片描述

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

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

DHCP 服务器搭建场景

1.路由器、交换机

2.linux、windows server

3.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>ststem-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>ststem-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-center enable 
[Huawei]sysname r1
[r1]int e0/0/0
[r1-Ethernet0/0/0]ip address 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自带HDCP功能,所以先将其关闭
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

节点规划

节点名称 节点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-serve

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 "xiaoma.cloud";     #局域网设备的域名后缀 = xiaoma.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-serversdomain-search更新resolv.conf文 件中的nameserversearch参数。

验证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 fil

启用并启动服务

# 启用并启动服务
[root@dhcp-server ~]# systemctl enable dhcpd --now

# 查看服务状态
[root@dhcp-server ~]# systemctl status dhcpd

配置DHCP客户端

dhcp-client1(普通员工)

# 添加一个自动获取ip连接,假设网卡设备名为ens33
[root@dhcp-client1 ~ 11:23:30]# nmcli connection add con-name dynamic type ethernet ipv4.method auto ifname ens33
[root@dhcp-client1 ~ 12:28:17]# nmcli connection up dynamic

# 验证
[root@dhcp-client1 ~ 12:28:36]# 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:4d:17:91 brd ff:ff:ff:ff:ff:ff
    inet 10.1.8.101/24 brd 10.1.8.255 scope global noprefixroute dynamic ens33
       valid_lft 590sec preferred_lft 590sec
    inet6 fe80::45d4:4eb4:c9bb:69b4/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
       
[root@dhcp-client1 ~ 12:28:47]# cat /etc/resolv.conf
# Generated by NetworkManager
search xiaoma.cloud
nameserver 223.5.5.5

[root@dhcp-client1 ~ 12:29:10]# 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
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

基于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:9f:76:bb` 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.xiaoma.cloud {
hardware ethernet 00:0c:29:9f:76:bb;
fixed-address 10.1.8.88;
}

重启服务

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

客户端验证

# 创建并激活连接
[root@dhcp-client2 ~ 13:53:04]# nmcli connection add con-name dynamic type ethernet ipv4.method auto ifname ens33
[root@dhcp-client2 ~ 13:53:17]# nmcli connection up dynamic

# 验证
[root@dhcp-client2 ~ 13:53:24]# 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:9f:76:bb 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 597sec preferred_lft 597sec
    inet6 fe80::ff27:a4e6:2f07:d6fd/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
       
[root@dhcp-client2 ~ 13:53:28]# cat /etc/resolv.conf
# Generated by NetworkManager
search xiaoma.cloud
nameserver 223.5.5.5

[root@dhcp-client2 ~ 13:53:42]# 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
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

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 中继实践

实验主机

主机名 IP地址 虚拟网络
dhcp-server 10.1.8.10/24 vmnet8
dhcp-relay 10.1.8.20/24 vmnet8
dhcp-relay 10.1.1.20/24 vmnet1
dhcp-client 自动获取 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 ens35 con-name ens35 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

# 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 "xiaoma.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 "xiaoma.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@centos7 ~ ]# nmcli connection add con-name dynamic type ethernet ipv4.method auto ifname ens33
[root@centos7 ~ ]# nmcli connection up dynamic

[root@centos7 ~ ]# ip -br a
lo               UNKNOWN        127.0.0.1/8 ::1/128 
ens33            UP             10.1.1.131/24 fe80::a614:3cb9:71d6:9829/64  #获取到地址

# 验证确实是dhcp-server分配的
[root@centos7 ~ ]# 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\004a\323\000\014)\3675v";

lease 10.1.1.131 {
  starts 2 2026/08/04 08:44:57;
  ends 2 2026/08/04 08:54:57;
  cltt 2 2026/08/04 08:44:57;
  binding state active;
  next binding state free;
  rewind binding state free;
  hardware ethernet 00:0c:29:28:6d:5d;
  client-hostname "dhcp-client";
}
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐