ubuntu安装和使用NTP

时间:2022-01-26 16:32:35

安装NTP

ntp在线安装方式很简单,只需要执行以下命令即可帮你安装好NTP以及所依赖的包。

sudo apt-get install ntp

安装完成后可以通过如下命令查看NTP服务是否启动:

service --status-all

或者

ps -aux | grep ntp

NTP的配置文件/etc/ntp.conf

使用server命令设定上层NTP服务器

设定方式:

server [address] [options...]

在server后面填写服务器地址(可以使IP或主机名),之后是命令参数主要包括autokey,brust,ibrust,key key,minpoll minpoll,maxpoll maxpoll,mode option,noselect,preempy,prefer,true,ttl ttl,version version,xleave。这里最长使用的prefer,表示优先使用的服务器。其它参数的详细说明可参考NTP的帮助文档。

使用restrict命令管理权限控制

设定方式:

restrict [address] mask [mask] [parameter]

其中parameter的参数主要有底下这些:

  • ignore: 拒绝所有类型的NTP联机;
  • nomodify: 客户端不能使用ntpc与ntpq这两个程序来修改服务器的时间参数,但客户端仍可透过这个主机来进行网络校时;
  • noquery: 客户端不能使用ntpq,ntpc等指令来查询时间服务器,等于不提供NTP的网络校时;
  • notrap: 不提供trap这个远程事件登录(remote event logging)的功能;
  • notrust: 拒绝没有认证的客户端;

如果你没有在 parameter 的地方加上任何参数的话,这表示该 IP 或网段不受任何限制。

使用driftfile记录时间差异

设定方式:

driftfile [可以被ntpd写入的目录与档案]

因为预设的 NTP Server 本身的时间计算是依据 BIOS 的芯片震荡周期频率来计算的,但是这个数值与上层 Time Server 不见得会一致啊!所以 NTP 这个 daemon (ntpd) 会自动的去计算我们自己主机的频率与上层 Time server 的频率,并且将两个频率的误差记录下来,记录下来的档案就是在 driftfile 后面接的完整档名当中了!关于档名你必须要知道:

  • driftfile 后面接的档案需要使用完整路径文件名;
  • 该档案不能是连结档;
  • 该档案需要设定成 ntpd 这个 daemon 可以写入的权限;
  • 该档案所记录的数值单位为:百万分之一秒 (ppm);

driftfile 后面接的档案会被 ntpd 自动更新,所以他的权限一定要能够让 ntpd 写入才行。

使用statsdir和filegen开启统计分析

设定方式:

statsdir directory_path
filegen name file filename [type type] [link | nolink] [enable | disable]

当打开统计分析是会在directory_path目录下产生filegen中所设定的统计文件。

NTP的启动与观察

配置文件

ntp即是服务器,又是客户端,只需要通过配置即可。根据上面的说明,我们最终可以取得这样的配置文件案内容。

# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help
# 时间差异文件
driftfile /var/lib/ntp/ntp.drift

# 分析统计信息
#statsdir /var/log/ntpstats/

statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable

# 上层ntp server.
pool 0.ubuntu.pool.ntp.org iburst
pool 1.ubuntu.pool.ntp.org iburst
pool 2.ubuntu.pool.ntp.org iburst
pool 3.ubuntu.pool.ntp.org iburst

# Use Ubuntu's ntp server as a fallback.
pool ntp.ubuntu.com

# 不允许来自公网上ipv4和ipv6客户端的访问
restrict -4 default kod notrap nomodify nopeer noquery limited
restrict -6 default kod notrap nomodify nopeer noquery limited

# 让NTP Server和其自身保持同步,如果在/etc/ntp.conf中定义的server都不可用时,将使用local时间作为ntp服务提供给ntp客户端.
restrict 127.0.0.1
restrict ::1

# Needed for adding pool entries
restrict source notrap nomodify noquery

# 允许这个网段的对时请求.
restrict 192.168.123.0 mask 255.255.255.0 nomodify 

# If you want to provide time to your local subnet, change the next line.
# (Again, the address is an example only.)
#broadcast 192.168.123.255

# If you want to listen to time broadcasts on your local subnet, de-comment the
# next lines. Please do this only if you trust everybody on the network!
#disable auth
#broadcastclient

#Changes recquired to use pps synchonisation as explained in documentation:
#http://www.ntp.org/ntpfaq/NTP-s-config-adv.htm#AEN3918

#server 127.127.8.1 mode 135 prefer # Meinberg GPS167 with PPS
#fudge 127.127.8.1 time1 0.0042 # relative to PPS for my hardware

#server 127.127.22.1 # ATOM(PPS)
#fudge 127.127.22.1 flag3 1 # enable PPS API

NTP运行

配置好ntp.conf文件后,通过如下命令重启NTP服务:

server ntp restart

NTP观察

重启后通过如下命令观察NTP的运行状态:

watch ntpq -p

ubuntu安装和使用NTP

这个命令可以列出目前我们的 NTP 与相关的上层 NTP 的状态,上头的几个字段的意义为:

  • remote: 它指的就是本地机器所连接的远程NTP服务器;
  • refid: 它指的是给远程服务器提供时间同步的服务器;
  • st: 远程服务器的层级别(stratum). 由于NTP是层型结构,有顶端的服务器,多层的Relay Server再到客户端。所以服务器从高到低级别可以设定为1-16. 为了减缓负荷和网络堵塞,原则上应该避免直接连接到级别为1的服务器的;
  • when: 几秒钟前曾经做过时间同步化更新的动作;
  • poll: 本地机和远程服务器多少时间进行一次同步(单位为秒).
    在一开始运行NTP的时候这个poll值会比较小,那样和服务器同步的频率也就增加了,可以尽快调整到正确的时间范围.之后poll值会逐渐增大,同步的频率也就会相应减小;
  • reach: 已经向上层 NTP 服务器要求更新的次数;
  • delay: 网络传输过程当中延迟的时间,单位为 10^(-6) 秒;
  • offset: 时间补偿的结果,单位与 10^(-3) 秒;
  • jitter: Linux 系统时间与 BIOS 硬件时间的差异时间, 单位为 10^(-6) 秒。简单地说这个数值的绝对值越小我们和服务器的时间就越精确;
  • *: 它告诉我们远端的服务器已经被确认为我们的主NTP Server,我们系统的时间将由这台机器所提供;
  • +: 它将作为辅助的NTP Server和带有号的服务器一起为我们提供同步服务. 当号服务器不可用时它就可以接管;
  • -: 远程服务器被clustering algorithm认为是不合格的NTP Server;
  • x: 远程服务器不可用;

要让你的 NTP Server/Client 真的能运作,在上述的动作中得注意:

  • 上述的 watch ntpq -p 的输出结果中,你的 NTP 服务器真的要能够连结上层 NTP 才行! 否则你的客户端将无法对你的
    NTP 服务器进行同步更新。
  • 你的 NTP 服务器时间不可与上层差异太多。

使用ntpdate更新时间

上面我们说到当本机与服务器时间相差太远,ntpd将无法同步成功。这是我们需要先使用ntpdate命令进行强制同步(在使用时需关掉ntpd进程)。
在终端运行如下命令:

sudo ntpdate server_ip

执行这个命令后(如果服务器有效)将立即更新本地时间。而上面所使用的ntpd对时间的更新是渐进式的。