DHCP​( Dynamic Host Configuration Protocol)​,动态主机配置协议,指的是由服务器控制一段ip地址范围,当客户端在登录服务器时可以自动获得服务器分配的ip地址和子网掩码等,从而实现对主机的动态地址分配功能。

    Linux中的DHCP服务可通过dhcp-server​(CentOS7中为dhcp)​和dnsmasq两款软件来实现,不过dhcp-server的功能更为丰富,笔者这里以dhcp-server来操作演示。

  1. 准备事项

1.1 关闭现有dhcp服务

    为了防止实验冲突,我们需要将网络中已有的DHCP服务关闭。比如笔者这边使用了VMwareWorkstation,需将VMnet8部分的dhcp自动分配地址取消​(如下图)​。

搭建DHCP服务,实现ip地址申请分发_centos


1.2 下载dhcp-server

    笔者这边以名为hello-world的CentOS8为dhcp服务器,故下载的为dhcp-server服务,如果是在CentOS7系列上,将命令行中的dhcp-server改为dhcp即可​(如下图)​。

搭建DHCP服务,实现ip地址申请分发_配置文件_02


  1. 启动dhcp服务

2.1 检查包情况并启动

    Ubuntu中默认下载后的服务自动开启,而CentOS系列需要手动开启。执行 ​systemctl status dhcpd​ 命令,可查看下载的dhcp是否已开启;执行 ​systemctl enable --now dhcpd​ 命令,开启dhcp服务并设定为开机启动,但是报错​(如下图)​。

搭建DHCP服务,实现ip地址申请分发_服务器_03


2.2 修改配置文件

    首次开启服务失败是因为需对dhcp配置文件进行修改,执行 ​rpm -ql dhcp-server​ 命令可以看到/etc/dhcp/dhcpd.conf这一项,即dhcp的配置文件,打开后发现里面全是注释的信息,但是提供了参考范例/usr/share/doc/dhcp-server/dhcpd.conf.example​(如下图)​。

搭建DHCP服务,实现ip地址申请分发_配置文件_04

搭建DHCP服务,实现ip地址申请分发_服务器_05

2.2.1 拷贝参考配置文件

    执行 ​cp /usr/share/doc/dhcp-server/dhcpd.conf.example /etc/dhcp/dhcpd.conf​ 命令,将参考范例复制并覆盖原有的无效配置文件​(如下图)​。

搭建DHCP服务,实现ip地址申请分发_服务器_06

    但是此时开启服务还是起不来,需对参考范例的配置文件进行修改。要想dhcp服务器能为其他主机提供服务,需有自己的网段、子网掩码,同时要配上DNS和网关。

2.2.2 修改参考配置文件

    ①打开配置文件,找到“subnet 10.152.187.0 netmask 255.255.255.0”这一行,可以直接修改,也可将参考内容注释掉自己添加。子网掩码就用范例中的255.255.255.0,笔者这边根据虚拟主机网络设置内容,将subnet部分改为10.10.10.0。

    ②设定为其他主机提供的地址段,笔者这边设定为10.10.10.10-30,设置网段时注意不要与现有主机ip相冲突。

    ③设置网关和DNS,服务器的DNS可用百度、阿里等提供的免费DNS。

    ④修改租期,默认的为600秒比较短,会导致主机ip不稳定,可根据生产情况做改动,一般修改为86400,即一天;最大租期一般用不上,如有需要可以使用。

    具体操作如下:

搭建DHCP服务,实现ip地址申请分发_centos_07

搭建DHCP服务,实现ip地址申请分发_配置文件_08

搭建DHCP服务,实现ip地址申请分发_配置文件_09

    保存修改内容后,执行 ​systemctl enable --now dhcpd​ 命令启动服务,此时再查看状态,dhcp已可使用​(如下图)​。

搭建DHCP服务,实现ip地址申请分发_配置文件_10


  1. 地址分发

3.1 自动获取ip地址

    笔者这边将一台名为LeoMessi的CentOS8虚拟机和一台名为CentOS7.9的CentOS7虚拟机还原成默认网卡设置,此时两台机器都是通过默认的dhcp来获取ip地址,重启两台虚拟机,可看到分别获取到了dhcp服务器中设定的10.10.10.10地址和10.10.10.11地址​(如下图)​。

搭建DHCP服务,实现ip地址申请分发_centos_11

搭建DHCP服务,实现ip地址申请分发_服务器_12

    如果想查看哪些主机获取了dhcp服务器中的ip地址等,可进入到/var/lib/dhcpd/目录下,找到dhcpd.leases文件,打开后可查看相关信息​(如下图)​。

*该处的使用时间和结束时间使用的是utc时间,我们处在东八区,需要加8小时。

搭建DHCP服务,实现ip地址申请分发_配置文件_13

搭建DHCP服务,实现ip地址申请分发_配置文件_14


3.2 静态地址加动态地址的结合

    如果一台主机已经有固定的ip了,想要通过dhcp服务器再获得一个动态地址也可实现。笔者这边准备了一台名为8-stream的主机,已经有一个固定的静态地址10.10.10.151​(如下图)​。

搭建DHCP服务,实现ip地址申请分发_centos_15

    使用dhclient命令可以让已经拥有静态地址的主机再获得一个,执行man dhclient 命令可查看相关帮助,其中有一项关于-d的说明,可以显示具体的过程​(如下图)​。

搭建DHCP服务,实现ip地址申请分发_centos_16

    执行 ​dhclient -d​ 命令,显示通过dhcp服务器获得了一个10.10.10.12的动态地址,并显示了获得动态地址的过程;执行 ​ip a ​命令,可看到两个地址​(如下图)​。

搭建DHCP服务,实现ip地址申请分发_服务器_17

搭建DHCP服务,实现ip地址申请分发_配置文件_18


3.3 dhcp分配固定地址

    dhcp也可以给客户端主机分配固定地址,实现租期内的静态地址功能。要想实现该项功能,需要将目标客户端主机的mac地址和希望对方使用的动态地址写到配置文件中。

    笔者这边已经使用的dhcp地址有10.10.10.10-12,总设定地址段为10.10.10.10-30,按照静态地址分发规律,后面获得是从10.10.10.13开始,为了效果,笔者将主机名为LeoMessi的主机mac地址绑定到10.10.10.20上,LeoMessi主机的mac地址如下:

搭建DHCP服务,实现ip地址申请分发_centos_19

    dhcp服务器打开/etc/dhcp/dhcpd.conf配置文件,找到绑定mac地址和ip的范例,将LeoMessi的mac地址和想要其使用的ip进行绑定(如下图)。

搭建DHCP服务,实现ip地址申请分发_centos_20

    修改保存后,执行 ​systemctl restart dhcpd​ 命令重启服务,在LeoMessi主机上执行 ​dhclient -d​ 命令可获取一个固定的静态ip,因为之前获取的静态ip还在有效期内,所以会显示两个地址,重启主机,再次查看,则只有一个10.10.10.20的地址​(如下图)​。

搭建DHCP服务,实现ip地址申请分发_centos_21

搭建DHCP服务,实现ip地址申请分发_centos_22