Настройка сервера точного времени на базе NTP

Для работы сложной инфраструктуры, когда много сервисов работают одновременно очень важно иметь в пределах общего IT пространства одинаковое время на всех серверах. Самое удобное это делать с помощью автоматической синхронизацией с серверами точного времени. В большинстве случаев можно пользоваться общедоступными серверами, которых довольно много в интернете. Но в случае организации замкнутой среды, да и вообще для тех кто предпочитается все контролировать, хорошим вариантом будет организация своего собственного сервера точного времени, а лучше двух, для надежности.

     Использовать для своей синхронизации они будут сервера из того же интернета, и для достижения большей точности (stratum 2 и выше) будем выбирать наиболее точные и надежные. Список серверов по регионам можно подсмотреть тут http://support.ntp.org/bin/view/Servers/StratumOneTimeServers . Как правило стабильных открытых серверов со stratum 1 (непосредственно подключенных к источнику точного времени) не так много и нагрузка на них довольно большая. Поэтому создания своего сервера для синхронизации это в том числе пусть снять лишнюю нагрузку с них и получить свой стабильный сервер для точного времени.
     Для настройки возьмем старый, добрый сервер NTP. Не важно на какой версии ОС вы будете ее ставить, конфиг одинаков везде. Выложу сразу итоговую конфигурацию и потом расскажу что к чему и зачем.
 interface listen 10.11.12.2
 interface listen 188.8.88.8
 interface drop 10.11.12.1
 interface drop 188.8.88.8
 interface ignore wildcard
 interface drop lo

 server 91.226.136.139
 server 195.91.239.8
 server 95.140.94.2
 server 77.234.201.218
 server 77.37.146.85

 driftfile /var/lib/ntp/ntp.drift
 logconfig =all
 logfile /var/log/ntpd.log

 restrict default ignore
 restrict 127.0.0.1

 restrict 91.226.136.139 noquery notrap
 restrict 195.91.239.8 noquery notrap
 restrict 95.140.94.2 noquery notrap
 restrict 77.234.201.218 noquery notrap
 restrict 77.37.146.85 noquery notrap

 restrict 10.11.12.0 mask 255.255.255.0 nomodify notrap
 restrict 10.14.0.0 mask 255.255.0.0 nomodify notrap
     Итак, что есть что
 interface listen 10.11.12.2
 interface listen 188.8.88.8
 interface drop 10.11.12.1
 interface drop 188.8.88.8
 interface ignore wildcard
 interface drop lo
     В этом блоке мы определяем на каких интерфейсах и адресах мы разрешим работать NTP, а где запрещаем если надо.
 server 91.226.136.139
 server 195.91.239.8
 server 95.140.94.2
 server 77.234.201.218
 server 77.37.146.85
     Здесь прописываем сервера к которым мы будем обращаться за синхронизацией, среди них есть несколько stratum 1 так, итоговый stratum нашего сервера будет на уровне 2.
 driftfile /var/lib/ntp/ntp.drift
 logconfig =all
 logfile /var/log/ntpd.log
     Внутренние настройки NTP по поводу того где будет лежать логи, drift-файл и уровень логирования
 restrict 91.226.136.139 noquery notrap
 restrict 195.91.239.8 noquery notrap
 restrict 95.140.94.2 noquery notrap
 restrict 77.234.201.218 noquery notrap
 restrict 77.37.146.85 noquery notrap

 restrict 10.11.12.0 mask 255.255.255.0 nomodify notrap
 restrict 10.14.0.0 mask 255.255.0.0 nomodify notrap
     Настройки того кому можно и как обращаться к данному серверу, кому попало лазать не следует, раз мы делаем приватный сервер только для своих. В случае желания сделать открытый сервер для всех настройки будут уже совсем другие. Но это история для другой статьи совсем.

Запускаем сервер и смотрим что он выдает по своим пирам, у меня после некоторого времени работы получилось примерно так

 #ntpq -p
      remote           refid      st t when poll reach   delay   offset  jitter
 ==============================================================================
 +n44.time2.d6.hs .GPS.            1 u 1019 1024  377   44.560   -5.584   3.620
 *195.91.239.8    .PPS.            1 u  880 1024  377    8.200    1.835   0.801
 -95.140.94.2     194.190.168.1    2 u  700 1024  377    8.407    5.305   0.647
 -glavhost.com    194.190.168.1    2 u  939 1024  377    8.340    4.098  46.622
 +broadband-77-37 46.46.152.214    2 u  793 1024  377    9.088    0.569   0.432
Теперь можно настроить клиента, как ни удивительно но это опять таки будет NTP
Для клиентов конфиг выглядит вот таким образом:
server 10.11.12.2 prefer
server 10.11.13.2 prefer
driftfile /var/lib/ntp/ntp.drift
logfile /var/log/ntpd.log
restrict default ignore
restrict 127.0.0.1
restrict 10.11.12.2 noquery notrap
restrict 10.11.13.2 noquery notrap
restrict 10.11.12.0 mask 255.255.248.0 nomodify notrap
     Урезанная версия конфига нашего верхнего сервера, где в качестве пиров для получения точного времени указаны сервер (ы) который мы настроили перед этим. Дав ему поработать немного, чтобы синхронизироваться и выполнив ntpq
# ntpq -p
      remote           refid      st t when poll reach   delay   offset  jitter
 ==============================================================================
 +10.11.12.2    195.91.239.8     2 u  947 1024  377    0.157    1.241   1.148
 *10.11.13.2  195.91.239.8     2 u  847 1024  377    0.158   -0.689   0.194
     Как то так. Как видно, наши корневые сервера определяются как stratum 2, что в общем-то неплохо и для большинства задач хватает, если вам требуется точность на уровне stratum 1, что в общем-то маловероятно, то нужно приобретать устройство GPRS, Glonass или любое другое имеющее возможность получать данные о точном времени, и которое можно подключить к серверу и получать с него данные. Но это совсем другая задача.