linux网络服务[DHCP动态主机配置协议]——————DHCP工作原理、相关信息、配置文件详解、配置DHCP服务器、配置DHCP客户端

文章目录

  • 1.DHCP是什么?
  • 2.DHCP工作原理
    • 2.1 建立租约
      • 2.1.1 DHCP客户端进行IP请求
      • 2.1.2 DHCP服务器相应请求
      • 2.1.3 DHCP客户机选择IP
      • 2.1.4 DHCP服务器确认租约
        • 2.1.4.1 服务器确认租约:DHCP ACK
        • 2.1.4.1 服务器拒绝租约:DHCP NACK
      • 2.1.5 当局域网中没有DHCP服务器
    • 2.2 DHCP客户机续租
  • 3.DHCP相关信息
  • 4.DHCP配置文件详解
  • 5.搭建DHCP服务器
  • 6.配置DHCP客户端

1.DHCP是什么?

DHCP(动态主机配置协议)是一个局域网的网络协议。

主要工作在应用层的局域网的网络协议,数据传输时使用UDP不可靠传输协议,通常运用在大型局域网。

主要是集中管理(限速、限时)、分配网络资源,使网络中的主机能动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。

当很多新的服务器整体装机就是无人执守自动部署时,每个机器都需要一个ip,这时就使用dhcp分配ip就可以进行整体装机

2.DHCP工作原理

2.1 建立租约

给需要ip地址的服务器分配一个ip地址,当服务器不使用了之后,就会将ip收回来。

通过下图来解释:
linux网络服务[DHCP动态主机配置协议]——————DHCP工作原理、相关信息、配置文件详解、配置DHCP服务器、配置DHCP客户端_第1张图片

  • 当客户端出现在网络中,没有ip地址,是没法和其他人正常通信的。他的通信方式是向他所再的局域网把数据包广播。
  • 广播一个ip地址的请求:DHCP Discover(寻找)
  • 当局域网中含有一个dhcp服务器时,服务器会给客户端一个DHCP Offer。
  • 客户机接收到offer后,会给第一个给他发送offer的服务器广播发送DHCP Request(表示:我要你分配,也告诉了其他服务器,不需要他们分配)
  • 当服务器收到Request之后,发送了DHCP ACK(表示可以给你分配)
  • 如果服务器收到Request之后,回复了DHCP NAK就表示,这里已经没有多余的IP可以给你分配了。
  • 如果没有分配成功,就从头再来,重新找一个DHCP服务器,请求ip资源。

接下来我们进行详细解释:

2.1.1 DHCP客户端进行IP请求

当一台服务器启动之后,没有对应的ip地址,他会先把0.0.0.0作为自己的ip地址,但时0.0.0.0不能作为核发的ip进行通信,所以客户机就必须通过DHCP服务器来获取一个合法的IP地址。

由于客户机DHCP的ip地址,所以他使用0.0.0.0的地址作为源地址,使用255.255.255.255(能够工作的任意IP地址)作为目标地址,使用UDP67端口作为目的端口来广播请求ip地址信息

广播信息DHCP Discover中包含了DHCP客户机的MAC地址和计算机名,以便使DHCP服务器能确定是哪个客户机发送的请求。

而不是DHCP服务器的其他服务器不会接收DHCP Discover,因为他就没有UDP67端口。

2.1.2 DHCP服务器相应请求

当DHCP服务器接收到客户机请求IP地址的信息时,他就在自己的IP地址池中查找是否有核发的IP地址提供给客户机。如果有,DHCP服务器就将此IP地址做上标记,加入到DHCP Offer的消息中,然后DHCP服务器就广播一则DHCP Offer消息。

DHCP Offer中含有以下信息:

  • DHCP客户机的MAC地址,如果有多个请求者,用来区分请求者。
  • DHCP服务器提供的合法IP地址、子网掩码、网关、租约。
  • DHCP服务器的IP地址-MAC地址,方便客户端顺利找到服务器。

只有发送了DHCP Discover的有可能接收,由于Offer中含有请求者的MAC,所以最终只有对应的请求者接收。

因为DHCP客户机还没有IP地址,所以DHCP服务器使用自己的IP地址作为源地址,使用255.255.255.255作为目标地址,使用UDP 68端口来广播DHCP Offer消息。

