DHCP服务以及NTP服务讲解
1、DHCP服务简介
dhcp:英文->dynamic host configuration protocol–>动态主机配置协议
功能:是一个局域网的网络协议,使用UDP协议工作
用途:
- 给内部网络或网络服务供应商自动分配IP地址,主机名,DNS服务器,域名
- 配合其它服务,实现集成化管理功能。如:无人执守安装服务器
DHCP服务是典型的C/S模式,它能够自动分配IP,也方便管理
DHCP不会同时租借相同的IP给两台主机
DHCP管理员也可以约束特定的计算机使用特定的IP地址
客户机在不同子网之间移动是不需要重新设置IP地址,每次都可以自动获取ip地址
DHCP也会有缺点:
- 当网络上存在多服务器时,一个DHCP服务器不能查出已被其它服务器租出去的IP地址;
- DHCP服务器不能跨路由器与客户机通信,除非路由器允许BOOTP协议转发。
DHCP的端口
- 67端口–>用于bootps
- 68端口–>用于bootpc
#Linux系统中是存在一个文件可以查看服务的端口
[root@Node4 ~]# cat /etc/services |grep dhcp
bootpc 68/tcp dhcpc # BOOTP client
bootpc 68/udp dhcpc
dhcpv6-client 546/tcp
dhcpv6-client 546/udp
dhcpv6-server 547/tcp
dhcpv6-server 547/udp
dhcp-failover 647/tcp # DHCP Failover
dhcp-failover 647/udp # DHCP Failover
dhcp-failover2 847/tcp # dhcp-failover 2
dhcp-failover2 847/udp # dhcp-failover 2
qip-qdhcp 2490/tcp # qip_qdhcp
qip-qdhcp 2490/udp # qip_qdhcp
DHCP协议由 bootp协议发展而来
- 是BOOTP的增强版本,
- bootp协议:引导程序协议(BOOTP)。它可以让无盘工作站从一个中心服务器上获得IP地址,为局域网中的无盘工作站分配动态IP地址,并不需要每个用户去设置静态IP地址。
- bootps代表服务端端口,
- bootpc代表客户端端口
BOOTP有一个缺点:在设定前须事先获得客户端的硬件地址,而且,MCA地址与IP的对应是静态的。换而言之,BOOTP非常缺乏“动态性 ”,若在有限的IP资源环境中,BOOTP的一对一对应会造成非常可观的浪费。
DHCP可以说是BOOTP的增强版本,它分为两个部分:一个是服务器端,而另一个是客户端。所有的IP网络设定数据都由DHCP服务器集中管理,并负责处理客户端的DHCP要求;而客户端则会使用从服务器分配下来的IP环境数据。比较BOOTP, DHCP透过“租约”的概念,有效且动态的分配客户端的TCP/IP设定,而且,作为兼容考虑,DHCP也完全照顾了BOOTP Client的需求。
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 服务器响应客户端的请求,客户端会随机使用169.254.0.0/16 网段中的一个IP 地址配置本机地址。
169.254.0.0/16是windows的自动专有IP寻址范围,也就是在无法通过DHCP获取IP地址时,由系统自动分配的IP地址段。
早先的Linux上并不会产生这条路由,现在有这条路由大概是为了和windows兼容。
#Linux中查看路由条目的命令
[root@Node4 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.75.2 0.0.0.0 UG 100 0 0 ens32
192.168.75.0 0.0.0.0 255.255.255.0 U 100 0 0 ens32
第二个阶段:DHCP Server提供阶段
DHCP Server响应DHCP Discovery所发的DHCP Offer阶段,即DHCP服务器提供IP地址的阶段。在网络中接收到DHCPdiscover发现信息的DHCP服务器都会做出响应,它从尚未出租的IP地址中挑选一个分配给DHCP客户机,向DHCP客户机发送一个包含出租的IP地址和其他设置的DHCPoffer提供信息;
第三个阶段:DHCP Client 确认阶段
即DHCP客户机选择某台DHCP服务器提供的IP地址的阶段。如果有多台DHCP服务器向DHCP客户机发来的DHCPoffer提供信息,则DHCP客户机只接受第一个收到的DHCPoffer提供信息,然后它就以广播方式回答一个DHCPrequest请求信息,该信息中包含向它所选定的DHCP服务器请求IP地址的内容。之所以要以广播方式回答,是为了通知所有的DHCP服务器,他将选择某台DHCP服务器所提供的IP地址
第四个阶段:DHCP Server确认阶段
即DHCP服务器确认所提供的IP地址的阶段。当DHCP服务器收到DHCP客户机回答的DHCPrequest请求信息之后,它便向DHCP客户机发送一个包含它所提供的IP地址和其他设置的DHCPack确认信息,告诉DHCP客户机可以使用它所提供的IP地址。然后DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除DHCP客户机选中的服务器外,其他的DHCP服务器都将收回曾提供的IP地址
最后一个阶段: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地址。
额外的一个阶段:DHCP Client更新租约
DHCP获取到的IP地址都有一个租约,租约过期后,DHCP Server将回收该IP地址,所以如果DHCP Client如果想继续使用该IP地址,则必须更新租约。更新的方式就是,当当前租约期限过了一半后,DHCP Client都会发送DHCP Renew报文来续约租期。
2、DHCP服务的安装与配置文件
安装:
DHCP很简单,yum安装即可
#安装
[root@Node4 ~]# yum -y install dhcp
#包含的软件包有
[root@Node4 ~]# rpm -qa dhcp*
dhcp-libs-4.2.5-83.el7.centos.1.x86_64 #dhcp服务需要的库文件包
dhcp-common-4.2.5-83.el7.centos.1.x86_64 #dhcp客户端和服务器端需要的包
dhcp-4.2.5-83.el7.centos.1.x86_64 #dhcp服务包
配置文件以及参数讲解
#查找配置文件
[root@Node4 ~]# rpm -qc dhcp
/etc/dhcp/dhcpd.conf #这个文件就是主配置文件
/etc/dhcp/dhcpd6.conf
/etc/openldap/schema/dhcp.schema
/etc/sysconfig/dhcpd
/var/lib/dhcpd/dhcpd.leases
/var/lib/dhcpd/dhcpd6.leases
#打开查看一下dhcp的配置文件
[root@Node4 ~]# vim /etc/dhcp/dhcpd.conf
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example #这个就是模板文件
# see dhcpd.conf(5) man page
#把模板文件复制到主配置文件中-->再进行编辑
[root@Node4 ~]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
cp:是否覆盖"/etc/dhcp/dhcpd.conf"? y
#在了解dhcpd的配置文件的时候,不能启动,因为很多参数都是不对等的,因此无法启动起来
#在启动dhcp服务之前,需要给到dhcp-server配置一个静态的ip地址,以免冲突;
dhcpd主配置文件的参数讲解
- 通常都是以#号作为注释;
- 一定要用到;(分号结束)–>注意中英文的输入法介绍
作用域:可以分配的ip范围
地址池:可以分配给到客户端的ip,range包括的ip
保留地址:指定给指定的用户使用特定的ip,通过host配置产生
租约(时间):允许这个ip给到客户的使用时间
同时:dhcpd服务的配置文件分为全局配置,和局部配置
[root@Node4 ~]# vim /etc/dhcp/dhcpd.conf
option domain-name "example.org"; #这个是为客户端指定的所欲的域
option domain-name-servers ns1.example.org, ns2.example.org; #指定给到客户的dns服务器地址
default-lease-time 600; #默认的最少租约时间,以秒为单位;
max-lease-time 7200; #最长的租约时间,以秒为单位;
#这里需要注意,50%的时间过去了,会发起续约申请;如果87.5%到了,再尝试续约,不行就再找别dhcp-server
#DHCP工作站除了在开机的时候发出 DHCPrequest 请求之外,在租约期限一半的时候也会发出 DHCPrequest ,如果此时得不到 DHCP服务器的确认的话,工作站还可以继续使用该IP;当租约期过了87.5%时,如果客户机仍然无法与当初的DHCP服务器联系上,它将与其它 DHCP服务器通信。如果网络上再没有任何DHCP协议服务器在运行时,该客户机必须停止使用该IP地址,并从发送一个Dhcpdiscover数据包开 始,再一次重复整个过程。要是您想退租,可以随时送出 DHCPRELEASE 命令解约,就算您的租约在前一秒钟才获得的。
log-facility local7; #定义的日志类型
subnet 10.152.187.0 netmask 255.255.255.0 { #声明一般用来指定的ip作用域,定义为客户端分配的ip地址池等等
}
#subnet+网段+netmask+子网掩码+{}
例子来说明选项作用
subnet 10.5.5.0 netmask 255.255.255.224 { #这里指定的是10.5.5.0网段
range 10.5.5.26 10.5.5.30; #治理指定了动态ip地址的范围
option domain-name-servers ns1.internal.example.org; #dns服务器的地址
option domain-name "internal.example.org"; #dns服务器名字
option routers 10.5.5.1; #分配给到客户的网关
option broadcast-address 10.5.5.31; #这里是广播地址
default-lease-time 600; #默认至少的租约时间
max-lease-time 7200; #最大的租约时间
}
#如果dhcp给到ip客户端,他必然有个文件用来记录数据库
租约数据库文件用于保存一系列的租约声明,其中包含客户端的主机名、MAC 地址、分配到的IP地址,以及IP地址的有效期等相关信息。这个数据库文件是可编辑的ASCII 格式文本文件。每当发生租约变化的时候,都会在文件结尾添加新的租约记录。
DHCP 刚安装好后租约数据库文件dhcpd.leases 是个空文件/var/lib/dhcpd/dhcpd.leases
当DHCP 服务正常运行后就可以使用cat 命令查看租约数据库文件内容了
3、DHCP服务案例讲解
实验之前做好预先的配置–>
dhcp-server使用第二块网卡来进行实验
虚拟机–>添加一张网卡
然后配置–>网卡ip
#查看一下配置的网卡名
[root@Node4 network-scripts]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:59:c5:51 brd ff:ff:ff:ff:ff:ff
inet 192.168.75.134/24 brd 192.168.75.255 scope global noprefixroute ens32
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe59:c551/64 scope link
valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:59:c5:5b brd ff:ff:ff:ff:ff:ff
inet6 fe80::f1a1:e9f6:eab5:7284/64 scope link noprefixroute
valid_lft forever preferred_lft forever
#配置它的ens34的网卡
[root@Node4 network-scripts]# cp ifcfg-ens32 ifcfg-ens34
[root@Node4 network-scripts]# vim ifcfg-ens34
TYPE="Ethernet"
BOOTPROTO="static"
NAME="ens34" #注意这个网卡名要改
DEVICE="ens34"
ONBOOT="yes"
IPADDR="192.168.10.10" #配置ip-->最好是静态的
PREFIX="24"
#重启服务
[root@Node4 network-scripts]# ifup ens34
实验1:给到客户端分配ip
#让客户端可以自动获取192.168.10.0网段的ip
#服务器配置-->如下
[root@dhcp-server ~]# vim /etc/dhcp/dhcpd.conf
subnet 192.168.10.0 netmask 255.255.255.0{
range 192.168.10.11 192.168.10.20;
option domain-name-servers 192.168.10.10;
option domain-name "liangjiawei.com";
option routers 192.168.10.2;
option broadcast-address 192.168.10.255;
default-lease-time 600;
max-lease-time 7200;
}
#启动dhcpd服务
[root@dhcp-server ~]# systemctl start dhcpd
#查看一下进程
[root@dhcp-server ~]# systemctl start dhcpd
[root@dhcp-server ~]# ps -ef |grep dhcpd
dhcpd 9138 1 0 22:20 ? 00:00:00 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid
root 9141 9068 0 22:21 pts/1 00:00:00 grep --color=auto dhcpd
#然后去到客户端-->配置网卡ip类型为dhcp即可
[root@Node5 network-scripts]# vim ifcfg-ens34
TYPE="Ethernet"
BOOTPROTO="dhcp"
NAME="ens34"
DEVICE="ens34"
ONBOOT="yes"
#然后重启验证即可
[root@Node5 ~]# systemctl restart network
#到这里实验成功
[root@Node5 ~]# systemctl restart network
[root@Node5 ~]# ifconfig ens34
ens34: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.11 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 fe80::20c:29ff:fed6:87f2 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:d6:87:f2 txqueuelen 1000 (Ethernet)
RX packets 11 bytes 1792 (1.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 26 bytes 3118 (3.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
#这里查看一下网关
[root@Node5 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.75.2 0.0.0.0 UG 100 0 0 ens32
0.0.0.0 192.168.10.2 0.0.0.0 UG 101 0 0 ens34
192.168.10.0 0.0.0.0 255.255.255.0 U 101 0 0 ens34
192.168.75.0 0.0.0.0 255.255.255.0 U 100 0 0 ens32
#然后在查看一下dns
[root@Node5 ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search liangjiawei.com
nameserver 114.114.114.114
nameserver 192.168.10.10
#在查看一下租约数据库文件内容--->这里就要回到server端查看
[root@dhcp-server ~]# 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
server-duid "\000\001\000\001)\270\321D\000\014)Y\305[";
lease 192.168.10.11 {
starts 1 2022/03/07 14:22:25;
ends 1 2022/03/07 14:32:25;
cltt 1 2022/03/07 14:22:25;
binding state active;
next binding state free;
rewind binding state free;
hardware ethernet 00:0c:29:d6:87:f2;
client-hostname "Node5";
}
lease 192.168.10.11 {
starts 1 2022/03/07 14:24:07;
ends 1 2022/03/07 14:34:07;
cltt 1 2022/03/07 14:24:07;
binding state active;
next binding state free;
rewind binding state free;
hardware ethernet 00:0c:29:d6:87:f2;
client-hostname "Node5";
}
案例2:给到客户端指定的ip地址
这里需要ip地址绑定,就需要用到MAC地址,而在dhcp配置文件中就需要用到host和hardware来声明
(1)host 主机名 {…}
作用:用于定义保留地址
(2)hardware 类型硬件地址
作用:定义网络接口类型和硬件地址。常用类型为以太网(ethernet),地址为MAC 地址。
(3)fixed-address IP 地址
作用:定义DHCP 客户端指定的IP 地址。
#服务器端修改配置文件
[root@dhcp-server ~]# vim /etc/dhcp/dhcpd.conf
subnet 192.168.10.0 netmask 255.255.255.0{
range 192.168.10.11 192.168.10.20;
option domain-name-servers 192.168.10.10;
option domain-name "liangjiawei.com";
option routers 192.168.10.2;
option broadcast-address 192.168.10.255;
default-lease-time 600;
max-lease-time 7200;
host liangjiawei { #这里一定要写在subnet中;
hardware ethernet 00:0c:29:d6:87:f2; #这里需要找到客户机的mac地址
fixed-address 192.168.10.15; #指定给到的ip是15
}
}
#然后重启dhcp服务
[root@dhcp-server ~]# systemctl restart dhcpd
#去到客户端-->然后重启一下网卡-->再查看一下ip就能够查看实验是否成功
[root@Node5 ~]# ifdown ens34
成功断开设备 'ens34'。
[root@Node5 ~]# ifup ens34
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/7)
[root@Node5 ~]# ifconfig ens34
ens34: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.15 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 fe80::20c:29ff:fed6:87f2 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:d6:87:f2 txqueuelen 1000 (Ethernet)
RX packets 19 bytes 3865 (3.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 40 bytes 5534 (5.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
最后总结:生产环境中多数使用路由器的方式来提供DHCP服务
4、NTP服务讲解
这个服务比较简单;但是在很多中场景下是非常的实用;
为了避免主机时间因为长期运作下所导致的时间偏差,进行时间同步(synchronize)的工作是非常必要的。Linux系统下,一般使用ntp服务器来同步不同机器的时间。一台机器,可以同时是ntp服务器和ntp客户机。在网络中,推荐使用像DNS服务器一样分层的时间服务器来同步时间。
同步时间,可以使用ntpdate命令,也可以使用ntpd服务。
安装NTP服务
[root@Node5 ~]# yum -y install ntpdate
#直接一条命令搞掂
#时间同步一下ntp1.aliyun.com
#修改一下自己的时间-->为了实验更加明显
[root@Node5 ~]# date -s "2022-01-01"
2022年 01月 01日 星期六 00:00:00 CST
[root@Node5 ~]# date
2022年 01月 01日 星期六 00:00:02 CST
#同步开始
[root@Node5 ~]# ntpdate ntp1.aliyun.com
7 Mar 23:51:38 ntpdate[9596]: step time server 120.25.115.20 offset 85768.509252 sec
[root@Node5 ~]# date
2022年 03月 07日 星期一 23:51:45 CST
通常ntp服务会结合cron计划任务使用
[root@Node5 ~]# crontab -e
0 12 * * * /usr/sbin/ntpdate ntp1.aliyun.com
#指定每天的12点整同步一次时间,同步的时间服务器是ntp1.aliyun.com
关于一些ntpdate服务的简介
使用ntpd服务,要好于ntpdate加cron的组合。因为ntpdate同步时间,会造成时间的跳跃,对一些依赖时间的程序和服务会造成影响。比如sleep,timer等。而且,ntpd服务可以在修正时间的同时,修正cpu tick。理想的做法为:在开机的时候,使用ntpdate强制同步时间,在其他时候使用ntpd服务来同步时间。
要注意的是,ntpd 有一个自我保护设置: 如果本机与上源时间相差太大, ntpd 不运行. 所以新设置的时间服务器一定要先 ntpdate 从上源取得时间初值, 然后启动 ntpd服务。ntpd服务 运行后, 先是每64秒与上源服务器同步一次, 根据每次同步时测得的误差值经复杂计算逐步调整自己的时间, 随着误差减小, 逐步增加同步的间隔. 每次跳动, 都会重复这个调整的过程.
需要提及一点,ntp服务,默认只会同步系统时间。如果想要让ntp同时同步硬件时间,可以设置/etc/sysconfig/ntpdate 文件。
在/etc/sysconfig/ntpdate 文件中,把SYNC_HWCLOCK=no 改成SYNC_HWCLOCK=yes
就可以让硬件时间与系统时间一起同步。
同步硬件时间和系统时间
[root@Node5 ~]# hwclock -r #读出bios的时间
2022年03月07日 星期一 23时58分05秒 -0.084242 秒
#把系统时间写入bios的时间
[root@Node5 ~]# hwclock -w