Linux系统下DHCP服务器的搭建(概念+环境演示)

服务器运维—Linux 专栏收录该内容
30 篇文章 3 订阅

前言:
DHCP是一个十分重要的协议,处在OSI的应用层;使用UDP67端口作为源端口回应应答消息给主机,使用UDP68端口作为目的端口来广播信息,即接收主机发送的请求消息

参考阅读:
浅谈DHCP欺骗攻击
ARP欺骗攻击
ICMP的重定向、不可达攻击

在这里插入图片描述

一、DHCP概念

1.1概述

1.1.1产生

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

​ DHCP是一个应用层协议。当我们将客户主机ip地址设置为动态获取方式时,DHCP服务器就会根据DHCP协议给客户端分配IP,使得客户机能够利用这个IP上网。

条件:

1.拥有真实物理网卡,或者连接广播域的真实物理网卡

2.该接口或者该物理网卡必须有一个合理的ip地址

1.1.2分配IP地址的方式

DHCP有三种机制分配IP地址:

自动分配方式(Automatic Allocation),DHCP服务器为主机指定一个永久性的IP地址,一旦DHCP客户端第一次成功从DHCP服务器端租用到IP地址后,就可以永久性的使用该地址。

动态分配方式(Dynamic Allocation),DHCP服务器给主机指定一个具有时间限制的IP地址,时间到期或主机明确表示放弃该地址时,该地址可以被其他主机使用。

手工分配方式(Manual Allocation),客户端的IP地址是由网络管理员指定的,DHCP服务器只是将指定的IP地址告诉客户端主机。

1.2工作原理

1.2.1四个数据包:

客户端 Discover、Request

服务端 Offer、Ack

1.2.2看图理解工作过程

DHCP协议采用UDP作为传输协议,主机发送请求消息到DHCP服务器的67号端口,DHCP服务器回应应答消息给主机的68号端口。详细的交互过程如下图。(对于多个DHCP服务器的offer响应问题)
在这里插入图片描述

下图的192.168.211.254即就是DHCP服务器的IP,192.168.211.143是服务器分给OWASP主机的IP
在这里插入图片描述在这里插入图片描述

1.2.3工作过程解释

说详细复杂点:

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封包(免费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.875T后还会再次发送数据包一次。正因如此,所以服务器端会启动port67监听客户端请求,而客户端会启动port68主动向服务器请求。

说简单易懂点:

首先,客户端向DHCP服务器发送一个DHCPdiscover的报文(广播发送,可以理解为海投简历)

服务器端对客户端回应DHCPoffer (单播回应,可以理解为企业提供offer)

客户端向服务器发送DHCPrequest(广播发送,可以理解为告诉那些收到我的简历的企业,我不去你们那里)

服务器端向客户端回复一个DHCPack(单播回应,可以理解为企业与求职者的确认关系)

总结:
	客户端发送的报文都是广播包,第一次的广播是为了让所有的企业看到自己,第二次广播是为了告诉其他企业自己已签到offer

二、DHCP服务器的的配置

2.1DHCP搭建

1、软件安装

2、配置文件的参数说明与格式规范

格式规范:

	除了括号后面之外,其他的每一行配置最后都要以“;”结尾。
	配置项目的语法形式主要是“参数代号 配置内容”。
	某些配置项目必须以option来定义,基本形式为“option 参数代码 配置内容”

参数说明:

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地址)

#配置DHCP和dns服务的更新模式,一般不用,但是必须有该项,否则服务无法启动

ddns-update-style interim; DNS互动更新模式

ignore client-updates; 忽略客户端更新;这个选项是不允许客户机更新 DNS 记录。

ddns-update-style { interim | ad-hoc | none };

#作用:定义所支持的DNS动态更新类型。

# none:表示不支持动态更新
# interim:表示DNS互动更新模式  临时;暂时
# ad-hoc:表示特殊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地址

2.2环境

C/S设计

RHEL7.2 作为DHCP-Server

