Linux网络服务DHCP

264 阅读11分钟

1. DHCP概述

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),由Internet工作任务小组设计开发,专门用于为TCP/IP网络中计算机自动分配TCP/IP参数的协议。

DHCP是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。 默认情况下,DHCP作为Windows Server的一个服务组件不会被系统自动安装,还需要管理员手动安装并进行必要的配置。

DHCP采用C/S架构,C-client(客户机),S-server(服务器),客户机/服务器架构

DHCP服务采用传输层UDP协议,客户机使用UDP协议的68端口,服务器使用UDP的67端口。

1.2. DHCP好处

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

1.3. DHCP的分配方式

  • DHCP的典型应用模式

    • 在网络中假设一台专用的DHCP服务器,负责集中分配各种网络地址参数(主要包括IP地址,子网掩码,广播地址,默认网关地址,DNS服务器地址)
    • 其他主机作为DHCP客户机,将网卡配置为自动获取地址,即可与DHCP服务器进行通信,完成自动配置过程
    • 这就产生了三种分配方式:自动分配,手动分配,动态分配

自动分配

  • 分配到一个IP地址后永久使用
  • 当DHCP客户机第一次成功的从DHCP服务器获取到一个IP地址后,就永久的使用这个IP地址
  • 例如:局域网中的打印机,局域网中的座机

手动分配

  • 由DHCP服务器管理员专门指定IP地址

动态分配

  • 使用完后释放该IP,供其他客户机使用
  • 当DHCP客户机第一次从DHCP服务器获得IP地址后,并非永久的使用该地址,而是在每次使用完后,DHCP客户机就会释放这个IP地址,供其他客户机使用
    IP地址的获取和释放的命令
    Windows 获取IP地址命令: ipconfig
             释放IP地址命令: release
    Linux 获取IP地址命令: ifconfig
      重新获得IP地址命令: renew

1.4. DHCP 工作原理

第一步:客户端在网络中搜索服务器

  • 客户端通过广播发送DHCP Discover报文寻找服务器端

第二步:服务器向客户端响应服务

  • 服务器端通过单播发送DHCP Offer报文向客户端提供IP地址等网络信息,从IP地址池中挑选一个尚未分配的IP分配给客户端

第三步:客户端向服务器发出服务请求

  • 如果有多台DHCP服务器向该客户端发来DHCP-offer报文,客户端只接受第一个收到的DHCP-offer报文并提取IP地址,然后客户端通过广播发送DHCP Request报文告知服务器端本地选择使用该IP地址。

第四步:服务器向客户端提供服务

  • 服务器通过单播发送DHCP Ack报文告知客户端IP地址是合法可用的,并在选项字段中增加IP地址的使用租期信息

image.png

DHCP中继原理

DHCP中继原理: DHCP客户使用IP广播来寻找同一网段上的DHCP服务器。 当服务器和客户段处在不同网段,即被路由器分割开来时,路由器是不会转发这样广播包的。 因此可能需要在每个网段上设置一个DHCP服务器,虽然DHCP只消耗很小的一部分资源的,但多个 DHCP服务器,毕竟要带来管理上的不方便。 DHCP中继的使用使得一个DHCP服务器同时为多个网段服务成为可能。

两种解决办法:

  • 为每个网段安装一台DHCP服务器,但这种方式存在资源上的浪费,而且不利于集中管理。
  • 在连接不同网段的设备上开启DHCP中继功能,将DHCP这种特殊的广播信息在VLAN之间转发,让其他VLAN的客户机也能从DHCP服务器获得IP地址。

2. DHCP租约过程概述

  • 客户机从DHCP服务器获得IP地址的过程称为DHCP的租约过程
  • 租约过程分为四个步骤

2.1. DHCP的租约过程

QQ截图20220922145617.png

  • 1.客户端在网络中发送discover广播,以此来搜索DHCP服务器
  • 2.DHCP服务器接收到广播后,因不知道客户端的IP地址,所以同样以广播的形式将offer发送,来响应主机
  • 3.客户机收到offer后,开始发出request广播
  • 4.DHCP收到广播后,依旧不知道客户机IP地址,发送回复request的ACK确认广播