2.1.3 DHCP客户机选择IP

DHCP客户机从接收到的第一个DHCP Offer消息中选择IP地址,发出IP地址的DHCP服务器将该地址保留,这样地址就不能提供给另一个dhcp客户机了。

当DHCP客户机从接收到的第一个DHCP Offer消息中选择IP地址后,DHCP租约的第三过程发生。

客户机将所有的DHCP Request消息广播到所有DHCP服务器,并表明接收发送Offer服务器提供的内容。

DHCP Request消息包括为该客户机提供IP配置的服务器的服务表示(IP地址)。

DHCP服务器查看服务器标识字段,以确定他自己是否被选择为指定的客户机提供IP地址。

如果DHCP Offer被拒绝,则DHCP服务器会取消提供并保留的IP地址以用于下一个IP租约请求。

在客户机选择IP地址的过程中,虽然客户机选择了IP地址,但是还没有配置IP地址,而在一个局域网中可能含有几个DHCP服务器,所以还是要使用广播的方式,以0.0.0.0最为源地址,使用255.255.255.255作为目标地址,使用UDP 67端口作为目的端口来广播DHCP Request信息。

2.1.4 DHCP服务器确认租约

2.1.4.1 服务器确认租约:DHCP ACK

DHCP服务器接收到DHCP Request消息后,以DHCP ACK消息的形式向客户机广播成功的确认,该消息报含有IP地址的有效租约和其他可能配置的信息。

虽然服务器确认了客户机的租约请求,但时客户机还没有收到收到DHCP ACK消息,所以服务器仍然使用ip作为自己的源地址,使用255.255.255.255作为目标地址,使用UDP 68端口作为源端口来广播DHCP ACK消息。

当客户机接收到DHCP ACK,他配置了IP地址,完成了TCP/IP的初始化。

DHCP客户机收到DHCP服务器回应的ACK报文后,通过地址冲突检测(arp)发现服务器分配的地址冲突,或由于其他原因导致不能使用,则发送DECLINE报文,通只服务器分配的IP地址不可用。重新分配。

2.1.4.1 服务器拒绝租约:DHCP NACK

如果DHCP Request不成功,例如客户机试图租之前的IP地址,但该IP不再可用,或者因为客户机移动到其他子网,该IP无效时,DHCP服务器将广播否定确定消息DHCP NACK。

当客户接接收不到确认消息,将会重新开始DHCP租约过程。

2.1.5 当局域网中没有DHCP服务器

如果客户机无法找到DHCP服务器,他将从TCP/IP的B类网段169.254.0.0/26中挑选一个IP地址作为自己的IP地址,继续每隔5分钟尝试与DHCP服务器进行通讯,一但与DHCP服务器取得联系,则客户机放弃自动配置的IP地址,而是用DHCP服务器分配的IP地址。

2.2 DHCP客户机续租

根据DHCP服务器中DHCP服务的配置文件来进行判断,其中含有两个租约的信息:

  • 默认租约:客户机和服务器确定租约后,默认租给客户机的租约时间,专门用来续租的时间,当使用到默认租约的50%时客户机向服务器发送续租请求。
  • 最长租约:加入客户端向服务端续租,续不到了。就是客户机发送续租消息,服务器没有理会,所以客户机就使用到最长租约。

linux网络服务[DHCP动态主机配置协议]——————DHCP工作原理、相关信息、配置文件详解、配置DHCP服务器、配置DHCP客户端_第2张图片

续租过程:

  • 当客户机在使用IP地址租期过去50%的时候,会直接向为他提供IP地址的服务器发送DHCP Request,这次就不是广播了,他有合理合法IP,也知道DHCP服务器的IP。
  • 如果服务器同意继续续租,就是允许继续再使用IP地址,将组期续成默认组期的100%。
  • 如果DHCP服务器把和他续组的IP地址留给了别人,到期收回。
  • 如果组期过去50%没有续租成功,则客户机将在组期过去87.5%的时候再次向DHCP服务器 发送续租请求,如果还不成功,到最大租约100%的时候,DHCP服务器必须放弃这个IP地址,重新申请。
  • 如果无可用DHCP服务器,他将从TCP/IP的B类网段169.254.0.0/26中挑选一个IP地址作为自己的IP地址,继续每隔5分钟尝试与网络中DHCP服务器进行通讯。

