WHCSRL 技术网

Linux中DHCP服务原理

一.DHCP服务

1.简介

       DHCP(动态主机配置协议)是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。默认情况下,DHCP作为Windows Server的一个服务组件不会被系统自动安装,还需要管理员手动安装并进行必要的配置。
       DHCP 服务避免了因手动设置 IP 地址所产生的错误,同时也避免了把一个 IP 地址分配给多台工作站所造成的地址冲突。DHCP 提供了安全、可靠且简单的 TCP/IP 网络设置,降低了配置 IP 地址的负担。专门用于为 TCP/IP 网络中的计算机自动分配 TCP/IP 参数的协议,是一个应用层协议,使用 UDP 的 67 和 68 端口。

2.dhcp好处

  • 减少管理员的工作量
  • 避免输入错误的可能
  • 避免IP地址冲突
  • 当更改lP地址段时,不需要重新配置每个用户的IP地址
  • 提高了IP地址的利用率
  • 方便客户端的配置

3.dhcp分配方式

  • 自动分配:
    当 DHCP 客户机第一次成功地从 DHCP 服务器获取到一个 IP 地址后,就永久使用这个 IP 地址。

  • 手动分配:
    由 DHCP 服务器管理员专门指定 IP 地址。

  • 动态分配:
    当 DHCP 客户机第一次从 DHCP 服务器获取到 IP 地址后,并非永久地使用该地址,而是在每次使用完后,DHCP 客户机就会释放这个 IP 地址,供其他客户机使用。

4.租约过程

       客户机从 DHCP 服务器获取 IP 地址的过程称为 DHCP 的租约过程。可以分为四个阶段:

  • 客户机请求 IP(客户机发 DHCPDISCOVER 广播包)
  • 服务器响应(服务器发 DHCPOFFER 广播包)
  • 客户机选择 IP(客户机发 DHCPREQUEST 广播包)
  • 服务器确定租约(服务器发 DHCPACK/DHCPNAK 广播包)

在这里插入图片描述

(1) 客户端进行 IP 请求
  当一个 DHCP 客户机启动时,会自动将自己的 IP 地址配置成 0.0.0.0,由于使用 0.0.0.0 不能进行正常通信,所以客户机必须通过 DHCP 服务器来获取一个合法的地址。由于客户机不知道 DHCP 服务器的 IP 地址,所以它使用 0.0.0.0 的地址作为源地址,使用 UDP68 端口作为源端口,使用 255.255.255.255 作为目标地址,使用 UDP67 端口作为目的端口来广播请求 IP 地址信息。广播信息中包含了 DHCP 客户机的 MAC 地址和计算机名,以便使 DHCP 服务器能确定是哪个客户机发送的请求。

(2) 服务器响应
  当 DHCP 服务器接收到客户机请求 IP 地址的信息时,它就在自己的 IP 地址池中查找是否有合法的 IP 地址提供给客户机。如果有,DHCP 服务器就将此 IP 地址做上标记,加入到 DHCPOFFER 的消息中,然后 DHCP 服务器就广播一则包括下列信息的 DHCPOFFER 消息:DHCP 客户机的 MAC 地址;DHCP 服务器提供的合法 IP 地址;子网掩码;默认网关(路由);租约的期限;DHCP 服务器的 IP 地址。因为 DHCP 客户机还没有 IP 地址,所以 DHCP 服务器使用自己的 IP 地址作为源地址,使用 UDP67 端口作为源端口,使用 255.255.255.255 作为目标地址,使用 UDP68 端口作为目的端口来广播 DHCPOFFER 信息。

(3) 客户机选择 IP
  DHCP 客户机从接收到的第一个 DHCPOFFER 消息中选择 IP 地址,发出 IP 地址的 DHCP 服务器将该地址保留,这样该地址就不能提供给另一个 DHCP 客户机。当客户机从第一个 DHCP 服务器接收 DHCPOFFER 并选择 IP 地址后,DHCP 租约的第三过程发生。客户机将 DHCPREQUEST 消息广播到所有的 DHCP 服务器,表明它接受提供的内容。DHCPREQUEST 消息包括为该客户机提供 IP 配置的服务器的服务标识符(IP地址)。DHCP 服务器查看服务器标识符字段,以确定它自己是否被选择为指定的客户机提供 IP 地址,如果那些 DHCPOFFER 被拒绝,则 DHCP 服务器会取消提供并保留其 IP 地址以用于下一个 IP 租约请求。
  在客户机选择 IP 的过程中,虽然客户机选择了 IP 地址,但是还没有配置 IP 地址,而在一个网络中可能有几个 DHCP 服务器,所以客户机仍然使用 0.0.0.0 的地址作为源地址,使用 UDP68 端口作为源端口,使用 255.255.255.255 作为目标地址,使用 UDP67 端口作为目的端口来广播 DHCPREQUEST 信息。

(4) 服务器确认租约
  DHCP 服务器接收到 DHCPREQUEST 消息后,以 DHCPACK 消息的形式向客户机广播成功的确认,该消息包含有 IP 地址的有效租约和其他可能配置的信息。虽然服务器确认了客户机的租约请求,但是客户机还没有收到服务器的 DHCPACK 消息,所以服务器仍然使用自己的 IP 地址作为源地址,使用 UDP67 端口作为源端口,使用 255.255.255.255 作为目标地址,使用 UDP68 端口作为目的端口来广播 DHCPACK 信息。当客户机收到 DHCPACK 消息时,它就配置了 IP 地址,完成了 TCP/IP 的初始化。

