如何搭建自己的NTP服务器?

如何搭建自己的NTP服务器?,第1张

NTP服务器【Network Time Protocol(NTP)】是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒),且可介由加密确认的方式来防止恶毒的协议攻击。时间按NTP服务器的等级传播。按照离外部UTC源的远近把所有服务器归入不同的Stratum(层)中。

                                                          

网络时间协议(NTP)用来同步网络上不同主机的系统时间。你管理的所有主机都可以和一个指定的被称为 NTP  服务器的时间服务器同步它们的时间。而另一方面,一个 NTP 服务器会将它的时间和任意公共 NTP 服务器,或者你选定的服务器同步。由 NTP  管理的所有系统时钟都会同步精确到毫秒级。

在公司环境中,如果他们不想为 NTP 传输打开防火墙,就有必要设置一个内部 NTP 服务器,然后让员工使用内部服务器而不是公共 NTP  服务器。在这个指南中,我们会介绍如何将一个 CentOS 系统配置为 NTP 服务器。在介绍详细内容之前,让我们先来简单了解一下 NTP 的概念。

为什么我们需要 NTP?

由于制造工艺多种多样,所有的(非原子)时钟并不按照完全一致的速度行走。有一些时钟走的比较快而有一些走的比较慢。因此经过很长一段时间以后,一个时钟的时间慢慢的和其它的发生偏移,这就是常说的  “时钟漂移” 或 “时间漂移”。为了将时钟漂移的影响最小化,使用 NTP 的主机应该周期性地和指定的 NTP 服务器交互以保持它们的时钟同步。

在不同的主机之间进行时间同步对于计划备份、入侵检测记录、分布式任务调度或者事务订单管理来说是很重要的事情。它甚至应该作为日常任务的一部分。

NTP 的层次结构

NTP 时钟以层次模型组织。层级中的每层被称为一个 stratum(阶层)。stratum 的概念说明了一台机器到授权的时间源有多少 NTP  跳。

Stratum 0 由没有时间漂移的时钟组成,例如原子时钟。这种时钟不能在网络上直接使用。Stratum N (N >1) 层服务器从  Stratum N-1 层服务器同步时间。Stratum N 时钟能通过网络和彼此互联。

NTP 支持多达 15 个 stratum 的层级。Stratum 16 被认为是未同步的,不能使用的。

准备 CentOS 服务器

现在让我们来开始在 CentOS 上设置 NTP 服务器。

首先,我们需要保证正确设置了服务器的时区。在 CentOS 7 中,我们可以使用 timedatectl  命令查看和更改服务器的时区(比如,"Australia/Adelaide",LCTT 译注:中国可设置为 Asia/Shanghai )

代码如下:

# timedatectl list-timezones | grep Australia

# timedatectl set-timezone Australia/Adelaide

# timedatectl

继续并使用 yum 安装需要的软件

代码如下:

# yum install ntp

然后我们会添加全球 NTP 服务器用于同步时间。

代码如下:

# vim /etc/ntp.conf

server 0.oceania.pool.ntp.org

server 1.oceania.pool.ntp.org

server 2.oceania.pool.ntp.org

server 3.oceania.pool.ntp.org

默认情况下,NTP 服务器的日志保存在 /var/log/messages。如果你希望使用自定义的日志文件,那也可以指定。

复制代码

代码如下:

logfile /var/log/ntpd.log

如果你选择自定义日志文件,确保更改了它的属主和 SELinux 环境。

复制代码

代码如下:

# chown ntp:ntp /var/log/ntpd.log

# chcon -t ntpd_log_t /var/log/ntpd.log

现在初始化 NTP 服务并确保把它添加到了开机启动。

代码如下:

# systemctl restart ntp

# systemctl enable ntp

验证 NTP Server 时钟

我们可以使用 ntpq 命令来检查本地服务器的时钟如何通过 NTP 同步。

下面的表格解释了输出列。

remote 源在 ntp.conf 中定义。‘*’ 表示当前使用的,也是最好的源‘+’ 表示这些源可作为 NTP 源‘-’  标记的源是不可用的。

refid 用于和本地时钟同步的远程服务器的 IP 地址。

st Stratum(阶层)

t 类型。 'u' 表示单播(unicast)。其它值包括本地(local)、多播(multicast)、广播(broadcast)。

when 自从上次和服务器交互后经过的时间(以秒数计)。

poll 和服务器的轮询间隔,以秒数计。

reach 表示和服务器交互是否有任何错误的八进制数。值 337 表示 100% 成功(即十进制的255)。

delay 服务器和远程服务器来回的时间。

offset 我们服务器和远程服务器的时间差异,以毫秒数计。

jitter 两次取样之间平均时差,以毫秒数计。

控制到 NTP 服务器的访问

默认情况下,NTP 服务器允许来自所有主机的查询。如果你想过滤进来的 NTP 同步连接,你可以在你的防火墙中添加规则过滤流量。

# iptables -A INPUT -s 192.168.1.0/24 -p udp --dport 123 -j ACCEPT

# iptables -A INPUT -p udp --dport 123 -j DROP

该规则允许从 192.168.1.0/24 来的 NTP 流量(端口 UDP/123),任何其它网络的流量会被丢弃。你可以根据需要更改规则。

配置 NTP 客户端

1. Linux

NTP 客户端主机需要 ntpupdate 软件包来和服务器同步时间。可以轻松地使用 yum 或 apt-get  安装这个软件包。安装完软件包之后,用服务器的 IP 地址运行下面的命令。

代码如下:

# ntpdate

基于 RHEL 和 Debian 的系统命令都相同。

2. Windows

如果你正在使用 Windows,在日期和时间设置(Date and Time settings)下查找网络时间(Internet Time)。

3. Cisco 设备

