Linux云计算架构-搭建DHCP服务器及使用NTP网络时间同步

Linux云计算架构-搭建DHCP服务器

1. DHCP服务器工作原理

1.1 DHCP服务器概念

DHCP(Dynamic Host Configuration Protocol),即动态主机配置协议。是一个局域网的网络协议,使用UDP协议工作。

DHCP是C/S模式,DHCP服务端和客户端需要保持通信,DHCP基于UDP协议,双方都有可能主动向对方发起通信,故需要监听服务器和客户端的端口。

DHCP的组成:
①DHCP服务器,运行dhcp服务,基于UDP协议,监听端口67【集中管理所有的IP地址】
②DHCP客户端,运行dhcp程序,基于UDP协议,监听端口68【使用IP地址的主机】

DHCP服务的作用:
①自动分配IP地址,方便管理。
②同一时刻,一个IP地址只租借给一台主机。
③DHCP管理员可以限制指定计算机使用特定的IP地址。
④客户机在不同子网之间切换不需要重新设置IP地址,自动获取即可获取原分配的IP地址。

DHCP服务的缺点:
①当网络中存在多个DHCP服务器,不能互相查出被其他服务器租出去的IP地址。
②DHCP服务器不能跨路由器与客户机通信,除非路由器允许bootp协议转发。【DHCP服务器的IP地址一般也是子网内的某一个IP地址】

1.2 DHCP工作原理拓扑图

在这里插入图片描述

DHCP工作原理解析:
①客户端以广播的方式向网络中所有的主机发送DHCP discovery,源地址为0.0.0.0,目标地址为255.255.255.255。当DHCP服务器接收到这个数据包,发现目标地址是255.255.255.255,DHCP服务端就会知道这个数据包是发给自己的,就会向客户端发送一个响应offer。【DHCP客户端发现阶段】
②每个DHCP服务端都会发送一个offer给DHCP客户端,这个offer包含一个在DHCP服务器中未出租的IP地址以及其他设置信息。【DHCP服务端提供阶段】
③ DHCP客户端选择第一个offer,拒绝其他offer,以广播的方式发送向DHCP request,通知所有的DHCP服务器,客户端选择了哪个DHCP服务端。【DHCP客户端确认阶段】
④当DHCP服务端收到客户端发来的request,DHCP服务端会给DHCP客户端发送DHCP ack确认信息,其中包含提供的IP地址和其他设置信息,这时DHCP客户端会将TCP/IP协议和网卡绑定。而被拒绝的offer,会被其他的DHCP服务器回收。 【DHCP服务端确认】
⑤当DHCP客户端从其他网络切换回来局域网时,不需要再发送DHCP discovery给服务端,而是发送一个包含上一次分配的IP地址的request给DHCP服务器。如果原来的IP地址可以继续用,DHCP服务端会发送给客户端一个ack确认信息。如果不可以继续用,DHCP服务器会发送给客户端一个nack否认信息,这时DHCP客户端必须发送给DHCP服务端一个DHCP discovery。【DHCP客户端IP再使用】
⑥DHCP客户端获取到的IP地址都有一个租约,租约过期后,DHCP服务端会回收这个IP地址。如果DHCP客户端想继续使用这个IP地址,就必须在租约未过期时更新租约。一般在租约过半时,DHCP客户端会发送一个DHCP renew更新报文来续约租期。 【DHCP客户端提前续租】
⑦续租有三次机会,DHCP客户端使用50%可以发起续租一次,若续租不成功,在75%的时候又可以发起一次,仍然续租不成功,在87.5%的时候可以续租最后一次,如果客户端还是续租不成功,等到期后,服务端会将该IP地址回收。这时DHCP客户端必须发送给DHCP服务端一个DHCP discovery。【DHCP客户端3次续租不成功】

2. 部署DHCP服务器

2.1 安装dhcp服务

