Linux网络服务:DHCP原理配置与实验(详细)

前言:

DHCP(动态主机配置协议)是一个局域网的网络协议。指的是由服务器控制一段lP地址范围,客户机登录服务器时就可以自动获得服务器分配的lP地址和子网掩码。

一、什么是DHCP

1.1 DHCP概述

​ DHCP是一个自动分发IP地址的协议。主要作用于局域网内,如果想要在广域网使用DHCP的功能需要在路由器上进行配置。

​ DHCP种会有地址池,地址池内容是网段或连续IP需要人为设置。

1.2 DHCP的好处
  • 减少管理员的工作量
  • 避免IP地址冲突
  • 当网络更改IP地址时,不需要再重新配置每个用户的IP地址
  • 提高了IP地址的利用率
  • 方便客户端的配置
1.3 DHCP的分配方式
  • DHCP的典型应用模式

在网络中假设一台专用的DHCP服务器,负责集中分配各种网络地址参数(主要包括IP地址,子网掩码,广播地址,默认网关地址,DNS服务器地址)

其他主机作为DHCP客户机,将网卡配置为自动获取地址,即可与DHCP服务器进行通信,完成自动配置过程

这就产生了三种分配方式:自动分配,手动分配,动态分配

1.3.1 自动分配

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

例如:工作环境中,局域网内的打印机、座机

1.3.2 手动分配

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

1.3.3 动态分配

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

二、DHCP工作原理(租约过程)

客户机从DHCP服务器获得IP地址的过程称为DHCP的租约过程

2.1 租约过程分为以下四个步骤:

在这里插入图片描述

  • 客户端在局域网中发出广播,称为discover,通过此种方式查看是否有DHCP服务器存在
  • DHCP收到广播后进行回应,但因为不知道客户端的IP地址,所以同样以广播的形式发出的offer(响应,包括有哪些IP地址)响应客户机
  • 客户端收到offer后,开始发出request广播请求
  • DHCP收到广播后,再次发出ACK确认广播来回应客户端。
2.2 租约过程详解
2.2.1 客户端广播寻找DHCP服务器(第一阶段)
  • 当一个DHCP客户机启动时,客户机还没有IP地址,所以客户机要通过DHCP获取一个合法的地址

    此时DHCP客户机以广播的形式发送DHCP discover来寻DHCP服务器

  • 因为自己没有IP地址,所以源IP地址为:0.0.0.0
    同时也不知道DHCP服务器地址,所以发送广播255.255.255.255
    在这里插入图片描述

2.2.2 DHCP响应(第二阶段)
  • 当与客户机同局域网种的DHCP服务器收到广播后,就会在自己的IP地址池种查找是否由合法的IP地址供给客户机,若有,则DHCP服务器会将此IP地址做上标记,加入DHCP offer的消息中,并且以广播的形式发送一条offer消息。
  • 此时客户端还未有IP地址,所以发送广播
    在这里插入图片描述
2.2.3 客户机选择IP地址
  • DHCP客户机从接收到的第一个DHCP的Offer消息中提取IP地址,发出IP地址的DHCP服务器将该地址保留,这样该地址就不能再分配给另一个客户机
  • 如果局域网中存在1个以上的DHCP服务器,那么客户机会根据收到DHCP offer的第一顺序来确定使用哪个DHCP服务器的地址
  • 客户机确认地址后,发送DHCP request广播,选择地址,并附上租约期限信息(默认为8天)
    在这里插入图片描述
2.2.4 DHCP确认租约
  • DHCP服务器确认租约:发送DHCP ACK广播
  • DHCP服务器接收到DHCP request消息后,以DHCP ACK消息的形式向客户机广播成功确认,该消息包含有IP地址的有效租约和其他可配置的消息
  • 当客户机收到DHCP ACK消息时,他就配置了IP地址,完成TCP/IP的初始化
  • 此时服务器发出的仍旧是广播,因为客户机还没有IP地址

在这里插入图片描述

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

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

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

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

2.3.2 租约更新
  • 当DHCP服务器向客户机出租的IP地址租期达到50%时,就需要更新租约
  • 客户机直接向提供租约的服务器发送DHCP request包,要求更新现有的地址租约

如果客户机发送请求更新租约小心时,DHCP服务器宕机,再默认租约期限(8天)到期时,会自动释放地址。然后客户机中的dhcp会自动分配一个169.254.0.0~169.254.255.255网段的地址(此地址无意义,仅为了有IP地址而分配的IP地址)

三、DHCP服务器配置

3.1 使用DHCP动态配置主机地址

DHCP服务:

为大量客户机自动分配地址,提供集中管理

减轻管理和维护成本、提高网络配置效率

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

网卡的IP地址、子网掩码

对应的网络地址、广播地址

默认网关地址

DNS服务器地址

3.2 安装DHCP服务器

DHCP软件包的主要文件:

主配置文件:/etc/dhcpd.conf

