第 22 章使用 NTP 同步时间

目录

22.1. 使用 YaST 配置 NTP 客户端
22.2. 在网络中手动配置 ntp
22.3. 运行时动态时间同步
22.4. 设置本地参考时钟

摘要

NTP(网络时间协议)机制是用于同步网络上的系统时间的协议。首先,计算机从作为可靠时间源的服务器获得时间。然后将此计算机用作网络中其他计算机的时间源。这样做有双重目的:既可维护绝对时间,又可保持网络中所有计算机系统时间的同步。

维护确切的系统时间在许多情况下都非常重要。内置硬件 (BIOS) 时钟往往不能满足数据库或群集这样的应用程序的要求。手动更正系统时间可能会导致许多严重问题,例如向后调整时间将使关键应用程序出现故障。在网络中,通常需要同步所有计算机上的系统时间,但是手动调整时间是一种不好的方法。NTP 提供了解决这些问题的机制。NTP 服务借助网络中的可靠时间服务器持续调整系统时间。它还支持对本地参考时钟(如无线电控制的时钟)进行管理。

[Note]

要通过 Active Directory 启用时间同步,请遵循过程 5.1, “Joining an AD Domain” (↑安全指南)中的描述。

22.1. 使用 YaST 配置 NTP 客户端

附于 ntp 包中的 NTP 守护程序 (ntpd) 预设置为使用本地计算机时钟作为时间参考。但是,只有在没有更精确的时间源的情况下才使用 (BIOS) 时钟。YaST 为 NTP 客户端的配置提供方便。

22.1.1. 基本配置

YaST NTP 客户端配置(网络服务+NTP 配置)由选项卡组成。在常规设置选项卡上设置 ntpd 启动模式和要查询的服务器。

仅手工

如果希望全部自己配置,请选择仅手动

立即和引导时

选择立即和引导时可在引导系统时自动启动 ntpd然后按第 22.1.2 节 “更改基本配置” 中的描述配置服务器

22.1.2. 更改基本配置

供客户端查询的服务器和其他时间资源列在常规设置选项卡的下半部分。使用添加编辑删除可按需修改此列表。显示日志使您能够查看客户端的日志文件。

单击添加可添加新的时间信息源。在随后的对话框中,选择要与其进行时间同步的源类型。下列选项可用:

图 22.1. YaST:NTP 服务器

YaST:NTP 服务器

服务器

选择下拉列表(请参见图 22.1 “YaST:NTP 服务器”)中,确定是使用本地网络(本地 NTP 服务器)中的时间服务器设置时间同步,还是使用考虑所在时区(公共 NTP 服务器)的基于因特网的时间服务器设置时间同步。要使用本地时间服务器,请单击查找启动 SLP 查询,查找网络中的可用时间服务器。从搜索结果列表中选择最适合的时间服务器,然后单击确定退出该对话框。要使用公共时间服务器,请选择您所在的国家或地区(时区),并从公共 NTP 服务器列表中选择适合的服务器,然后单击确定退出该对话框。在主对话框中,用测试来测试所选服务器是否可用。选项使您可以指定 ntpd 的其他选项。

使用访问控制选项,您可限制远程计算机通过您的计算机上运行的守护程序所能执行的操作。仅在选中安全设置选项卡(请参见图 22.2 “高级 NTP 配置:安全设置”)上的限制 NTP 服务仅用于已配置的服务器后,才能启用此字段。选项对应于 /etc/ntp.conf 中的 restrict 子句。例如,nomodify notrap noquery 禁止服务器修改计算机的 NTP 设置并禁止使用 NTP 守护程序的陷阱工具(一种远程事件记录功能)。建议将这些限制用于超出您控制范围的服务器(例如在因特网上)。

有关详细信息,请参见 /usr/share/doc/packages/ntp-docntp-doc 包的一部分)。

同级

同级是一台要与其建立对称关系的计算机:它将同时用作时间服务器和客户端。要在同一网络中用同级代替某个服务器,请输入系统的地址。该对话框的其他部分与服务器对话框相同。

无线电时钟

要在系统中使用无线电时钟来同步时间,请在此对话框中输入时钟类型、单元号码、设备名和其他选项。单击驱动程序校准可对该驱动程序进行微调。有关本地无线电时钟如何操作的详细信息,请参见 /usr/share/doc/packages/ntp-doc/refclock.html

发出的广播

也可以通过在网络内广播的方式来传送时间信息和查询。在此对话框中,输入应将这类广播信息发送到的地址。除非使用了像无线电控制的时钟这样的可靠时间源,否则不要激活广播。

进来的广播

如果希望客户端通过广播接收信息,请在此字段中输入应接受来自哪个地址的相应数据包。

图 22.2. 高级 NTP 配置:安全设置

高级 NTP 配置:安全设置