# rpm包安装
[root@server ~]# ll /media/cdrom/Packages/dhc*
-rw-rw-r--. 1 root root 290904 5月  16 2018 /media/cdrom/Packages/dhclient-4.2.5-68.el7.centos.1.x86_64.rpm   # dhcp客户端
-rw-rw-r--. 1 root root 525688 5月  16 2018 /media/cdrom/Packages/dhcp-4.2.5-68.el7.centos.1.x86_64.rpm   # dhcp服务端
-rw-rw-r--. 1 root root 179036 5月  16 2018 /media/cdrom/Packages/dhcp-common-4.2.5-68.el7.centos.1.x86_64.rpm   # dhcp服务端和dhcp客户端所需的一些文件
-rw-rw-r--. 1 root root 134604 5月  16 2018 /media/cdrom/Packages/dhcp-libs-4.2.5-68.el7.centos.1.x86_64.rpm   #dhcp库文件

# yum安装dhcp
[root@server ~]# yum install dhcp -y
# 查看dhcp服务的配置文件
[root@server ~]# ll /etc/dhcp/dhcpd.conf
-rw-r--r--. 1 root root 117 5月  15 2018 /etc/dhcp/dhcpd.conf
[root@server ~]# cat /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#   see dhcpd.conf(5) man page

# 提示dhcp配置文件有模板文件,复制一份替换掉原来的配置文件
[root@server ~]# ll /usr/share/doc/dhcp*/dhcpd.conf.example
-rw-r--r--. 1 root root 3262 11月 20 2012 /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example
[root@server ~]# cp /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
cp:是否覆盖"/etc/dhcp/dhcpd.conf"? y

# 此时开启dhcpd服务,会报错,原因是没有配置一个静态的IP地址。
# 在后面实战环节会讲解。
[root@server ~]# systemctl start dhcpd
Job for dhcpd.service failed because the control process exited with error code. See "systemctl status dhcpd.service" and "journalctl -xe" for details.

2.2 dhcp配置文件详解

每一项以分号;结束

# 区域1:dhcp的工作属性
# 全局配置参数
default-lease-time 600;   # 默认超时时间,单位秒
max-lease-time 7200;      # 最大超时时间,单位秒
ddns-update-style none;   # 配置DHCP-DNS动态更新模式。none(不支持动态更新)、interim (互动更新模式)、ad-hoc(特殊更新模式)
ignore client-updates;    # 忽略客户端,仅服务端使用DHCP-DNS互动更新模式
authoritative;            # 当获取一个不是DHCP分配的IP地址时,服务器会直接拒绝,客户端会重新发送IP请求获得新的IP地址。
log-facility local7;      # 日志级别,定义情况可查看syslog.conf


# 区域2:全局地址分配属性,可在子网中使用。
option domain-name "example.org";  # 定义全局DNS服务器域名
option domain-name-servers ns1.example.org, ns2.example.org;  # 定义全局DNS服务器地址
option routers 网关地址;             # 定义全局网关地址

# 区域3:子网设置
# 子网设置的优先级高于全局设置
# 网络号192.168.10.0
# 网络号的最后一位是0
subnet 网络号 netmask 子网掩码 {
    
    
	range 开始IP地址 结束IP地址;                    #指定动态IP地址池
	option domain-name-servers DNS服务器IP地址;    # DNS服务器地址
	option domain-name "DNS域名";                 # DNS域名
	option routers 网关地址;                      # 定义子网内的网关地址
	option broadcast-address 广播地址;            # 定义子网内的广播地址
	default-lease-time 600;                      # IP租期,单位秒
	max-lease-time 7200;                         # 最长IP租期,单位秒
}

# 区域4:为特定的主机绑定IP地址
host specify_host {
    
           
	hardware ethernet 0:0:c0:5d:bd:95;    # 网卡类型及MAC地址
	fixed-address 192.168.10.10           # 固定IP地址
	filename "vmunix.passacaglia";        # 启动文件的名称
	server-name "toccata.fugue.com";      # DHCP服务器主机名
}

租约数据库文件/var/lib/dhcpd/dhcpd.leases
存放所有租约内容的文件,包括客户端的主机名、MAC地址、分配的IP地址、IP地址有效期等信息。

