介绍
NTP,网络时间协议,是一种标准化协议提供的方式来同步时间对各种操作系统。 OpenNTPd是一个自由和易于使用实施网络时间协议(NTP)的,最初是作为的一部分OpenBSD的项目。 它提供从远程NTP服务器同步本地时钟的能力,也可以充当服务器本身。
本教程将向您展示如何在FreeBSD上安装OpenNTPd。
先决条件
要遵循本教程,您需要具有:
- 一个FreeBSD的10.2Droplet用root用户; 在DigitalOcean默认的FreeBSD用户的罚款。
FreeBSD Droplet需要SSH密钥才能进行远程访问。 有关设置SSH密钥帮助,请阅读如何在FreeBSD服务器上配置SSH密钥的验证 。 要了解更多关于登录到您的FreeBSDDroplet和基础管理,检查出入门FreeBSD的系列教程。
第1步 - 安装OpenNTPd
安装OpenNTPd之前,更新所使用的存储库的信息pkg
:
sudo pkg update
然后安装OpenNTPd包:
sudo pkg install openntpd
默认OpenNTPd配置使用pool.ntp.org
作为其默认时间服务器和被配置为仅作为客户机的工作。 本教程的其余部分将说明如何更改所使用的时间服务器以及如何将OpenNTPd配置为时间服务器。
第2步 - 更改时间服务器((可选)
接下来的几个步骤将编辑/usr/local/etc/ntpd.conf
,默认的配置文件。 使用ee
, vi
,或你喜欢的文本编辑器编辑配置文件。
sudo ee /usr/local/etc/ntpd.conf
供电所询问比约恩·汉森的GeoDNS , pool.ntp.org
通常会在服务器或接近你的国家返回的IP地址。 对于大多数用户,这将给出最好的结果。
或者,你也可以使用一个国家像区br.pool.ntp.org
, de.pool.ntp.org
或ru.pool.ntp.org
强制/极限结果以适应您的个人需要。 要了解更多关于NTP池项目,请访问pool.ntp.org 。
在本教程的例子中,我们将使用NTP.br ,在巴西的一个项目,保存和分布在巴西领土的法定时间。 如果您不在巴西,请在您的国家或地区使用类似的项目。
这样定义所需的时间服务器,替换pool.ntp.br
与您所选择的时间服务器。
# $OpenBSD: ntpd.conf,v 1.2 2015/02/10 06:40:08 reyk Exp $
# sample ntpd configuration file, see ntpd.conf(5)
# Addresses to listen on (ntpd does not listen by default)
#listen on *
# sync to a single server
#server ntp.example.org
# use a random selection of NTP Pool Time Servers
# see http://support.ntp.org/bin/view/Servers/NTPPoolServers
servers pool.ntp.br
# use a specific local timedelta sensor (radio clock, etc)
#sensor nmea0
# use all detected timedelta sensors
#sensor *
# get the time constraint from a well-known HTTPS site
#constraints from "https://www.google.com/search?q=openntpd"
第3步 - 更改约束
自定义客户端安装还可以添加支持的限制,以便ntpd
可以查询Date:
从受信任的HTTPS服务器通过TLS头。
该ntpd.conf(5)
手册页说:“随着时间的推移下降的信息约束附近的范围之外收到的NTP包将被丢弃,这样NTP服务器将被标记为无效。” 这防止了一些MITM攻击,同时保持时钟精度。
约束添加到/usr/local/etc/ntpd.conf
。 请务必使用一个或多个可靠的,众所周知的HTTPS网站。 您可以通过删除第一个注释文件中提供的示例行#
下方亮显的性格:
# $OpenBSD: ntpd.conf,v 1.2 2015/02/10 06:40:08 reyk Exp $
# sample ntpd configuration file, see ntpd.conf(5)
# Addresses to listen on (ntpd does not listen by default)
#listen on *
# sync to a single server
#server ntp.example.org
# use a random selection of NTP Pool Time Servers
# see http://support.ntp.org/bin/view/Servers/NTPPoolServers
servers pool.ntp.br
# use a specific local timedelta sensor (radio clock, etc)
#sensor nmea0
# use all detected timedelta sensors
#sensor *
# get the time constraint from a well-known HTTPS site
# constraints from "https://www.google.com/search?q=openntpd"
第4步 - 将OpenNTPd配置为时间服务器
本节介绍如何更改OpenNTPd的默认行为,并将FreeBSD转换为能够通过IPv4和IPv6提供时间的NTP服务器。
为服务器配置的最终结果应该是这样的,有your_server_ip
您的服务器的IPv4或IPv6地址取代。
# $OpenBSD: ntpd.conf,v 1.2 2015/02/10 06:40:08 reyk Exp $
# sample ntpd configuration file, see ntpd.conf(5)
# Addresses to listen on (ntpd does not listen by default)
listen on your_server_ip
# sync to a single server
#server ntp.example.org
# use a random selection of NTP Pool Time Servers
# see http://support.ntp.org/bin/view/Servers/NTPPoolServers
servers pool.ntp.br
# use a specific local timedelta sensor (radio clock, etc)
#sensor nmea0
# use all detected timedelta sensors
#sensor *
# get the time constraint from a well-known HTTPS site
#constraints from "https://www.google.com/search?q=openntpd"
第5步 - 在引导时启动OpenNTPd
OpenNTPd的默认服务配置不会在FreeBSD的引导过程中启动守护进程。 要添加所提供的NTP服务ntpd
在FreeBSD上,执行以下命令:
sudo sysrc openntpd_enable="YES"
输出应为:
Outputopenntpd_enable: -> YES
如果你想在启动时立即设置时间,加-s
来openntpd_flags
。 -v
也可以使用,以便将所有来电adjtime
将被记录。 传递-s
来ntpd
将导致后台程序在前台运行长达15秒等待配置的NTP服务器中的一个回复。 这不是默认设置 ,像这样的自定义安装应该配置成这样:
sudo sysrc openntpd_flags="-s -v"
输出应为:
Outputopenntpd_flags: -> -s -v
第6步 - 管理OpenNTPd服务
现在您已经编辑和自定义配置文件以满足您的所有需求,您可以启动OpenNTPd提供的服务。
要启动服务:
sudo service openntpd start
如果成功启动,您将看到:
OutputStarting openntpd.
如果OpenNTPd守护程序的标志被配置为记录调试信息,则启动输出应如下所示:
OutputStarting openntpd.
constraint certificate verification turned off
ntp_adjtime returns frequency of 8.643158ppm
您可以管理与通常的命令OpenNTPd服务: status
, restart
等。
第7步 - 疑难解答(可选)
OpenNTPd使用两个二进制文件: ntpd
和ntpctl
。 第一个是守护程序本身,负责提供给客户端或服务器机器的NTP服务。 第二个用于显示关于正在运行的守护程序的信息。
本节将告诉你如何使用ntpctl
, nc
和sockstat
进行故障诊断OpenNTPd及其服务程序提供的NTP服务。 如果您有正在运行的服务,或只是想要一个不同的方式来检查您的服务是否正在运行,请使用此部分。
获取状态和对等项
OpenNTPd的ntpctl
使用本地插座与OpenNTPd守护进程进行通信。 它默认为/var/run/ntpd.sock
。 本教程将介绍2种你可以用运行的查询ntpctl
: status
和peers
。
status
显示同行和传感器,以及是否系统时钟同步的状态。 当系统时钟同步时,显示层。 当系统时钟不同步,偏移系统时钟的,由报告adjtime
系统调用,则显示。 当设置中位数约束时,显示与本地时间的偏移量。
使用ntpctl显示状态:
sudo ntpctl -s status
输出应类似于以下内容:
8/8 peers valid, clock synced, stratum 2
peers
显示有关每个对等体的以下信息:重量(重量),trustlevel(TL),地层(ST),并直到下一次更新,以对等(下一个轮询)的秒数。 偏移,网络延迟和网络抖动值以毫秒为单位。 当系统时钟同步到同行,星号(*)显示为对等的权重列的左侧。
要使用显示对等体信息ntpctl
:
sudo ntpctl -s peers
以下输出显示OpenNTPd正在运行并同步到作为“200.160.7.193”(从pool.ntp.br解析)的层1服务器的信息,并且您的OpenNTPd守护程序将在31秒内通过NTP更新时间:
Output peer
wt tl st next poll offset delay jitter
200.160.0.8 from pool pool.ntp.br
1 10 2 8s 30s -0.005ms 44.814ms 0.023ms
200.160.7.193 from pool pool.ntp.br
* 1 10 1 26s 31s -0.012ms 44.814ms 0.027ms
200.20.186.76 from pool pool.ntp.br
1 10 1 18s 31s 0.023ms 37.481ms 0.031ms
. . .
听力插座
您可以使用sockstat
列出开放的IPv4,IPv6和UNIX域套接字。 列出与NTP over IPv4和IPv6相关的侦听套接字:
sudo sockstat -4 -6 -p 123
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
_ntp ntpd 44208 7 udp4 203.0.113.123:16987 200.160.0.8:123
_ntp ntpd 44208 8 udp4 203.0.113.123:38739 200.160.7.193:123
. . .
如果您正在运行OpenNTPd服务时间在网络上,在LOCAL ADDRESS
栏中会显示你与你的IP地址的行; your_ipv4_address :123
,占IPv4套接字,并your_ipv6_address :123
,呈现出监听IPv6套接字。
连接到互联网
使用nc
解决不仅NTP,但很多网络守护进程和他们的插座(UNIX,TCP或UDP)。 该手册页说:“不像telnet
,netcat的脚本很好的和错误消息分离到标准错误,而不是因为它们发送到标准输出的telnet
一些不”。
要检查是否可以通过IPv4到达NTP服务器或池主机:
sudo nc pool.ntp.br 123 -z -4 -u -v
OutputConnection to pool.ntp.br 123 port [udp/ntp] succeeded!
要检查您是否可以通过IPv6到达NTP服务器或池主机:
sudo nc pool.ntp.br 123 -z -6 -u -v
OutputConnection to pool.ntp.br 123 port [udp/ntp] succeeded!
使用ntpdate
使用ntpdate
解决一些您可能希望使用的服务器。 你可以得到有关运行NTP服务的计算机的一些信息: stratum
, offset
和delay
。
sudo ntpdate -q -4 ntp.cais.rnp.br
输出将类似于:
Outputserver 200.144.121.33, stratum 3, offset -0.000049, delay 0.09001
1 Sep 17:28:54 ntpdate[66740]: adjust time server 200.144.121.33 offset -0.000049 sec
请注意,该功能ntpdate
现已在FreeBSD的可用ntpd
程序。 请参阅-q
在FreeBSD的命令行选项ntpd
手册页,或者使用ntpq
。
警告: ntpdate
工具即将退役。
阅读手册页
OpenNTPd的ntpd
, ntpd.conf
和ntpctl
没有FreeBSD的基本系统的一部分,所以它的手册页也不是操作系统的默认的一部分MANPATH
。 可以肯定,你将阅读OpenNTPd手册页,您应该运行man
与-M /usr/local/man
。 不要混淆与FreeBSD的默认ntpd(8)
手册页。
man -M /usr/local/man ntpd
重复同样的程序来读取OpenNTPd的ntpctl(8)
或ntpd.conf(5)
联机帮助页。
结论
时间对于工作站,服务器,路由器和网络的功能是固有重要的。 没有同步时间,在设备之间准确地相关信息变得困难,即使不是不可能的。 当涉及到安全性,如果你不能成功地比较每个路由器和所有网络服务器之间的日志,你会发现很难制定可靠的事件的图片。