安全设置选项卡(请参见图 22.2 “高级 NTP 配置:安全设置”)中,确定 ntpd 是否应在 chroot jail 中启动。默认情况下,在 Chroot Jail 中运行 NTP 守护程序是被激活的。这可以在遭受通过 ntpd 发起的攻击时提高安全性,因为这种方式可以防止攻击者危害整个系统。

限制 NTP 服务用于配置过的服务器通过禁止远程计算机查看和修改您计算机的 NTP 设置以及禁止使用用于远程事件记录的陷阱工具,从而增强了系统的安全性。一旦启用,这些限制将适用于所有远程计算机,除非您在常规设置选项卡中针对时间源列表中的个别计算机覆盖了访问控制选项。对于所有其他远程计算机,仅允许查询本地时间。

如果 SuSEfirewall2 处于活动状态(默认),请启用打开防火墙中的端口。如果保持端口的关闭状态,则不可能建立与事件服务器的连接。

22.2. 在网络中手动配置 ntp

要使用网络中的时间服务器,最简便的方式就是设置服务器参数。例如,如果可以从网络访问名为 ntp.example.com 的时间服务器,请通过添加以下行将其名称添加到文件 /etc/ntp.conf 中:

server ntp.example.com

要添加更多时间服务器,请使用关键字 server 插入更多行。使用命令 rcntp start 初始化 ntpd 后,等待时间稳定并且创建用于更正本地计算机时钟的偏移文件需要大约一个小时的时间。利用偏移文件,只要计算机一启动,就可以计算出硬件时钟的系统误差。可以立即使用更正功能,使系统时间保持较高的稳定性。

有两种方法可将 NTP 机制用作客户端:第一种方法是客户端可以定期从已知服务器查询时间。在存在许多客户端的情况下,这种方法会给服务器带来很高的负荷。第二种方法是客户端可以等待网络中的广播时间服务器发送 NTP 广播。这种方法的缺点在于服务器的可靠性是未知的,而且如果服务器发出错误信息将导致严重问题。

如果通过广播获取时间,则不需要服务器名称。此时只需在配置文件 /etc/ntp.conf 中输入 broadcastclient 一行。要以独占方式使用一个或多个已知时间服务器,请在以 servers 开头的行中输入它们的名称。

22.3. 运行时动态时间同步

如果在无网络连接的情况下引导系统,则 ntpd 将启动,但是它无法解析在配置文件中设置的时间服务器的 DNS 名称。如果通过加密的 WLAN 使用网络管理器,则可能发生这种情况。

如果希望 ntpd 在运行时解析 DNS 名称,则必须设置 dynamic 选项。然后,当引导后建立网络时,ntpd 将再次查找名称并可以到达时间服务器以获取时间。

手动编辑 /etc/ntp.conf 并将 dynamic 添加到一个或多个 server 项:

server ntp.example.com dynamic

或使用 YaST 并如下操作:

  1. 在 YaST 中单击网络服务+NTP 配置

  2. 选择要配置的服务器。然后单击编辑

  3. 激活选项字段并添加 dynamic。如果已输入其他选项,请用空格分隔。

  4. 单击确定关闭编辑对话框。重复之前的步骤以根据需要更改所有服务器。

  5. 最后单击确定保存设置。

22.4. 设置本地参考时钟

软件包 ntp 包含用于连接本地参考时钟的驱动程序。ntp-doc 包的文件 /usr/share/doc/packages/ntp-doc/refclock.html 中提供了受支持时钟的列表。每个驱动程序都有一个关联数字。在 ntp 中,实际配置是通过伪 IP 地址来完成的。时钟被输入 /etc/ntp.conf 文件,就像已经在网络中存在一样。为此专门给它们指派了 127.127.t.u 格式的特殊 IP 地址。其中 t 代表时钟的类型并确定要使用的驱动程序,u 代表设备并确定要使用的接口。

通常,各个驱动程序都有特殊的参数来描述配置详细信息。文件 /usr/share/doc/packages/ntp-doc/drivers/driverNN.html(其中 NN 是驱动程序的编号)提供了有关特定类型时钟的信息。例如,8 型时钟(通过串行接口的无线电时钟)需要额外的方式更精确地指定时钟。以 Conrad DCF77 接收模块为例,该模块需要使用 mode 5。要使用此时钟作为首选参考,应指定关键字 prefer。由此构成的 Conrad DCF77 接收模块的完整 server 行如下:

server 127.127.8.0 mode 5 prefer

其他时钟也采用相同的模式。安装 ntp-doc 包之后,可以在目录 /usr/share/doc/packages/ntp-doc/ 中找到 ntp 的文档。文件 /usr/share/doc/packages/ntp-doc/refclock.html 提供指向描述驱动程序参数的驱动程序页的链接。