全套学习资料移步至公众号【学神来啦】
本节所讲内容:
3.1 DHCP服务器工作原理
3.2 实战:使用DHCP动态分配IP地址
3.3 实战:使用DHCP为服务器分配并固定IP地址
3.4 实战:ntpdate加计划任务同步服务器时间
如果生活中没有DHCP会怎么样?
为什么需要在服务器上搭建DHCP服务?
实验环境:
服务端:xuegod63 IP:192.168.1.63
客户端:xuegod64 IP:192.168.1.64
3.1 DHCP服务器工作原理
3.1.1 DHCP服务概述
名称:DHCP (Dynamic Host Configuration Protocol)动态主机配置协议。
功能:DHCP是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:
1.给内部网络或网络服务供应商自动分配IP地址,主机名,DNS服务器,域名;
2.配合其它服务,实现集成化管理功能。如:无人执守安装服务器。
DHCP是C/S 模式,DHCP服务端和客户端需要保持通信,DHCP基于UDP协议,双方都有可能会主动向对方发起通信,因此双方都需要监听端口。
Server端:DHCP Server(运行dhcp服务)
UDP服务:监听端口 67(bootps)
Client端:DHCP Client(运行dhcp程序)
UDP服务:监听端口 68 (bootpc)
DHCP特点:
自动分配IP地址,方便管理。
DHCP不会同时租借相同的IP地址给两台主机。
DHCP管理员可以约束特定的计算机使用特定的IP地址。
可以为每个DHCP作用域设置很多选项。
客户机在不同子网间移动时不需要重新设置IP地址。每次都自动获取IP地址就可以了。
DHCP的缺点:
当网络上存在多服务器时,一个DHCP服务器不能查出已被其它服务器租出去的IP地址;
DHCP服务器不能跨路由器与客户机通信,除非路由器允许BOOTP协议转发。
端口:
例:查看端口解析文件,如图 3-1 所示。
[root@xuegod63 ~]# vim /etc/services
图 3-1端口解析文件
3.1.2 DHCP服务运行原理
运行原理,如图 3-2 所示。
图 3-2 DHCP运行过程示意图
DHCP Client发现阶段
即DHCP客户端寻找DHCP服务端的过程,对应于客户端发送DHCP Discovery,因为DHCP Server对应于DHCP客户端是未知的,所以DHCP 客户端发出的DHCP Discovery报文是广播包,源地址为0.0.0.0目的地址为255.255.255.255。网络上的所有支持TCP/IP的主机都会收到该DHCP Discovery报文,但是只有DHCP Server会响应该报文。
注意:客户端执行DHCP DISCOVER 后,如果没有DHCP 服务器响应客户端的请求,客户端则没有生效IP可用,会周期性(大概40秒)进行发送DNSCOVER进行请求DHCP服务器分配IP地址。
169.254.0.0/16是Windows的自动专有IP寻址范围,也就是在无法通过DHCP获取IP地址时,由系统自动分配的IP地址段。
早期的Linux上并不会产生这条路由,现在有这条路由是为了和Windows兼容。
比如:查看客户端请求地址系统日志。
[root@xuegod63 ~]# grep "dhcpd" /var/log/messages
Sep 6 21:06:23 localhost NetworkManager[929]:
Sep 6 21:06:23 localhost dnsmasq-dhcp[1440]: DHCP, IP range 192.168.122.2 -- 192.168.122.254, lease time 1h
Sep 6 21:06:23 localhost dnsmasq-dhcp[1440]: DHCP, sockets bound exclusively to interface virbr0
Sep 6 21:06:23 localhost dnsmasq-dhcp[1440]: read /var/lib/libvirt/dnsmasq/default.hostsfile
Sep 6 21:39:17 localhost NetworkManager[856]:
Sep 6 21:39:18 localhost dnsmasq-dhcp[1301]: DHCP, IP range 192.168.122.2 -- 192.168.122.254, lease time 1h
Sep 6 21:39:18 localhost dnsmasq-dhcp[1301]: DHCP, sockets bound exclusively to interface virbr0
Sep 6 21:39:18 localhost dnsmasq-dhcp[1301]: read /var/lib/libvirt/dnsmasq/default.hostsfile
Nov 5 17:44:12 localhost NetworkManager[856]:
Nov 5 17:44:12 localhost NetworkManager[856]:
Nov 5 17:44:12 localhost NetworkManager[856]:
Nov 5 17:44:12 localhost NetworkManager[856]:
Nov 5 17:44:12 localhost NetworkManager[856]:
Nov 5 17:44:12 localhost NetworkManager[856]:
Nov 5 17:44:12 localhost NetworkManager[856]:
Nov 5 17:44:12 localhost NetworkManager[856]:
Nov 5 17:44:12 localhost NetworkManager[856]:
1.DHCP Server 提供阶段:
DHCP Server提供阶段,即为DHCP Server响应DHCP Discovery所发的DHCP Offer阶段,即DHCP服务器提供IP地址的阶段。在网络中接收到DHCPdiscover发现信息的DHCP服务器都会做出响应,它从尚未出租的IP地址中挑选一个分配给DHCP客户机,向DHCP客户机发送一个包含出租的IP地址和其他设置的DHCPoffer提供信息。
2.DHCP Client 确认阶段:
即DHCP客户机选择某台DHCP服务器提供的IP地址的阶段。如果有多台DHCP服务器向DHCP客户机发来的DHCPoffer提供信息,则DHCP客户机只接受第一个收到的DHCPoffer提供信息,然后它就以广播方式回答一个DHCPrequest请求信息,该信息中包含向它所选定的DHCP服务器请求IP地址的内容。之所以要以广播方式回答,是为了通知所有的DHCP服务器,他将选择某台DHCP服务器所提供的IP地址
3.DHCP Server确认阶段:
即DHCP服务器确认所提供的IP地址的阶段。当DHCP服务器收到DHCP客户机回答的DHCPrequest请求信息之后,它便向DHCP客户机发送一个包含它所提供的IP地址和其他设置的DHCPack确认信息,告诉DHCP客户机可以使用它所提供的IP地址。然后DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除DHCP客户机选中的服务器外,其他的DHCP服务器都将收回曾提供的IP地址。
4.DHCP Client重新登录网络:
当DHCP Client重新登录后,就不需要再发送DHCP discover发现信息了,而是直接发送包含前一次所分配的IP地址的DHCP request请求信息。当DHCP服务器收到这一信息后,它会尝试让DHCP客户机继续使用原来的IP地址,并回答一个DHCP ack确认信息。如果此IP地址已无法再分配给原来的DHCP客户机使用时(比如此IP地址已分配给其它DHCP客户机使用),则DHCP服务器给DHCP客户机回答一个DHCP nack否认信息。当原来的DHCP客户机收到此DHCP nack否认信息后,它就必须重新发送DHCP discover发现信息来请求新的IP地址。
5.DHCP Client更新租约:
DHCP获取到的IP地址都有一个租约,租约过期后,DHCP Server将回收该IP地址,所以如果DHCP Client如果想继续使用该IP地址,则必须更新租约。更新的方式就是,当前租约期限过了一半后,DHCP Client都会发送DHCP Renew报文来续约租期。
3.2 实战:使用DHCP为局域网中的机器分配IP地址
首先为了避免和当前网络环境中DHCP冲突,我们使用虚拟机自定义的网络模式:
使用VMnet2即可
3.2.1 安装DHCP
1.使用yum进行安装。
[root@xuegod63 ~]# yum -y install dhcp #使用yum安装DHCP。
2.配置文件位置:
主配置文件:
[root@xuegod63 ~]# vim /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
#
3.DHCP主程序包安装好后会自动生成主配置文件的范本文件。
将范本配置文件复制到/etc 目录下替换掉空白dhcpd.conf 主配置文件。
[root@xuegod63~]#cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example \
/etc/dhcp/dhcpd.conf
4.启动DHCP服务
[root@xuegod63~]# systemctl restart dhcpd
Job for dhcpd.service failed because the control process exited with error code. See "systemctl status dhcpd.service" and "journalctl -xe" for details.
5.此时启动会失败
原因:启动失败的原因是 dhcp服务器配置的IP地址和默认配置文件里定义的地址段不相同,在启动DHCP服务之前,需要给DHCPServer配置一个静态的IP地址。而且需要DHCP中定义分配的IP地址网段和当前静态IP地址网段相同。27行修改为自己的静态IP网段。
保证开机启动:
[root@xuegod63~]#systemctl enable dhcpd#配置的服务要保证开机启动。
DHCP配置文件参数说明
主配置文件介绍:
DHCP 范本配置文件内容包含了部分参数、声明以及选项的用法,其中注释部分可以放在任何位置,并以“#”号开头,当一行内容结束时,以“;”号结束,大括号所在行除外。
可以看出整个配置文件分成全局和局部两个部分。但是并不容易看出哪些属于参数,哪些属于声明和选项。
概念与协议:
作用域:可以分配IP的范围 subnet 。
地址池:可以分配给客户端的IP,range包括的IP。
保留地址:指定某个客户端使用一个特定IP,通过host配置的。
租约(时间):客户端可以使用这个IP地址的时间。
配置文件:/etc/dhcp/dhcpd.conf#部分配置解析。
先示范个简单的例子,然后逐个讲解各个参数,一般来说,配置文件分为两部分,一部分为全局配置,第二部分为子网配置,下面例子是简单的dhcpd配置文件:
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
#
option domain-name "test.com";
option domain-name-servers 192.168.1.1;
option default-lease-time 600;
subnet 192.168.1.0 netmask 255.255.255.0 {
option routers 192.168.1.1;
range 192.168.1.20 192.168.1.50;
# 下列host www设定一个固定的主机地址。
host www {
hardware ethernet 00:0C:29:37:5B:11;
fixed-address 192.168.1.35;
}
}
注释:
dhcpd.conf大致可以分为四个区域:
1)定义dhcpd自身的工作属性:
例: log-facilify #定义日志facilify
2)全局地址分配属性:以options开头。
例:option router 指定网关
3)子网配置:如果子网中没有定义分配给客户端的DNS,但全局中有定义,那么子网则继承全局的DNS,如果子网中定义有DNS,全局中也有定义DNS,那么则根据那地个作用范围小则最终生效。通常每个作用域(地址池)通过一个subnet(子网)定义。
例: subnet192.168.1.0netmask255.255.255.0{
range192.168.1.0netmask255.255.255.0#定义分配的地址(地址池)
option routesrouters rtr-239-0-1.example.org, rtr-239-0-2.example.org; #在子网定义中也可以使用option定义网关,但仅在子网中范围生效。
}
4)主机配置:
通常为某特定MAC地址固定的分配一个地址。
host fantasia{
hardware ethernet 08:00:07:26:c0:a5; #定义MAC地址。
fixed-addressfantasia.fugue.com; #定义固定ip地址。
}
5)文件详解:
option domain-name "example.org"; #搜索域。
option domain-name-serversns1.example.org, ns2.example.org; #全局默认DNS。
default-lease-time600; #默认最小租约期限(单位为秒)。
max-lease-time 7200; #最长租约期限(单位为秒)。
在DHCP引入了租约的概念,所以DHCP服务端在向各个客户端发送IP地址时会告知对方,分配的地址使用多长时间,或默认能使用多长时间,在分配的使用时间内,当达到百分之50时,客户端则自动向服务端发起续租请求(此时以单播方式进行通信)。
50%:DHCP REQUEST,当达到50%时,向服务端发起续租,只能在续租时刻起,续租过去的50%的两倍,如果此时续租失败,那么则到剩下的时间的50%再次发起续租请求(就是整体的时间75%)。
75%:DHCP REQUEST,当达到整体的时间75%时,再次发起续租请求,如果此时再次续租失败时,那么则到剩下的时间的50%再次发起续租请求(就是整体的时间87.5%)。
87.5%:DHCP REQUEST,当达到整体的时间87.5%时,再次发起续租请求,如果此时再次续租失败时,则会放弃续租此地址。
当会放弃续租上个使用的地址时,则再次发起 DHCP DISCOVER 广播,重新获取地址。
#ddns-update-style none; #动态dns。
log-facility local7; #日志地址,在/etc/rsyslog.conf日志服务配置文件中定义所有发往local7的日志定义存放到/var/log/boot.log文件中。
subnet 10.254.239.0netmask 255.255.255.224{ #定义分配的IP地址、掩码。
range 10.254.239.10 10.254.239.20; # 定义地址池,起始地址,结束地址,以空格分隔。
option routersrtr-239-0-1.example.org, rtr-239-0-2.example.org; #提供的网关
}
subnet 10.254.239.32 netmask 255.255.255.224 {
range dynamic-bootp 10.254.239.40 10.254.239.60; #定义向bootp提供服务,兼容协议。
option broadcast-address 10.254.239.31; #定义广播地址。
option routers rtr-239-32-1.example.org;
}
subnet 10.5.5.0 netmask 255.255.255.224 {
range 10.5.5.26 10.5.5.30;
option domain-name-servers ns1.internal.example.org; #定义DNS。
option domain-name "internal.example.org";
option routers 10.5.5.1; #定义默认网关。
option broadcast-address 10.5.5.31; #定义广播地址。
default-lease-time 600; #默认最小租约期限(单位为秒)。
max-lease-time 7200; #最长租约期限(单位为秒)。
}
host fantasia {
hardware ethernet 08:00:07:26:c0:a5; #定义对方的MAC地址。
fixed-address fantasia.fugue.com; #定义固定ip地址。
}
class "foo" {
match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
} #定义函数,用来定义特定系统分配特定的地址。
3.2.2 常见声明的使用
1.subnet 网络号 netmask 子网掩码 {......}
作用:定义作用域,指定子网。
如图 3-3所示:
图 3-3 定义作用域
注意:网络号必须与DHCP 服务器的网络号相同
2.range 起始IP 地址结束IP 地址
作用:指定动态IP 地址范围
注意:可以在subnet(子网)声明中指定多个range,但多个range 所定义IP 范围不能重复。
3.常用选项介绍
选项通常用来配置DHCP 客户端的可选参数,比如定义客户端的DNS 地址、默认网关等等。选项
内容都是以option 关键字开始。
3.2.3 实战-使用DHCP为局域网内主机分配IP地址
公司有60 台计算机,IP 地址段为192.168.1.1-192.168.1.254,子网掩码是255.255.255.0,网关为192.168.1.1,192.168.1.2-192.168.1.30 网段地址给服务器配置,客户端可以使用的地址段为192.168.1.100-200,其余剩下的IP 地址为保留地址。
实验环境:
不建议虚拟机使用桥接模式操作此实验,因为你的局域网中有可能就有DHCP服务器,因此很难让客户端是从虚拟机搭建的DHCP服务器获得IP地址。
另外,也可能造成公司局域网中其它机器因为获得了你DHCP服务器上的IP地址,而上不了网。
1.修改DCHP配置文件:
[root@xuegod63 ~]# vim /etc/dhcp/dhcpd.conf
#编辑DHCP配置文件,删除其他内容,只保留如下内容:
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
option domain-name-servers 192.168.1.1;
option domain-name "xuegod.cn";
option routers 192.168.1.1;
option broadcast-address 192.168.1.255;
default-lease-time 600;
max-lease-time 7200;
}
[root@xuegod63 ~]# systemctl start dhcpd #启动DCHP服务。
[root@xuegod63 ~]# ps aux|grep dhcp #查看DHCP进程。
dhcpd 4676 0.2 1.9 119060 19040 ? Ss 20:17 0:00 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid
[root@xuegod63 ~]# netstat -tlunp|grep dhcpd #查看DHCP端口是否监听。
udp 0 0 0.0.0.0:67 0.0.0.0:* 1971/dhcpd
udp 0 0 0.0.0.0:30086 0.0.0.0:* 1971/dhcpd
udp6 0 0 :::31454 :::* 1971/dhcpd
2.在xuegod64主机上获取IP地址。
[root@xuegod64 ~]# service network restart
#重启网络服务,由于网络配置是DHCP方式获取IP,所以直接重启网络服务即可,如果网卡配置为非DHCP方式,需要修改为DHCP方式获取IP地址。
[root@xuegod64 ~]# ifconfig ens38 #查看是否获取IP成功。
ens38: flags=4163
inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::ad06:ed0b:c309:5e35 prefixlen 64 scopeid 0x20
ether 00:0c:29:ba:dc:06 txqueuelen 1000 (Ethernet)
RX packets 105 bytes 33938 (33.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 376 bytes 65115 (63.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
(1)查看默认网关
[root@xuegod64 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 100 0 0 ens33
0.0.0.0192.168.1.1 0.0.0.0 UG 101 0 0 ens37
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 ens37
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
(2)查看DNS
[root@xuegod64 network-scripts]# cat /etc/resolv.conf
[root@xuegod64 ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search xuegod.cn cn
nameserver 192.168.1.1
(3)查看租约数据库文件
[root@xuegod63 ~]# cat /var/lib/dhcpd/dhcpd.leases
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-4.2.5
lease 192.168.1.100 {
starts 4 2018/10/11 13:18:01;
ends 4 2018/10/11 13:28:01;
cltt 4 2018/10/11 13:18:01;
binding state active;
next binding state free;
rewind binding state free;
hardware ethernet 00:0c:29:ba:dc:06;
client-hostname "xuegod64";
}
3.3 使用DHCP为服务器分配固定IP地址
IP 地址绑定
在DHCP中的IP地址绑定,用于给客户端分配固定IP地址,比如:服务器需要使用固定IP地址时,就可以使用IP地址绑定,通过MAC地址与IP地址的对应关系为指定的物理地址计算机分配固定IP地址,在整个配置过程需要用到 host 声明和hardware、fixed-address 参数。
1.host 主机名 {......}
作用:用于定义保留地址。
2.hardware 类型硬件地址
作用:定义网络接口类型和硬件地址。常用类型为以太网(ethernet),地址为MAC 地址。
3.fixed-address IP 地址
作用:定义DHCP客户端指定的IP地址。
编辑DHCP配置文件
[root@xuegod63 ~]# vim /etc/dhcp/dhcpd.conf #找到对应的子网范围,修改成以下内容。
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
option domain-name-servers 192.168.1.1;
option domain-name "internal.example.org";
option routers 192.168.1.1;
option broadcast-address 192.168.1.255;
default-lease-time 600;
max-lease-time 7200;
host xuegod64 {#此段内容,要写在subnet字段中,和subnet配合使用。
hardware ethernet 00:0C:29:12:ec:1e;#指定xuegod64主机的MAC地址。
fixed-address 192.168.1.251;#指定为xuegod64主机分配的地址。
}
}
2.重启DHCP服务
[root@xuegod63 ~]# systemctl restart dhcpd
3.重启xuegod64主机网络服务,使其重新发起获取地址请求。
[root@xuegod64 ~]# service network restart
Restarting network (via systemctl): [ 确定 ]
[root@xuegod64 ~]# ifconfig ens38 #查看是否获取地址成功。
ens38: flags=4163
inet 192.168.1.251 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::ad06:ed0b:c309:5e35 prefixlen 64 scopeid 0x20
ether 00:0c:29:ba:dc:06 txqueuelen 1000 (Ethernet)
RX packets 155 bytes 46664 (45.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 433 bytes 74958 (73.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
注意:
在生产环境中使用DHCP服务,往往需要结合实际是网络环境来搭建,在大多数的企业当中都是采用路由器的DHCP服务来提供IP地址。
3.4 ntpdate加计划任务同步服务器时间
ntpdate 同步时间用法
不同机器之间的时间同步,为了避免主机时间因为长期运作下所导致的时间偏差,进行时间同步(synchronize)的工作是非常必要的。Linux系统下,一般使用ntp服务器来同步不同机器的时间。一台机器,可以同时是ntp服务器和ntp客户机。在网络中,推荐使用像DNS服务器一样分层的时间服务器来同步时间。
同步时间,可以使用ntpdate命令,也可以使用ntpd服务进行时间同步。
[root@xuegod63 ~]# yum install ntpdate –y #安装ntpdate工具。
使用ntpdate比较简单。格式如下:
命令使用格式:ntpdate [-nv] [NTP IP/hostname]
[root@xuegod63 ~]# ntpdate 192.168.1.63 #使用IP方式进行时间同步,前提是所指定的IP主机的需要提供网络时间服务。
[root@xuegod63 ~]# ntpdate ntp1.aliyun.com #使用主机名称进行时间同步,此例以ntp1.aliyun.com网络时间服务为例。
但这样的同步,只是强制性的将系统时间设置为ntp服务器时间,一般配合cron命令,来进行定期同步设置。比如,在crontab中添加:
[root@xuegod63 ~]# crontab -e #添加计划任务,并定义在每天的12点整同步时间,ntp服务器为192.168.1.1。
0 12 * * * /usr/sbin/ntpdate 192.168.1.1
扩展知识:
让NTP服务同步硬件时间
提及一点,ntp服务,默认只会同步系统时间。如果想要让ntp同时同步硬件时间,可以设置/etc/sysconfig/ntpdate 文件。
在/etc/sysconfig/ntpdate 文件中,把SYNC_HWCLOCK=no 改成SYNC_HWCLOCK=yes则可以使硬件时间与系统时间一起同步。
Linux系统时间和BIOS时间是不是一定一样的
查看硬件BIOS时间:
hwclock -r :读出BIOS的时间(查看硬件时间)。
hwclock -w :将当前系统时间写入BIOS中。
例:
[root@xuegod63 ~]# date -s "2018-3-6 21:13" #设置系统时间为2018-3-6 21:13。
Fri Mar 6 21:13:00 CST 2018
[root@xuegod63 ~]# hwclock -r #查看硬件时间为2018 08:17:56。
Fri 06 Mar 2018 08:17:56 PM CST -0.720333 seconds
[root@xuegod63 ~]# date #查看系统时间为21:13:05
Fri Mar 6 21:13:05 CST 2018
[root@xuegod63 ~]# hwclock -w #将系统时间同步到硬件时间。
[root@xuegod63 ~]# hwclock -r #查看硬件时间为09:13:20,硬件时间和系统同步了。
Fri 06 Mar 2018 09:13:20 PM CST -0.095199 seconds
更多学习资料请移步至公众号【学神来啦】