第十三章 使用 DHCP 动态管理主机地址

ops/2024/11/28 8:16:38/

1.  动态主机配置协议 

动态主机配置协议(DHCP)是一种基于 UDP 协议且仅限于在局域网内部使用网络协议,主要用于大型的局域网环境或者存在较多移动办公设备的局域网环境中,用途是为局域网内部的设备或网络供应商自动分配 IP 地址等参数,提供网络配置的“全家桶”服务。 
简单来说,DHCP 就是让局域网中的主机自动获得网络参数的服务。在图所示的拓扑图中存在多台主机,如果手动配置每台主机的网络参数会相当麻烦,日后维护起来也让人头大。而且当机房内的主机数量进一步增加时(比如有 100 台,甚至 1000 台),这个手动配置以及维护工作的工作量足以让运维人员崩溃。借助于 DHCP,不仅可以为主机自动分配网络参数,还可以确保主机使用的 IP 地址是唯一的,更重要的是,还能为特定主机分配固定的 IP 地址。 

既然确定在今后的生产环境中肯定离不开 DHCP 了,那么也就有必要好好地熟悉一下DHCP 涉及的常见术语了。 
➢ 作用域 :一个完整的 IP 地址段,DHCP 根据作用域来管理网络的分布、IP 地址的分配及其他配置参数。 
➢ 超级作用域 :用于管理处于同一个物理网络中的多个逻辑子网段,它包含了可以统一管理的作用域列表。 
➢ 排除范围 :把作用域中的某些 IP 地址排除,确保这些 IP 地址不会分配给 DHCP 客户端。 
➢ 地址池 :在定义了 DHCP 的作用域并应用了排除范围后,剩余的用来动态分配给客户端的 IP 地址范围。 
➢ 租约 :DHCP 客户端能够使用动态分配的 IP 地址的时间。 
➢ 预约 :保证网络中的特定设备总是获取到相同的 IP 地址。 

2.  部署 dhcpd 服务程序 

dhcpd 是 Linux 系统中用于提供 DHCP 的服务程序。尽管 DHCP 的功能十分强大,但是dhcpd 服务程序的配置步骤却十分简单,这也在很大程度上降低了在 Linux 中实现动态主机管理服务的门槛。 
在确认软件仓库配置妥当之后,安装 dhcpd 服务程序,其软件包名称为 dhcp-server: 

[root@linuxprobe~]# dnf install -y dhcp-server 
Updating Subscription Management repositories. 
Unable to read consumer identity 
This system is not registered to Red Hat Subscription Management. You can use  
subscription-manager to register. 
AppStream                                    3.1 MB/s | 3.2 kB     00:00     
BaseOS                                       2.7 MB/s | 2.7 kB     00:00     
Dependencies resolved. 
=============================================================================== Package       Arch          Version          Repository    Size 
=============================================================================== 
Installing: dhcp-server  x86_64        12:4.3.6-30.el8  BaseOS        529 k Transaction Summary 
=============================================================================== 
Install  1 Package 
………………省略部分输出信息……………… 
Installed: dhcp-server-12:4.3.6-30.el8.x86_64                                            Complete! 

查看 dhcpd 服务程序的配置文件内容: 

[root@linuxprobe~]# cat /etc/dhcp/dhcpd.conf 
# 
# DHCP Server Configuration file. 
#   see /usr/share/doc/dhcp-server/dhcpd.conf.example 
#   see dhcpd.conf(5) man page 

dhcp 的服务程序的配置文件中只有 3 行注释语句,这意味着我们需要自行编写这个文件。如果读者不知道怎么编写,可以看一下配置文件中第 2 行的参考示例文件,其组成架构如图所示。 

一个标准的配置文件应该包括全局配置参数、子网网段声明、地址配置选项以及地址配置参数。其中,全局配置参数用于定义 dhcpd 服务程序的整体运行参数;子网网段声明用于配置整个子网段的地址属性。 
考虑到 dhcpd 服务程序配置文件的可用参数比较多,这里挑选了最常用的参数说明,并逐一进行了简单介绍,以便为接下来的实验打好基础。 

3.  自动管理 IP 地址 

DHCP 的设计初衷是为了更高效地集中管理局域网内的 IP 地址资源。DHCP 服务器会自动把 IP 地址、子网掩码、网关、DNS 地址等网络信息分配给有需要的客户端,而且当客户端的租约时间到期后还可以自动回收所分配的 IP 地址,以便交给新加入的客户端。 

为了让实验更有挑战性,来模拟一个真实生产环境的需求: 
“机房运营部门:明天会有 100 名学员自带笔记本电脑来我司培训学习,请保证他们能够使用机房的本地 DHCP 服务器自动获取 IP 地址并正常上网”。 

机房所用的网络地址及参数信息如表所示。

在了解了真实需求以及机房网络中的配置参数之后,按照表来配置 DHCP 服务器以及客户端。

