На днях я обнаружил, что на домашнем сервере время убежало вперёд аж на 15 минут. Я был удивлён этим фактом, так как думал что в Linux происходит автоматическая синхронизация времени с NTP-серверами. В общем так оно и есть, но почему-то в Ubuntu 9.04 «Jaunty Jackalope» в конфигурационном файле /etc/default/ntpdate было указано:
# Set to "yes" to take the server list from /etc/ntp.conf, from package ntp, # so you only have to keep it in one place. NTPDATE_USE_NTP_CONF=yes
Что означает, что нужно смотреть список серверов в файле /etc/ntp.conf, который появляется только после установки пакета ntp.
Видимо предполагается, что если этого файла не существует, то нужно обращаться к серверам, указанным в этом же файле. Но у меня это почему-то не происходило.
Из сложившейся ситуации я вижу как минимум два выхода:
- Установить пакет ntp;
- Исправить значение параметра с «yes» на «no».
В первом случае на сервере будет установлен NTP-сервер и появиться возможность синхронизировать время всех локальных компьютеров с ним (внеся изменения в параметр NTPSERVERS в файле /etc/default/ntpdate на компьютерах-клиентах). Этот вариант я и выбрал:
sudo aptitude install ntp
Для домашней и корпоративной сети обновляться можно с серверов уровня 2 (stratum 2), которые в свою очередь синхронизируются с серверами уровня 1, а те в свою очередь сверяются с высокоточными часами, например, с системой GPS, ГЛОНАСС или атомным эталоном времени.
Сервера уровня два есть у каждого провайдера, а значит можно синхронизироваться с ними. Для того чтобы проверить какого уровня сервер нужно выполнить:
ntpdate -q ntp.ubuntu.com
где
ntp.ubuntu.com — сервер, указанный по-умолчанию в Ubuntu. Вместо него этой команде можно передать имя любого другого NTP-сервера, или его IP-адрес.
Ответ будет примерно таким:
ntpdate -q ntp.ubuntu.com server 91.189.94.4, stratum 2, offset -0.015269, delay 0.08423 20 Jul 07:44:10 ntpdate[2915]: adjust time server 91.189.94.4 offset -0.015269 sec
Для настройки NTP-сервера используется конфигурационный файл /etc/ntp.conf.
Для добавления дополнительных NTP-серверов вставьте строки в формате «server “address”». Мой список серверов выглядит так:
# You do need to talk to an NTP server or two (or three). server ntp21.imvp.ru server ntp.ubuntu.com
После внесения изменений в файл /etc/ntp.conf необходимо перезапустить NTP:
sudo /etc/init.d/ntp restart
Так как NTP использует 123 udp-порт для соединения с NTP сервером, то может понадобиться добавить правила в фаервол:
# NTP outgoing client request iptables -A output -p udp -s 192.168.1.1 --sport 1024:65535 -d 0/0 --dport 123 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A input -p udp -s 0/0 --sport 123 -d 192.168.1.1 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
Теперь NTP-сервер настроен и с ним можно сверяться.
> Видимо предполагается, что если этого файла не существует, то нужно обращаться к серверам, указанным в этом же файле.
В /etc/default/ntpdate сказано (про NTPSERVERS):
# Not used if NTPDATE_USE_NTP_CONF is yes.
Т.ж. в /etc/default/ntpdate сказано (первая строчка):
# The settings in this file are used by the program ntpdate-debian, but not by the upstream program ntpdate.
Это т.ж. подтверждает сам файл /usr/sbin/ntpdate-debian (это просто shell-скрипт), который, как я понял, используется убунтой вместо /usr/sbin/ntpdate.
НО(!) он использует не только /etc/ntp.conf, но и /var/lib/ntp/ntp.conf.dhcp и /etc/openntpd/ntpd.conf, если NTPDATE_USE_NTP_CONF = «yes», а если — «no», то читает файл /var/lib/ntpdate/default.dhcp.
У меня не зависимо от того, какое значение имеет параметр NTPDATE_USE_NTP_CONF синхронизация времени происходит (через ntpdate-debian, естественно). Причина в том, что ни одного из файлов, которые пытается прочитать /usr/sbin/ntpdate-debian у меня в системе не существует и поэтому используется переменная NTPSERVERS из /etc/default/ntpdate, т.е. она не переопределяется в ходе работы скрипта /usr/sbin/ntpdate-debian.
У вас же видать существует файл /var/lib/ntp/ntp.conf.dhcp или /etc/openntpd/ntpd.conf и проблема в нем (не верно настроен?) либо ошибка в парсере самого /usr/sbin/ntpdate-debian (у меня Ubuntu 10.04), что как-то сомнительно. В общем переменная NTPSERVERS внутри скрипта /usr/sbin/ntpdate-debian у вас переопределяется и поэтому синхронизация не происходит.
Не истину не претендую 🙂
Angel2S2, вот это анализ! Я так глубоко на заглядывал. Спасибо, посмотрю!
Не за что 🙂