1、客户机请求IP地址(DHCP Discover)

  • 当一个DHCP客户机启动时,客户机还没有IP地址,客户机要通过DHCP获取一个合法的地址。

  • 此时DHCP客户机以广播方式发送DHCP Discover报文发现信息来寻找DHCP服务器。

  • 因为自己没有IP地址,所以源IP地址为:0.0.0.0

    同时也不知道DHCP服务器地址,所以发送广播255.255.255.255

QQ截图20220922145940.png

2、服务器响应(DHCP Offer)

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

QQ截图20220922150035.png

3、客户机选择IP地址(DHCP Request)

  • DHCP客户机从接收到的第一个DHCP offer消息中提取IP地址,发出IP地址的DHCP服务器将该地址保留,这样该地址就不能再分配给另一个DHCP客户机
  • 第一个DHCP offer表示:若局域网中同时存在两个DHCP,那么客户机根据收到DHCP offer的顺序来确定使用哪个DHCP服务器的地址
  • 客户机发送DHCP request 广播,选择IP地址,并附上租约期限信息(默认8天)

QQ截图20220922150123.png

4、服务器确定租约(DHCP Ack)

  • DHCP服务器接收到DHCP request消息后,以DHCP ACK消息的形式向客户机广播成功确认,该消息包含有IP地址的有效租约和其他可配置的消息
  • 当客户机收到DHCP ACK消息时,他就配置了IP地址,完成TCP/IP的初始化
  • 此时服务器发出的仍旧是广播,因为客户机还没有IP地址

QQ截图20220922150204.png

重新登录

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

  • DHCP服务器收到请求后,检查IP地址资源池

    1.发现客户机请求中的IP地址仍旧存在,便发送ACK,将IP地址分配给客户机

    2.发现客户机请求中的IP地址已被占用,便返回一个Nack否认信息,然后客户机重新开始请求IP地址的步骤。

QQ截图20220922150257.png

更新租约:

  • 当DHCP服务器向客户机出租的IP地址租期达到50%时,就需要更新租约;
  • 客户机直接向提供租约的服务器发送DHCP Request包,要求更新现有的地址租约。
  • 当租约到期前,DHCP服务器还没有收到客户机的请求,就会释放该IP地址。

3. DHCP服务器的配置

3.1. DHCP服务优点

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

3.2. 可分配的地址信息主要包括

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

3.3. 安装DHCP服务器

DHCP服务器软件

  • centos镜像中的dhcp…rpm

dhcp软件包的主要文件

  • 主配置文件:/etc/dhcpd.conf
  • 执行程序:/usr/sbin/dhcpd,/usr/sbin/dhcrelay
  • 执行参数配置:/etc/sysconfig/dhcpd
3.4. DHCP共有八种报文
报文含义
DHCP Discover这是客户机首次登录网络时进行 DHCP 过程的第一个报文,用来寻找 DHCP 服务器。
DHCP OfferDHCP服务器用来响应DHCP DISCOVER报文,此报文携带了各种配置信息。
DHCP Request客户端初始化后,发送广播的 DHCP REQUEST 报文来回应服务器的 DHCP OFFER 报文。 客户端重启初始化后,发送广播的 DHCP REQUEST 报文来确认先前被分配的 IP 地址等配置信息。 当客户端已经和某个 IP 地址绑定后,发送 DHCP REQUEST 报文来延长 IP 地址的租期。
DHCP ACK服务器对客户端的 DHCP REQUEST 报文的确认响应报文,客户端收到此报文后,才真正获得了 IP 地址和相关的配置信息。
DHCP NAK服务器对客户端的DHCP REQUEST报文的拒绝响应报文,通知客户端无法分配合适的 IP 地址。
DHCP Decline客户端发送给服务器,指示地址已被使用,并且会重新向服务器申请地址。
DHCP Release客户端发送给服务器,主动释放服务器分配给它的IP地址,取消剩余租约时间。
DHCP Inform客户端发送给服务器,客户端已经获得了 IP 地址,发送此报文的目的是为了从服务器获得其他的一些网络配置信息,比如网关地址、DNS 服务器地址等。极少用到。

4. DHCP配置文件