前文讲到,作用域一般是个完整的 IP 地址段,而地址池中的 IP 地址才是真正供客户端使用的,因此地址池应该小于或等于作用域的 IP 地址范围。另外,由于 VMware Workstation虚拟机软件自带 DHCP 服务,为了避免与自己配置的 dhcpd 服务程序产生冲突,应该先按照图 14-3 和图 14-4 将虚拟机软件自带的 DHCP 功能关闭。 

可随意开启几台客户端,准备进行验证。但是一定要注意,DHCP 客户端与服务器需要处于同一种网络模式—仅主机模式(Hostonly),否则就会产生物理隔离,从而无法获取 IP地址。建议开启 1~3 台客户端虚拟机验证一下效果就好,以免物理主机的 CPU 和内存的负载太高。 
在确认 DHCP 服务器的 IP 地址等网络信息配置妥当后,就可以配置 dhcpd 服务程序了。请注意,在配置 dhcpd 服务程序时,配置文件中的每行参数后面都需要以分号(;)结尾,这是规定。另外,dhcpd 服务程序配置文件内的参数都十分重要,因此在表 14-4 中罗列出了每一行参数,并对其用途进行了简单介绍。 

[root@linuxprobe~]# vim /etc/dhcp/dhcpd.conf 
ddns-update-style none; 
ignore client-updates; 
subnet 192.168.10.0 netmask 255.255.255.0 { range 192.168.10.50 192.168.10.150; option subnet-mask 255.255.255.0; option routers 192.168.10.1; option domain-name "linuxprobe.com"; option domain-name-servers 192.168.10.1; default-lease-time 21600; max-lease-time 43200; 
} 

在红帽认证考试以及生产环境中,都需要把配置过的 dhcpd 服务加入到开机启动项中,以确保当服务器下次开机后 dhcpd 服务依然能自动启动,并顺利地为客户端分配 IP 地址等信息。真心建议大家能养成“配置好服务程序,顺手加入开机启动项”的好习惯。 

[root@linuxprobe~]# systemctl start dhcpd 
[root@linuxprobe~]# systemctl enable dhcpd 
Created symlink /etc/systemd/system/multi-user.target.wants/dhcpd.service→ / 
usr/lib/systemd/system/dhcpd.service. 

把 dhcpd 服务程序配置妥当之后就可以开启客户端来检验 IP 分配效果了。在日常工作中,Windows 10 是主流的桌面操作系统,所以只要确保两个主机都处于同一个网络模式内,然后像图 14-5 那样设置 Windows 系统的网络为 DHCP 模式,再稍等片刻即可自动获取到网卡信息了,如图 14-6 所示。特别方便! 

如果是在生产环境中配置 dhcpd 服务,则有可能会因为 DHCP 没有被防火墙放行而导致失败,此时执行下面的命令即可: 

[root@linuxprobe~]# firewall-cmd --zone=public --permanent --add-service=dhcp 
success 
[root@linuxprobe~]# firewall-cmd --reload 
success 

在正常情况下,DHCP 的运作会经历 4 个过程:请求、提供、选择和确认。当客户端顺利获得一个 IP 地址及相关的网络信息后,就会发送一个 ARP(Address Resolution Protocol,地址解析协议)请求给服务器在 dhcpd 服务程序收到这条信息后,也不会再把这个 IP 地址分配给其他主机,从根源上避免了 IP 地址冲突的情况。 

4.  分配固定 IP 地址 

在 DHCP 协议中有个术语是“预约”,它用来确保局域网中特定的设备总是获取到固定的 IP 地址。换句话说,就是 dhcpd 服务程序会把某个 IP 地址私藏下来,只将其用于相匹配的特定设备
要想把某个 IP 地址与某台主机进行绑定,就需要用到这台主机的 MAC 地址。这个 MAC地址即网卡上一串独立的标识符,具备唯一性,因此不会存在冲突的情况。在 Linux 系统中查看 MAC 地址的示例如图 14-7 所示,在 Windows 系统中查 MAC 地址的示例如图 14-8 所示。 

在 Linux 系统或 Windows 系统中,都可以通过查看网络的状态来获知主机的 MAC 地址。在 dhcpd 服务程序的配置文件中,按照如下格式将 IP 地址与 MAC 地址进行绑定。 

如果不方便查看主机的 MAC 地址,该怎么办呢?比如,要给老板使用的主机绑定 IP 地址,总不能随便就去查看老板的主机信息吧。针对这种情况,我们首先启动 dhcpd 服务程序,为老板的主机分配一个 IP 地址,这样就会在 DHCP 服务器本地的日志文件中保存这次的 IP 地址分配记录。然后查看日志文件,就可以获悉主机的 MAC 地址了。 