5.重新登陆

       DHCP客户机每次重新登录网络时,不需要再发送DHCPDiscover信息,而是直接发送包含前一次所分配的IP地址的DHCP Request请求信息

6.续约

在这里插入图片描述

       1.第一次续租请求
  租期达到 50%%%%(T1)时,DHCP 客户端会自动以单播的方式向 DHCP 服务器发送 DHCP REQUEST 报文,请求更新 IP 地址租期。如果收到 DHCP 服务器回应的 DHCP ACK 报文,则租期更新成功(即租期从0开始计算);如果收到 DHCP NAK 报文,则重新发送 DHCP DISCOVER 报文请求新的 IP 地址。

       2.第二次续租请求
  当租期达到 87.5%%%%(T2)时,如果仍未收到 DHCP 服务器的应答,DHCP 客户端会自动以广播的方式向 DHCP 服务器发送 DHCP REQUEST 报文,请求更新 IP 地址租期。如果收到 DHCP 服务器回应的 DHCP ACK 报文,则租期更新成功(即租期从0开始计算);如果收到 DHCP NAK 报文,则重新发送 DHCP DISCOVER 报文请求新的 IP 地址。

二.DHCP动态配置主机地址

       1.DHCP服务优点

  • 为大量客户机自动分配地址,提供集中管理
  • 减轻管理和维护成本、提高网络配置效率

       2.可分配的地址信息

  • 网卡的IP地址、子网掩码
  • 对应的网络地址、广播地址
  • 默认网关地址
  • DNS服务器地址

三.DHCP中继原理

1.DCHP 服务器安装 DHCP 服务

[root@localhost yum.repos.d]# yum install -y DHCP          #安装dhcp
[root@localhost dhcp]# rpm -qa dhcp                        #查看dhcp版本为4.2.5
dhcp-4.2.5-58.el7.centos.x86_64
[root@localhost ~]#cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf         原文件是空的,拷贝新文件覆盖原文件
[root@localhost dhcp]#vim dhcpd.conf                       #修改配置文件
8 option domain-name-servers  9.9.9.9;                    #修改第8行默认的全局dns地址
27 subnet 192.168.90.0 netmask 255.255.255.0 {            #修改第27行
28   range 192.168.90.100 192.168.90.150;
29   option routers 192.168.90.1;
30   option domain-name-servers  8.8.8.8;
31 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2.配置网络

       将作为 DHCP 服务器的虚拟机将网络适配器改为仅主机模式
在这里插入图片描述
       虚拟网络编辑器配置
在这里插入图片描述
       DHCP 服务器网卡文件配置vim /etc/sysconfig/network-scripts/ifcfg-ens33

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="10471379-f0e6-49e4-b59a-df82173c9fba"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.90.20"
NETMASK="255.255.255.0"
GATEWAY="192.168.90.254"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

       重启网卡并关闭防火墙

systemctl restart network
systemctl stop firewalld.service 
setenforce 0
systemctl start dhcpd
  • 1
  • 2
  • 3
  • 4

3.设置DHCP中继

       1.打开ensp
在这里插入图片描述

       2.云设置
选择 UDP 增加
在这里插入图片描述
选择 VMnet1 增加
在这里插入图片描述
选择入口 1 出口 2 ,双向通道增加

4.二层交换机配置

undo terminal monitor       
system-view            
sysname SW1            
user-interface console 0     
idle-timeout 0 0                                          //三条必打命令
q       
dis vlan
vlan batch 10 20 100                    //创建vlan
int e0/0/1 
port link-type trunk                    //设置trunk类型
port trunk allow-pass vlan all              //设置白名单
dis this
q
int e0/0/2
p l a                    //设置access类型
p d v 10                    //划分vlan
dis this
q
int e0/0/3
p l a                    //设置access类型
p d v 20                    //划分vlan
dis this
q
int e0/0/4
p l a                    //设置access类型
p d v 100                    //划分vlan
dis this
q
int e0/0/5
p l a                    //设置access类型
p d v 100                    //划分vlan
dis this
q
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

5.三层交换机配置

设置vlan并设置 DHCP 中继转发

undo terminal monitor       
system-view            
sysname SW2          
user-interface console 0     
idle-timeout 0 0                                         //三条必打命令
q
dhcp enable            //开启DHCP中继转发
vlan batch 10 20 100                    //创建vlan
int Vlanif 10
ip add 192.168.1.254 24
dhcp select relay
dhcp relay server-ip 192.168.90.20
q
int Vlanif 20
ip add 192.168.2.254 24
dhcp select relay
dhcp relay server-ip 192.168.90.20
q
int Vlanif 100
ip add 192.168.90.254 24
dhcp select relay
dhcp relay server-ip 192.168.90.20
q
int g0/0/1 
port link-type trunk                   //设置trunk类型
port trunk allow-pass vlan all              //设置白名单
dis this    
q
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

6.ensp 设置 PC

ensp 设置 PC 通过 DHCP 自动获取地址
在这里插入图片描述

7.测试通信

       
在 DHCP 服务器上 ping 三个虚拟接口的网关应该都是通的
在这里插入图片描述

推荐阅读