热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《Linux就该这么学》第十四章_使用DHCP动态管理主机地址

《Linux就该这么学》第十四章本章讲解动态主机配置协议(DHCP,DynamicHostConfigurationProtocol),该协议用于自动管理局域网内主机的IP地址、子

《Linux就该这么学》

第十四章

本章讲解动态主机配置协议(DHCP,Dynamic Host Configuration Protocol),该协议用于自动管理局域网内主机的IP地址、子网掩码、网关地址及DNS地址等参数,可以有效地提升IP地址的利用率,提高配置效率,并降低管理与维护成本。

本章详细讲解了在Linux系统中配置部署dhcpd服务程序的方法,剖析了dhcpd服务程序配置文件内每个参数的作用,并通过自动分配IP地址、绑定IP地址与MAC地址等实验,让各位读者更直观地体会DHCP的强大之处。


14.1 动态主机地址管理协议

动态主机配置协议(DHCP)是一种基于UDP协议且仅限于在局域网内部使用的网络协议,主要用于大型的局域网环境或者存在较多移动办公设备的局域网环境中,用途是为局域网内部的设备或网络供应商自动分配IP地址等参数,提供网络配置的“全家桶”服务。

简单来说,DHCP就是让局域网中的主机自动获得网络参数的服务。在图14-1所示的拓扑图中存在多台主机,如果手动配置每台主机的网络参数会相当麻烦,日后维护起来也让人头大。而且当机房内的主机数量进一步增加时(比如有100台,甚至1000台),这个手动配置以及维护工作的工作量足以让运维人员崩溃。借助于DHCP,不仅可以为主机自动分配网络参数,还可以确保主机使用的IP地址是唯一的,更重要的是,还能为特定主机分配固定的IP地址。

DHCP的应用十分广泛,无论是服务器机房还是家庭、机场、咖啡馆,都会见到它的身影。比如,本书的某位读者开了一家咖啡厅,在为顾客提供咖啡的同时,还为顾客免费提供无线上网服务。这样一来,顾客就可以一边惬意地喝着咖啡,一边连着无线网络刷朋友圈了。但是,作为咖啡厅老板的您,肯定不希望(也没有时间)为每一位造访的顾客手动设置IP地址、子网掩码、网关地址等信息。另外,考虑到咖啡馆使用的内网网段一般为192.168.10.0/24(C类私有地址),最多能容纳的主机数为200多台。而咖啡厅一天的客流量肯定不止200人。如果采用手动方式为他们分配IP地址,则当他们在离开咖啡厅时并不会自动释放这个IP地址,这就可能出现IP地址不够用的情况。这一方面会造成IP地址的浪费,另外一方面也增加了IP地址的管理成本。而使用DHCP,这一切都迎刃而解—老板只需安心服务好顾客,为其提供美味的咖啡;顾客通过运行DHCP的服务器自动获得上网所需的IP地址,等离开咖啡厅时IP地址将被DHCP服务器收回,以备其他顾客使用。

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

图14-1 DHCP协议的拓扑示意图

既然确定在今后的生产环境中肯定离不开DHCP了,那么也就有必要好好地熟悉一下DHCP涉及的常见术语了。


作用域:一个完整的IP地址段,DHCP根据作用域来管理网络的分布、IP地址的分配及其他配置参数。

超级作用域:用于管理处于同一个物理网络中的多个逻辑子网段,它包含了可以统一管理的作用域列表。

排除范围:把作用域中的某些IP地址排除,确保这些IP地址不会分配给DHCP客户端。

地址池:在定义了DHCP的作用域并应用了排除范围后,剩余的用来动态分配给客户端的IP地址范围。

租约:DHCP客户端能够使用动态分配的IP地址的时间。

预约:保证网络中的特定设备总是获取到相同的IP地址。



14.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行的参考示例文件,其组成架构如图14-2所示。

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

图14-2 dhcpd服务程序配置文件的架构

一个标准的配置文件应该包括全局配置参数、子网网段声明、地址配置选项以及地址配置参数。其中,全局配置参数用于定义dhcpd服务程序的整体运行参数;子网网段声明用于配置整个子网段的地址属性。

考虑到dhcpd服务程序配置文件的可用参数比较多,这里挑选了最常用的参数(见表14-1),并逐一进行了简单介绍,以便为接下来的实验打好基础。

