DHCP(动态主机配置协议)
DHCP(动态主机配置协议)
1.概述
动态主机配置协议(DHCP)是一种主要功能是自动分配IP地址并被广泛应用于局域网内部以确保设备互联的网络协议。
DHCP遵循C/S架构,在支持大规模局域网环境的同时也能够应对配备有较多移动办公设备的工作场所。
其系统的核心功能是通过自动化配置向局域网内的设备和网络供应商分配IP地址及相关配置项;该系统还提供统一的资源管理和监控平台供内部管理员使用,以便实现对所有计算机的有效统一调度。
DHCP Server端使用 67端口 ,DHCP Client端使用 68端口 。

2.优点:
减少管理员的工作量;
避免IP地址冲突;
提高IP地址的利用率;
移动计算机之后不用重新配置网络信息,能够方便更改错误的可能性;
**3.**相关概念:
DHCP客户端:获取网络配置信息
DHCP服务端:提供网络配置参数(IP地址、DNS、Gateway等)
DHCP中继代理:服务端和客户端之间转发DHCP的设备
作用范围:在一个网络内所有可分配的IP地址构成的一个连续段落, 主要用于指定物理子网内的唯一IP地址范围
超级作用域:一组作用域的集合,实现一个物理子网中多个逻辑IP地址
排除范围:移除作用域中有限的IP地址序列(不使用DHCP服务)
地址池:定义作用域排除范围之后,剩余的所有地址形成可用地址池
保留:DHCP服务器提供永久地址租约,确保客户端始终使用相同的IP地址
租用:客户从服务器上获得并临时占用某个IP地址的过程
该系统会记录用户访问设备的时间范围,并在指定时间段内自动续费。
当当前租期结束或被终止时, 相关租赁关系也随之失效。
该服务会在用户完成付费操作后, 生成新的租赁记录以替代当前的租赁关系。
自动更新租约:
当租约>=50%,自动尝试更新租约
当租约>=87.5%,发出广播再次更新租约
当租约>=100%,客户端停止使用当前的IP地址,只能够重新进行DHCP租约过程
手动更新租约:
Windows:ipconfig /renew和/release
Linux:dhclient -r
4.工作原理:
(1)DHCP请求过程:

C端向局域网中发送一个DHCP Discover广播包,主要用于发现S端;
S端接收到 DHCP Discover 包后,在线立即发送 DHCP Offer 包到 C 端,并将其中包含的可用 IP 地址及相关参数一并传递给 C 端点。
C端收到DHCP Offer包,发送DHCP Request包给S端,请求IP地址;
S端收到DHCP Request包之后,发送DHCP ACK包给C端,确认信息;
**(2)**DHCP报文类型:
DHCP Discover(0x01):为Client开始DHCP过程的第一个报文
DHCP Offer(0x02):为Server对DHCP Discover报文的响应
DHCP Request(0x03):此报文是在 Client 发起 DHCP 过程中响应 Server 发出 DHCP Offer 报文的行为;或者是在 Client 续延 IP 地址租赁期时发出的一种报文行为。
DHCP Decline(0x04):当Client检测到Server为其分配的IP地址无法使用时(如因IP地址冲突导致的问题),会发送此报文以指示Server禁止对该IP地址进行进一步分配
DHCP Ack(0x05):Server 发出对该 Client 的 DHCP 请求报文的确认响应报文,并当 Client 收到此确认响应时才真正地获得了与之相关的 IP 地址配置信息。
The Server will reject the Client's DHCP Query request upon receiving a DHCP Nak(0x06) message, and the Client will acknowledge this response and initiate a new DHCP procedure.
DHCP Release(0x07):终端设备主动发起释放请求以获取其IP地址的报文。当Server接收到该报文时即可释放回该IP地址供其他终端设备获取
在 DHCP 信息包(0x08)中:该客户端已接收到 IP 地址,并发送此报文仅为从 DHCP 服务器处获取其他相关网络配置信息如 route IP 和 DNS IP 等。
通常作用域由一个完整且连续的IP地址范围构成,在此范围内分配给客户端的实际可用资源仅限于那些已经被分配到该作用域中的特定IP地址。
5.DHCP实验:
一、配置DHCP客户端:
(1)关闭防火墙和SELinux:
[root@localhost ~]# systemctl stop firewalld #临时关闭Centos7默认防火墙
[root@localhost ~]# systemctl disable firewalld #永久关闭Centos7默认防火墙
[root@localhost ~]# systemctl status firewalld #查看防火墙状态
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
[root@localhost ~]# vim /etc/selinux/config #编辑SELinux主配置文件
SELINUX=disabled #设置为disabled关闭状态
[root@localhost ~]# reboot #开启或关闭防火墙后必须重启系统才能生效
[root@localhost ~]# getenforce #查询SELinux的运行模式
Disabled
**(2)**取消虚拟网络编辑器的DHCP自动分配功能:
基于VMware虚拟机软件预装的DHCP服务,为了防止与用户自配置的dhcpd服务程序产生冲突。
为了确保DHCP客户端与服务器能够正常工作,在配置时它们必须处于相同的网络模式——仅主机模式(Hostonly)。如果它们不在同一网络模式下,则会导致物理隔离,并因此无法获得有效的IP地址。

