如何在 FreeBSD 10.2 上安装和配置 OpenNTPd

介绍

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.orgru.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 使用两种二进制: ntpdntpctl. 第一种是 DAEMON 本身,负责向客户端或服务器机器提供的 NTP 服务。

本节将向您展示如何使用ntpctl,ncsockstat来解决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,offsetdelay

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.confntpctl不是FreeBSD的基本系统的一部分,因此其手册页面也不是操作系统的默认MANPATH的一部分。

1man -M /usr/local/man ntpd

重复相同的过程,以阅读 OpenNTPd 的ntpctl(8)ntpd.conf(5) manpage。

结论

时间对于工作站、服务器、路由器和网络的功能至关重要。没有同步的时间,在设备之间进行准确的信息相关性变得困难,如果不是不可能的话。

Published At
Categories with 技术
comments powered by Disqus