Синхронизация времени через NTP

20 июля 2010
Рубрика: Заметки
Теги: , ,

Zeboton

На днях я обнаружил, что на домашнем сервере время убежало вперёд аж на 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.

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

Из сложившейся ситуации я вижу как минимум два выхода:

  1. Установить пакет ntp;
  2. Исправить значение параметра с «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-сервер настроен и с ним можно сверяться.

Похожие записи:

3 комментария для “Синхронизация времени через NTP”

  1. Angel2S220 июля 2010 ~ 18:20

    > Видимо предполагается, что если этого файла не существует, то нужно обращаться к серверам, указанным в этом же файле.

    В /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 у вас переопределяется и поэтому синхронизация не происходит.
    Не истину не претендую 🙂

  2. Zeboton21 июля 2010 ~ 06:41

    Angel2S2, вот это анализ! Я так глубоко на заглядывал. Спасибо, посмотрю!

  3. Angel2S221 июля 2010 ~ 14:47

    Не за что 🙂

Ваш комментарий

*