Точное время! Для всех! Даром!

Итак, я это сделал. После написания поста про настройку точного времени на домашнем компьютере я всерьез задумался о том, чтобы присоединиться к тем добровольцам, которые где-то берут точное время и потом раздают его всем желающим. Практически все необходимое для этого у меня уже было:
- постоянно работающий сервер уже настроенным и работающим ntpd;
- безлимитный скоростной интернет;
- постоянный внешний IP-адрес.

Оставалось самое интересное - найти несколько надежных источников точного времени первого уровня и подключиться к ним. Причем рекомендуется выбирать географически близкие, чтобы погрешность от времени распространения сигнала была минимальной. Это, в сущности оказалось несложно: на сайте pool.ntp.org есть примерный список, в котором есть и российские сервера (преимущественно это всякого рода научные учреждения). Я решил подойти к вопросу со всей основательностью, отправил каждому заявку на использование. По большей части это формальность, рекомендуемая правилами хорошего тона, поскольку почти все эти сервера открытые для публичного доступа. Но тем приятнее получить в ответ "Спасибо за уведомление, пользуйтесь на здоровье!"

А дальше уже дело техники. Настроил ntpd на синхронизацию с вышеупомянутыми источниками, поставил на роутере проброс 123 порта на сервер, убедился в том, что NTP-сервис доступен извне, зарегистрировал IP-адрес на pool.ntp.org и стал ждать.

Прежде чем предоставить мой сервер во всеобщее использование, его почти целый день испытывали, чтобы убедиться в его пригодности :) Специальная программа-монитор регулярно проверяет доступность, надежность и точность всех серверов в кластере, и те, кто по каким-либо характеристикам не соответствует норме, выводятся из обслуживания. И вот, наконец, меня присоединили к кластеру остальных добровольцев и на мой сервер стали поступать запросы со всех уголков России. Пока около 1000 запросов в сутки - нагрузка, сами понимаете, совершенно неощутимая, к тому же ее можно регулировать, указав в профиле примерную "толщину" своего канала. На сайте обещают поток порядка миллиона запросов в сутки - возможно, доживем и до таких величин :) В любом случае, это капля в море по сравнению с мощностью сервера и пропускной способностью канала, поэтому выполнению основных задач абсолютно не мешает.

Так что, господа, берите точное время на российском сегменте сервиса по адресу ru.pool.ntp.org! На сегодняшний день там 87 серверов, и один из них - мой :)

Update: Начиная с апреля 2015 года - ee.pool.ntp.org :)

Комментарии

/usr/home/admin# crontab -l
#[мин] [час] [числа] [месяц] [дни_недели] [команда]
# отключение отправки отчета о выполнении задания на email: > /dev/null 2>&1
*/59 * * * * /usr/sbin/ntpdate md.pool.ntp.org > /dev/null 2>&1

Что-то вроде этого у меня ). Правда, я не предоставляю ничего для других пользователей.

Изображение myx

Имеет право на жизнь, но есть пара вопросов :)

1. А почему md? В России вроде живем?

2. А зачем делать это все через крон, если можно поставить ntpd, который будет синхронизировать время самостоятельно, автоматически определяя по каким-то своим хитрым алгоритмам, с кем и как часто надо синхронизироваться? Возможность раздавать время - это дополнительная фича ntpd, и по умолчанию она, по-моему, то ли вообще отключена, то ли включена только для локальной сети. Причем ntpd изначально настроен как раз на pool.ntp.org:

====
server 0.pool.ntp.org
server 1.pool.ntp.org
server 2.pool.ntp.org
server 3.pool.ntp.org
====

Чтобы было совсем уж кошерно, достаточно заменить *.pool.ntp.org на *.ru.pool.ntp.org, перезапустить ntpd - и готово :)

>> 1. А почему md? В России вроде живем?
Как-то не думал :-) Это Молдова, что ли? Надо будет поправить при случае )). Но, скорее всего, не буду. "Не трогай то, что и так хорошо работает"

