Я работаю над некоторыми устройствами, где я хочу, чтобы они выполняли самосинхронизацию, пока их сетевое соединение не работает (то есть использовать расчеты скорости дрейфа chrony, чтобы компенсировать дрейф системных часов), а затем синхронизировать нормально, когда доступно удаленное подключение.
К сожалению, chronyd не может подключиться к порту прослушивания NTP и активно пытается отправлять пакеты на адрес псевдосервера NTP, и у меня возникают проблемы с определением, является ли это ожидаемым поведением или нет.
Стандарт chrony.conf
Для самосинхронизации рекомендуются следующие настройки:
server 127.127.1.0 # Self-synchronise
allow 127.0.0.0/8 # NTP server for the local system, not just a client
local stratum 10 # Serve low quality time even when the remote link is down
Однако когда я бегу chrony sources
с этой конфигурацией он утверждает, что он не синхронизировался с сервером псевдо-времени для localhost
:
chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^? 127.127.1.0 0 7 0 - +0ns[ +0ns] +/- 0ns
Даже если chrony tracking
похоже, предполагает, что он работает так, как ожидалось:
$ chronyc tracking
Reference ID : 7F7F0101 ()
Stratum : 10
Ref time (UTC) : Mon Jun 04 08:27:11 2018
System time : 0.000000007 seconds fast of NTP time
Last offset : +3.297439098 seconds
RMS offset : 3.297439098 seconds
Frequency : 466.833 ppm slow
Residual freq : +0.000 ppm
Skew : 0.000 ppm
Root delay : 0.000000000 seconds
Root dispersion : 0.000000000 seconds
Update interval : 0.0 seconds
Leap status : Normal
Как бы я ни настраивал allow
настройки в файле конфигурации I не может получить chronyd
чтобы отображаться как прослушивающий порт UDP 123
на любом из интерфейсов машины, тогда как я ожидал увидеть это в netstat -ulnp
если я успешно настроил его для работы в качестве сервера времени.
Еще более странно, если я сбегу chronyd
под strace -f
, Я вижу, что он пытается отправить сообщения на 127.127.1.0
, даже если он должен знать, что это псевдоадрес для синхронизации местного времени.
В настоящее время я очень мало уверен, что chrony
фактически компенсирует дрейф часов, когда удаленное соединение не работает, поскольку сложно спровоцировать ситуацию, когда оно на самом деле делает необходимо автоматически корректировать отклонение часов.
Итак, мой актуальный вопрос: кто-нибудь знает, как определить, правильно ли настроен chrony для самосинхронизации в автономном режиме? Или мне просто нужно развернуть это в том виде, в каком он у меня сейчас настроен, а затем подождать и посмотреть, есть ли у нас проблемы с дрейфом часов, когда устройства отключены от своего внутреннего сервера управления?
Возможно, вы захотите рассмотреть информацию на
https://chrony.tuxfamily.org/doc/3.3/chrony.conf.html
согласно тому, что написано на Изолированные сети.
Есть несколько вариантов, которые помогут настроить время псевдо-времени. Особенно вам может быть интересен этот парраграф:
Если нет подходящего компьютера, который можно было бы назначить мастером, или существует требование поддерживать синхронизацию клиентов даже в случае сбоя, опция orphan локальной директивы включает специальный режим, в котором мастер выбирается из нескольких компьютеров автоматически. Все они должны использовать одну и ту же локальную конфигурацию и опрашивать друг друга. Сервер с наименьшим ссылочным идентификатором (который основан на его IP-адресе) возьмет на себя роль мастера, а другие будут синхронизироваться с ним. В случае сбоя сервер со вторым наименьшим ссылочным идентификатором вступает во владение и так далее.
Но как я понимаю из документации требуется несколько серверов.
О том, что ваш сервер выглядит синхронизированным, возможно, этот сценарий может относиться к вам: https://chrony.tuxfamily.org/faq.html#_computer_is_not_synchronising
Проверить
Reach
значение, напечатанное хроникомsources
команда. Если он равен нулю, это означает, что chronyd не получил никаких действительных ответов от сервера NTP, который вы пытаетесь использовать.
Также в Руководстве объясняется local
Директива
местный [вариант]…
Директива local включает режим локальной ссылки, который позволяет chronyd, работающему в качестве NTP-сервера, синхронизироваться с реальным временем (с точки зрения клиентов, опрашивающих его), даже если он никогда не синхронизировался или последнее обновление часов происходило долгое время. тому назад.
Таким образом, это может дать время синхронизации, хотя это неправда
Мне удалось найти проблему: возникла посторонняя port 0
в существующем файле конфигурации, с которого я начал, поэтому allow
Линия неправильно настраивала локальный сервер времени. Удалите эту строку, и все заработало так, как я ожидал.
Это означает, что ответ на мой первоначальный вопрос - «Делай то, что ты сделал»:
sudo netstat -ulnp
показывает chronyd
прослушивание порта NTP (UDP 123)sudo chronyc sources
показывает 127.127.1.0
как доступный источникТот факт, что эти проверки не прошли для меня, точно отражает тот факт, что port 0
установка неправильная.