00:00/00:00

本章节已编写及校对完毕,现有奖征集建议、若您发现本章中有错别字或补充欢迎联系刘遄老师QQ:5604241。

章节简述:

本章节为同学们讲解DHCP动态主机地址管理协议,实现自动化管理局域网内的客户端主机IP地址、子网掩码、网关地址及DNS主机地址等等网卡参数,有效的提升IP地址使用率,进而提高配置效率,减少管理与维护成本。课程中完整演示在Linux系统中对dhcpd服务程序的部署配置方法,刘遄老师逐条讲解dhcpd服务程序的主配置文件内每个参数,通过自动化分配IP地址、绑定IP地址与mac地址的实验让同学们更直观的体会到DHCP动态主机地址管理协议的方便及强大之处。

14.1 动态主机地址管理协议

DHCP动态主机地址管理协议(Dynamic Host Configuration Protocol)是一种基于UDP协议且仅限用于局域网内使用的网络协议,最主要的用途是为局域网内部设备或网络供应商自动分配IP地址等网卡参数,通常会应用在大型的局域网环境中或局域网内存在比较多的移动办公设备。DHCP服务程序能够使局域网内的主机自动且动态的获取IP地址子网掩码网关地址以及DNS服务器地址等网卡信息,因此能够有效的提升IP地址使用率,提高网络配置效率,减少管理和维护成本。

简单来说,DHCP协议就是让客户端自动获得网卡参数的服务,如图14-1所示,设想某机房内有多台主机,如果要给每台主机手工设置网卡参数一定非常麻烦,而且今后维护也要靠手动修改网卡参数才行,那如果机房内有100台或者1000台主机呢?手工设置网卡信息就变得十分笨拙,也没有那个运维人员原意每天做这么枯燥、重复性高的工作吧。DHCP协议不光能实现对网卡参数的自动分配,而且还能保证任何IP地址在同一时刻只能由一台客户机使用,且能够为指定主机分配固定的IP地址。
DHCP工作原理

图14-1 DHCP动态主机地址管理协议拓扑示意图

DHCP动态主机地址管理协议的应用十分广泛,不论是服务器机房还是家庭都会在日常中使用到它,比如某位同学开了一家咖啡馆,肯定很多顾客都想一边惬意的喝着咖啡一边连着WIFI刷会微信朋友圈吧,试想一下作为老板的您,需要在每位顾客设备上手动的设置下网卡IP地址、子网掩码、网关地址等等信息,这不用多想就知道不切实际了。另外还面临着一个潜在问题,因为每个类似于192.168.10.0/24的IP地址段最多只能容纳两百多个主机,而咖啡厅一天的客流量一定不止两百多人吧,如果给每个人都手工分配了一个IP地址,那么当顾客离开咖啡馆的时候也将带走这个IP地址,以后很难再交给其他人继续使用,造成了不小的资源浪费,也增加了IP地址的管理成本。

既然确定今后生产环境中肯定离不开DHCP动态主机地址管理协议了,那么也就很有必要好好熟悉一下DHCP的常见术语了:

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

超级作用域:用于同一物理网络上多个逻辑IP地址子网段,包含作用域的列表,并对子作用域统一管理。

排除范围:把某些IP地址在作用域中排除,确保这些IP地址不会被提供给DHCP客户机。

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

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

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

14.2 部署dhcpd服务程序

dhcpd服务程序是Linux系统中用于提供DHCP动态主机地址管理协议的服务,确认yum仓库配置妥当后就可以直接安装了,DHCP动态主机地址管理服务功能虽然十分丰富强大,但dhcpd服务程序的配置步骤却十分简单,很大程度上降低了Linux系统实现DHCP动态主机地址管理服务的门槛:

[root@linuxprobe ~]# yum install dhcp
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
rhel | 4.1 kB 00:00 
Resolving Dependencies
--> Running transaction check
---> Package dhcp.x86_64 12:4.2.5-27.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
 Package Arch Version Repository Size
================================================================================
Installing:
 dhcp x86_64 12:4.2.5-27.el7 rhel 506 k
Transaction Summary
================================================================================
Install 1 Package
Total download size: 506 k
Installed size: 1.4 M
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
 Installing : 12:dhcp-4.2.5-27.el7.x86_64 1/1 
 Verifying : 12:dhcp-4.2.5-27.el7.x86_64 1/1 
Installed:
 dhcp.x86_64 12:4.2.5-27.el7 
Complete!

是的,您没有看错!打开dhcpd服务程序的主配置文件发现只有3行注释语句,大意是告诉咱们配置文件需要全部由自己来写,如果不熟悉的话可以看下第2行中的参考示例文件,再或者买本刘遄老师的《Linux就该这么学》自学书籍吧~哈哈,最后一句是玩笑了。如图14-2所示,一个标准的DHCP配置文件应该包括全局配置参数子网网段声明地址配置选项以及地址配置参数

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

dhcp配置文件

图14-2 dhcpd服务程序配置文件参数结构解析

