搭建DHCP服务实现动态分配IP地址-NTP网络同步时间

一、 DHCP服务概述
1、 DHCP的介绍
名称:DHCP (Dynamic Host Configuration Protocol)动态主机配置协议。
功能:DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:
(1) 给内部网络或网络服务供应商自动分配IP地址,主机名,DNS服务器,域名;
(2) 配合其它服务,实现集成化管理功能。如:无人执守安装服务器。

2、 DCHP的工作模式
DHCP是C/S 模式,DHCP服务端和客户端需要保持通信,DHCP基于UDP协议,双方都有可能会主动向对方发起通信,因此双方都需要监听端口。
Server端:DHCP Server(运行dhcp服务)
UDP服务:监听端口 67(bootps)
Client端:DHCP Client(运行dhcp程序)
UDP服务:监听端口 68 (bootpc)

3、 DHCP的特点
自动分配IP地址,方便管理。
DHCP不会同时租借相同的IP地址给两台主机。
DHCP管理员可以约束特定的计算机使用特定的IP地址。
可以为每个DHCP作用域设置很多选项。
客户机在不同子网间移动时不需要重新设置IP地址。每次都自动获取IP地址就可以了。

4、 DHCP的缺点:
当网络上存在多服务器时,一个DHCP服务器不能查出已被其它服务器租出去的IP地址;
DHCP服务器不能跨路由器与客户机通信,除非路由器允许BOOTP协议转发。
端口:
例:查看端口解析文件
[root@xuegod63 ~]# vim /etc/services
在这里插入图片描述
DHCP协议由 bootp协议发展而来,是BOOTP的增强版本,bootps代表服务端端口, bootpc代表客户端端口。

bootp协议:引导程序协议(BOOTP)。它可以让无盘工作站从一个中心服务器上获得IP地址,为局域网中的无盘工作站分配动态IP地址,并不需要每个用户去设置静态IP地址。

BOOTP有一个缺点:您在设定前须事先获得客户端的硬件地址,而且,MCA地址与IP的对应是静态的。换而言之,BOOTP非常缺乏“动态性 ”,若在有限的IP资源环境中,BOOTP的一对一对应会造成非常可观的浪费。
DHCP可以说是BOOTP的增强版本,它分为两个部分:一个是服务器端,而另一个是客户端。所有的IP网络设定数据都由DHCP服务器集中管理,并负责处理客户端的DHCP要求;而客户端则会使用从服务器分配下来的IP环境数据。比较BOOTP, DHCP透过“租约”的概念,有效且动态的分配客户端的TCP/IP设定,而且,作为兼容考虑,DHCP也完全照顾了BOOTP Client的需求。

5、 DCHP的工作原理
1)DHCP Client阶段
(1) 即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 地址配置本机地址。
(2) 169.254.0.0/16是Windows的自动专有IP寻址范围,也就是在无法通过DHCP获取IP地址时,由系统自动分配的IP地址段。
早期的Linux上并不会产生这条路由,现在有这条路由大概是为了和Windows兼容。

2)DHCP Server 提供阶段:
DHCP Server提供阶段,即为DHCP Server响应DHCP Discovery所发的DHCP Offer阶段,即DHCP服务器提供IP地址的阶段。在网络中接收到DHCPdiscover发现信息的DHCP服务器都会做出响应,它从尚未出租的IP地址中挑选一个分配给DHCP客户机,向DHCP客户机发送一个包含出租的IP地址和其他设置的DHCPoffer提供信息。

3)DHCP Client 确认阶段:
即DHCP客户机选择某台DHCP服务器提供的IP地址的阶段。如果有多台DHCP服务器向DHCP客户机发来的DHCPoffer提供信息,则DHCP客户机只接受第一个收到的DHCPoffer提供信息,然后它就以广播方式回答一个DHCPrequest请求信息,该信息中包含向它所选定的DHCP服务器请求IP地址的内容。之所以要以广播方式回答,是为了通知所有的DHCP服务器,他将选择某台DHCP服务器所提供的IP地址