[root@linuxprobe~]# tail -f /var/log/messages 
………………省略部分输出信息……………… 
Mar 22 00:28:54 linuxprobe cupsd[1206]: REQUEST linuxprobe.com- - "POST / HTTP/ 
1.1" 200 183 Renew-Subscription client-error-not-found 
Mar 22 00:29:35 linuxprobe dhcpd[30959]: DHCPREQUEST for 192.168.10.50 from 00
: 
0c:29:dd:f2:22 (DESKTOP-3OGV50E) via ens160 
Mar 22 00:29:35 linuxprobe dhcpd[30959]: DHCPACK on 192.168.10.50 to 00:0c:29
: 
dd:f2:22 (DESKTOP-3OGV50E) via ens160 

注:在 Windows 系统中看到的 MAC 地址,其格式类似于00-0c-29-dd-f2-22,间隔符为减号(-)。但是在 Linux 系统中,MAC 地址的间隔符则变成了冒号(:)。

[root@linuxprobe~]# vim /etc/dhcp/dhcpd.conf  
ddns-update-style none; 
ignore client-updates; 
subnet 192.168.10.0 netmask 255.255.255.0 { range 192.168.10.50 192.168.10.150; option subnet-mask 255.255.255.0; option routers 192.168.10.1; option domain-name "linuxprobe.com"; option domain-name-servers 192.168.10.1; default-lease-time 21600; max-lease-time 43200; host linuxprobe { hardware ethernet 00:0c:29:dd:f2:22; fixed-address 192.168.10.88; } 
} 

确认参数填写正确后就可以保存并退出配置文件,然后就可以重启 dhcpd 服务程序了。

[root@linuxprobe~]# systemctl restart dhcpd 

需要说明的是,如果您刚刚为这台主机分配了 IP 地址,由于它的 IP 地址租约时间还没有到期,因此不会立即换成新绑定的 IP 地址。要想立即查看绑定效果,则需要重启一下客户端的网络服务,如图 14-9 所示。 

然后就能看到效果了,如图所示。


http://www.ppmy.cn/ops/137304.html

相关文章

【Leetcode Top 100】240. 搜索二维矩阵 II

问题背景 编写一个高效的算法来搜索 m n m \times n mn矩阵 m a t r i x matrix matrix中的一个目标值 t a r g e t target target。该矩阵具有以下特性: 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 数据约束 m m a t r i x . l e n g t h m …

HarmonyOS4+NEXT星河版入门与项目实战(22)------动画(属性动画与显示动画)

文章目录 1、属性动画图解2、案例实现-小鱼移动游戏1、代码实现2、代码解释3、资源图片4、实现效果3、显示动画4、案例修改-显示动画5、总结1、属性动画图解 这里我们用一张完整的图来汇整属性动画的用法格式和使用的主要属性范围,如下所示: 2、案例实现-小鱼移动游戏 1、代…

量化交易系统开发-实时行情自动化交易-4.4.1.做市策略实现

19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来继续说说做市策略实现。 做市策…

一键AI换脸软件,支持表情控制,唇形同步Facefusion-3.0.0发布!支持N卡和CPU,一键启动包

嗨,小伙伴们!还记得小编之前介绍的FaceFusion 2.6.1吗?今天给大家带来超级exciting的消息 —— FaceFusion 3.0.0闪亮登场啦! 🌟 3.0.0版本更新 🏗️ 全面重构:修复了不少小虫子,运行更稳定,再也不怕突然罢工啦! 😀 Live Portrait功能:新增…

QT 实现组织树状图

1.实现效果 在Qt中使用QGraphicsItem和QGraphicsScene实现树状图,你需要创建自定义的QGraphicsItem类来表示树的节点,并管理它们的位置和连接,以下是实现效果图。 2.实现思路 可以看见,上图所示,我们需要自定义连线类和节点类。 每个节点类Node,需要绘制矩形框体文字…

HDMI转VGA方案 LT8612UX(HDMI2.0) LT8612SX LT8511EX LT8522EX LT8612EX_e(HDMI1.4)

一、产品概述 LT8612UX是一款高性能的HDMI至HDMI&VGA转换器,由龙迅半导体公司推出。它能够将HDMI2.0数据流转换为HDMI2.0信号和模拟RGB信号,同时输出8通道I2S和SPDIF信号,实现高质量的7.1声道音频。该转换器采用最新的ClearEdge技术&…

基于.NET调用WebService服务

基于.NET调用WebService服务 上一篇文章用java的Spring Boot框架搭建了一个WebService服务端,这篇文章通过.NET进行调用,下文基于Visual Studio 2022 引入WebService服务 项目右键 -> 添加 -> 服务引用 选择WCF Web Service,点击下一…

第三章:基本语法 1.注释 --Go 语言轻松入门

在Go语言中,注释是用来帮助开发者理解代码的重要工具。Go支持两种类型的注释:单行注释和多行注释(也称为块注释)。 1.单行注释: 单行注释以//开始,直到该行的末尾。这是最常用的注释形式,用于…