# 刚装完dhcp,这是一个空文件。
[root@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

3. DHCP服务器实战

3.1 客户端获取动态IP地址

环境准备:
①dhcp服务器静态IP地址:192.168.10.10
②dhcp客户端静态IP未指定
③客户端可分配地址池:192.168.10.100-192.168.10.200
④网络号:192.168.10.0 子网掩码:255.255.255.0 网关地址:192.168.10.1
⑤DNS地址:192.168.10.1 DNS域名:abong.com

一个C类子网的IP地址范围为192.168.10.0-192.168.10.255,0为网络号,1为网关地址,255为广播地址,故仅剩下253个可分配地址。

# ifconfig查看网卡信息
# 外网动态IP地址:192.168.8.168
# 内网静态IP地址:192.168.10.10
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.8.168  netmask 255.255.255.0  broadcast 192.168.8.255
        inet6 fe80::a0e4:d97e:42bb:abc  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:eb:d7:24  txqueuelen 1000  (Ethernet)
        RX packets 147  bytes 12296 (12.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 240  bytes 26631 (26.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens34: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.10  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::7e7a:d044:3b13:af7a  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:eb:d7:2e  txqueuelen 1000  (Ethernet)
        RX packets 267  bytes 42862 (41.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 195  bytes 20069 (19.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
# 修改dhcp配置文件
# 这里默认按照上述方法安装了dhcp服务
# 每一项以分号;结束
[root@server ~]# echo "" > /etc/dhcp/dhcpd.conf
[root@server ~]# vim /etc/dhcp/dhcpd.conf
subnet 192.168.10.0 netmask 255.255.255.0 {
    
    
	range 192.168.10.100 192.168.10.200;
	option domain-name-servers 192.168.10.1;
	option domain-name "abong.cn";
	option routers 192.168.10.1;
	option broadcast-address 192.168.10.255;
	default-lease-time 600;
	max-lease-time 7200;
}
# 这时可以看到已经可以启动了。不会报错。
[root@server ~]# systemctl start dhcpd
# 设置开机自启
[root@server ~]# systemctl enable dhcpd
Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service.

# 通过查看DHCP服务器日志,可以看到192.168.10.100已经被分配了。
# 经排查,原来是在启动DHCP服务器时,本地主机就已经自动获取了这个IP地址了。
# 即IP地址的分配也是从100开始的,按顺序分配。
[root@server ~]# cat /var/log/messages
Aug 10 21:33:51 server dhcpd: DHCPDISCOVER from 00:50:56:c0:00:01 via ens34
Aug 10 21:33:52 server dhcpd: DHCPOFFER on 192.168.10.100 to 00:50:56:c0:00:01 (PC-20190412YQOZ) via ens34
Aug 10 21:33:52 server dhcpd: DHCPREQUEST for 192.168.10.100 (192.168.10.10) from 00:50:56:c0:00:01 (PC-20190412YQOZ) via ens34
Aug 10 21:33:52 server dhcpd: DHCPACK on 192.168.10.100 to 00:50:56:c0:00:01 (PC-20190412YQOZ) via ens34

在这里插入图片描述

# 客户端设置dhcp方式获取IP地址
# 重启网络服务,可以看到客户端已经获取到了一个IP地址:192.168.10.101
# 192.168.10.100已经被本地主机获取了。
[root@client ~]# systemctl restart network
[root@client ~]# ifconfig ens32
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.101  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::6d23:d37e:e25f:78a5  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:c4:74:30  txqueuelen 1000  (Ethernet)
        RX packets 677  bytes 50809 (49.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 311  bytes 26087 (25.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
# 查看日志也是分配的192.168.10.101
[root@server ~]# cat /var/log/messages
Aug 10 21:37:43 server dhcpd: DHCPDISCOVER from 00:0c:29:c4:74:30 via ens34
Aug 10 21:37:44 server dhcpd: DHCPOFFER on 192.168.10.101 to 00:0c:29:c4:74:30 (rs_server1) via ens34
Aug 10 21:37:44 server dhcpd: DHCPREQUEST for 192.168.10.101 (192.168.10.10) from 00:0c:29:c4:74:30 (rs_server1) via ens34
Aug 10 21:37:44 server dhcpd: DHCPACK on 192.168.10.101 to 00:0c:29:c4:74:30 (rs_server1) via ens34
# 查看下客户端的路由
[root@client ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.10.1    0.0.0.0         UG    100    0        0 ens32
192.168.10.0    0.0.0.0         255.255.255.0   U     100    0        0 ens32
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
# 查看下客户端的DNS
[root@client ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search abong.cn
nameserver 192.168.10.1
# 客户端再次重启网络服务,由于是动态获取IP地址的,IP地址会改变。

3.2 客户端指定静态IP地址

# 修改dhcp服务器配置文件
# 指定静态IP地址为192.168.10.240
# 每一项以分号;结束
[root@server ~]# vim /etc/dhcp/dhcpd.conf
subnet 192.168.10.0 netmask 255.255.255.0 {
    
    
	range 192.168.10.100 192.168.10.200;
	option domain-name-servers 192.168.10.1;
	option domain-name "abong.cn";
	option routers 192.168.10.1;
	option broadcast-address 192.168.10.255;
	default-lease-time 600;
	max-lease-time 7200;
	host client {
    
    
		hardware ethernet 00:0c:29:c4:74:30;
        fixed-address 192.168.10.240;
	}
}
[root@server ~]# systemctl restart dhcpd
# 重启客户端网络服务
# 可以看到客户端获取的IP地址为192.168.10.240
[root@client ~]# systemctl restart network
[root@client ~]# ifconfig ens32
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.240  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::6d23:d37e:e25f:78a5  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:c4:74:30  txqueuelen 1000  (Ethernet)
        RX packets 1695  bytes 118401 (115.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 656  bytes 56307 (54.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

4. 使用网络时间服务NTP同步服务器时间

不同服务器直接可能会存在时间偏差,这在生产环境中影响还是很大的。

# 设置系统时间
root@server ~]# date -s '20200811 17:12:00'
2020年 08月 11日 星期二 17:12:00 CST
# 查看系统时间
[root@server ~]# date
2020年 08月 11日 星期二 17:12:27 CST
# 查看硬件时间
[root@server ~]# hwclock
2020年08月11日 星期二 17时14分15秒  -0.128429 秒
# 可以看到系统时间和硬件时间还是相差挺大的,这对其他服务来说影响很大。

①使用ntpdate命令同步

# 安装ntpdate命令
[root@server ~]# yum install ntpdate -y
# 查看ntpdate命令的位置
[root@server ~]# which ntpdate
/usr/sbin/ntpdate
[root@server ~]# ll /usr/sbin/ntpdate 
-rwxr-xr-x. 1 root root 110240 4月  13 2018 /usr/sbin/ntpdate

# ntp1.aliyun.com  阿里云的网络时间同步服务器
# 同步阿里云的时间,这里的同步仅仅是系统时间的同步。
[root@server ~]# ntpdate ntp1.aliyun.com
11 Aug 17:19:11 ntpdate[18123]: step time server 120.25.115.20 offset 101.877082 sec
[root@server ~]# date
2020年 08月 11日 星期二 17:19:14 CST
[root@server ~]# hwclock
2020年08月11日 星期二 17时19分18秒  -0.711273 秒

# 开启硬件时间的同步
# 修改SYNC_HWCLOCK为yes即可。
[root@server ~]# cat /etc/sysconfig/ntpdate
# Options for ntpdate
OPTIONS="-p 2"

# Set to 'yes' to sync hw clock after successful ntpdate
SYNC_HWCLOCK=no


# 设置定时任务,每天凌晨1点同步时间。
[root@server ~]# crontab -e
* 1 * * * /usr/sbin/ntpdate ntp1.aliyun.com

# 扩展
ntpdate -d ntp1.aliyun.com # 检查时间同步过程是否正常
hwclock -w    # 同步系统时间到硬件时间
hwclock -r    # 查看硬件时间

②使用ntp服务同步时间

# 安装ntp服务,开启并加入到开机自启
[root@server ~]# yum install ntp -y
[root@server ~]# systemctl start chronyd
[root@server ~]# systemctl enable chronyd

# 修改配置文件,同步阿里云的时间
# 在这里可以使用多台网络时间同步服务器(NTP服务器)
[root@server ~]# vim /etc/chrony.conf
  3 server ntp1.aliyun.com iburst
#重启ntp服务,即可生效。
[root@server ~]# systemctl restart chronyd

猜你喜欢

转载自blog.csdn.net/weixin_36522099/article/details/107925464
今日推荐