Назад | Перейти на главную страницу

Синхронизация часов Ubuntu с другим компьютером с помощью NTP

Цель

Для синхронизации часов машины A (Ubuntu 18.04) с часами машины B (Ubuntu 16.04 в локальной сети, на которой работает сервер NTP - время примерно на 10 минут опережает реальное время).

Мое исследование

Я новичок в NTP и немного запутался в доступных пакетах и ​​командах: ntpd, ntpq, timesyncd, timedatectl и т. Д. Очевидно, некоторые из них взаимодействуют, а другие конфликтуют. Любая помощь в прояснении этого вопроса будет оценена.

Что я пробовал

На машине A:

$ sudo apt-get install ntp

ntp.conf:

server 192.168.12.20 # NTP server (machine B)
server 127.127.1.0
fudge 127.127.1.0 stratum 10

driftfile /var/lib/ntp/ntp.drift

leapfile /usr/share/zoneinfo/leap-seconds.list

Затем запускаем:

$ sudo service ntp stop
$ sudo ntpd -gq
11 Mar 14:35:50 ntpd[11344]: ntpd 4.2.8p10@1.3728-o (1): Starting
11 Mar 14:35:50 ntpd[11344]: Command line: ntpd -gq
11 Mar 14:35:50 ntpd[11344]: proto: precision = 0.128 usec (-23)
11 Mar 14:35:50 ntpd[11344]: leapsecond file ('/usr/share/zoneinfo/leap-seconds.list'): good hash signature
11 Mar 14:35:50 ntpd[11344]: leapsecond file ('/usr/share/zoneinfo/leap-seconds.list'): loaded, expire=2019-12-28T00:00:00Z last=2017-01-01T00:00:00Z ofs=37
11 Mar 14:35:50 ntpd[11344]: leapsecond file ('/usr/share/zoneinfo/leap-seconds.list'): expired less than 75 days ago
11 Mar 14:35:50 ntpd[11344]: Listen and drop on 0 v6wildcard [::]:123
11 Mar 14:35:50 ntpd[11344]: Listen and drop on 1 v4wildcard 0.0.0.0:123
11 Mar 14:35:50 ntpd[11344]: Listen normally on 2 lo 127.0.0.1:123
11 Mar 14:35:50 ntpd[11344]: Listen normally on 3 eth0 192.168.12.193:123
11 Mar 14:35:50 ntpd[11344]: Listen normally on 4 wlan0 10.1.11.171:123
11 Mar 14:35:50 ntpd[11344]: Listen normally on 5 lo [::1]:123
11 Mar 14:35:50 ntpd[11344]: Listen normally on 6 eth0 [fd06:b21a:9c69::242]:123
11 Mar 14:35:50 ntpd[11344]: Listen normally on 7 eth0 [fd06:b21a:9c69:0:3411:70bb:5786:e9f9]:123
11 Mar 14:35:50 ntpd[11344]: Listen normally on 8 eth0 [fd06:b21a:9c69:0:f474:e414:7210:dc9e]:123
11 Mar 14:35:50 ntpd[11344]: Listen normally on 9 eth0 [fe80::37ed:4c5:7941:3e6%3]:123
11 Mar 14:35:50 ntpd[11344]: Listen normally on 10 wlan0 [fe80::2e44:748b:5ae0:f2dd%7]:123
11 Mar 14:35:50 ntpd[11344]: Listening on routing socket on fd #27 for interface updates
11 Mar 14:46:14 ntpd[11344]: ntpd: time set +617.018832 s
ntpd: time set +617.018832s

На этом этапе дата правильно установлена ​​на дату машины A:

$ date
Wed Mar 11 14:46:33 CET 2020

Однако после повторного запуска службы ...

$ sudo service ntp start

Через несколько секунд часы вернутся обратно:

$ date
Wed Mar 11 14:36:41 CET 2020

Сверстники (показывает неожиданный 188. IP):

$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*_gateway        188.67.52.171    4 u  131  128  377   10.171  -11.526  16.139

Это смещение означает, что вы менее чем на 12 мс отличаются от пульта дистанционного управления. Ваш NTP-сервер не предоставляет желаемое время, или вы выполняете синхронизацию с чем-то другим, чем планировали.

Refid - это код, который партнер использует в качестве ссылки. IP-адрес означает сервер NTP. IP-адрес, которым вы не владеете, может быть общедоступной службой NTP, из пула NTP или иным образом. Просмотрите конфигурацию NTP на хосте 192.168.12.20 и все серверы NTP.

Если вы намереваетесь сохранить 10-минутное смещение от «реального» времени, вы не можете этого сделать, а также синхронизировать время из Интернета. Вместо этого имитируйте время, которое получают приложения, с настраиваемым часовым поясом или прокладками, такими как libfaketime.


127.127.1.0 не имеет смысла в современном ntpd. Определенно не в клиентских конфигурациях, которые не обслуживают время. Удалите обе линии.

После того, как ntpd установит дрейф, даже если нет серверов, он продолжит дисциплинировать часы. Добавление недисциплинированных локальных часов утверждает, что локальные часы подходят для обслуживания времени, что 1) вы не обслуживаете время с клиентского хоста 2) если 10-минутное смещение от времени, которое вы хотите, неточно. Думайте об этой функции как о более предназначенной для устройств NTP, подключенных к эталонным часам. Не товарные серверы.

Цитата из вики поддержки NTP относительно недисциплинированные местные часы:

Недисциплинированные местные часы, как правило, больше не используются. Пользователи ntp-4.2.2 и более поздних версий должны учитывать OrphanMode как средство поддержания синхронизации изолированной группы серверов. Недисциплинированные местные часы не резервное копирование экземпляра ntpd листового узла (т.е. только клиента).


Только один сервер NTP не может быть исправлен из-за фальшивых ошибок. В идеале разверните не менее 4 и используйте их все на всех клиентах.


Демоны синхронизации времени конфликтуют друг с другом. Две вещи бороться за то, чтобы установить часы по-другому, - это нехорошо. Установите и используйте только один из chrony, ntpd, systemd-timesyncd. Некоторые модули systemd (по крайней мере, Red Hat) не допускают запуска обоих, но не полагайтесь на это.

В итоге я использовал ntpdate и chrony вместо.

sudo apt-get install -y ntpdate chrony

Сначала я запускаю немедленное обновление, используя ntpdate:

sudo ntpdate 192.168.12.20

Затем я настраиваю сервер в /etc/chrony/chrony.conf

#pool ntp.ubuntu.com        iburst maxsources 4
#pool 0.ubuntu.pool.ntp.org iburst maxsources 1
#pool 1.ubuntu.pool.ntp.org iburst maxsources 1
#pool 2.ubuntu.pool.ntp.org iburst maxsources 2

server 192.168.12.20 minpoll 0 maxpoll 5 maxdelay .05

и начать chrony демон:

/etc/init.d/chrony start

Кажется, работает хорошо, работает со смещением менее 1 мс.