数字化技能提升教程,数字化时代生存宝典

FreeBSD时间同步配置

浏览:58

服务器时间不准确,会让日志先后顺序难以判断,也可能影响证书有效期判断和带时间限制的身份认证。FreeBSD 可以使用基础系统中的 ntpd 持续同步时间。配置时不仅要让服务启动,还要确认它实际选中了可靠的上游时间源。

一、先区分时区错误和时钟偏移

本教程以 FreeBSD 基础系统中的 ntpd 为例,不适用于已经改用其他 NTP 软件的配置。修改系统设置及管理服务的命令以 root 身份执行。

先查看本地时间和 UTC 时间:

date '+%Y-%m-%d %H:%M:%S %Z %z'
date -u '+%Y-%m-%d %H:%M:%S UTC'

如果时间与预期固定相差几个小时,先检查显示时区,不要直接手动拨动系统时钟。

进入时区选择工具:

tzsetup

按服务器实际使用需求选择地区。时区控制本地时间的显示方式,NTP 同步的是系统时钟,两者不能相互替代。

若主机属于虚拟化环境,还应确认没有多套持续校时机制互相调整系统时间。不能仅凭虚拟机管理平台显示“时间正常”就省略来宾系统的同步检查。

二、检查现有服务并备份配置

检查版本、服务和相关进程:

freebsd-version -u
service ntpd status
ps ax -o pid,command | grep -E '[n]tpd|[c]hronyd'

如果正在使用其他时间同步服务,先确认保留哪一套方案,再进行调整。

修改前备份:

cp -ip /etc/ntp.conf /etc/ntp.conf.before-ntpd
cp -ip /etc/rc.conf /etc/rc.conf.before-ntpd

-i 会在备份文件已经存在时询问是否覆盖。已有备份需要继续保留时,应换一个文件名。

检查是否配置了自定义配置文件路径:

sysrc -n ntpd_config

默认通常使用 /etc/ntp.conf。如果输出的是其他路径,后续应编辑实际生效的文件,不能改完默认文件后就认为配置已经生效。

三、配置上游时间源

使用编辑器打开实际生效的配置文件:

ee /etc/ntp.conf

以下是用于说明核心设置的配置示例。已有企业时间源或额外设置时,应逐项合并,不要直接覆盖整个文件:

tos minclock 3 maxclock 6

pool 0.freebsd.pool.ntp.org iburst
pool 2.freebsd.pool.ntp.org iburst

restrict default limited kod nomodify notrap noquery nopeer
restrict source limited kod nomodify notrap noquery

restrict 127.0.0.1
restrict ::1

leapfile "/var/db/ntpd.leap-seconds.list"

其中:

  • pool:从指定服务器池选择上游。
  • iburst:用于加快首次建立时间同步的过程。
  • tos minclock 和 maxclock:控制选择时间源的相关目标。
  • restrict:限制外部查询、修改及关联行为。
  • 两条回环地址规则:允许本机进行状态查询。
  • leapfile:指向闰秒信息文件,应与本机相关配置保持一致。

这组限制规则仍允许外部时间查询,不代表服务完全不对外响应。只把服务器用作时间客户端时,可在防火墙限制不必要的外部访问,同时保留向上游发送 NTP 请求及接收响应的通信。

如果企业或云平台提供指定时间源,可以使用相应的 server 主机名 iburst 条目。先核对使用要求,不要把不可达的示例域名保留在正式配置中。

NTP 使用 UDP 123,普通 TCP 端口检测不能验证 NTP 是否正常。

四、启用ntpd

设置开机启动:

sysrc ntpd_enable="YES"

首次启用时执行:

service ntpd start
service ntpd status

如果服务原本已运行,修改配置后使用:

service ntpd restart

服务启动成功只说明进程已运行,不代表已经完成时间同步。接下来必须检查时间源状态。

时间偏差很大时怎么办

当时间偏差过大,ntpd 可能记录错误后退出。如果已确认允许启动阶段进行较大幅度的校时,可以设置:

sysrc ntpd_sync_on_start="YES"