>> 2.
А чем крон плох? Раз в час запускает синхронизацию и все счастливы. Да и лишний демон не висит. Во freebsd (а у меня именно она в данном случае) ntpd идет из коробки, кстати. В общем, меня устраивает :-)

Изображение myx

Она самая :) Там сейчас всего три сервера, кстати: http://www.pool.ntp.org/zone/md

Раз в час - это, вообще говоря, злоупотребление :) При нормально работающих аппаратных часах, наверное, и раз в сутки много. Ntpd как раз для того и нужен, чтобы самостоятельно определять по дрифту, как часто синхронизироваться и при необходимости менять эту величину в нужную сторону.

Ну и крон плох тем, что это крон :) Мне крон видится неким универсальным (и потому достаточно примитивным) запускатором всего, что не умеет запускаться само. А зачем замусоривать кронтаб тем, что и без крона прекрасно работает?

UPDATE. Да, по поводу злоупотреблений - самое главное забыл. На случай вольных или невольных злоупотреблений протокол NTP включает в себя такую штуку как "Kiss of death" - это специальный пакет, который сервер отсылает задолбавшему клиенту, прежде чем забанить, уведомляя его, что ему отказывается в обслуживании. Согласно протоколу, клиент, получивший такой пакет, обязан перестать долбиться к данному конкретному серверу.

Так вот, ntpd перестанет, а ntpdate, запускаемый по крону - нет. Потому что ntpdate - это императив: "пойди к тому серверу и принеси Мне от него время". А ntpd - это общая постановка задачи: "вот тебе список серверов, иди к ним и говори с ними, и поддерживай время Мое в актуальном состоянии".

Так что ntpd во всех отношениях политкорректнее и потому идеологически вернее :)

Изображение myx

Вот, кстати, хорошая статья про настройку ntpd под фрей: http://www.lissyara.su/articles/freebsd/tuning/ntp_settings/

Лиссяровский сайт хорошо знаю. Делал по этой статье как-то. Но для моих целей оказалось удобнее и быстрее сделать именно через крон )

Немного экспериментов:
/usr/home/wmt-adm# /usr/sbin/ntpdate ru.pool.ntp.org
11 Aug 21:20:57 ntpdate[3272]: step time server 93.91.6.81 offset 0.614904 sec
/usr/home/wmt-adm# /usr/sbin/ntpdate md.pool.ntp.org
11 Aug 21:21:07 ntpdate[3273]: adjust time server 193.226.65.36 offset 0.008279 sec
/usr/home/wmt-adm# /usr/sbin/ntpdate us.pool.ntp.org
11 Aug 21:21:26 ntpdate[3274]: adjust time server 64.113.32.10 offset 0.001279 sec
/usr/home/wmt-adm# /usr/sbin/ntpdate uk.pool.ntp.org
11 Aug 21:21:36 ntpdate[3275]: adjust time server 82.113.154.206 offset -0.008717 sec
/usr/home/wmt-adm# /usr/sbin/ntpdate ru.pool.ntp.org
11 Aug 21:21:44 ntpdate[3276]: adjust time server 93.91.6.81 offset -0.007374 sec

Изображение myx

А вот так делать нечестно :) Нужно использовать параметр -q, иначе первый источник заведомо в проигрыше. Не говоря уже о том, что единичный запрос к пулу - не показатель, там сервера случайным образом выбираются.

vlad@bfly-server:/$ ntpdate -q ru.pool.ntp.org md.pool.ntp.org us.pool.ntp.org uk.pool.ntp.org
server 212.192.253.168, stratum 2, offset 0.001722, delay 0.03960
server 193.226.65.36, stratum 1, offset -0.066846, delay 0.23170
server 89.28.86.96, stratum 2, offset -0.000891, delay 0.09816
server 95.65.63.19, stratum 2, offset -0.002620, delay 0.09937
server 208.53.158.34, stratum 2, offset -0.011408, delay 0.15877
server 91.220.127.202, stratum 2, offset -0.002094, delay 0.06444
11 Aug 21:44:17 ntpdate[2596]: adjust time server 212.192.253.168 offset 0.001722 sec