表14-1 dhcpd服务程序配置文件中使用的常见参数以及作用











































































参数作用
ddns-update-style 类型定义DNS服务动态更新的类型,类型包括: none(不支持动态更新)、interim(互动更新模式)与ad-hoc(特殊更新模式)
allow/ignore client-updates允许/忽略客户端更新DNS记录
default-lease-time 21600默认超时时间
max-lease-time 43200最大超时时间
option domain-name-servers 8.8.8.8定义DNS服务器地址
option domain-name "domain.org"定义DNS域名
range定义用于分配的IP地址池
option subnet-mask定义客户端的子网掩码
option routers定义客户端的网关地址
broadcast-address 广播地址定义客户端的广播地址
ntp-server IP地址定义客户端的网络时间服务器(NTP)
nis-servers IP地址定义客户端的NIS域服务器的地址
hardware 硬件类型 MAC地址指定网卡接口的类型与MAC地址
server-name 主机名向DHCP客户端通知DHCP服务器的主机名
fixed-address IP地址将某个固定的IP地址分配给指定主机
time-offset 偏移差指定客户端与格林尼治时间的偏移差

14.3 自动管理IP地址

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

为了让实验更有挑战性,来模拟一个真实生产环境的需求:

“机房运营部门:明天会有100名学员自带笔记本电脑来我司培训学习,请保证他们能够使用机房的本地DHCP服务器自动获取IP地址并正常上网”。

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

表14-2 机房所用的网络地址以及参数信息







































参数名称
默认租约时间21600秒
最大租约时间43200秒
IP地址范围192.168.10.50~192.168.10.150
子网掩码255.255.255.0
网关地址192.168.10.1
DNS服务器地址192.168.10.1
搜索域linuxprobe.com

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

表14-3 DHCP服务器以及客户端的配置信息






















主机类型操作系统IP地址
DHCP服务器RHEL 8192.168.10.1
DHCP客户端Windows 10DHCP自动获取地址

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

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

图14-3 单击虚拟机软件的“虚拟网络编辑器”菜单

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

图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;
}

表14-4 dhcpd服务程序配置文件中使用的参数以及作用























































参数作用
ddns-update-style none;设置DNS服务不自动进行动态更新
ignore client-updates;忽略客户端更新DNS记录
subnet 192.168.10.0 netmask 255.255.255.0 {作用域为192.168.10.0/24网段
range 192.168.10.50 192.168.10.150;IP地址池为192.168.10.50-150(约100个IP地址)
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;定义客户端的DNS地址
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所示。特别方便!

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

图14-5 设置网卡模式

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

图14-6 自动获取到IP地址

如果是在生产环境中配置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地址冲突的情况。


14.4 分配固定IP地址

在DHCP协议中有个术语是“预约”,它用来确保局域网中特定的设备总是获取到固定的IP地址。换句话说,就是dhcpd服务程序会把某个IP地址私藏下来,只将其用于相匹配的特定设备。这有点像高档餐厅的预约服务,虽然客人还没有到场,但是桌子上会放个写着“已预定”的小牌子。

要想把某个IP地址与某台主机进行绑定,就需要用到这台主机的MAC地址。这个MAC地址即网卡上一串独立的标识符,具备唯一性,因此不会存在冲突的情况。在Linux系统中查看MAC地址的示例如图14-7所示,在Windows系统中查MAC地址的示例如图14-8所示。

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

图14-7 在Linux系统中查看网卡MAC地址

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

图14-8 在Windows系统中查看网卡MAC地址

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



































host 主机名称 {
hardwareethernet该主机的MAC地址;
fixed-address欲指定的IP地址;
}

如果不方便查看主机的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

之前刘遄老师在线下讲课时,讲完DHCP服务后总会看到有些学员在挠头。起初我很不理解,毕竟dhcpd服务程序是Linux系统中一个很简单的实验,总共就那么十几行的配置参数,大家还能写错?后来发现了原因—有些学员是以Windows系统为对象进行的IP与MAC地址的绑定实验。而在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所示。

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

图14-9 重启网卡设备

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

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

图14-10 查看绑定后的网卡信息



推荐阅读
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
author-avatar
mark0003
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有