3.DHCP相关信息

软件名:

  • dhcp:dhcp服务软件包
  • dhcp-common:dhcp命令软件包(默认已经安装)

服务名:

  • dhcpd:服务名
  • dhcrelay:中继服务名

端口号:

  • udp 67 :作为客户端的目标端口,接收客户端DHCP请求
  • udp 68 :作为服务器的源端口,用来向客户端回复数据包。

配置文件:

  • /etc/dhcp/dhcpd.conf :默认为空,需要找模版文件生成
  • /usr/share/doc/dhcp*/dhcpd.conf.example :模版配置文件
  • /etc/sysconfig/dhcrelay :中继配置文件

4.DHCP配置文件详解

配置文件中含有全局配置和局部配置:

全局配置:

  • log-facility local7:日志记录
  • subnet { }:指定网段,子网掩码
  • host fantasia{ }:给指定主机设定指定IP
  • class “foo”{ } :超级作用域

局部配置:

subnet 10.254.239.0 netmask 255.255.255.224 { # 声明要分配的网段和子网掩码
  range 10.254.239.10 10.254.239.20; # 声明IP地址池(IP范围,这里共有10个)
  option domain-name "example.org"; # 设置DNS域
  option domain-name-servers 8.8.8.8; # 设置DNS服务器地址
  option routers 123.0.0.1; # 网关地址
  option broadcast-address 10.254.239.31;  # 广播地址可不写
  default-lease-time 600; # 默认租约(s)
  max-lease-time 7200; # 最长租约(s)
}

DHCP文件中至少有一个subnet所声明的网段是当前主机的使用的IP网段,他是局域网协议,所以同网段最多。

5.搭建DHCP服务器

实验准备:

  • 一台作为DHCP服务器的虚拟机
  • 一台DHCP客户机虚拟机
  • 把DHCP服务器的永久防火墙和selinux关闭

查看环境:

[root@server ~]# systemctl status firewalld.service 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead) # 已经关闭防火墙
     Docs: man:firewalld(1)
[root@server ~]# getenforce
Disabled # selinux永久关闭

1)安装DHCP服务:

[root@server ~]# rpm -qa | grep dhcp
dhcp-libs-4.2.5-47.el7.x86_64
dhcp-common-4.2.5-47.el7.x86_64 # DHCP命令软件包已经安装了
[root@server ~]# yum install dhcp -y
……………
Installed:
  dhcp.x86_64 12:4.2.5-47.el7                                                                

Complete!
  • 安装之后不能直接启动,需要配置才可以启动。

2)查看配置文件:

[root@server ~]# cd /etc/dhcp/
[root@server dhcp]# ls
dhclient.d  dhcpd6.conf  dhcpd.conf
[root@server dhcp]# vim dhcpd.conf
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example # 让你查看配置文件模版文件
#   see dhcpd.conf(5) man page # 可以查看配置文件的帮助
#

3)查找模版:

[root@server dhcp]# cd /usr/share/doc/dhcp-
dhcp-4.2.5/        dhcp-common-4.2.5/ 
[root@server dhcp]# cd /usr/share/doc/dhcp-4.2.5/ # 进入目录,确定目录
[root@server dhcp-4.2.5]# ls
dhcpd6.conf.example  dhcpd.conf.example  ldap
# 找到了模版文件

4)查看模版文件:

[root@server dhcp-4.2.5]# vim dhcpd.conf.example
# dhcpd.conf 第一句话就是告诉我们这是配置文件
#
# Sample configuration file for ISC dhcpd
#

5)复制配置文件:

[root@server dhcp-4.2.5]# cp -a dhcpd.conf.example /etc/dhcp/dhcpd.conf 
cp: overwrite ‘/etc/dhcp/dhcpd.conf’? y
# 覆盖掉之前的空文件

6)进入真的配置文件:

[root@server dhcp-4.2.5]# cd -
/etc/dhcp
[root@server dhcp]# ls
dhclient.d  dhcpd6.conf  dhcpd.conf
[root@server dhcp]# vim dhcpd.conf 
# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#
  • 这就已经把配置文件复制好了。

7)备份配置文件:

[root@server dhcp]# cp -a dhcpd.conf dhcpd.conf.bak
[root@server dhcp]# ls
dhclient.d  dhcpd6.conf  dhcpd.conf  dhcpd.conf.bak # 备份文件建立成功

8)注释配置文件中的subnet留下只留下最后一个:

# A slightly different configuration for an internal subnet.
subnet 172.25.5.0 netmask 255.255.255.0 { # 要分配的网段和子网掩码
  range 172.25.5.50 172.25.5.100; # 分配的地址池
#  option domain-name-servers ;
#  option domain-name "internal.example.org";
  option routers 172.25.5.250; # 网关
#  option broadcast-address 10.5.5.31;
  default-lease-time 600; # 默认租期
  max-lease-time 7200;# 最长租期
}

:wq # 保存退出

9 )启动服务

[root@server dhcp]# systemctl start dhcpd.service

10)查看端口,验证成功:

[root@server dhcp]# netstat -aptlun
udp        0      0 0.0.0.0:67              0.0.0.0:*                           6398/dhcpd          
udp        0      0 0.0.0.0:67              0.0.0.0:*                           1410/dnsmasq

这时dhcp服务器设定成功。

6.配置DHCP客户端

1)将客户端的网络修改为自动模式:

[root@client1 ~]# nmtui

                  ┌───────────────────────────┤ Edit connection ├───────────────────────────┐
                  │                                                                         │ 
                  │         Profile name System eth0_____________________________           │ 
                  │               Device eth0 (52:54:00:00:05:0B)________________           │ 
                  │                                                                         │ 
                  │ ═ ETHERNET                                                    <Show>    │ 
                  │                                                                         │ 
                  │ ═ IPv4 CONFIGURATION <Automatic> # 修改为自动获取                
                  │ ═ IPv6 CONFIGURATION <Ignore>                                 <Show>    │ 
                  │                                                                         │ 
                  │ [X] Automatically connect                                               │ 
                  │ [X] Available to all users                                              │ 
                  │                                                                         │ 
                  │                                                           <Cancel> <OK>

2)查看网卡配置文件:

[root@client1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
BOOTPROTO=dhcp # 这里已经修改为dhcp模式的网络获取方式
ONBOOT=yes
TYPE=Ethernet
USERCTL=yes
IPV6INIT=no
PERSISTENT_DHCLIENT=1
IPADDR0=172.25.5.2
PREFIX0=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME="System eth0"
UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
IPADDR1=123.0.0.2
PREFIX1=24
PEERDNS=yes
PEERROUTES=yes

3)重启网络服务:

[root@client1 ~]# systemctl restart network
[root@client1 ~]#
  • 重启的过程比较慢,因为在请求分配IP

4)查看ip:

[root@client1 ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.25.5.50  netmask 255.255.255.0  broadcast 172.25.5.255
        inet6 fe80::5054:ff:fe00:50b  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:00:05:0b  txqueuelen 1000  (Ethernet)
        RX packets 4225  bytes 2962587 (2.8 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1884  bytes 302477 (295.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  • 刚好分配到地址池中的第一个IP。

5)查看DHCP服务器的日志记录:

[root@server dhcp]# tail -n 4 /var/log/messages
Aug 18 22:12:57 server dhcpd: DHCPDISCOVER from 52:54:00:00:05:0b (client1) via ens3 # 我想要
Aug 18 22:12:57 server dhcpd: DHCPOFFER on 172.25.5.50 to 52:54:00:00:05:0b (client1) via ens3 # 决定给你
Aug 18 22:12:57 server dhcpd: DHCPREQUEST for 172.25.5.50 (172.25.5.10) from 52:54:00:00:05:0b (client1) via ens3 # 我要你的
Aug 18 22:12:57 server dhcpd: DHCPACK on 172.25.5.50 to 52:54:00:00:05:0b (client1) via ens3 # 确定给你
  • 就是DHCP的建立租约的过程。

你可能感兴趣的:(网络,网络,linux,dhcp,局域网,运维)