DHCP 服务器摘要本文全面介绍了 DHCP动态主机配置协议服务器的原理、部署与配置。首先阐述了 DHCP 服务在大型网络中自动分配 IP 地址等网络参数的重要性详细解析了 DHCPv4 的四步通信过程DISCOVER、OFFER、REQUEST、ACK。接着通过具体示例演示了在 Linux 系统上部署 DHCP 服务器的完整流程包括软件安装、配置文件详解、服务启动与日志监控。最后讲解了 DHCP 客户端的配置方法以及如何基于 MAC 地址为特定设备预留固定 IP 地址实现网络管理的精细化控制。一、DHCP 服务介绍在大型网络中系统静态分配IP地址面临问题确保不要同时在多个系统上使用同一个地址。部署新系统通常需要手动分配其IP地址。在云环境中实例的网络是自动化配置的。动态主机配置协议DHCP-Dynamic Host Configuration Protocol提供了一种自动配置网络参数的方法例如IP地址默认网关DNS服务器和域或NTP服务器。在网络中部署DHCP服务器您可以集中控制这些参数。DHCP有两种协议• 用于IPv4网络的 DHCPv4。• 用于IPv6网络的 DHCPv6。本课程只介绍DHCPv4。二、DHCP 通信过程1.客户端使用DHCPv4配置网络接口时网卡将 DHCPDISCOVER 数据包发送到 255.255.255.255 广播目标。因为路由器通常不转发该广播地址所以必须将DHCP服务器与客户端安装在同一物理网络上以便它可以接收DHCPDISCOVER数据包。您也可以将路由器配置为DHCP中继代理转发DHCP消息到其他网络。2.DHCP服务器收到 DHCPDISCOVER 数据包后响应 DHCPOFFER 数据包该数据包包含其自己的IP地址和客户端应使用的IP地址。该数据包还包括一个租用期限以指示所提供的IP地址有效的时间以及其他网络参数例如默认网关和DNS服务器。3.客户端收到DHCP服务器 DHCPOFFER 数据包后发送 DHCPREQUEST广播数据包请求DHCP服务器提供的IP地址。这似乎很多余但是网络上可能有多个DHCP服务器或者路由器可能会将DHCPOFFER转发到多个网络。因此客户端可能会从不同的DHCP服务器收到响应。客户端的DHCPREQUEST数据包包括接受请求的DHCP服务器的IP地址。4.DHCP服务器收到DHCPREQUEST数据包后会发送 DHCPACK 数据包确认客户端对客户端IP地址具有独占权限直到租约到期为止。1.租约到期后重新向DHCP服务器续约。2.DHCP服务器同意客户端续约。在DHCP服务器上可以使用journalctl --unit dhcpd.service命令来访问客户端与服务端通信消息。 以下摘录显示了客户端通过DHCP请求IP地址。DHCPDISCOVER from 00:0c:29:26:13:b5 via eth0 DHCPOFFER on10.1.8.101 to 00:0c:29:26:13:b5(hosta)via eth0 DHCPREQUESTfor10.1.8.101(10.1.8.2)from 00:0c:29:26:13:b5(hosta)via eth0 DHCPACK on10.1.8.101 to 00:0c:29:26:13:b5(hosta)via eth0在租约到期之前客户端会定期向服务器发送 DHCPREQUEST 数据包以确保服务器不会收回IP地址。多个 DHCP 服务器尽管DHCP支持在物理网络上运行多个DHCP服务器但不建议这么做。正常情况下同一个物理网络中只需要一台DHCP服务器应回答客户端的请求即可。在同一网络上运行多个服务器的情况下当新客户端发送 DHCPDISCOVER 数据包以获取地址时它可能会收到多个 DHCPOFFER 数据包。客户端仅接受其中一台服务器提供的配置并广播包含该服务器IP地址的 DHCPREQUEST 数据包。其他DHCP服务器释放它们为客户端准备的IP地址。但是当客户端使用 DHCPREQUEST 数据包更新其IP地址时服务器行为取决于服务器是否具有权威性。 非权威的DHCP服务器会忽略DHCPREQUEST数据包中不知道的地址。当客户端发送的IP地址在权威DHCP服务器管理的地址范围内但服务器以前不知道该IP地址时它将拒绝该请求并发回DHCPNAK数据包。这可能意味着客户端最初是从网络上的另一台非权威的DHCP服务器获得其地址的。任何收到DHCPNAK数据包的客户端都不能再使用该地址而必须请求一个新的地址。使用默认配置启动DHCP服务器时服务器不是权威服务器 这样可以防止非权威DHCP服务器接管权威服务器提供的地址。三、部署 DHCP 服务器要配置DHCPv4服务器请首先使用ip addr命令确认您的网络接口配置是否指定了BROADCAST地址。[rootserver ~16:54:01]# ip addr1: lo:LOOPBACK,UP,LOWER_UPmtu65536qdisc noqueue state UNKNOWN group default qlen1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet127.0.0.1/8 scopehostlo valid_lft forever preferred_lft forever inet6 ::1/128 scopehostvalid_lft forever preferred_lft forever2: ens33:BROADCAST,MULTICAST,UP,LOWER_UPmtu1500qdisc pfifo_fast state UP group default qlen1000link/ether 00:0c:29:bb:c6:bc brd ff:ff:ff:ff:ff:ff inet10.1.8.10/24 brd10.1.8.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet6 fe80::a552:389:2e84:bb76/64 scopelinknoprefixroute valid_lft forever preferred_lft forever服务器必须具有静态IP地址1.安装 DHCP 软件# 安装软件包[rootserver ~16:54:19]# yum install -y dhcp# 配置防火墙放行dhcp服务[rootserver ~16:55:45]# firewall-cmd --add-servicedhcp[rootserver ~16:56:53]# firewall-cmd --add-servicedhcp --permanent2.配置 DHCP 服务器dhcpd服务使用/etc/dhcp/dhcpd.conf配置文件。 dhcp软件包提供/usr/share/doc/dhcp-*/dhcpd.conf.example 配置文件示例。[rootserver ~17:03:12]# vim /etc/dhcp/dhcpd.confsubnet10.1.8.0 netmask255.255.255.0{range10.1.8.10110.1.8.130;option domain-name-servers223.5.5.5;option domain-namelz.cloud;option routers10.1.8.2;option broadcast-address10.1.8.255;default-lease-time600;max-lease-time7200;}配置说明• 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参数。3.验证 DHCP 配置# 验证配置文件语法[rootserver ~17:04:36]# 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 configfile4.启用并启动服务# 启用并启动服务[rootserver ~17:05:28]# systemctl enable dhcpd --now# 查看服务状态[rootserver ~17:06:20]# systemctl status dhcpd5.查看日志和租约记录# 实时查看DHCP分配、报错、地址冲突、授权问题[rootserver ~17:06:35]# tail -f /var/log/messages# 查看已分配IP、租期、客户端MAC[rootserver ~17:08:11]# cat /var/lib/dhcpd/dhcpd.leases四、配置 DHCP 客户端1.配置网卡自动获取# 添加一个自动获取ip连接假设网卡设备名为ens36[rootclient ~17:13:04]# nmcli connection add con-name dynamic type ethernet ifname ens36连接dynamic(102ce469-8c2d-4d4b-8eb1-dd014cb010bb)已成功添加。#验证[rootclient ~17:13:41]# nmcli connection up dynamic连接已成功激活D-Bus 活动路径/org/freedesktop/NetworkManager/ActiveConnection/14[rootclient ~17:14:06]# ip addr show ens363: ens36:BROADCAST,MULTICAST,UP,LOWER_UPmtu1500qdisc pfifo_fast state UP group default qlen1000link/ether 00:0c:29:b0:ec:bb brd ff:ff:ff:ff:ff:ff inet10.1.8.101/24 brd10.1.8.255 scope global noprefixroute dynamic ens36 valid_lft 579sec preferred_lft 579sec inet6 fe80::a300:423e:2352:7ebc/64 scopelinknoprefixroute valid_lft forever preferred_lft forever2.dhclient 工具(1)命令帮助[rootclient ~17:14:28]# dhclient --helpInternet Systems Consortium DHCP Client4.2.5 Copyright2004-2013 Internet Systems Consortium. All rights reserved. For info, please visit https://www.isc.org/software/dhcp/ Usage: dhclient[-4|-6][-SNTPI1dvrxc][-nw][-pport][-D LL|LLT][-s server-addr][-cf config-file][-lf lease-file][-pf pid-file][--no-pid][-eVARval][-Idhcp-client-identifier][-B][-Hhost-name|-Ffqdn.fqdn][-timeouttimeout][-Vvendor-class-identifier][-Rrequest option list][-sf script-file][interface]This version of ISC DHCP is based on the release available on ftp.isc.org. Features have been added and other changes have been made to the base software releaseinorder tomakeit work better with this distribution. Please reportforthis software via the CentOS Bugs Database: http://bugs.centos.org/ exiting.(2)使用示例# 释放当前DHCP获取的IP[rootclient ~17:15:47]# dhclient -r ens36# 重新向DHCP服务器申请IP[rootclient ~17:16:47]# dhclient -v ens36五、基于 MAC 地址预留IP地址在配置文件中host声明可以将MAC地址绑定到IP地址。 此配置对于始终为特定系统的网络接口提供相同的IP地址特别有用尤其是Web或数据库系统之类的服务器。客户端MAC地址查看[rootclient ~17:16:56]# ip link show ens363: ens36:BROADCAST,MULTICAST,UP,LOWER_UPmtu1500qdisc pfifo_fast state UP mode DEFAULT group default qlen1000link/ether 00:0c:29:b0:ec:bb brd ff:ff:ff:ff:ff:ff在以下示例中服务器始终为MAC地址是00:0c:29:b0:ec:bb的系统分配10.1.8.20地址。在/etc/dhcp/dhcpd.conf最后添加如下内容hostclient.lz.cloud{hardware ethernet 00:0c:29:b0:ec:bb;fixed-address10.1.8.130;}重启服务[rootserver ~17:21:47]# systemctl restart dhcpd客户端验证# 激活连接[rootclient ~17:18:00]# nmcli connection up dynamic连接已成功激活D-Bus 活动路径/org/freedesktop/NetworkManager/ActiveConnection/15# 验证[rootclient ~17:23:01]# ip addr show ens363: ens36:BROADCAST,MULTICAST,UP,LOWER_UPmtu1500qdisc pfifo_fast state UP group default qlen1000link/ether 00:0c:29:b0:ec:bb brd ff:ff:ff:ff:ff:ff inet10.1.8.130/24 brd10.1.8.255 scope global noprefixroute dynamic ens36 valid_lft 583sec preferred_lft 583sec inet6 fe80::a300:423e:2352:7ebc/64 scopelinknoprefixroute valid_lft forever preferred_lft forever