文章目录
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