FreeBSD时间同步配置
服务器时间不准确,会让日志先后顺序难以判断,也可能影响证书有效期判断和带时间限制的身份认证。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
- 本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。
- 本站原创内容未经允许不得转载,转载请注明出处“站长百科”和原文地址。