全局配置参数用于定义DHCP服务的整体运行参数,而子网网段声明用于配置整个子网段的地址属性,dhcpd服务程序配置文件的参数比较多,刘遄老师为同学们挑选了最常用参数。并逐一进行了简单介绍,为接下来实验打下基础:

参数 作用
ddns-update-style 类型 定义DDNS服务动态更新的类型,类型包括:
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 定义客户机的网关地址。
broadcase-address 广播地址 定义客户机的广播地址。
ntp-server IP地址 定义客户机的网络时间服务器(NTP)。
nis-servers IP地址 定义客户机的NIS域服务器的地址。
hardware 硬件类型 MAC地址 指定网卡接口的类型与MAC地址。
server-name 主机名 通知DHCP客户机服务器的主机名。
fixed-address IP地址 将某个固定IP地址分配给指定主机。
time-offset 偏移差 指定客户机与格林尼治时间的偏移差。


出现问题?大胆提问!

因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~

Linux技术交流请加A群:560843(),B群:340829(推荐),C群:463590(推荐),点此查看全国群

*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。

14.3 自动管理IP地址

DHCP动态主机地址管理协议的设计初衷是为了更高效的集中管理局域网内IP地址资源,作为运维人员只需要在机房内部署一台DHCP服务器,接下来的事情就不用操心了。DHCP服务会自动把IP地址、子网掩码、网关、DNS地址等等网卡信息分配给有需要的客户端,当客户端的租约时间到期后还可以自动回收所分配的IP地址,以便交给后面新加入的客户主机。为了让实验更有挑战性,刘遄老师来模拟一个真实生产环境的需求吧——“机房运营部门: 明日约有50名外来学员自带笔记本设备来我司培训学习,请保证学员能够用机房本地DHCP服务器自动获取IP地址并正常上网”,机房网段及参数如下表所示:

参数名称
默认租约时间 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

看完工作需求和机房配置参数后,咱们首先按照下表配置好DHCP服务器自身的IP地址,然后头脑中快速回忆上面学习的DHCP术语和常用参数,作用域一般是个完整的IP地址段,而地址池才是真真正正用于给客户端分配的IP地址范围。因此地址池应该小于或等于作用域IP地址范围,另外由于VmwareWorkstation虚拟机软件自带有DHCP动态主机管理服务,为了避免与自己配置的DHCP产生冲突,应该先如图14-3与图14-4所示,将其自带DHCP功能关闭掉:

主机类型 操作系统 IP地址
DHCP服务端 红帽RHEL7操作系统 192.168.10.1
DHCP客户机 红帽RHEL7操作系统 DHCP自动获取地址

选择虚拟机导航条上的网络编辑器

图14-3 点击虚拟机的虚拟网络编辑器

不使用虚拟机的DHCP功能

图14-4 把虚拟机自带的DHCP功能关闭

这时随便开启几台客户端主机,但一定要注意DHCP服务端与客户端主机都应处于同一种网络模式——仅主机模式(Hostonly),否则就会产生物理隔离,一定获取不到IP地址的,刘遄老师建议准备1-3台客户端虚拟机看下效果就好,以免您的真机电脑CPU和内存负载太高。确认DHCP服务端的IP地址等网卡信息配置已经妥当后就可以开始配置dhcpd服务程序了,请留心每行参数后面都需要以;(分号)结尾,这是dhcpd服务程序的规定哦~因为主配置文件内的参数都十分重要,因此刘遄老师单独做了一个表格,对每一行的参数都进行了简单讲解。

[root@linuxprobe ~]# vim /etc/dhcp/dhcpd.conf
参数 作用
ddns-update-style none; 设置DDNS服务不自动动态更新。
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服务程序能够自动启动并依然顺利的为客户端分配网卡IP地址,特别建议同学们在配置好服务程序后养成加入启动项的习惯:

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

把DHCP服务器配置妥当后就可以开启客户主机来检验IP分配效果了,dhcpd服务程序的配置过程是不是超级简单?!~希望同学们以后也不要一提到Linux系统就怕得不行,其实很多服务程序的配置都很容易呢,重启客户端主机的网卡后即可看到自动分配到的IP地址,如图14-5所示。读者如果有兴趣的话还可以再开启一台Windows系统试试,效果都是一样的:
DHCP自动获取IP地址(IP地址)

图14-5 自动获取DHCP分配的IP地址

14.4 分配固定IP地址

在DHCP动态主机地址管理协议中有个术语叫做“预约”,预约指的是保证局域网中特定的设备总是获取到固定的IP地址,换句话说就是dhcpd服务程序会把某个IP地址私藏下来,只有匹配到特定主机了才会拿出来分配,让某个特定主机总能获取到固定的IP地址。

要想把IP地址与某个主机相互绑定,那么需要该主机的MAC网卡物理地址才可以,MAC地址是网卡上面的一串独立标识符,因此不用担心冲突的情况,如图14-6所示,咱们在Linux系统或Windows系统中都可以通过查看网卡状态来查看到这个MAC值,dhcpd服务程序的配置参数格式如下:

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


