如何搭建DHCP服务---动态主机配置协议

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

DHCP原理

DHCP配置条件

  1. 拥有真实物理网卡,或者连接广播域的真实物理网卡;
  2. 该接口或者该物理网卡必须有一个合理的ip地址;
    DHCP是一个应用层协议。当我们将客户主机ip地址设置为动态获取方式时,DHCP服务器就会根据DHCP协议给客户端分配IP,使得客户机能够利用这个IP上网。
    在这里插入图片描述
    DHCP中有Firstinput firstoutput 先进先出的问题,如果局域网内有两台dhcp服务器时,使用的是最得到分配最先配置的dhcp服务器。

DHCP有三种机制分配IP地址

  1. 自动分配方式(Automatic Allocation),DHCP服务器为主机指定一个永久性的IP地址,一旦DHCP客户端第一次成功从DHCP服务器端租用到IP地址后,就可以永久性的使用该地址。
  2. 动态分配方式(Dynamic Allocation),DHCP服务器给主机指定一个具有时间限制的IP地址,时间到期或主机明确表示放弃该地址时,该地址可以被其他主机使用。
  3. 手工分配方式(Manual Allocation),客户端的IP地址是由网络管理员指定的,DHCP服务器只是将指定的IP地址告诉客户端主机。

DHCP工作原理

DHCP协议采用UDP作为传输协议,主机发送请求消息到DHCP服务器的67号端口,DHCP服务器回应应答消息给主机的68号端口。详细过程如下:
在这里插入图片描述
工作流程:

  1. 客户端:利用广播数据包发送搜索DHCP服务器 (dhcp discover)
    若客户端网络设置使用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 requset)
    由于局域网内可能并非仅有一台DHCP服务器,但客户端仅能接收一组网络参数租约,因此客户端只会挑选其中一个DHCP offer(通常是最先抵达的那个)。当决定好使用此服务器的网络参数租约后,客户端便开始使用这组网络参数来配置自己的网络环境。此外,客户端会发送一个dhcp request广播数据包给所有物理网段内的主机,告知已经接受该服务器的租约(此时若有两台以上的DHCP服务器,则这些没有被接受的服务器会收回该IP租约。)。同时,客户端还会向网络发送一个ARP封包,查询网络上面有没有其他机器使用该IP地址;如果发现该IP地址已经被占用,客户端则会送出一个DHCP DECLIENT包给DHCP服务器,拒绝接受其DHCP offer,并重新发送DHCP discover信息。
  4. 服务器端:记录该次租约行为后并向客户端发送响应数据包信息以确认客户端的使用。(dhcp ack)
    当服务器端收到客户端的确认选择后,服务器会回送确认的dhcp ack响应数据包,并且告知客户端这个网络参数租约的期限,并且开始租约计时。那么该次租约何时会到期而被解约,有以下几种情况:
    (1). 客户端脱机:关闭网络接口、重新启动、关机等行为,都算是脱机状态,这个时候server端就会将该IP地址收回,并放到server的备用区中,以便日后使用。
    (2). 客户端租约到期:dhcp server端发放的IP有使用的期限,客户端使用这个IP到达期限规定的时间,而且没有重新提出DHCP的申请时,server端就会将该IP收回,这个时候就会断线。但用户也可以向DHCP服务器再次要求分配IP。
    由于目前的DHCP客户端程序大多数会主动依据租约时间去重新申请IP,所以即使有租约期限,也不需要在某个时间点手动去重新申请IP。一般情况下,假设租约时间是T小时,那么客户端程序在0.5T时会主动向DHCP服务器发出重新要求网络参数的数据包。如果这次数据包请求没有成功,那么在0.875T后还会再次发送数据包一次。正因如此,所以服务器端会启动port67监听客户端请求,而客户端会启动port68主动向服务器请求。

DHCP八种报文

DHCP共有八种报文
1 ) DHCP Discover
DHCP客户端请求地址时,并不知道DHCP服务器的位置,因此DHCP客户端会在本地网络内以广播方式发送请求报文,
这个报文成为Discover报文,目的是发现网络中的DHCP服务器,所有收到Discover报文的DHCP服务器都会发送回应报文,
 DHCP客户端据此可以知道网络中存在的DHCP服务器的位置。
2 ) DHCP Offer
DHCP服务器收到Discover报文后,就会在所配置的地址池中查找一个合适的IP地址 ,加上相应的租
约期限和其他配置信息(如网关、DNS服务器等) ,构造一个Offer报文 ,发送给用户(可以广播、也
可以单播) ,告知用户本服务器可以为其提供IP地址,(注意,只是告诉client可以提供,是预分
配,还需要client通过ARP检测该IP是否重复)
3 ) DHCP Request
客户端会在两种情况下发送DHCP Request
a ) DHCP客户端可能会收到来自DHCP服务器的很多offer ,所以必须在这些回应中选择一个。 Client
通常选择第一个回应ffer报文的服务 器作为自己的目标服务器, 并回应一个广 播Request报文,通
告选择的服务器。注意, "Client通常选择第一个回应ffer报文的服务器作为自 己的目标服务器"这
里存在一个安全问题,如果我们的伪DHCP服务器能比原始DHCP服务器先发送ffer数据包,就能
达到欺骗的目的,从而劫持目标用户的流量
b)获取DHCP客户端成功获取IP地址后,在地址使用租期过去1/2时,会向DHCP服务器发送单播
Request报文续延租期,如果没有收到DHCP ACK报文,在租期过去3/4时,会再次发送广播Request
报文续延租期。
4) DHCP ACK
DHCP服务器收到Request报文后,根据Reques报文中携带的用户MAC来查找有没有相应的租约记
录(即之前的预分配过程中登记的那个MAC) ,如果有则发送ACK报文作为回应,通知用户可以使用
分配的P地址。
5) DHCP NAK (否定应答)
如果DHCP服务器收到Request报文后,没有发现有相应的租约记录或者由于某些原因无法正常分
配P地址,则发送NAK报文作为回应,通知用户无法分配合适的IP地址。
6) DHCP Release (释放)
当用户不再需要使用分配P地址时, 就会"主动"向DHCP服务器发送Release报文,告知服务器用户
不再需要分配IP地址, DHCP服务器会释放被绑定的租约(在数据库中清除某个MAC对某个IP的租约
记录,这样,这个IP就可以分配给下一个请求租约的MAC)
7. DHCP Declinexie拒绝
DHCP客户端收到DHCP服务器回应的ACK报文后,通过地址冲突检测发现服务器分配的地址冲突或
者由于其他原因导致不能使用,则发送Decline报文,通知服务器所分配的IP地址不可用,我们在
手工设置静态IP、或者DHCP分配中有时会遇到"检测到IP冲突"的提示就是因为客户端利用ARP机制
来在当前内网中确认当前指定的IP是否已经被占用
8 ) DHCP Inform
DHCP客户端如果需要从DHCP服务器端获取更为详细的配置信息,则发送inform报文向服务器进行
请求,服务器收到该报文后,将根据租约进行查找,找到相应的配置信息后,发送ACK报文回应
DHCP客户端。

