32.12.用 NTP 进行时钟同步
最后更新于
最后更新于
在 FreeBSD 中,可以使用内置的 ntpd 来同步系统时钟。ntpd 通过 变量和 /etc/ntp.conf 配置文件进行配置,具体说明如下。
ntpd 与其网络对等方通过 UDP 数据包进行通信。在计算机与 NTP 对等方之间的任何防火墙必须配置为允许端口 123 上的 UDP 数据包进出。
ntpd 读取 /etc/ntp.conf 来确定要查询的 NTP 服务器。建议选择多个 NTP 服务器,以防其中一个服务器无法访问或其时钟不可靠。ntpd 会根据接收到的响应,优先选择可靠的服务器,而将不可靠的服务器排除。查询的服务器可以是本地网络中的服务器,ISP 提供的服务器,或者从 中选择。选择公共 NTP 服务器时,应选择一个地理位置接近的服务器,并查看其使用政策。pool
配置关键字从服务器池中选择一个或多个服务器。可以参考 ,按地理区域组织。此外,FreeBSD 提供了一个由项目支持的池,0.freebsd.pool.ntp.org
。
示例 3. 示例 /etc/ntp.conf
这是一个简单的 ntp.conf 文件示例。可以安全地按原样使用;它包含了在公开可访问的网络连接上操作时推荐的 restrict
选项。
server
关键字指定一个服务器进行查询。该文件可以包含多个 server
关键字,每行列出一个服务器。pool
关键字指定一个服务器池。ntpd 会根据需要从该池中添加一个或多个服务器,以达到 tos minclock
值所指定的对等方数量。iburst
关键字指示 ntpd 在首次建立联系时与服务器进行八次快速数据包交换,以帮助快速同步系统时间。
设置 ntpd_enable=YES
以在启动时启动 ntpd。将 ntpd_enable=YES
添加到 /etc/rc.conf 后,可以通过以下命令立即启动 ntpd,而无需重启系统:
只需设置 ntpd_enable
即可使用 ntpd。下面列出了一些可选的 rc.conf 变量,可以根据需要进行配置。
设置 ntpd_sync_on_start=YES
以允许 ntpd 在启动时一次性调整时钟的任何偏差。通常,如果时钟偏差超过 1000 秒,ntpd 会记录错误信息并退出。此选项在没有电池支持的实时时钟的系统中尤其有用。
设置 ntpd_oomprotect=YES
以保护 ntpd 守护进程不被系统因内存不足 (OOM) 情况下而终止。
设置 ntpd_config=
为备用 ntp.conf 文件的位置。
设置 ntpd_flags=
以包含其他 ntpd 所需的标志,但避免使用以下由 /etc/rc.d/ntpd 内部管理的标志:
-p
(pid 文件位置)
-c
(使用 ntpd_config=
代替)
ntpd
在 ntpd_flags
中出现以下任何选项时,需要按照下面的描述手动配置以便作为 ntpd
用户运行:
-f 或 --driftfile
-i 或 --jaildir
-k 或 --keyfile
-l 或 --logfile
-s 或 --statsdir
在 ntp.conf 中出现以下任何关键字时,需要按照下面的描述手动配置以便作为 ntpd
用户运行:
crypto
driftfile
key
logdir
statsdir
要手动配置 ntpd 作为 ntpd
用户运行,必须:
确保 ntpd
用户对配置中指定的所有文件和目录具有访问权限。
在 /etc/rc.conf 中设置 ntpd_user="ntpd"
。
ntpd 不需要与互联网的永久连接即可正常运行。然而,如果 PPP 连接配置为按需拨号,则应防止 NTP 流量触发拨号或保持连接处于活动状态。可以通过在 /etc/ppp/ppp.conf 中配置 filter
指令来实现。例如:
注意
一些互联网接入提供商会阻止较低端口,从而导致 NTP 无法正常工作,因为回复无法到达机器。
该文件的格式在 中有详细说明。以下是对示例中使用的关键字的简要概述。
默认情况下,NTP 服务器对任何网络主机都可访问。restrict
关键字控制哪些系统可以访问服务器。支持多个 restrict
条目,每个条目都会根据前面的声明细化访问限制。示例中的值授予本地系统完全的查询和控制访问权限,同时允许远程系统仅能够查询时间。有关更多详细信息,请参阅 中的 Access Control Support
子部分。
leapfile
关键字指定一个文件的位置,该文件包含关于闰秒的信息。该文件会通过 自动更新。此关键字指定的文件位置必须与 /etc/rc.conf 中的 ntp_db_leapfile
变量所设置的路径匹配。
在 FreeBSD 上,ntpd 可以作为一个非特权用户启动并运行。这需要 策略模块。/etc/rc.d/ntpd 启动脚本首先检查 NTP 配置。如果可能,它会加载 mac_ntpd
模块,然后以非特权用户 ntpd
(用户 ID 123)启动 ntpd。为了避免文件和目录访问问题,当配置包含任何与文件相关的选项时,启动脚本不会自动以 ntpd
用户身份启动 ntpd。
安排加载或将 mac_ntpd
模块编译到内核中。有关详细信息,请参见 。
更多细节,请参考 中的 PACKET FILTERING
部分以及 /usr/share/examples/ppp/ 中的示例。