DHCP自动获取IP地址MAC地址

图14-6 查看Linux系统网卡MAC地址

此时一定有同学会问如果不方便查看MAC地址怎么办呢?比如给公司老板的机器绑定IP地址,总不能随便就去看别人电脑信息吧,刘遄老师就来告诉大家一个很好的办法,首先咱们启动dhcpd服务程序,然后为老板的主机分配一个IP地址,这样在DHCP服务器本地的日志文件中就会保存有了这次的IP地址分配记录,通过看日志文件来获取到对方电脑的网卡MAC地址啦~

[root@linuxprobe ~]# tail -f /var/log/messages 
Mar 30 05:33:17 localhost dhcpd: Copyright 2004-2013 Internet Systems Consortium.
Mar 30 05:33:17 localhost dhcpd: All rights reserved.
Mar 30 05:33:17 localhost dhcpd: For info, please visit https://www.isc.org/software/dhcp/
Mar 30 05:33:17 localhost dhcpd: Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file
Mar 30 05:33:17 localhost dhcpd: Wrote 0 leases to leases file.
Mar 30 05:33:17 localhost dhcpd: Listening on LPF/eno16777728/00:0c:29:c4:a4:09/192.168.10.0/24
Mar 30 05:33:17 localhost dhcpd: Sending on LPF/eno16777728/00:0c:29:c4:a4:09/192.168.10.0/24
Mar 30 05:33:17 localhost dhcpd: Sending on Socket/fallback/fallback-net
Mar 30 05:33:26 localhost dhcpd: DHCPDISCOVER from 00:0c:29:27:c6:12 via eno16777728
Mar 30 05:33:27 localhost dhcpd: DHCPOFFER on 192.168.10.50 to 00:0c:29:27:c6:12 (WIN-APSS1EANKLR) via eno16777728
Mar 30 05:33:29 localhost dhcpd: DHCPDISCOVER from 00:0c:29:27:c6:12 (WIN-APSS1EANKLR) via eno16777728
Mar 30 05:33:29 localhost dhcpd: DHCPOFFER on 192.168.10.50 to 00:0c:29:27:c6:12 (WIN-APSS1EANKLR) via eno16777728
Mar 30 05:33:29 localhost dhcpd: DHCPREQUEST for 192.168.10.50 (192.168.10.10) from 00:0c:29:27:c6:12 (WIN-APSS1EANKLR) via eno16777728
Mar 30 05:33:29 localhost dhcpd: DHCPACK on 192.168.10.50 to 00:0c:29:27:c6:12 (WIN-APSS1EANKLR) via eno16777728

以前我在线下讲课的时候讲完DHCP服务后看到底下总是会有学生挠头,起初我很不理解,因为dhcpd服务程序应该算是Linux系统中最简单不过的了,就那么点参数怎么可能写错呢?后来慢慢发现了原因——有些同学是以Windows系统为对象做的IP绑定实验,而在Windows系统中直接查看到的MAC地址是类似于00-0c-29-27-c6-12这样的,很明显MAC地址虽然值是一样的,但间隔符变成了-(减号),因此咱们在Linux系统中配置dhcpd服务程序的时候一定要保证里面的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:27:c6:12;
fixed-address 192.168.10.88;
}
}
[root@linuxprobe ~]# systemctl restart dhcpd

确认参数填写正确后就可以保存退出配置文件,然后就可以重启dhcpd服务程序了,对了~如果这台主机是您刚刚分配过IP地址的,那么它的IP地址租约时间还没有到期,因此不会立即的更换成新绑定的IP地址,要想立即看到绑定效果还需要再重启下客户端的网络服务才行,如图14-7所示:
绑定指定的IP地址

图14-7 DHCP服务的网卡IP地址绑定实验

出现问题?大胆提问!

因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~

Linux技术交流请加A群:560843(),B群:340829(推荐),C群:463590(推荐),点此查看全国群

*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。

本章节的复习作业(答案就在问题的下一行哦,用鼠标选中即可看到的~)

1:简述DHCP动态主机地址管理协议最主要的作用。

答案:最主要用途是为局域网内部设备或网络供应商自动分配IP地址。

2:DHCP动态主机地址管理协议能够为客户端分配什么网卡资源?

答案:可为客户端分配IP地址、子网掩码、网关地址以及DNS服务器地址等信息。

3:真正给用户分配IP地址的范围是作用域还是地址池?

答案:地址池,因为作用域内还会包含要排除掉的IP地址。

4:简述DHCP动态主机地址管理协议“租约”的作用。

答案:租约分为默认租约时间和最大租约时间,用于自动回收离线的主机IP地址,避免造成IP地址长期的浪费情况。

5:把IP地址与主机的什么资源绑定,就可以保证该主机一直获取到固定的IP地址?

答案:该主机的MAC网卡物理地址。