4.)DHCP Server确认阶段:
即DHCP服务器确认所提供的IP地址的阶段。当DHCP服务器收到DHCP客户机回答的DHCPrequest请求信息之后,它便向DHCP客户机发送一个包含它所提供的IP地址和其他设置的DHCPack确认信息,告诉DHCP客户机可以使用它所提供的IP地址。然后DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除DHCP客户机选中的服务器外,其他的DHCP服务器都将收回曾提供的IP地址。

5)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地址。

6) DHCP Client更新租约:
DHCP获取到的IP地址都有一个租约,租约过期后,DHCP Server将回收该IP地址,所以如果DHCP Client如果想继续使用该IP地址,则必须更新租约。更新的方式就是,当前租约期限过了一半后,DHCP Client都会发送DHCP Renew报文来续约租期。

为了便于理解,我们把DHCP客户机比做餐馆里的客人,DHCP服务器工作原理当中,服务器比做服务员(一个餐馆里也可以有多个服务员),IP地址比做客户需要的食物。那么可以这样描述整个过程:客人走进餐馆,问:“有没有服务员啊?”(DHCP discover),多个服务员同时回答:“有,我这有鸡翅”“有,我这有汉堡”(DHCP offer)。客人说:“好吧,我要一份汉堡”(DHCP request,这个客人比较死板,总是选择第一次听到的食物),端着汉堡的服务员回应了一声:“来啦”(DHCP ack),并把食物端到客人面前,供其享用(将网卡和IP地址绑定)。客人下次来的时候,就直接找上次那个服务员点自己喜欢的汉堡了(DHCP request),如果还有汉堡,服务员会再次确认并上菜(DHCP ack),而如果已经卖完了,服务员则会告诉客人:“不好意思,已经卖完了”(DHCP nack)。当然,服务员隔一段时间会来收拾一次桌子,除非客人特别说明这菜还要继续吃的,服务员会将剩菜端走。

二、 使用DHCP为局域网中的机器分配IP地址
1、 安装DHCP

[root@xuegod200 ~]# yum -y install dhcp

2、 配置文件位置
1) 默认安装完成DHCP后,安装路径如下:

[root@xuegod200 ~]# cd /etc/dhcp/
[root@xuegod200 dhcp]# ls
dhclient.d dhclient-exit-hooks.d dhcp.conf dhcpd6.conf dhcpd.conf scripts

2) 打开dhcpd.conf文件,根据提示,到相对应路径下复制一份新的配置文件(直接覆盖)

[root@xuegod200 ~]# cd /usr/share/doc/dhcp-4.2.5/
[root@xuegod200 dhcp-4.2.5]# ls
dhcpd6.conf.example dhcpd.conf.example ldap
[root@xuegod200 dhcp-4.2.5]# cp dhcpd.conf.example /etc/dhcp/dhcpd.conf
cp:是否覆盖"/etc/dhcp/dhcpd.conf"? y

3) 启动DHCP服务
这里先不能启动DHCP服务,如果启动会报错。因为配置 里定义的地址段和服务器本机配置的地址信息不同,在启动服务的时候会报错,所以启动前需要先修改配置文件

3、 配置文件参数说明
1) 概念与协议
作用域:可以分配IP的范围 subnet 。
地址池:可以分配给客户端的IP,range包括的IP。
保留地址:指定某个客户端使用一个特定IP,通过host配置的。
租约(时间):客户端可以使用这个IP地址的时间。
2) 配置文件:/etc/dhcp/dhcpd.conf
一般配置文件分为两部分:全局配置和子网配置
全局地址分配属性:以options开头
例如:option router #指定网关
子网配置:如果子网中没有定义分配给客户端的DNS,但全局中有定义,那么子网则继承全局的DNS,如果子网中定义了DNS,全局中也有DNS,那么则根据那个地址的作用范围小则最终生效。
通常每个作用域(地址池)通过一个subnet(子网)定义
例如:subnet 192.168.1.0 netmask 255.255.255.0{
range 192.168.1.0 netmask 255.255.255.0 #定义分配的地址池
option routes routes rts-239-0-1.example.org,rtr-239-0-2.example.org;
#在子网定义中也可以使用option定义网关,但仅在子网中范围生效
}
主机配置:
通常为某一个MAC地址固定分配一个地址
host fantasia {
hardware ethernet 08:00:07:26:c0:a5; #定义MAC地址。
fixed-address fantasia.fugue.com; #定义固定的ip地址
}
3) 文件详解
option domain-name “example.org”; #搜索域。
option domain-name-servers ns1.example.org, ns2.example.org; #全局默认DNS。
default-lease-time 600; #默认最小租约期限(单位为秒)。
max-lease-time 7200; #最长租约期限(单位为秒)。
#ddns-update-style none; #动态dns。
log-facility local7; #日志反动地址,在/etc/rsyslog.conf日志服务配置文件中定义所有发往local7的日志定义存放到/var/log/boot.log文件中。
subnet 10.254.239.0 netmask 255.255.255.224 { #定义分配的IP地址、掩码。
range 10.254.239.10 10.254.239.20; # 定义地址池,起始地址,结束地址,以空格分隔。
option routers rtr-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”;
} #定义函数,用来定义特定系统分配特定的地址。