DHCP服务的配置文件为/etc/dhcp/dhcpd.conf。

 # 设置全局配置参数
 option domain-name "example.org";     //指定默认域名
 option domain-name-servers 202.106.0.20202.106.148.1;      //指定DNS服务器地址
 default-lease-time 600;              //默认租约600秒(10分钟)
 max-lease-time 7200;                 //最大租约为7200秒(2小时)
 ddns-update-style none;              //禁用DNS动态更新
 ​
 ​
 # subnet网段声明(作用于整个子网段,部分配置参数优先级高于全局配置参数)
 subnet 192.168.100.0 netmask 255.255.255.0 {         //声明要分配的网段地址
 range 192.168.100.128 192.168.100.200;               //设置地址池
 option routers 192.168.100.10;                       //指定默认网关地址
 ​
 ​
 # host主机声明(给单机分配固定的IP地址)    
 host hgstname{                                //指定需要分配固定IP地址的客户机名称
 hardware ethernet 00:c0:c3:22:46:81;          //指定该主机的MAC地址
 fixed-address 192.168.4.100;                  //指定保留给该主机的IP地址

设置DHCP服务器并分配地址

关闭防火墙selinux

 [root@localhost ~]# systemctl stop firewalld.service 
 [root@localhost ~]# setenforce 0

安装 dhcp 软件包,并查看配置文件。

[root@localhost ~]#yum install dhcp -y
[root@localhost ~]# rpm -qc dhcp
/etc/dhcp/dhcpd.conf
/etc/dhcp/dhcpd6.conf
/etc/openldap/schema/dhcp.schema
/etc/sysconfig/dhcpd
/var/lib/dhcpd/dhcpd.leases
/var/lib/dhcpd/dhcpd6.leases

[root@localhost ~]#cat /etc/dhcp/dhcpd.conf  /查看配置文件,为空文件
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example   //系统提示可以参考该文件的设置
#   see dhcpd.conf(5) man page
#

QQ截图20220922152109.png

QQ截图20220922152450.png

修改网卡配置文件/etc/sysconfig/network-scripts/ifcfg-ens33,之后重启网络服务。

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost ~]# systemctl restart network 
[root@localhost ~]# ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.85.50  netmask 255.255.255.0  broadcast 192.168.85.255
        inet6 fe80::c3fc:353a:c5c:5e66  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:7e:55:67  txqueuelen 1000  (Ethernet)
        RX packets 124154  bytes 184991531 (176.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 22438  bytes 1402018 (1.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

QQ截图20220922153215.png

QQ截图20220922153615.png

编辑dhcp服务的配置文件/etc/dhcp/dhcpd.conf,设置网段(要和虚拟网络编辑器中的保持一致)、地址池、网关地址。之后重启dhcp服务。

[root@localhost ~]# cd /usr/share/doc/dhcp-4.2.5/
[root@localhost dhcp-4.2.5]# ls
dhcpd6.conf.example  dhcpd.conf.example  ldap
[root@localhost dhcp-4.2.5]# cp dhcpd.conf.example /etc/dhcp/dhcpd.conf
cp:是否覆盖"/etc/dhcp/dhcpd.conf"? yes


# 编辑dhcp配置文件
[root@localhost dhcp-4.2.5]#  vim /etc/dhcp/dhcpd.conf
27 subnet 192.168.85.0 netmask 255.255.255.0 {
 28   range 192.168.85.20 192.168.85.50;
 29   option routers 192.168.85.50;

[root@localhost dhcp-4.2.5]# systemctl restart dhcpd
[root@localhost dhcp-4.2.5]# systemctl status dhcpd 
● dhcpd.service - DHCPv4 Server Daemon
   Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; disabled; vendor preset: disabled)
   Active: active (running) since 四 2022-09-22 15:40:49 CST; 8s ago
     Docs: man:dhcpd(8)
           man:dhcpd.conf(5)
 Main PID: 17418 (dhcpd)
   Status: "Dispatching packets..."
   CGroup: /system.slice/dhcpd.service
           └─17418 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -gro...



QQ截图20220922153953.png

QQ截图20220922154303.png

验证Windows10虚拟机虚拟机能否获取DHCP服务器分配的IP地址。

QQ截图20220922154401.png

QQ截图20220922154524.png

QQ截图20220922154925.png

QQ截图20220922155234.png