FreeBSD 使用手册
上一页 | 第29章 　网络服务器 | 下一页

# 29.10 通过 NTP 进行时钟同步

Contributed by Tom Hukins.

## 29.10.1 纵览

随着时间的推移， 计算机的时钟会倾向于漂移。 网络时间协议 (NTP) 是一种确保您的时钟保持准确的方法。

许多 Internet 服务依赖、 或极大地受益于本地计算机时钟的准确性。 例如， web 服务器可能会接收到一个请求， 要求如果文件在某一时刻之后修改过才发送它。 在局域网环境中， 共享文件的计算机之间的时钟是否同步至关重要， 因为这样才能使时间戳保持一致。 类似 cron(8) 这样的程序， 也依赖于正确的系统时钟， 才能够准确地执行操作。

FreeBSD 附带了 ntpd(8) NTP 服务器， 它可以用于查询其它的 NTP 服务器， 并配置本地计算机的时钟， 或者为其它机器提供服务。

## 29.10.2 选择合适的 NTP 服务器

为了同步您的系统时钟， 需要首先找到至少一个 NTP 服务器以供使用。 网络管理员， 或 ISP 都可能会提供用于这样目的的 NTP 服务器──请查看他们的文档以了解是否是这样。 另外， 也有一个在线的 公开的 NTP 服务器列表， 您可以从中选一个较近的 NTP 服务器。 请确认您选择的服务器的访问策略， 如果需要的话， 申请一下所需的许可。

选择多个相互不连接的 NTP 服务器是一个好主意， 这样在某个服务器不可达， 或者时钟不可靠时就可以有别的选择。 这是因为， ntpd(8) 会智能地选择它收到的响应──它会更倾向于使用可靠的服务器。

## 29.10.3 配置您的机器

### 29.10.3.1 基本配置

如果只想在系统启动时同步时钟， 则可以使用 ntpdate(8)。 对于经常重新启动， 并且不需要经常同步的桌面系统来说这比较适合， 但绝大多数机器都应该运行 ntpd(8)。

在引导时使用 ntpdate(8) 来配合运行 ntpd(8) 也是一个好主意。 ntpd(8) 渐进地修正时钟， 而 ntpdate(8) 则直接设置时钟， 无论机器的当前时间和正确时间有多大的偏差。

要启用引导时的 ntpdate(8)， 需要把 `ntpdate_enable="YES"` 加到 `/etc/rc.conf` 中。 此外， 还需要通过 `ntpdate_flags` 来设置同步的服务器和选项， 它们将传递给 ntpdate(8)。

### 29.10.3.2 一般配置

NTP 是通过 `/etc/ntp.conf` 文件来进行配置的， 其格式在 ntp.conf(5) 中进行了描述。 下面是一个例子：

    server ntplocal.example.com prefer
    server timeserver.example.org
    server ntp2a.example.net

    driftfile /var/db/ntp.drift

这里， `server` 选项指定了使用哪一个服务器， 每一个服务器都独立一行。 如果某一台服务器上指定了 `prefer` (偏好) 参数， 如上面的 `ntplocal.example.com`， 则会优先选择这个服务器。 如果偏好的服务器和其他服务器的响应存在显著的差别， 则丢弃它的响应， 否则将使用来自它的响应， 而不理会其他服务器。 一般来说， `prefer` 参数应该标注在非常精确的 NTP 时源， 例如那些包含特殊的时间监控硬件的服务器上。

而 `driftfile` 选项， 则指定了用来保存系统时钟频率偏差的文件。 ntpd(8) 程序使用它来自动地补偿时钟的自然漂移， 从而使时钟即使在切断了外来时源的情况下， 仍能保持相当的准确度。

另外， `driftfile` 选项也保存上一次响应所使用的 NTP 服务器的信息。 这个文件包含了 NTP 的内部信息， 它不应被任何其他进程修改。

### 29.10.3.3 控制您的服务器的访问

默认情况下， NTP 服务器可以被整个 Internet 上的主机访问。 如果在 `/etc/ntp.conf` 中指定 `restrict` 参数， 则可以控制允许哪些机器访问您的服务器。

如果希望拒绝所有的机器访问您的 NTP 服务器， 只需在 `/etc/ntp.conf` 中加入：

    restrict default ignore

> 注意: 这样做会禁止您的服务器访问在本地配置中列出的服务器。 如果您需要令 NTP 服务器与外界的 NTP 服务器同步时间， 则应允许指定服务器。 请参见联机手册 ntp.conf(5) 以了解进一步的细节。

如果只希望子网内的机器通过您的服务器同步时钟， 而不允许它们配置为服务器， 或作为同步时钟的节点来时用， 则加入

    restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

这里， 需要把 `192.168.1.0` 改为您网络上的 IP 地址， 并把 `255.255.255.0` 改为您的子网掩码。

`/etc/ntp.conf` 可能包含多个 `restrict` 选项。 要了解进一步的细节， 请参见 ntp.conf(5) 的 `Access Control Support`(访问控制支持) 小节。

## 29.10.4 运行 NTP 服务器

要让 NTP 服务器在系统启动时随之开启， 需要把 `ntpd_enable="YES"` 加入到 `/etc/rc.conf` 中。 如果希望向 ntpd(8) 传递更多参数， 需要编辑 `/etc/rc.conf` 中的 `ntpd_flags`。

要在不重新启动机器的前提下启动服务器， 需要手工运行 `ntpd`， 并带上 `/etc/rc.conf` 中的 `ntpd_flags` 所指定的参数。 例如：

    # ntpd -p /var/run/ntpd.pid

## 29.10.5 在临时性的 Internet 连接上使用 ntpd

ntpd(8) 程序的正常工作并不需要永久性的 Internet 连接。 然而， 如果您的临时性连接是配置为按需拨号的， 那么防止 NTP 通讯频繁触发拨号， 或保持连接就有必要了。 如果您使用用户级 PPP， 可以使用 `filter` 语句， 在 `/etc/ppp/ppp.conf` 中进行必要的设置。 例如：

     set filter dial 0 deny udp src eq 123
     # Prevent NTP traffic from initiating dial out
     set filter dial 1 permit 0 0
     set filter alive 0 deny udp src eq 123
     # Prevent incoming NTP traffic from keeping the connection open
     set filter alive 1 deny udp dst eq 123
     # Prevent outgoing NTP traffic from keeping the connection open
     set filter alive 2 permit 0/0 0/0

要了解进一步的信息， 请参考 ppp(8) 的 `PACKET FILTERING`(包过滤) 小节， 以及 `/usr/share/examples/ppp/` 中的例子。

> 注意: 某些 Internet 访问提供商会阻止低编号的端口， 这会导致 NTP 无法正常工作， 因为响应无法到达您的机器。

## 29.10.6 进一步的信息

关于 NTP 服务器的文档， 可以在 `/usr/share/doc/ntp/` 找到 HTML 格式的版本。

上一页 | 起始页 | 下一页
为 Microsoft® Windows® 客户机提供文件和打印服务 (Samba) | 上一级 | 使用 `syslogd` 记录远程主机的日志

本文档和其它文档可从这里下载：ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题，请先阅读文档，如不能解决再联系<questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.