三、 实战-搭建DHCP服务器
公司有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、 实验环境准备
1) 每台服务器添加两个网卡,并修改配置文件
2) 服务器端的网卡修改和配置
添加一块网卡,并制定网卡使用LAN1

通过过滤,可以发现多了一个网卡

[root@xuegod200 network-scripts]# ip a | grep ens
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.11.200/24 brd 192.168.11.255 scope global ens33
5: ens38: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000

进入网卡配置文件目录,发现没有新增网卡的配置文件

[root@xuegod200 ~]# cd /etc/sysconfig/network-scripts/
[root@xuegod200 network-scripts]# ls ifcfg-*
ifcfg-ens33 ifcfg-lo

手动复制一个网卡,并修改内容

[root@xuegod200 network-scripts]# cp ifcfg-ens33 ifcfg-ens38
[root@xuegod200 network-scripts]# vim ifcfg-ens38
[root@xuegod200 network-scripts]# ifup ens38 #启动网卡
[root@xuegod200 network-scripts]# ip a | grep ens38
5: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.1.200/24 brd 192.168.1.255 scope global ens38

3) 客户端的网卡修改和配置
前几步同服务端添加网卡相同,因为客户端是需要从服务端获取IP地址,所以配置文件内容需要修改为DHCP,并且删除IP地址、DNS等参数

[root@xuegod210 network-scripts]# cat ifcfg-ens38
TYPE=“Ethernet”
PROXY_METHOD=“none”
BROWSER_ONLY=“no”
BOOTPROTO=“dhcp”
DEFROUTE=“yes”
IPV4_FAILURE_FATAL=“no”
IPV6INIT=“yes”
IPV6_AUTOCONF=“yes”
IPV6_DEFROUTE=“yes”
IPV6_FAILURE_FATAL=“no”
IPV6_ADDR_GEN_MODE=“stable-privacy”
NAME=“ens38”
UUID=“ab6f0ce1-fdb5-4adb-83a0-5111a3ce21cf”
DEVICE=“ens38”
ONBOOT=“yes”
IPV6_PRIVACY=“no”

2、 配置DHCP配置文件

[root@xuegod200 dhcp]# cp dhcpd.conf dhcp.conf.bak #修改前先备份
[root@xuegod200 dhcp]# vim dhcp.conf
[root@xuegod200 dhcp]# cat dhcp.conf
subnet 192.168.1.0 netmask 255.255.255.0 { #声明一个网段
range 192.168.1.100 192.168.1.200; #定义DHCP的地址池
option domain-name-servers 192.168.1.1; #DNS服务器
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; #最大租期
}

3、 重启dhcpd服务,查看服务状态

[root@xuegod200 dhcp]# systemctl start dhcpd
[root@xuegod200 dhcp]# systemctl enable dhcpd
Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service.
[root@xuegod200 dhcp]# systemctl status dhcpd
● dhcpd.service - DHCPv4 Server Daemon
Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; disabled; vendor preset: disabled)
Active: active (running) since 四 2019-05-16 00:03:44 CST; 7s ago

4、 客户端重启网卡,查看IP地址能否获取到

