一、DHCP概述
1.1 DHCP的概念
动态主机配置协议 (Dynamic Host Configuration Protocol,DHCP),一种基于C/S架构的网络通信协议,用于集中对客户端的TCP/IP参数(常见参数包括IP地址、子网掩码、缺省网关、DNS服务器等)实现集中管理和自动配置。
DHCP的前身是BOOTP(BOOTstrap Protocol)协议,并在BOOTP基础上进行了扩展。DHCP协议主要应用于局域网中,例如企业内部网络、学校校园网、公共场所的WiFi网络等。
1.2 DHCP的优势
1、动态分配
DHCP协议支持动态IP地址分配,可以为客户端动态分配IP地址和其他网络参数,避免了IP地址浪费和冲突问题。
2、集中化管理
DHCP服务器可以集中管理IP地址和其他网络参数,管理员只需要在DHCP服务器上进行配置,无需在每台客户端设备上进行配置,简化了管理工作。
3、自动化配置
使用DHCP协议可以自动为客户端分配IP地址和其他网络参数,无需手动配置,节省了网络管理员的时间和精力。
4、安全性
DHCP协议可以对客户端设备进行身份认证,确保网络中只有授权设备可以接入网络。
5、灵活性
DHCP协议支持多种IP地址分配模式,例如静态分配、动态分配等,可以根据不同场景进行灵活配置。
二、DHCP工作机制
DHCP协议是一种基于C/S架构的网络通信协议使,DHCP服务器和DHCP客户端分别使用UDP的67号端口和68端口完成地址租约。实际网络中,服务器、路由器、交换机等多种设备都可以部署DHCP服务。
2.1 DHCP协议数据包
DHCP协议通信时,主要涉及6种报文类型:
报文类型 | 含义 |
---|---|
DHCP Discover | DHCP客户端初次接入网络时,会发送DHCP Discover报文,用于查找和定位DHCP服务器 |
DHCP Offer | 服务器对DHCP Discover报文的响应,此报文携带了各种配置信息 |
DHCP Request | 客户端使用此报文向服务器发送DHCP请求或地址续租 |
DHCP ACK | 服务器对DHCP Request的确认响应,客户端收到此报文后可将获取的IP地等信息配置并使用 |
DHCP NAK | 服务器对DHCP Request的拒绝响应,客户端收到此报文将无法获取到合适的IP地址 |
DHCP Release | 客户端通过发送DHCP Release报文向服务器释放IP地址 |
2.2 DHCP的工作过程
DHCP协议的工作过程可以分为四个阶段:发现、提供、请求和确认(否认),如下图所示:
1、发现阶段:DHCP客户端启动时,向网络中广播一个DHCP Discover报文,以请求IP地址分配。
2、提供阶段:DHCP服务器收到DHCP Discover报文后,向客户端发送DHCP Offer报文,其中包含了一个可用的IP地址和其他网络参数。
3、请求阶段:DHCP客户端接收到DHCP Offer消息后,向DHCP服务器广播DHCP Request消息,以请求分配或确认这个IP地址和其他网络参数。
4、确认阶段:DHCP服务器接收到DHCP Request消息后,向客户端发送DHCP Ack消息,表示分配成功。如果提供的IP地址已经被分配,则会发送DHCP NAK消息,表示分配失败。
DHCP客户端接收到DHCP Ack消息后,完成IP地址和其他网络参数的配置。
2.3 DHCP租约更新
客户端申请到IP地址后,客户会启动三个定时器,分别用来控制租期更新,租期重绑定和租期失效。默认情况下,当还剩下50%的租期时,客户端会进行租约更新,向DHCP服务器发送DHCP Request报文请求延长IP地址的租期,DHCP服务器响应DHCP ACK报文,给予DHCP客户端一个新的租期。如图所示:
2.4 DHCP重绑定
DHCP客户端在租约更新时,如果没有收到DHCP服务器的确认,会认为原DHCP服务器不可用。当重新绑定计时器到来时,即剩下租期的12.5%时,会向网络广播DHCP Request报文,网络上任何一台DHCP都可以响应DHCP ACK报文或DHCP NAK报文。重绑定过程如下图所示:
2.5 IP地址释放
如果客户端在租约更新和重绑定两阶段都没有收到服务器的响应,将在租期满时主动向服务器发送DHCP Release报文,释放IP地址,并重新进入初始化阶段。如下图所示:
2.6 DHCP地址分配机制
网络管理员可以根据网络需求为不同的主机选择不同的分配策略。
1、动态分配机制:通过DHCP为主机分配一个有使用期限的IP地址。这种分配机制适用于主机需要临时接入网络或者空闲地址数小于网络主机总数且主机不需要永久连接网络的场景。
2、静态分配机制:网络管理员通过DHCP为指定的主机分配固定的IP地址。相比手工静态配置IP地址,通过DHCP方式静态分配机制避免人工配置发生错误,方便管理员统一维护管理。
三、DHCP服务器安装和启动
这里以Centos 7.5 为例,介绍服务器的安装和启动。
3.1 DHCP服务器安装
安装DHCP服务,通常需要三个软件包:DHCP服务器主程序包dhcp、DHCP服务器库文件工具dhcp-libs和DHCP服务器开发工具软件包dhcp-common。后两个包一般默认已经安装。YUM源配置好后,使用如下命令完成安装:
[root@server ~]# yum install dhcp* -y
3.2 DHCP服务器启动
DHCP服务的守护进程名为dhcpd,管理员使用systemctl命令管理DHCP服务。不过,未正确配置dhcp服务将会导致DHCP服务启动失败。
[root@server ~]# systemctl start dhcpd #启动dhcp服务
[root@server ~]# systemctl stop dhcpd #停止dhcp服务
[root@server ~]# systemctl restart dhcpd #重新启动dhcp服务
[root@server ~]# systemctl enable dhcpd #设置开机自动启动dhcp服务
[root@server ~]# systemctl disable dhcpd #设置开机禁用dhcp服务
3.3 DHCP服务器重要文件
1、DHCP主配置文件
DHCP服务器的主配置文件是“/etc/dhcp/dhcpd.conf”,该配置文件默认为空,此外,安装了DHCP服务器后,会生成一个DHCP配置模板文件,文件路径为“/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example”,初学者可以参考模板文件来配置。DHCP配置参数将在后面详细介绍。
2、DHCP租约文件
DHCP租约文件用于保存一系列租约声明,包括客户端的相关信息,文件路径为“/var/lib/dhcpd/dhcpd.leases”。DHCP刚安装时,租约文件为控空,该文件不可删除,如果删除将导致DHCP服务启动失败。
3、中继配置文件
DHCP软件包提供了中继代理程序dhcrelay,当需要配置DHCP中继代理服务时,需要配置中继配置文件“/etc/systemd/system/dhcrelay.service”。本文中未涉及中继配置。
四、DHCP配置文件详解
4.1 配置文件内容
DHCP的配置文件默认为空,配置参数说明可以参考案例文件“/usr/share/doc/dhcp*/dhcpd.conf.example”。
DHCP服务的配置内容包括全局配置和局部配置。全局配置和局部配置通常以参数或选项的形式配置,并以分号结束,格式如下:
配置参数名 配置值;
或
option 配置选项名 配置值;
全局配置对服务器上所有的作用域生效,而局部配置通常包含在声明内,用一对“{}”包含,表示只对某个声明的子网或主机生效,当全局配置和局部配置发生冲突时,局部配置的优先级高。
若DHCP配置文件配置错误,将会导致DHCP服务无法启动,因此,配置前,务必熟悉配置文件中的参数或选项的含义和配置文件的格式。
我对参数和选项的理解:大部分参数和选项既可以做全局配置,也可以做局部配置,而参数是必须配置的,选项是可选配置,以option开头。这点,大家可以讨论或评论。
4.2 常用配置参数、选项和声明
1、常见的配置参数
常见配置参数 | 含义 |
---|---|
ddns-update-style | 设置是否支持DNS动态更新,类型包括none(不支持动态更新)、interim(互动更新)和ad-hoc(特殊更新),默认为none |
log-facility | 日志保存的位置,在/etc/rsyslog.conf 文件中设置的local7,旧表DHCP日志默认的保持位置是/var/log/boot.log |
default-lease-time | 默认的租约时间,秒为单位 |
max-lease-time | 最大的租约时间,秒为单位 |
range | 定义服务器的IPv4地址池,声明子网时被配置在subnet声明内 |
hardware | 指定网卡接口的类型和MAC地址,地址绑定时被配置在host声明内 |
fixed-address | 分配给DHCP客户端的固定地址,地址绑定时被配置在host声明内 |
2、常见的配置选项
常见的选项 | 含义 |
---|---|
domain-name | 定义客户端分配的域名 |
domain-name-servers | 定义客户端分配的DNS服务器地址,可有多个,用逗号隔开 |
routers | 定义客户端的网关地址 |
subnet-mask | 定义客户端的子网掩码 |
broadcast-address | 定义客户端的广播地址 |
ntp-server | 定义客户端的网络时间服务器地址 |
3、配置声明
DHCP服务器使用声明的形式来指定一个子网作用域、一台主机、一组主机等的配置参数。声明部分包括声明头和配置内容,配置内容位于一对大括号“{}”内。常见的声明包括:
声明 | 说明 |
---|---|
subnet | 声明一个子网作用域配置 |
host | 声明一个特定的客户端的配置 |
shared-network | 声明一个超级作用域,超级作用域可以将多个子网作用域组合在一起管理 |
class | 声明一个类,对客户机归类 |
pool | 声明一个池,配合class类使用 |
五、企业案例:配置单个作用域
5.1 案例描述
使用CentOS 7作为DHCP服务器,为网络中的客户端动态分配的地址,地址网段为192.168.200.0,地址池从192.168.200.10到192.168.200.240,子网掩码255.255.255.0,网关192.168.200.2,DNS指向192.168.200.2和202.102.199.68,绑定的host的IP地址为192.168.200.166,客户端自动获取IP地址,租期为1天。
5.2 实验环境
1、实验平台
本文中采用的实验环境是VMware Workstation 15 Pro,共使用三台机器,如下表所示:
主机名称 | 操作系统 | IP地址 | 网络连接方式 | 角色 |
---|---|---|---|---|
Server | CentOS 7.5 | 192.168.200.100 | NAT | DHCP服务器 |
CentOS | CentOS 7.5 | DHCP分配(动态获取) | NAT | Linux客户端 |
Client2 | Windows Server2022 | DHCP分配(保留) | NAT | Windows客户端 |
2、VMware Workstation设置
由于VMware Workstation的NAT网络默认开启了DHCP服务,为了防止影响实验,需要事先将其DHCP功能关闭,执行【编辑】菜单下的【虚拟网络编辑器】命令,设置子网IP为“192.168.200.0”,取消勾选“使用本地DHCP服务将IP地址分配给虚拟机”,如图所示。
3、实验主机设置
实验所用的DHCP服务器、Linux客户端关闭防火墙、关闭Selinux,并配置好YUM源,DHCP服务器网卡手工配置静态IP地址:192.168.200.100/24。
5.3 配置服务器
1、安装DHCP服务器
[root@server ~]# yum install dhcp -y
2、编辑配置文件/etc/dhcp/dhcpd.conf
按照案例描述的要求,修改配置文件的内容如下,注意行前的数字是行号,不是配置文件内容:
[root@server ~]# vim /etc/dhcp/dhcpd.conf
ddns-update-style none;
default-lease-time 2592000;
max-lease-time 2592000;
log-facility local7;
option domain-name-servers 192.168.200.2,202.102.199.68;
subnet 192.168.200.0 netmask 255.255.255.0{
range 192.168.200.10 192.168.200.240;
option routers 192.168.200.2;
default-lease-time 86400;
max-lease-time 86400;
}
host Windows{
hardware ethernet 00:0c:29:8b:71:06;
fixed-address 192.168.200.166;
}
说明:
-
第1行:不支持动态更新
-
第2行:设置默认租约时间为2592000秒
-
第3行:设置最大租约时间为2592000秒
-
第4行:设置日志写入位置,/var/log/boot.log
-
第5行:配置全局DNS服务器地址192.168.200.2和202.102.199.68
-
第7行:声明一个子网作用域
-
第8行:定义地址池
-
第9行:配置网关
-
第10行:默认租约(与全局参数冲突,此时子网作用域优先级高)
-
第11行:最大租约
-
第14行:声明主机保留
-
第15行:主机硬件地址,00:0c:29:8b:71:06为Windows客户端网卡MAC地址
-
第16行:主机保留IP地址
3、重新启动DHCP服务并设置开机启动
[root@server ~]# systemctl restart dhcpd [root@server ~]# systemctl enable dhcpd
5.4 客户端测试
1、Linux客户端测试
配置Linux客户端的网卡配置文件/etc/sysconfig/network-scripts/ifcfg-ens33,将其中的BOOTPROTO值修改为dhcp,其他不用改变。
[root@client ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
使用dhclient -r 可以向服务器释放IP地址,使用dhclient可以向服务器重新申请IP地址。
[root@client ~]# dhclient -r
[root@client ~]# dhclient
查看/var/lib/dhclient/dhclient.leases文件可以看到租约信息
[root@client ~]# cat /var/lib/dhclient/dhclient.leases
lease {
interface "ens33";
fixed-address 192.168.200.138;
option subnet-mask 255.255.255.0;
option routers 192.168.200.2;
option dhcp-lease-time 86400;
option dhcp-message-type 5;
option domain-name-servers 192.168.200.2,202.102.199.68;
option dhcp-server-identifier 192.168.200.100;
renew 3 2024/03/27 23:22:16;
rebind 4 2024/03/28 10:47:17;
expire 4 2024/03/28 13:47:17;
}
2、Windows客户端地址绑定测试
windows命令行下执行ipconfig/release 可以释放IP地址,执行ipconfig/renew可以向服务器重新申请IP地址。执行ipconfig/all命令查询网卡配置信息,如下图所示,可以看到IP地址和MAC地址绑定成功。