DHCP配置

配置DHCP服务

1.软件安装
[root@localhost ~]# yum install dhcp -y
 
配置文件格式说明
dhcp服务器的主要配置文件/etc/dhcp/dhcpd.conf 
dhcp服务器与客户端租约建立的起始与到期日记录文件:/var/lib/dhcpd/dhcpd.leases

[root@localhost 桌面]# vim /etc/dhcp/dhcpd.conf 
示例文件/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example

编写配置文件的规范:
除了括号后面之外,其他的每一行配置最后都要以“;”结尾。
配置项目的语法形式主要是“参数代号 配置内容”。
某些配置项目必须以option来定义,基本形式为“option 参数代码 配置内容”
dhcpd.conf中的配置主要分为两大项目,一个是服务器运行的全局设置,一个是IP分配设置。


全局设置:当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地址)
#配置DHCP和dns服务的更新模式,一般不用,但是必须有该项,否则服务无法启动
ddns-update-style interim;         DNS互动更新模式
ignore client-updates;               忽略客户端更新
IP分配设置 由于dhcp主要是针对局域网来分配IP参数,因此在设置IP之前,我们需要指定一个局域网(dhcp待分配地址的区域)。指定局域网的方式使用如下参数:
subnet 网络地址 netmask 子网掩码地址 {……}
括号内可有如下的内容:
range IP1 IP2指定IP1到IP2的地址范围给客户端
host 主机名 {……}这个host就是指定固定IP对应到固定MAC的设置值,主机名可以自己给与。在大括号内指定MAC与固定的IP。
hardware ethernet 硬件地址
fixed-address IP地址
 
#配置DHCP和dns服务的更新模式,一般不用,但是必须有该项,否则服务无法启动
ddns-update-style { interim | ad-hoe | none };
#作用:定义所支持的DNS动态更新类型。
# none:表示不支持动态更新
# interim:表示DNS互动更新模式
# ad-hoc:表示特殊DNS更新模式
ddns-update-style interim;  # dns动态更新模式   
ignore client-updates;   #这个选项是不允许客户机更新 DNS 记录。当然,也可能允许,但会有一点问题。
 
 
#子网配置段
#声明网段和掩码
subnet 192.168.40.0 netmask 255.255.255.0 {
#指定地址池范围
        range dynamic-bootp 192.168.40.130 192.168.40.254;
#指定网关
        option routers 192.168.40.1;
#指定掩码
        option subnet-mask 255.255.255.0;
#指定DNS
        option domain-name-servers 114.114.114.114;
#默认租约
        default-lease-time 21600; 
#最大租约
        max-lease-time 43200; 
}

单网段配置

1. 将客户端,主机dhcp选项取消
2.在dns服务器中配置。
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf
ddns-update-style interim;   ##dns互动更新模式
ignore client-updates;      ##忽略客户端更新
subnet 192.168.168.0 netmask 255.255.255.0 {   指定网段
        option routers 192.168.168.1;   ##指定网关
        option subnet-mask 255.255.255.0;
        option domain-name-servers 114.114.114.114;
        range dynamic-bootp 192.168.168.200 192.168.168.254;  ##网段分配ip地址
        default-lease-time 60;
        max-lease-time 60;
}
systemctl restart dhcpd 重启服务
3.在客户端获取ip地址

固定ip地址

固定IP配置
[root@localhost 桌面]# vim /etc/dhcp/dhcpd.conf
host boss {  主机名
    hardware ethernet  00:0c:29:95:ed:34 ;   ##需要固定ip地址的主机网卡mac地址
    fixed-address 192.168.168.250;  ip地址
}
host ns2 {  
                    hardware ethernet 00:0c:29:7f:32:10;
                    fixed-address 192.168.40.249;
}

多网段配置

同单网段配置相同。
subnet 192.168.10.0 netmask 255.255.255.0 {
 
        option routers                  192.168.10.1;
        option subnet-mask              255.255.255.0;
        range dynamic-bootp 192.168.10.30 192.168.10.220;
 
 }
subnet 192.168.20.0 netmask 255.255.255.0 {
 
        option routers                  192.168.20.1;
        option subnet-mask              255.255.255.0;
        range dynamic-bootp 192.168.20.30 192.168.20.220;
 }

忍得一时之气,免得百日之忧。

如果你也喜欢这篇文章,给它点个赞吧!

猜你喜欢

转载自blog.csdn.net/qq_42707739/article/details/105790136