如果你想要同步 Cisco 设备的时间,你可以在全局配置模式下使用下面的命令。

代码如下:

# ntp server

来自其它厂家的支持 NTP 的设备有自己的用于网络时间的参数。如果你想将设备和 NTP服务器同步时间,请查看设备的说明文档。

结论

总而言之,NTP 是在你的所有主机上同步时钟的一个协议。我们已经介绍了如何设置 NTP 服务器并使支持 NTP 的设备和服务器同步时间。

为了避免Linux系统的主机,在长时间运行下所导致的时间偏差。因此我们需要对时间进行时间同步(synchronize)。我们一般使用ntp服务来同步不同机器的时间。NTP 是网络时间协议(Network Time Protocol)的简称,他是通过UDP协议,对时间进行同步的。

编辑NTP Server的主要配置文件为/etc/ntp.conf ,如下:

配置含义:

配置完毕,重启NTP服务,使配置更改生效。

查看NTP服务和上级连通状态

内网其他设备作为NTP的客户端配置,相对就比较简单,而且所有设备的配置都相同。

首先需要安装NTP服务(与NTP-Server完全一样)。然后找其中一台配置/etc/ntp.conf文件,配置完成验证通过后,拷贝到其他客户端机器,直接使用即可。

注释掉之前的上层服务,以下几行

添加本地的NTP服务器即可完成配置

可以用date命令查看时区

如果时区是EST需要改成CST

选择亚洲 /中国 /北京 /然后确认

改完后执行如下复制语句

使用

172.17.30.100为你的NTP服务器的ip地址,显示adjust time server 192.168.1.135 offset 0.004882 sec

这里有可能出现同步失败,一般情况下原因都是本地的NTPD服务器还没有正常启动起来,一般需要几分钟时间后才能开始同步。

也有报错 no server suitable for synchronization found,这种问题由一下两种情况造成:

Server dropped: strata too high:

并且显示“stratum 16”。而正常情况下stratum这个值得范围是“0~15”。

这种问题往往是由ntp服务启动后还没有和上层服务同步完成,可以等五分钟再次查看。

Server dropped: strata no data:

这种问题一般是因为访问不到NTP服务,需要检查NTP服务是否启动成功,或者是否是被防火墙拦截。

启动NTP_Client

启动后,查看同步情况

由于是内网,NTP服务很快会同步上,可以使用下面命令查看时间是否和服务器时间相同

本机客户端配置完成后,需要同步的客户端机器使用SCP拷贝/etc/ntp.conf,命令如下,启动NTP服务即可。

Linux的NTP配置总结

NTP服务及时间同步问题

1)首先确认虚拟化底层的时间是否准确,因为所有虚拟机会自动同步虚拟主机的时间。

2)在所有AD服务器上开启时间同步功能

一、找到适合的NTP服务器

首先需要找一个适合自己网络环境的NTP服务器,因为不同的网络会有不同的NTP服务器起作用,检测NTP服务器的方法为在AD上运行 w32tm /stripchart /computer:NTP服务器域名或IP ,如 w32tm /stripchart /computer:182.92.12.11 ,若是可以使用会显示如下图

找到适合自己网络的可用NTP服务器后,假设找到182.92.12.11为可用NTP服务器,在AD服务器上开启时间同步,运行如下命令

三、设置主域控制器与国家授时中心服务器时间同步,同步周期为1天。

1、 添加时间服务器

在右边窗口点右键新建“字符串值”,将此“字符串值”命名为0。双击此新建的“字符串值”,输入: 182.92.12.11 ,保存。将“默认”(即第一个“字符串值”)修改为0即可,删除其他所有的值只保留如图所示的值

2、 指定时间源

修改键NtpServer的值为 182.92.12.11

3、 设置校时周期

修改键SpecialPollInterval的值为十进制的604800(即为604800秒,1天)

四、设置权威服务器

1、 设置权威服务器

在域控服务器上打开注册表,找到键值

修改键AnnounceFlags的值为十进制的10。

2、 启用 NTPServer

修改键Enabled的值为十进制的1

五、配置组策略,设置时间同步

1、 打开组策略管理

2、 在“Default Domain Policy”上右键,编辑。

3、 计算机配置—管理模板—系统—Windows时间服务,双击“全局配置设置”,选择“已启用”。

修改MaxNegPhaseCorrection的值为3600(即为3600秒,1小时)

修改MaxPosPhaseCorrection的值为3600(即为3600秒,1小时)

修改AnnounceFlags的值为5

点“应用”,“确定”。

4、 计算机配置—管理模板—系统—Windows时间服务—时间提供程序,“启用Windows NTP客户端”,选择“已启用”。

“配置Windows NTP客户端”,选择“已启用”。

修改NtpSever的值为 182.92.11

修改Type的值为NTP

修改SpecialPollInterval的值为1800(30分钟)

5、cmd命令在域控和客户端完成检测

域控上运行下面三条命令检测,返回成功执行了命令即为成功。若是返回此计算机没有重新同步,因为没有可用的时间数据。请排查上述文档中一步时间服务器是否可用,和五-4步服务器是否正确,看w32tm /query /source命令返回的结果是否正确。

域内的客户端想要同主域时间同步,执行下面的命令,返回成功执行了命令即为成功

注意时间若想成功同步,时间不能跟标准时间差别太大,在范围内的才能成功同步。

1、系统时间比标准时间系统时间晚14小时59分钟之内

2、系统时间比标准时间早30分钟之内

3)对于有些客户端Windows Times服务会自动停止,可以尝试重新注册一下此服务项

1.首先,运行如下命令删除时间服务:

2.然后,再运行如下命令加载默认时间配置服务:


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/374432.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-14
下一篇2023-05-14

发表评论

登录后才能评论

评论列表(0条)

    保存