DHCP服务以及NTP服务讲解

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liang_GaRy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值