[root@xuegod210 dhcp]# ifup ens38
正在确定 ens38 的 IP 信息… 完成。
[root@xuegod210 dhcp]# ifconfig ens38
ens38: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::20c:29ff:fe09:dc99 prefixlen 64 scopeid 0x20
ether 00:0c:29:09:dc:99 txqueuelen 1000 (Ethernet)
RX packets 16 bytes 1524 (1.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 29 bytes 6303 (6.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

5、 查看默认网关和DNS

[root@xuegod210 dhcp]# cat /etc/resolv.conf
; generated by /usr/sbin/dhclient-script
search xuegod.cn
nameserver 192.168.1.1
[root@xuegod210 dhcp]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 ens38
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 ens33
169.254.0.0 0.0.0.0 255.255.0.0 U 1005 0 0 ens38
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 ens38
192.168.11.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0

6、 使用DHCP为服务器分配固定IP地址
修改配置文件如下:

[root@xuegod200 dhcp]# vim dhcpd.conf
[root@xuegod200 dhcp]# cat 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 “xuegod.cn”;
option routers 192.168.1.1;
option broadcast-address 192.168.1.255;
default-lease-time 600;
max-lease-time 7200;
host xuegod64 { #此段内容,要写在subnet字段中配合使用
hardware ethernet 00:0c:29:09:dc:99; #指定主机的MAC地址
fixed-address 192.168.1.110; #指定分为的IP地址
}
}

重启DHCP服务

[root@xuegod200 dhcp]# systemctl restart dhcpd

7、 客户端重启网卡,查看获取地址情况

[root@xuegod210 dhcp]# ifdown ens38
[root@xuegod210 dhcp]# ifup ens38
正在确定 ens38 的 IP 信息… 完成。
[root@xuegod210 dhcp]# ifconfig ens38
ens38: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.110 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::20c:29ff:fe09:dc99 prefixlen 64 scopeid 0x20
ether 00:0c:29:09:dc:99 txqueuelen 1000 (Ethernet)
RX packets 26 bytes 3534 (3.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 83 bytes 15128 (14.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

四、 ntpdate加计划任务同步服务器时间
ntpdate命令后加公网上的NTP服务器地址,可以同步服务器的时间,前提是服务器可以连接外网
公网的NTP服务器地址:
阿里云:ntp1.aliyun.com
微软:time.windows.com
1、 安装ntpdate命令(服务器默认已经安装)

[root@xuegod200 ~]# rpm -qa | grep ntpdate
ntpdate-4.2.6p5-28.el7.centos.x86_64

2、 ntpdate命令的使用

[root@xuegod200 ~]# ntpdate ntp1.aliyun.com
16 May 00:20:57 ntpdate[4757]: adjust time server 120.25.115.20 offset 0.098879 sec
[root@xuegod200 ~]# date
2019年 05月 16日 星期四 00:21:00 CST

3、 将ntpdate命令增加到计划任务里,实现定时更新服务器时间

[root@xuegod200 ~]# crontab -e
crontab: installing new crontab
[root@xuegod200 ~]# crontab -l
0 12 * * * ntpdate ntp1.aliyun.con

4、 ntp服务同步硬件时间
ntp服务,默认只会同步系统时间。如果想要让ntp同时同步硬件时间,可以设置/etc/sysconfig/ntpdate 文件。
在/etc/sysconfig/ntpdate 文件中,把SYNC_HWCLOCK=no 改成SYNC_HWCLOCK=yes则可以使硬件时间与系统时间一起同步。

[root@xuegod200 ~]# vim /etc/sysconfig/ntpdate
[root@xuegod200 ~]# cat !$
cat /etc/sysconfig/ntpdate
#Options for ntpdate
OPTIONS="-p 2"
#Set to ‘yes’ to sync hw clock after successful ntpdate
SYNC_HWCLOCK=yes

date的命令

[root@xuegod200 ~]# hwclock -r #查看硬件时间
2019年05月16日 星期四 00时25分19秒 -0.694508 秒
[root@xuegod200 ~]# hwclock -w #将系统时间同步到硬件
[root@xuegod200 ~]# date
2019年 05月 16日 星期四 00:25:36 CST
[root@xuegod200 ~]# hwclock -s #将硬件时间同步到系统
[root@xuegod200 ~]# date
2019年 05月 16日 星期四 00:26:20 CST
[root@xuegod200 ~]#

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值