Децентрализованный NTP в сети только со спорадическим подключением к Интернету?

У меня есть (в большинстве случаев) изолированная сеть, состоящая из нескольких компьютеров.

          computer 0 -- external NTP server
        / 
switch -- computer 1 -- external NTP server
        \  
          computer n -- external NTP server

В любой момент времени может быть доступно только небольшое подмножество соединений на приведенном выше графике. Особенно подключение к внешнему NTP-серверу не будет доступно большую часть времени.

Как я могу использовать chrony для синхронизации всех компьютеров без явных ролей клиент / сервер?

Требования:

  1. В любой момент времени может быть запущена только часть компьютеров. Они должны быть в состоянии получить и оставаться в синхронизации. Если запущен другой компьютер, он также должен быть синхронизирован. Абсолютное время не имеет значения (до тех пор, пока погрешность составляет несколько секунд / несколько минут). Важно то, что все компьютеры в сети синхронизированы.
  2. Спорадически любой из компьютеров может быть подключен к Интернету и должен иметь возможность получить правильное абсолютное время от внешнего NTP-сервера и распределить это время в локальной сети.

Я подумал о настройке каждого компьютера в сети с помощью внешнего NTP-сервера (изначально помеченного как автономный), а затем перечисления всех компьютеров как одноранговых узлов. Это правильный путь? Я не смог найти никакой информации о том, что происходит, если в сети есть только одноранговые узлы NTP без достижимого NTP-сервера. Будут ли часы приближаться к разумному времени или эта конфигурация станет нестабильной, так что общий дрейф может быть даже хуже, чем наихудший дрейф аппаратных часов одного компьютера в сети?


Редактировать:

Чтобы подчеркнуть мою идею для соответствующей конфигурации хронологии: Является ли следующий подход хорошей идеей?

/etc/chrony/chrony.conf на компьютере 0:

pool external.ntp.pool offline
peer computer_1
peer computer_2
peer computer_n
local stratum 10

/etc/chrony/chrony.conf на компьютере 1:

pool external.ntp.pool offline
peer computer_0
peer computer_2
peer computer_n
local stratum 10

И так далее...

2 ответа

Самое простое и лучшее (но не менее дорогое) решение вашей проблемы - установить в этой сети небольшое устройство радиочасов (либо GPS, либо WWVB/ коротковолновое). Устройства используют его в качестве сервера в конфигурации NTP, а затем взаимодействуют друг с другом для восстановления в случае сбоя устройства.

Поскольку широковещательный радиосигнал является односторонним, это будет соответствовать вашим требованиям безопасности для изоляции сети.

Устройства GPS и WWVB, выступающие в качестве серверов NTP, широко доступны по многим ценам.

Если сеть в любом случае не может принимать радиосигналы (подводная лодка, закаленный бункер и т. Д.), Это решение не будет работать. Но если это ваш сценарий, у вас, скорее всего, есть деньги на установку местного стандарта частоты какого-либо типа.

  1. Постарайтесь не делать этого. Согласно вашему ответу на ответ @rmalayter, NTP не является децентрализованным протоколом. Точное время зависит от "центральных" (т. Е. Высших слоев) серверов, предоставляющих время своим клиентам. Вам гораздо лучше иметь одну систему постоянно, поддерживая связь с внешними источниками времени. BeagleBone, Raspberry PI или аналогичная встроенная система - это простой и дешевый способ сделать это.
  2. Конфигурация, которую вы предложили, должна в основном работать. Я хотел бы предложить несколько вещей:
    • Не использовать offline - pool директива будет автоматически повторяться, когда chronyd запускает или восстанавливает подключение к сети.
    • добавлять orphan на ваш local линия - это функция NTP, специально разработанная для компенсации вашего сценария. Это приведет к тому, что один из пиров будет выбран локальным мастером, когда восходящее соединение недоступно.
    • Для хоста безвредно иметь свой собственный адрес в конфигурации как одноранговый: chronyd автоматически проигнорирует это. Это удобство, которое означает, что вы можете отправить одну и ту же конфигурацию на каждый хост.
Другие вопросы по тегам