这个设置允许 ntpd 在启动阶段接受一次较大的时间校正,不等于每次重启都必然调整到某个固定时间。

对于正在处理交易、签名校验或定时任务的服务器,时间跳变可能影响业务。应先安排维护时间,再重启 ntpd,不要把反复重启服务当成日常校时手段。

五、验证是否真正同步

查看上游状态:

ntpq -pn 127.0.0.1

重点看以下信息:

  • remote:上游时间源,前面的 * 表示当前选中的系统时间源。
  • +:参与后续选择或组合的候选源。
  • reach:以八进制显示的近期可达性记录。
  • delay:网络往返延迟,单位为毫秒。
  • offset:估计的时间偏差,单位为毫秒。
  • jitter:偏差变化程度,单位为毫秒。

reach 为 377 表示最近八次轮询均有响应,不是377次请求。服务刚启动时暂时为0,也不能立即判定同步失败。

还可以查看系统变量:

ntpq -c rv 127.0.0.1

观察是否已处于同步状态,并结合上游选择结果、偏差和日志判断。不要只凭 service ntpd status 显示进程存在就结束检查。

六、同步失败时的排查顺序

1、检查域名解析

getent hosts 0.freebsd.pool.ntp.org
getent hosts 2.freebsd.pool.ntp.org

如果无法得到地址,先修复主机的 DNS 配置。上游域名无法解析时,继续重启 ntpd 通常不会解决问题。

2、检查本地UDP套接字

sockstat -46 -P udp -p 123

该命令帮助确认本地是否有相关套接字及所属进程,但本地存在 UDP 123 套接字,不代表上游响应已经返回。

3、查看服务日志

grep -i ntpd /var/log/messages | tail -n 50

如果系统使用自定义日志路径,应查看实际日志。

重点关注配置解析失败、时间偏差过大、文件权限、域名解析及通信异常。结合错误内容处理,不要一看到无法同步就删除全部访问限制。

4、核对网络策略

检查主机防火墙、云安全组和出口网络是否允许向选定上游发起 UDP 123 通信,并接收相应响应。

如果公网时间源无法稳定访问,而环境内有可信的内部时间服务,可以改用内部时间源后重新验证。

5、检查本机查询是否被限制

如果 ntpq 查询本机超时,应同时检查服务状态和回环地址限制规则。状态查询被拒绝与上游校时失败是两个问题,不能直接画等号。

七、配置错误后的恢复

如果刚修改的配置导致 ntpd 无法启动,先核对备份文件,再恢复:

cp -p /etc/ntp.conf.before-ntpd /etc/ntp.conf
service ntpd restart

此处只适用于服务实际使用 /etc/ntp.conf 的情况。

rc.conf 中可能包含修改后新增的其他系统设置,不宜直接整份覆盖。应比较备份与当前文件,仅撤销本次调整的 ntpd 相关选项。

恢复配置后仍要重新执行 ntpq 验证。文件恢复成功与时间同步恢复正常,是两个不同的检查步骤。

八、常见问题

1、时区已经设为本地,为什么还需要NTP?

时区只决定时间如何显示,不会纠正时钟走快或走慢。需要持续校准时钟时,仍应使用时间同步服务。

2、ntpd启动后为什么没有立即出现星号?

服务需要与上游交换数据并完成选择。应等待一段时间观察,若持续没有有效时间源,再检查网络、配置和日志。

3、是否需要在定时任务里反复运行校时命令?

使用常驻 ntpd 时,通常不需要再定时运行另一套拨钟命令。先确认常驻服务是否正常同步,避免多个程序同时调整时钟。

4、Jail内部需要单独部署ntpd吗?

普通 Jail 通常使用宿主机的系统时钟,应优先在宿主机完成校时。不要照搬普通主机的步骤,在每个 Jail 中重复启动校时服务。

广告合作

广告合作

QQ群号:4114653

QQ群号:4114653

温馨提示:
  1. 本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。
  2. 本站原创内容未经允许不得转载,转载请注明出处“站长百科”和原文地址。