二、配置DHCP服务器:
(1)DHCP服务安装:
[root@localhost ~]# rpm -qa | grep dhcp #查看当前系统是否安装了相应的软件包
dhcp-libs-4.2.5-68.el7.centos.1.x86_64
dhcp-common-4.2.5-68.el7.centos.1.x86_64
[root@localhost ~]# yum install -y dhcp
……安装过程省略……
[root@localhost ~]# rpm -qa | grep dhcp #再次查看当前系统是否安装了相应的软件包
dhcp-4.2.5-77.el7.centos.x86_64 #服务已安装
dhcp-libs-4.2.5-77.el7.centos.x86_64
dhcp-common-4.2.5-77.el7.centos.x86_64
(2)查看DHCP配置文件:
主配置文件:/etc/dhcp/dhcpd.conf
服务单元:/usr/lib/systemd/system/dhcpd.service
租约文件:/var/lib/dhcpd/dhcpd.lease
执行程序:/usr/sbin/dhcpd、/usr/sbin/dhcrelay
服务脚本:/etc/init.d/dhcpd、/etc/init.d/dhcrelay
参数配置:/etc/sysconfig/dhcpd
网络服务的排错日志:/var/log/messages
[root@localhost ~]# cat /etc/dhcp/dhcpd.conf
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
#DHCP的服务程序的配置文件中只有以上3行注释语句,这意味着我们需要自行编写这个文件。
(3)配置DHCP主配置文件:
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf
ddns-update-style none; #设置DNS服务不自动进行动态更新
ignore client-updates; #忽略客户端更新DNS记录
subnet 192.168.10.0 netmask 255.255.255.0 { #作用域为192.168.10.0/24网段
range 192.168.10.50 192.168.10.150; #IP地址池为192.168.10.50-150(约100个IP地址)
option subnet-mask 255.255.255.0; #定义客户端默认的子网掩码
option routers 192.168.10.1; #定义客户端的网关地址
option domain-name "linuxprobe.com"; #定义默认的搜索域
option domain-name-servers 192.168.10.1; #定义客户端的DNS地址
default-lease-time 21600; #定义默认租约时间(单位:秒)
max-lease-time 43200; #定义最大预约时间(单位:秒)
} #结束符
[root@localhost ~]# service dhcpd configtest #测试文件是否有错误
(4)将DHCP服务设置为开机自启动:
[root@localhost ~]# systemctl start dhcpd #启动DHCP服务
[root@localhost ~]# systemctl enable dhcpd #设置DHCP服务开机自启
(5)分配固定IP地址:
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf
ddns-update-style none; #设置DNS服务不自动进行动态更新
ignore client-updates; #忽略客户端更新DNS记录
subnet 192.168.10.0 netmask 255.255.255.0 { #作用域为192.168.10.0/24网段
range 192.168.10.50 192.168.10.150; #IP地址池为192.168.10.50-150(约100个IP地址)
option subnet-mask 255.255.255.0; #定义客户端默认的子网掩码
option routers 192.168.10.1; #定义客户端的网关地址
option domain-name "linuxprobe.com"; #定义默认的搜索域
option domain-name-servers 192.168.10.1; #定义客户端的DNS地址
default-lease-time 21600; #定义默认租约时间(单位:秒)
max-lease-time 43200; #定义最大预约时间(单位:秒)
host linuxprobe { #host主机名称
hardware ethernet 00:0c:29:27:c6:12; #该主机的MAC地址
fixed-address 192.168.10.88; #指定的IP地址
}
}
[root@localhost ~]# systemctl restart dhcpd #重启DHCP服务
