介绍
NTP,即网络时间协议,是一种提供各种操作系统上时间同步的方式的标准化协议。 OpenNTPd是网络时间协议(NTP)的免费和易于使用的实现,最初是作为OpenBSD(http://openbsd.org)项目的一部分开发的。
本教程将向您展示如何在FreeBSD上安装OpenNTPd。
<$>[注] 注: 截至 2022 年 7 月 1 日,DigitalOcean 将不再通过控制面板或 API 支持 FreeBSD Droplets。
前提条件
要遵循这个教程,你需要:
- 一个 FreeBSD 10.2 服务器与一个 root 用户;在本教程中,我们将参考用户 ** freebsd**。
FreeBSD 服务器需要远程访问 SSH 密钥. 有关设置 SSH 密钥的帮助,请阅读 如何在 FreeBSD 服务器上配置 SSH 基于密钥的身份验证. 有关 FreeBSD 服务器和基本管理的更多信息,请参阅 开始使用 FreeBSD 教程系列。
步骤1:安装 OpenNTPd
在安装 OpenNTPd 之前,请更新 pkg
所使用的存储库信息:
1sudo pkg update
然后安装 OpenNTPd 包:
1sudo pkg install openntpd
默认的OpenNTPd配置使用pool.ntp.org
作为默认的时间服务器,并配置为仅作为客户端机器工作,本教程的其余部分将展示如何更改所使用的时间服务器以及如何将OpenNTPd配置为时间服务器。
步骤 2 — 更改时间服务器(可选)
接下来的几个步骤将编辑 /usr/local/etc/ntpd.conf
,默认配置文件. 使用 ee
, vi
,或您最喜欢的文本编辑器来编辑配置文件。
1sudo ee /usr/local/etc/ntpd.conf
由 Ask Bjørn Hansen 的 GeoDNS提供,pool.ntp.org 通常会返回您所在国家或附近的服务器的 IP 地址。
或者,您还可以使用一个国家区域,如br.pool.ntp.org
,de.pool.ntp.org
或ru.pool.ntp.org
,以强制/限制结果以满足您的个人需求。
对于本教程中的示例,我们将使用 NTP.br,一个在巴西的项目,保存和分配在巴西领土上的法律时间. 如果你不在巴西,使用在你的国家或地区的类似项目。
将所需的时间服务器定义为pool.ntp.br
,取代所选的时间服务器。
1[label /usr/local/etc/ntpd.conf]
2# $OpenBSD: ntpd.conf,v 1.2 2015/02/10 06:40:08 reyk Exp $
3# sample ntpd configuration file, see ntpd.conf(5)
4
5# Addresses to listen on (ntpd does not listen by default)
6#listen on *
7
8# sync to a single server
9#server ntp.example.org
10
11# use a random selection of NTP Pool Time Servers
12# see http://support.ntp.org/bin/view/Servers/NTPPoolServers
13servers pool.ntp.br
14
15# use a specific local timedelta sensor (radio clock, etc)
16#sensor nmea0
17
18# use all detected timedelta sensors
19#sensor *
20
21# get the time constraint from a well-known HTTPS site
22#constraints from "https://www.google.com/search?q=openntpd"
步骤三:改变限制
个性化客户端设置还可以为限制添加支持,因此ntpd
可以通过TLS查询来自受信任的HTTPS服务器的Date:
标题。
ntpd.conf(5)
的人页说:接收的NTP包与时间信息落在接近限制范围之外将被丢弃,这些NTP服务器将被标记为无效
。
添加限制到 /usr/local/etc/ntpd.conf
. 请确保您使用一个或多个可靠的,已知的 HTTPS 站点. 您可以通过删除下面的第一个 #
字符来删除文件中提供的示例行:
1[label /usr/local/etc/ntpd.conf]
2# $OpenBSD: ntpd.conf,v 1.2 2015/02/10 06:40:08 reyk Exp $
3# sample ntpd configuration file, see ntpd.conf(5)
4
5# Addresses to listen on (ntpd does not listen by default)
6#listen on *
7
8# sync to a single server
9#server ntp.example.org
10
11# use a random selection of NTP Pool Time Servers
12# see http://support.ntp.org/bin/view/Servers/NTPPoolServers
13servers pool.ntp.br
14
15# use a specific local timedelta sensor (radio clock, etc)
16#sensor nmea0
17
18# use all detected timedelta sensors
19#sensor *
20
21# get the time constraint from a well-known HTTPS site
22# constraints from "https://www.google.com/search?q=openntpd"
步骤 4 — 将 OpenNTPd 配置为时间服务器
本节向您展示如何更改 OpenNTPd 的默认行为,并将 FreeBSD 转换为能够在 IPv4 和 IPv6 上服务时间的 NTP 服务器。
服务器配置的最终结果应该是这样的,‘your_server_ip’将取代您的服务器的IPv4或IPv6地址。
1[label /usr/local/etc/ntpd.conf]
2# $OpenBSD: ntpd.conf,v 1.2 2015/02/10 06:40:08 reyk Exp $
3# sample ntpd configuration file, see ntpd.conf(5)
4
5# Addresses to listen on (ntpd does not listen by default)
6listen on your_server_ip
7
8# sync to a single server
9#server ntp.example.org
10
11# use a random selection of NTP Pool Time Servers
12# see http://support.ntp.org/bin/view/Servers/NTPPoolServers
13servers pool.ntp.br
14
15# use a specific local timedelta sensor (radio clock, etc)
16#sensor nmea0
17
18# use all detected timedelta sensors
19#sensor *
20
21# get the time constraint from a well-known HTTPS site
22#constraints from "https://www.google.com/search?q=openntpd"
步骤 5 — 在 Boot 上启动 OpenNTPd
OpenNTPd 的默认服务配置不会在 FreeBSD 的启动过程中启动 DAEMON. 若要在 FreeBSD 上添加由 `ntpd 提供的 NTP 服务,请执行以下操作:
1sudo sysrc openntpd_enable="YES"
产量应该是:
1[secondary_label Output]
2openntpd_enable: -> YES
如果您想在启动时立即设置时间,请将-s
添加到openntpd_flags
。-v
也可以使用,以便将所有呼叫到adjtime
进行登录。将-s
传输到ntpd
时,将导致戴蒙在前面等待配置的NTP服务器中的一台响应最多15秒。
1sudo sysrc openntpd_flags="-s -v"
产量应该是:
1[secondary_label Output]
2openntpd_flags: -> -s -v
步骤 6 – 管理 OpenNTPd 服务
现在,您已经编辑并定制了配置文件以满足您的所有需求,您可以开始使用 OpenNTPd 提供的服务。
要开始服务:
1sudo service openntpd start
如果成功启动,你会看到:
1[secondary_label Output]
2Starting openntpd.
如果 OpenNTPd 的旗帜配置为记录调试信息,则开始输出应该是这样的:
1[secondary_label Output]
2Starting openntpd.
3constraint certificate verification turned off
4ntp_adjtime returns frequency of 8.643158ppm
您可以使用常见的命令来管理 OpenNTPd 服务:状态
、重新启动
等。
步骤 7 – 故障排除(可选)
OpenNTPd 使用两种二进制: ntpd
和 ntpctl
. 第一种是 DAEMON 本身,负责向客户端或服务器机器提供的 NTP 服务。
本节将向您展示如何使用ntpctl
,nc
和sockstat
来解决OpenNTPd和其戴蒙提供的NTP服务。
获得地位和同行
OpenNTPd 的「ntpctl」使用本地接口与 OpenNTPd 示范器进行通信. 它默认设置为「/var/run/ntpd.sock」。 本教程将涵盖您可以使用「ntpctl」运行的两种类型的查询:「状态」和「对象」。
状态
显示了同行和传感器的状态,以及系统时钟是否同步。当系统时钟同步时,显示了层次。当系统时钟不同步时,显示了系统时钟的差异,如adjtime
系统调用所报告。
若要使用 ntpctl 显示状态:
1sudo ntpctl -s status
输出应该与以下相似:
1[label Output]
28/8 peers valid, clock synced, stratum 2
「對方」顯示了每個對方的下列資訊:重量(wt),信任水平(tl),層(st),以及到下次更新對方(next poll)為止的秒數。
使用ntpctl
显示同行信息:
1sudo ntpctl -s peers
下面的输出显示了 OpenNTPd 正在运行并同步到200.160.7.193
响应的 1 层服务器的信息(从 pool.ntp.br 解决),您的 OpenNTPd 示威器将在 31 秒内通过 NTP 更新时间:
1[secondary_label Output]
2 peer
3 wt tl st next poll offset delay jitter
4 200.160.0.8 from pool pool.ntp.br
5 1 10 2 8s 30s -0.005ms 44.814ms 0.023ms
6 200.160.7.193 from pool pool.ntp.br
7 * 1 10 1 26s 31s -0.012ms 44.814ms 0.027ms
8 200.20.186.76 from pool pool.ntp.br
9 1 10 1 18s 31s 0.023ms 37.481ms 0.031ms
10
11. . .
聆听Sockets
您可以使用sockstat
列出开放的 IPv4, IPv6 和 UNIX 域接口,列出与 NTP 有关的 IPv4 和 IPv6 的收听接口:
1sudo sockstat -4 -6 -p 123
1[label Output]
2USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
3_ntp ntpd 44208 7 udp4 203.0.113.123:16987 200.160.0.8:123
4_ntp ntpd 44208 8 udp4 203.0.113.123:38739 200.160.7.193:123
5
6. . .
如果您正在运行 OpenNTPd 以在网络上服务时间,则本地地址
列会向您显示您的 IP 地址的行;代表 IPv4 接口的 your_ipv4_address:123
,以及 your_ipv6_address:123
,显示一个倾听 IPv6 接口。
连接到互联网
使用nc
来解决问题,不仅是NTP,而且还有许多网络戴蒙和它们的接口(UNIX、TCP 或 UDP)。 manpage 说:与
telnet不同,netcat 编写得很好,并将错误消息分离为标准错误,而不是将它们发送到标准输出,就像
telnet`在某些情况下所做的那样。
若要检查是否可以通过 IPv4 访问 NTP 服务器或 pool 主机:
1sudo nc pool.ntp.br 123 -z -4 -u -v
1[secondary_label Output]
2Connection to pool.ntp.br 123 port [udp/ntp] succeeded!
若要检查是否可以通过 IPv6 访问 NTP 服务器或 pool 主机:
1sudo nc pool.ntp.br 123 -z -6 -u -v
1[secondary_label Output]
2Connection to pool.ntp.br 123 port [udp/ntp] succeeded!
使用NTPdate
您可以获取有关运行 NTP 服务的机器的一些信息:stratum
,offset
和delay
。
1sudo ntpdate -q -4 ntp.cais.rnp.br
产量将类似于:
1[secondary_label Output]
2server 200.144.121.33, stratum 3, offset -0.000049, delay 0.09001
31 Sep 17:28:54 ntpdate[66740]: adjust time server 200.144.121.33 offset -0.000049 sec
请注意,ntpdate
的功能现在在FreeBSD的ntpd
程序中可用,请参阅FreeBSD的ntpd
人的页面中的-q
命令行选项,或者使用ntpq
。
<$>[警告]
警告: ntpdate
实用程序将很快退役。
阅读手册页面
OpenNTPd的ntpd
,ntpd.conf
和ntpctl
不是FreeBSD的基本系统的一部分,因此其手册页面也不是操作系统的默认MANPATH
的一部分。
1man -M /usr/local/man ntpd
重复相同的过程,以阅读 OpenNTPd 的ntpctl(8)
或ntpd.conf(5)
manpage。
结论
时间对于工作站、服务器、路由器和网络的功能至关重要。没有同步的时间,在设备之间进行准确的信息相关性变得困难,如果不是不可能的话。