NTP-服务器搭建和使用

介绍

NTP (Network Time Protocol) 服务, 用于提供准确的时间同步给客户端设备.

它通过与时间服务器进行通信, 获取准确的时间信息并将其应用到本地系统中. 其通常由专门的时间服务器提供商或组织管理和维护. 这些服务器通过使用高精度的原子钟或 GPS 接收器等可靠的时间源来确保提供准确的时间.

客户端设备可以通过与 NTP 远程服务器进行通信, 从服务器获取时间信息并将其应用到本地系统中.

计算机内部所记录的时钟是记载于 BIOS (CMOS) 内的, 如果计算机电池没电, 或 BIOS 数据被清除, 则会导致计算机时间不准, 此时则需要调整.

NTP 服务会占用 123 端口.

相关概念

时区以及 GMT

地球共分为 24 个时区 (对应一天 24 小时制).

其通过经纬度来划分, 以英国格林威治为经度 0 开始, 每 15 度角为一个时区. (共 360 度). 格林威治以东为 “+小时”, 以西为 “-小时”.

而格林威治时间则称为 GMT (Greenwich Mean Time).

“GMT + 8” 的意思就是比格林威治时间快 8 小时. (东八区)

UTC

Coordinated Universal Time (UTC, 基于英语和法语的缩写), 其基于 Atomic Clock (原子钟) 计算时间. 也称为标准时间.

原子钟主要是利用计算芯片的原子震荡周期来计时的. 但由于每种芯片都有自己独特的震荡周期, 因此会有些差异, 导致快/慢几秒.

软件时钟和硬件时钟

软件时钟指 Linux 操作系统从 1970/01/01 开始计算的总秒数.

硬件时钟指主机硬件上的时钟如 BIOS 记录的时间.

工作流程

  1. NTP server 启动 daemon
  2. Client 向 NTP Server 发送调校时间的 message
  3. NTP server 接收到 message 后回复目前的标准时间
  4. Client 用收到的标准时间进行调整

NTP 是 C/S 架构, 在设定 NTP Server 时, 先选择多部上层的 Time server 为自身校准.

安装

1
dnf intall -y ntp tzdata
  • ntp 软件包提供 NTP 的配置文件以及执行文件
  • tzdata (Time Zone data) 提供各时区对应的显示格式

重要文件和命令

  • /etc/ntp.conf, NTP 的主配置文件
  • /usr/share/zoneinfo, tzdata 提供的各时区的时间格式文件
  • /etc/sysconfig/clock, 设定时区以及配置是否使用 UTC 时钟. Linux 开机后会自动读取这个文件来设置系统默认显示时间
  • /etc/localtime, clock 文件中指定的时间配置文件的备份

命令有:

  • /bin/date, 修改和显示 Linux 软件时间
  • /usr/bin/hwclock, 修改和显示 BIOS 硬件时间 (hwclock 指 “hardware clock”)
  • /usr/sbin/ntpd, 提供 NTP 服务
  • /usr/sbin/ntpdate, 客户端时间矫正

时间调整示例

若想将时区修改为美国纽约:

1
2
3
4
5
# date
# vim /etc/sysconfig/clock
ZONE="America/New_York"
# cp /usr/share/zoneinfo/America/New_York /etc/localtime
# date

服务端配置

修改 /etc/ntp.conf 文件.

访问控制

若想仅对一个网段内提供服务, 可以用 restrict 指令来控制 (管理权限), 语法为:

1
restrict [IP] mask [netmast_IP] [parameter]

[parameter] 可以指定多个.

可用的 [parameter] (提供约束) 主要为:

  • ignore, 拒绝所有类型的 NTP 连接
  • nomodify, 客户端不能通过 ntpcntpq 命令来修改服务器的时间参数, 但客户端可以用这台主机来进行网络校时
  • noquery, 客户端不能用 ntpq, ntpc 命令来查询时间服务器 (也就是不提供 NTP 网络校时)
  • notrap, 不提供 trap 远程事件登录
  • notrust, 拒绝没有认证的客户端

若不添加参数, 则为, 不受任何限制.

设定上层服务器

server 指令, 语法为:

1
server [IP or hostname] [prefer]

[prefer] 表明是否优先使用.

记录时间差异

driftfile 指令, 将时间差异记录到一个文件中, 语法为:

1
driftfile [能够被 ntpd 写入的目录和文件]

这里的时间差异指, NTP server 本身的震荡周期频率与客户端主机的频率之间的误差.

设置客户认证

keys 指令:

1
keys [key_file]

(暂时忽略)

配置示例

1
2
3
4
5
6
7
8
9
10
restrict default kod nomodify notrap nopeer noquery # 拒绝 IPv4 的用户
restrict -6 default kod nomodify notrap nopeer noquery # 拒绝 IPv6 的用户
restrict 220.130.158.71 # 放行一台主机
restrict 59.124.196.83
restrict 127.0.0.1 # 放行本机
restrict -6 ::1
restrict 192.168.100.0 mask 255.255.255.0 nomodify # 放行一个网段

server 220.130.158.71 prefer
server 59.124.196.83

注意设置的上层服务器也需要先放行才行.

服务启动和使用

1
2
systemctl start ntpd.service
netstat -ntplu | grep ntp

确认 NTP 服务器是否顺利更新时间

1
ntpstat

或:

1
ntpq -p

客户端时间更新

手动校准

date 调整软件时间:

1
date MMDDhhmmYYYY

hwclock 调整硬件时间:

1
hwclock [-rw]
  • -r, --read, 读取当前的 BIOS 内的时间参数
  • -w, --write, 将当前 Linux 系统时间写入 BIOS

即, 先用 date 调整, 然后用:

1
hwclock -w

修改.

网络校时

使用 ntpdate 命令.

注意 ntpd 服务开启时, 不能运行 ntpdate (即 NTP 服务器不可以使用 ntpdate)

语法为:

1
ntpdate [-dv] [NTP IP/hostname]
  • -d, 进入 “debug” 模式, 显示更多有效信息
  • -v, 显示较多信息

如:

1
ntpdate 192.168.100.254

NTP-服务器搭建和使用
http://example.com/2024/03/07/NTP-服务器搭建和使用/
作者
Jie
发布于
2024年3月7日
许可协议