Linux之DHCP服务:搭建和基础知识

DHCP:动态主机配置协议,是一个局域网的网络协议,它主要是通过客户端发送广播数据包给整个物理网段内的所有主机,若局域网内有DHCP服务器时,才会响应客户端的IP参数要求。

客户端取得IP参数的过程如下:
(1)客户端:利用广播数据包发送搜索DHCP服务器的数据包
若客户端网络设置使用DHCP协议取得IP,则当客户端开机或者是重新启动网卡时,客户端主机会发送出查找DHCP服务器的UDP数据包(discover)给所有物理网段内的计算机。因为客户端还不知道自己属于哪一个网络,所以该数据包的来源地址会为0.0.0.0,而目的地址则为255.255.255.255。一般主机接收到这个数据包之后会直接丢弃,若局域网内有DHCP服务器,则会开始后续行为。
(2)服务器端:提供客户端网络相关的租约以供选择。(dhcp offer)
DHCP服务器在监听到客户端发出的dhcp discover广播后,会针对这个客户端的硬件地址( MAC)与本身的设置数据进行下列工作:
到服务器的日志文件中查找该用户之前是否曾经租用过某个IP,若有且该IP目前无人使用,则提供此IP给客户端。
若配置文件针对该MAC地址提供特定的固定IP时,则提供该固定的IP给客户端。
若不符合上述两个条件,则随机选取当前没有被使用的IP参数给客户端,并记录下来。
(3)客户端:决定选择DHCP服务器提供的网络参数租约并向服务器确认。
由于局域网内可能并非仅有一台DHCP服务器,但客户端仅能接收一组网络参数租约,因此客户端只会挑选其中一个DHCP offer(通常是最先抵达的那个)。当决定好使用此服务器的网络参数租约后,客户端便开始使用这组网络参数来配置自己的网络环境。此外,客户端会发送一个dhcp request广播数据包给所有物理网段内的主机,告知已经接受该服务器的租约(此时若有两台以上的DHCP服务器,则这些没有被接受的服务器会收回该IP租约。)。同时,客户端还会向网络发送一个ARP封包,查询网络上面有没有其他机器使用该IP地址;如果发现该IP地址已经被占用,客户端则会送出一个DHCPDECLIENT包给DHCP服务器,拒绝接受其DHCP offer,并重新发送DHCP discover信息。
(4)服务器端:记录该次租约行为后并向客户端发送响应数据包信息以确认客户端的使用。当服务器端收到客户端的确认选择后,服务器会回送确认的dhcp ack响应数据包,并且告知客户端这个网络参数租约的期限,并且开始租约计时。那么该次租约何时会到期而被解约,有以下几种情况:
客户端脱机:关闭网络接口、重新启动、关机等行为,都算是脱机状态,这个时候server端就会将该IP地址收回,并放到server的备用区中,以便日后使用。
客户端租约到期:dhcp server端发放的IP有使用的期限,客户端使用这个IP到达期限规定的时间,而且没有重新提出DHCP的申请时,server端就会将该IP收回,这个时候就会断线。但用户也可以向DHCP服务器再次要求分配IP。由于目前的DHCP客户端程序大多数会主动依据租约时间去重新申请IP,所以即使有租约期限,也不需要在某个时间点手动去重新申请IP。一般情况下,假设租约时间是T小时,那么客户端程序在0.5T时会主动向DHCP服务器发出重新要求网络参数的数据包。如果这次数据包请求没有成功,那么在0.85T后还会再次发送数据包一次。正因如此,所以服务器端会启动port67监听客户端请求,而客户端会启动port68主动向服务器请求。
在这里插入图片描述
在LInux中实现DHCP服务器:
1.软件安装
[root@web ~]# yum install dhcp -y
2.配置文件格式说明
dhcp服务器的主要配置文件/etc/dhcp/dhcpd.conf
[root@localhost 桌面]# vim /etc/dhcp/dhcpd.conf
示例文件/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example
dhcpd.conf中的配置主要分为两大项目,一个是服务器运行的全局设置,一个是IP分配设置。
1)全局设置:当IP分配设置没有定义到某些设置时,则以全局设置为准。
default-lease-time默认的租约时间(用户的计算机也能够要求一段特定长度的租约时间。但若用户没有特别要求租约时间,默认以此为准。时间单位默认为秒)
max-lease-time最大租约时间(如果用户要求的租约时间超过该值,则以此值为准) option domain-name 域名(如果在/etc/resolv.conf里面设置了一个search xxx.com的话,这表示当你要查找主机名时,DNS系统会主动帮你在所要查找的主机名后加上这个域名后缀)
option domain-name-servers IP1,IP2(这个设置参数可以修改客户端的/etc/resolv.conf文件)
ddns-update-style 类型(因为dhcp客户端所取得的IP通常是一直变动的,所以此时DHCP可以通过ddns来更新主机名与IP的对应关系)
ignore client-updates(与上一个设置值有关,客户端可通过dhcp服务器来更新DNS相关的信息。设置成ignore为忽略)
option routers 路由器地址(设定路由器的IP地址)

#配置dns的更新模式,一般不用,但是必须有该项,否则服务无法启动
ddns-update-style interim; DNS互动更新模式
ignore client-updates; 忽略客户端更新dns记录

2)IP分配设置
由于dhcp主要是针对局域网来分配IP参数,因此在设置IP之前,我们需要指定一个局域网(dhcp待分配地址的区域)。指定局域网的方式使用如下参数:
subnet 网络地址 netmask 子网掩码地址 {……}
括号内可有如下的内容:
range IP1 IP2指定IP1到IP2的地址范围给客户端
host 主机名 {……}这个host就是指定固定IP对应到固定MAC的设置值,主机名可以自己给与。在大括号内指定MAC与固定的IP。
hardware ethernet 硬件地址
fixed-address IP地址

3.搭建DHCP服务器使其能够给172.16.8.0网段和192.168.168.0网段的的主机分配IP地址,DHCP服务器可以给该网段的主机名为clienta和clientb分配固定IP地址为172.16.8.8和192.168.168.168。
过程:
准备工作:
一台服务器:两个网卡,且工作模式不同(主机模式、nat模式)用于下放不同网段的IP地址。
两台客户机:clienta 仅主机模式;clientb nat模式;

1)在虚拟网络编辑器中编辑网段,去掉(使用本地DHCP服务器将IP地址分配给虚拟机)这个的选择,因为这是vm软件自动下放IP。
在这里插入图片描述
2)给服务端两个网卡配置IP地址:
在这里插入图片描述
3)关闭防火墙和selinux,以及安装软件包:
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# mount /dev/sr0 /mnt
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost ~]# yum install dhcp -y
4)编辑主配置文件:
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf
在这里插入图片描述
5)测试结果:两台客户端各自获取了固定的IP地址
在这里插入图片描述在这里插入图片描述

发布了18 篇原创文章 · 获赞 7 · 访问量 531

猜你喜欢

转载自blog.csdn.net/weixin_44029504/article/details/104227509
今日推荐