RHEL7.2的克隆 作为DHCP-Client

Centos 7 作为DHCP-Client

首先,要将两台虚拟机工作再同一网络模式下,这里我选择的是仅主机模式,然后关掉仅主机模式下的DHCP服务,因为我们要自己搭建一个DHCP服务器,关于网络模式的解释,请点击这里

在这里插入图片描述
好了,上面解释了这么多,直接来实战吧,实践是检验理论的唯一要素

2.2.1案例一:客户端动态获取IP

服务端:

首先手动的为DHCP-Server配置IP
在这里插入图片描述

[root@localhost /]# vim /etc/dhcp/dhcpd.conf 
[root@localhost /]# cat /etc/dhcp/dhcpd.conf 


ddns-update-style none;
ignore client-updates;
subnet 192.168.100.0 netmask 255.255.255.0 {
        option routers 192.168.100.1;
        option subnet-mask 255.255.255.0;
        option domain-name-servers 114.114.114.114;
        range dynamic-bootp 192.168.100.200 192.168.100.254;
        default-lease-time 360;
        max-lease-time 7200;
}
[root@localhost /]# systemctl stop firewalld
[root@localhost /]# setenforce 0
[root@localhost /]# systemctl start dhcpd
[root@localhost /]# systemctl status dhcpd
● dhcpd.service - DHCPv4 Server Daemon
   Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2020-05-08 13:53:52 ULAST; 2s ago
     Docs: man:dhcpd(8)
           man:dhcpd.conf(5)
 Main PID: 43098 (dhcpd)
   Status: "Dispatching packets..."
   CGroup: /system.slice/dhcpd.service
           └─43098 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid

May 08 13:53:52 DHCP-Server dhcpd[43098]: No subnet declaration for virbr0 (192.168.122.1).
May 08 13:53:52 DHCP-Server dhcpd[43098]: ** Ignoring requests on virbr0.  If this is not what
May 08 13:53:52 DHCP-Server dhcpd[43098]:    you want, please write a subnet declaration
May 08 13:53:52 DHCP-Server dhcpd[43098]:    in your dhcpd.conf file for the network segment
May 08 13:53:52 DHCP-Server dhcpd[43098]:    to which interface virbr0 is attached. **
May 08 13:53:52 DHCP-Server dhcpd[43098]: 
May 08 13:53:52 DHCP-Server dhcpd[43098]: Listening on LPF/eno16777736/00:0c:29:82:47:61/192.168.100.0/24
May 08 13:53:52 DHCP-Server dhcpd[43098]: Sending on   LPF/eno16777736/00:0c:29:82:47:61/192.168.100.0/24
May 08 13:53:52 DHCP-Server dhcpd[43098]: Sending on   Socket/fallback/fallback-net
May 08 13:53:52 DHCP-Server systemd[1]: Started DHCPv4 Server Daemon.

客户端上获取IP地址

RHEL7.2的克隆:
在这里插入图片描述
Centos 7:
在这里插入图片描述

2.2.2案例二:固定IP配置

首先,拿到以下两个客户端的MAC地址

RHEL7.2的克隆这个客户端的MAC地址 00:0c:29:37:73:94

Centos 7这个客户端的MAC地址 00:0c:29:8d:69:0c

然后在服务端的/etc/dhcp/dhcpd.conf下追加写入,以下内容,然后重启服务

host boss {
        hardware ethernet  00:0c:29:37:73:94;
        fixed-address 192.168.100.50;
}
host ns2 {
        hardware ethernet 00:0c:29:8d:69:0c;
        fixed-address 192.168.100.60;
}
[root@localhost /]# systemctl restart dhcpd

测试:
在这里插入图片描述在这里插入图片描述

可见,与预期相符

  • 3
    点赞
  • 0
    评论
  • 12
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:技术黑板 设计师:CSDN官方博客 返回首页

打赏作者

Eichi_

你的鼓励是我创作最大的动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值