执行程序:/usr/sbin/dhcpd/ /usr/sbin/dhcrelay

执行参数配置:/etc/sysconfig/dhcpd

3.21 主配置文件

dhcpd.conf 的内容构成
在这里插入图片描述

3.2.2 Subnet网段声明

subnet网段声明,作用于整个子网段,参数:

range :设置用于分配的IP地址池

option subnet-mask:设置客户机的子网掩码

option routers :设置客户机的默认网关地址

3.2.3 主机声明

host主机声明,作用于单个主机,参数:

hardware ethernet :指定对应主机的MAC地址

fixed-address:指定为该主机保留的IP地址

示例:

host prtsvr{
  hardware ethernet 00:c0:c3:22:46:81;
  fixed-address 192.168.4.100;
}  
3.2.4 租约文件

查看租约文件方法:

vim /var/lib/dhcpd/dhcpd.lease

less /var/lib/dhcpd/dhcpd.lease

四、DHCP中继实验

4.1 实验环境:

打开2台win10虚拟机,将win10-1设置为VMnet2网卡,win10-2设置为VMnet3网卡。

CentOS7使用yum install dhcp* -y 安装后配置VMnet1网卡。作为DHCP服务器

同时关闭所有“使用本地DHCP服务将IP地址分配给虚拟机”选项。
在这里插入图片描述
在这里插入图片描述

配置拓扑图:
在这里插入图片描述

4.2 开始实验:
4.2.1 配置 SW1

关闭路由功能

创建vlan10,20,100

配置f1/2连接模式为access,同时设置为vlan10

配置f1/3连接模式为access,同时设置为vlan20

配置f1/4连接模式为access,同时设置为vlan100

配置f1/0连接模式为trunk,同时设置封装模式为dot1q

SW_2(config)#no ip routing
SW_2(config)#vlan 10,20,100
SW_2(config-vlan)#ex
SW_2(config)#int f1/2
SW_2(config-if)#sw m acc
SW_2(config-if)#sw acc vlan 10
SW_2(config-if)#int f1/3
SW_2(config-if)#sw m acc
SW_2(config-if)#sw acc vlan 20
SW_2(config-if)#int f1/4 
SW_2(config-if)#sw m acc 
SW_2(config-if)#sw acc vlan 100
SW_2(config-if)#int f1/0
SW_2(config-if)#sw m t
SW_2(config-if)#sw t en do
4.2.2 配置SW2

配置f1/1连接模式为trunk,同时设置封装模式为dot1q

SW2(config-if)#int f1/0		
SW2(config-if)#sw mo t
SW2(config-if)#sw t en d

创建vlan10,20,100

配置vlan10,20,100的ip地址,同时开启DHCP中继功能
在这里插入图片描述

4.2.3 配置DHCP服务器

安装dhcp服务,自定义网卡为VMnet1

[root@localhost ~]# yum install dhcp* -y
.............省略安装过程
[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 00:0c:29:7c:15:d9  txqueuelen 1000  (Ethernet)
        RX packets 10232  bytes 13977465 (13.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2812  bytes 213000 (208.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 68  bytes 5916 (5.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 68  bytes 5916 (5.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:1b:a2:10  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0    
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
(编辑IP地址信息)

配置静态IP地址:

在这里插入图片描述

重新启动网卡配置:

[root@localhost ~]# systemctl restart network
[root@localhost ~]# ifconfig (查看网卡信息)
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.100.100  netmask 255.255.255.0  broadcast 192.168.100.255
        inet6 fe80::6fd4:9b50:f095:bf8a  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:7c:15:d9  txqueuelen 1000  (Ethernet)
        RX packets 10257  bytes 13980697 (13.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2857  bytes 219406 (214.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 76  bytes 6620 (6.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 76  bytes 6620 (6.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:1b:a2:10  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

编辑配置文件:

[root@localhost ~]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
cp:是否覆盖"/etc/dhcp/dhcpd.conf"? y
[root@localhost ~]# vi /etc/dhcp/dhcpd.conf

配置三个子网段:
在这里插入图片描述

开启DHCP服务,关闭防火墙与增强性安全功能

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

win10-1与win10-2关闭防火墙,设置自动获得IP地址,设置自动获得DNS服务器地址
在这里插入图片描述

在win10-1与win10-2中重新获取IP地址:

win10-1:
在这里插入图片描述
在这里插入图片描述

win10-2:
在这里插入图片描述
在这里插入图片描述

总结:

我们在编辑dhcp配置文件时,每编辑完一条信息要记得在最后加上“;”,同时检查编辑内容是否正确。如果我们在开启DHCP服务的时候出现"ERR",返回检查配置文件是否正确,出错的主要原因为配置文件编写有误,其次检查网卡配置。

发布了48 篇原创文章 · 获赞 46 · 访问量 6623

猜你喜欢

转载自blog.csdn.net/weixin_45726050/article/details/103234257