Установка ntp в Ubuntu. Установка ntp в Ubuntu Как это работает

Сетевой протокол задания времени NTP (network time protocol; Network Time Protocol Version 3 Specification, Implementation and Analysis, David L. Mills, RFC-1305, March 1992) служит для осуществления синхронизации работы различных процессов в серверах и программах клиента. Он определяет архитектуру, алгоритмы, объекты и протоколы, используемые для указанных целей. NTP был впервые определен в документе RFC-958 , но с тех пор несколько раз переделан и усовершенствован (RFC-1119 ). Протокол использует для транспортных целей UDP . Целью протокола является обеспечение максимально возможной точности и надежности, несмотря на значительный разброс задержек при прохождении через большое число промежуточных маршрутизаторов.

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

Точность, достижимая с помощью NTP, сильно зависит от точности локальных часов и характерных скрытых задержек. Алгоритм коррекции временной шкалы включает внесение задержек, коррекцию частоты часов и ряд механизмов, позволяющих достичь точности порядка нескольких миллисекунд, даже после длительных периодов, когда потеряна связь с синхронизирующими источниками.

Для наглядности предоставляю архитектуру NTP

  • Установим сервер времени:
CentOS: yum install ntp
Arch Linux: pacman -S ntp
Ubuntu, Debian: apt-get install ntp
  • Отредактируем файл конфигурации:
#vim /etc/ntp.conf
  • У меня листинг следующий:

logfile /var/log/ntp.log
driftfile /var/lib/ntp/drift


disable monitor

server 31.28.161.68 iburst
server 193.67.79.202 iburst
server 62.149.0.30 iburst
server 198.123.30.132 iburst


server 127.127.1.0
fudge 127.127.1.0 stratum 10


restrict default ignore

restrict 127.0.0.1

  • теперь немного подробнее по каждому пункту:

logfile /var/log/ntp.log

Путь куда ntp будет писать свой лог

driftfile /var/lib/ntp/drift

Путь к дрифт файлу

___________________________________________

disable monitor

Устранение уязвимости, позволяющей использовать сервер синхронизации времени для проведения DDoS-атак, путем многократного увеличения трафика

___________________________________________
server 31.28.161.68 iburst

Добавляем сервера с которых будет производится синхронизация

Опция "iburst" рекомендуется, с ее помощью посылается шквал пакетов, если не удается установить соединение с сервером с первого раза. Напротив, опцию "burst" не используйте никогда без особого разрешения, так как Вы можете попасть в "черный список".

___________________________________________

server 127.127.1.0
fudge 127.127.1.0 stratum 10

Эти два пункты предназначены для работы сервера времени в случае потери связи с эталонными серверами. Параметром fudge мы назначаем стратум для локального сервера.

___________________________________________

restrict default ignore

Запрещаем всем использовать наш сервер времени

___________________________________________

restrict 127.0.0.1

Разрешаем использовать наш сервер для локалхоста.

___________________________________________

restrict 10.0.0.0 mask 255.0.0.0 nomodify notrap

Разрешаем использовать наш сервер для сети 10.*.

nomodify notrap - не позволять хосту/подсети менять любые настройки NTPD нашего сервера.

___________________________________________

  • Сохраняемся, выходим, наш сервер настроен, осталось перезапустить демон.
CentOS: service ntpd restart

Arch Linux: systemctl restart ntpd
Ubuntu, Debian: service ntp restart

OpenSUSE: service ntp restart

  • Ждем минут 5-10, в зависимости от вашей железки и смотрим
#ntpq -pn


remote refid st t when poll reach delay offset jitter

==============================================================================

10.18.1.13 10.44.0.15 3 u 2 128 377 7.306 13.106 11.948

*10.18.0.53 198.123.30.132 2 u 62 128 377 7.156 10.279 4.308

10.18.0.52 79.53.154.33 3 u 61 128 377 7.469 1.791 4.898

127.127.1.0 .LOCL. 10 l 56 64 377 0.000 0.000 0.001

  • А означает наша таблица следующее:

remote - имена удаленных ntp серверов;

refid - сервер, с которым производит синхронизацию удаленный сервер ntp (то есть ntp-сервер для remote);

st - стратум (вес) удаленного сервера. Чем меньше значение - тем точнее время на этом сервере;

t - тип пира (u = unicast, m = multicast);

when - указывает на то, как давно была произведена синхронизация с сервером;

poll - частота в секундах, с которой NTP демон синхронизируется с пиром;

reach - состояние доступности сервера. Это значение стабилизируется на уровне 377 если последних 8 попыток синхронизации с удаленным сервером были успешны;

delay - задержка ответа от сервера;

offset - разница в миллисекундах между системным временем и временем удаленного сервера; значение с минусом - отставание, с плюсом - наши часики спешат;

jitter - смещение времени на удаленном сервере.

Просьба также обратить внимание на спецсимволы в поле перед remote:

"*" - указывает на сервер, с которым последний раз была произведена синхронизация;

"+" - сервер возможно использовать в качестве сервера точного времени

"-" - не рекомендуется для использования.
  • Посмотреть статус нашего сервера можно с помощью:
root@oto:(~)ntpstat
synchronised to NTP server (10.44.0.16) at stratum 3
time correct to within 1170 ms
polling server every 64 s


  • Иногда при синхронизации Windows клиента на стороне сервера можем наблюдать вот такое сообщение:
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
18:09:16.326827 IP (tos 0x0, ttl 125, id 26677, offset 0, flags , proto UDP (17), length 76)
10.5.104.11.ntp > oto.ua.mti.ntp: NTPv3, length 48
symmetric active, Leap indicator: clock unsynchronized (192), Stratum 0 (unspecified), poll 10s, precision -6
Root Delay: 0.000000, Root dispersion: 1.015625, Reference-ID: (unspec)
Reference Timestamp: 0.000000000
Originator Timestamp: 0.000000000
Receive Timestamp: 0.000000000
Transmit Timestamp: 3961667129.750000000 (2025/07/16 18:05:29)
Originator - Receive Timestamp: 0.000000000

Originator - Transmit Timestamp: 3961667129.750000000 (2025/07/16 18:05:29)

Это нам говорит о том что виндовс не верит нашему времени, слишком большое розхождение во времени клиента и сервера.

Максимальная положительная и отрицательная коррекция времени (разница между внутренними часами и источником синхронизации) в секундах, при превышении которой синхронизация не происходит. Рекомендую значение 0xFFFFFFFF, при котором коррекция сможет производиться всегда.

Иногда часы на компьютере Ubuntu сбиваются, начинают отставать или спешить. Хотя эта ситуация и не критическая но весьма неприятная и может иметь плачевные последствия начиная от путаницы в логах из-за неоднозначности времени и заканчивая опозданием на встречу потому что вы доверились не тем часам. Также точное время важно для корректной работы некоторых программ, например таких как анонимизатор Tor.

К счастью случается это не так уж часто и обычно связанно с такими нестандартными действиями как загрузка операционных систем использующих разные алгоритмы хранения машинного времени или обнуление памяти биос, Но это не означает что не нужно ничего делать, можно настроить синхронизацию локального времени через интернет, это довольно таки удобная вещь если вы часто сбиваете часы и вам лень их каждый раз настраивать. В Ubuntu для этого используется служба NTP и демон ntpd. Именно о них пойдет речь в данной статье.

Сначала немного о том как посмотреть время из терминала в Ubuntu. Чтобы узнать текущее время выполните команду:

Чтобы посмотреть данные в формате UTC наберите:

Узнаем насколько время нашей Ubuntu отстает от эталонного:

sudo ntpdate -q ntp.ubuntu.com

Далее намного теории, если вы пришли сюда только за инструкцией по установке смело листайте вниз. UTC расшифровывается как Coordinated Universal Time, то есть всемирное координированное время. Это стандарт времени по Гринвичу одинаковый для всего мира и именно в таком виде храниться системное время в Linux и в том числе Ubuntu, а поправка на часовые пояса уже прибавляется локально для каждого пользователя. Вот здесь и кроется причина сбоев времени при использовании Windows и Unix.

Как я уже сказал Ubuntu хранит время в формате UTC, тогда как Windows использует для этого локальный формат уже с прибавлением часового пояса. При каждом выключении или перезагрузке компьютера операционная система сохраняет значение своего таймера в таймере BIOS, а при загрузке считывает его от туда.

И получается что ОС от майкрософт сохраняет локальное время, а Ubuntu думает что это UTC... уже понимаете что происходит? Правильно, чем больше таких перезагрузок, тем сильнее время будет отличатся от реального. Но это я уже отошел от темы. Как настроить алгоритмы синхронизации в обоих системах я здесь рассказывать не буду, моя сегодняшняя цель - синхронизация времени в Ubuntu.

Установка NTP в Ubuntu

Утилита ntpdate для синхронизации времени поставляется вместе с ubuntu, и автоматически запускается при старте. Если вы хотите синхронизировать время в сейчас выполните в терминале:

ntpdate -s ntp.ubuntu.com

Сервис ntpd в стандартную комплектацию не входит, его задача - постоянно следить за системными часами и корректировать какие - либо отклонения. Для установки ntpd наберите:

sudo apt-get install ntp

Для запуска демона наберите:

sudo service ntp start

А для добавления в автозагрузку:

sudo rc-update add ntp defaults

Настроить сервера с которыми будет сверяться наша Ubuntu можно в файле /etc/ntp.conf. Формат записи - server address, например стандартная конфигурация:

# Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board
# on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for
# more information.
server 0.ubuntu.pool.ntp.org
server 1.ubuntu.pool.ntp.org
server 2.ubuntu.pool.ntp.org
server 3.ubuntu.pool.ntp.org

После редактирования конфигурации не забудьте перезапустить сервис:

sudo service ntp restart

Решение проблем

Служба синхронизации использует порт 123 для соединения с сервером, поэтому если вы используете фаервол доступ к этим портам может блокироваться, необходимо разрешить доступ добавив следующие правила:

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

Теперь часы на вашем компьютере всегда будут идти правильно.

Выпуск WordPress 5.3 улучшает и расширяет представленный в WordPress 5.0 редактор блоков новым блоком, более интуитивным взаимодействием и улучшенной доступностью. Новые функции в редакторе […]

После девяти месяцев разработки доступен мультимедиа-пакет FFmpeg 4.2, включающий набор приложений и коллекцию библиотек для операций над различными мультимедиа-форматами (запись, преобразование и […]

  • Новые функции в Linux Mint 19.2 Cinnamon

    Linux Mint 19.2 является выпуском с долгосрочной поддержкой, который будет поддерживаться до 2023 года. Он поставляется с обновленным программным обеспечением и содержит доработки и множество новых […]

  • Вышел дистрибутив Linux Mint 19.2

    Представлен релиз дистрибутива Linux Mint 19.2, второго обновления ветки Linux Mint 19.x, формируемой на пакетной базе Ubuntu 18.04 LTS и поддерживаемой до 2023 года. Дистрибутив полностью совместим […]

  • Доступны новые сервисные релизы BIND, которые содержат исправления ошибок и улучшения функций. Новые выпуски могут быть скачано со страницы загрузок на сайте разработчика: […]

    Exim — агент передачи сообщений (MTA), разработанный в Кембриджском университете для использования в системах Unix, подключенных к Интернету. Он находится в свободном доступе в соответствии с […]

    После почти двух лет разработки представлен релиз ZFS on Linux 0.8.0, реализации файловой системы ZFS, оформленной в виде модуля для ядра Linux. Работа модуля проверена с ядрами Linux c 2.6.32 по […]

  • В WordPress 5.1.1 устранена уязвимость, позволяющая получить контроль над сайтом
  • Комитет IETF (Internet Engineering Task Force), занимающийся развитием протоколов и архитектуры интернета, завершил формирование RFC для протокола ACME (Automatic Certificate Management Environment) […]

    Некоммерческий удостоверяющий центр Let’s Encrypt, контролируемый сообществом и предоставляющий сертификаты безвозмездно всем желающим, подвёл итоги прошедшего года и рассказал о планах на 2019 год. […]

  • Вышла новая версия Libreoffice — Libreoffice 6.2
  • NTP - это протокол синхронизации времени по сети. По существу клиенты запрашивают текущее время на сервере и используют его для установки своих собственных часов.

    За этим простым описанием скрывается много сложностей - существуют уровни NTP серверов, где первый уровень подключен к атомным часам, а второй и третий уровни серверов распределяют на себя нагрузку по актуальным запросам из интернета. Кроме того клиентское приложение сложнее, чем вы можете подумать - оно компенсирует задержки соединения и регулирует время таким образом, чтобы не навредить другим процессам, запущенным на сервере. Но к счастью вся эта сложность скрыта от вас!

    Ubuntu использует ntpdate и ntpd.

    ntpdate

    Ubuntu стандартно устанавливается с ntpdate и будет запускать его при каждой загрузке один раз для установки времени по NTP серверу Ubuntu.

    Ntpdate -s ntp.ubuntu.com

    ntpd

    Сервис NTP ntpd вычисляет уход ваших системных часов и постоянно подправляет их, благодаря чему не происходит сильных изменений, что может приводить к непоследовательности в журналах. Ценой этому небольшое расходование мощности процессора и оперативной памяти, но для современного сервера это несущественно.

    Установка

    Для установки ntpd из терминала введите:

    Sudo apt-get install ntp

    Настройка

    Отредактируйте /etc/ntp.conf для добавления/удаления серверов. По умолчанию эти сервера такие:

    # Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board # on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for # more information. server 0.ubuntu.pool.ntp.org server 1.ubuntu.pool.ntp.org server 2.ubuntu.pool.ntp.org server 3.ubuntu.pool.ntp.org

    После изменений конфигурационного файла вам надо перезапустить ntpd:

    Sudo service ntp restart

    Просмотр статуса

    Используйте ntpq для просмотра дополнительной информации:

    # sudo ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== +stratum2-2.NTP. 129.70.130.70 2 u 5 64 377 68.461 -44.274 110.334 +ntp2.m-online.n 212.18.1.106 2 u 5 64 377 54.629 -27.318 78.882 *145.253.66.170 .DCFa. 1 u 10 64 377 83.607 -30.159 68.343 +stratum2-3.NTP. 129.70.130.70 2 u 5 64 357 68.795 -68.168 104.612 +europium.canoni 193.79.237.14 2 u 63 64 337 81.534 -67.968 92.792

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

    Установка
    Платформой для установки нам послужит, как обычно, Gentoo. Служба ntp - net-misc/ntp.
    Первым делом обновляем дерево портеджей:

    Устанавливаем ntp, тут нам особые параметры не требуются(по крайней мере пока), поэтому ставим с юзами по умолчанию:
    Настройка сервера.

    Определимся у кого будем брать время. Я предлагаю использовать сервера точного времени , Stratum 1 как никак.

    ntp1.vniiftri.ru
    ntp2.vniiftri.ru
    ntp4.vniiftri.ru
    Параметры запуска демона ntpd определяются в файле /etc/conf.d/ntpd
    # /etc/conf.d/ntpd

    # Options to pass to the ntpd process
    # Most people should leave this line alone ...
    # however, if you know what you"re doing, feel free to tweak
    NTPD_OPTS="-g -c /etc/ntp.conf"

    Здесь -g -ключ разрешающий переход на большой скачек времени, -с -файл конфигурации службы ntp, чтобы указать pid-файл отличный от используемого по умолчанию можно использовать ключ -p, например:
    NTPD_OPTS="-p /var/run/ntpd.pid -g -c /etc/ntp.conf"
    Настройка службы ntp по умолчанию производится в файле /etc/ntp.conf, если указали в предыдущем пункте другой, то правим тот который указали
    # /etc/ntp.conf
    # Наш локальный сервер
    server 192.168.0.1
    # Серверы в сети
    server 195.2.64.6
    server ntp1.vniiftri.ru
    server ntp2.vniiftri.ru
    server ntp4.vniiftri.ru

    #Пути к служебным файлам
    driftfile /var/lib/ntp/ntp.drift
    logfile /var/log/ntpd.log

    # Разрешения на доступ к нашему серверу
    restrict default ignore # По умолчанию доступ запрещен
    restrict localhost # Локально можно все
    restrict 192.168.0.0 mask 255.255.255.0 nomodify nopeer notrap # По внутренней сети можно только читать время

    # Разрешаем синхронизироваться с внешними серверами, иначе синхронизация не пойдет.
    restrict 127.0.0.1
    restrict 192.168.0.1
    restrict 195.2.64.6
    restrict ntp1.vniiftri.ru
    restrict ntp2.vniiftri.ru
    restrict ntp4.vniiftri.ru

    # Эта запись позволяет присвоить самому себе Stratum 3, чтобы сервер доверял сам себе
    server 127.127.1.1
    fudge 127.127.1.1 stratum 3

    Запускаем ntpd
    Добавляем ntpd в автозагрузку
    Теперь нужно обождать минут 10 - 20, поскольку синхронизация происходит не сразу, а через некоторое время.

    Проверяем на сервере

    Если в ответ получаем нечто похожее:

    remote refid st t when poll reach delay offset jitter
    ==============================================================================
    192.168.0.1 .INIT. 16 u - 1024 0 0.000 0.000 0.000
    -ntp1.zenon.net 195.2.64.5 2 u 596 1024 377 2.261 -0.104 0.680
    *ntp1.vniiftri.r .PPS. 1 u 909 1024 377 4.266 -0.603 0.353
    +ntp2.vniiftri.r .PPS. 1 u 562 1024 377 3.914 -0.453 0.457
    +ntp4.vniiftri.r .PPS. 1 u 554 1024 377 4.487 -0.664 0.249
    LOCAL(1) .LOCL. 3 l 229m 64 0 0.000 0.000 0.000
    значит все нормально, синхронизация пошла. Поподробнее рассмотрим обозначения в полученной таблице.
    Поля таблицы:
    remote - имена удаленных ntp серверов
    refid - сервер, с которым производит синхронизацию удаленный сервер ntp
    st - стратум (уровень) удаленного сервера. 1 - самый высокий, 16 - рядовая машина/клиент.
    t - тип пира (u = unicast, m = multicast, l = local)
    when - указывает на то, как давно была произведена синхронизация с сервером
    poll - частота в секундах, с которой NTP демон синхронизируется с пиром
    reach - состояние доступности сервера, это значение стабилизируется на уровне 377 если последних 8 попыток синхронизации с удаленным сервером были успешны
    delay - задержка (в миллисекундах) ответа от сервера
    offset - разница в миллисекундах между системным временем и временем удаленного сервера; значение с минусом - отставание, с плюсом - убегание
    jitter - смещение времени на удаленном сервере
    Значки в строках таблицы:
    * - пир, с которым была выполнена синхронизация последний раз
    + - пригодный для обновления сервер
    - - непригодный для обновления сервер
    х - сервер не отвечает

    Проверяем на клиенте:

    Если синхронизация прошла успешно, получим ответ следующего вида:
    25 Oct 17:28:04 ntpdate: adjust time server 192.168.0.1 offset -0.016567 sec
    Однако, возможно получить следующее сообщение:
    25 Oct 17:29:14 ntpdate: no server suitable for synchronization found
    Чтобы понять что за ерунда выполняем:
    Смотрим ответ:
    192.168.0.1: Server dropped: strata too high
    server 192.168.0.1, port 123
    stratum 16, precision -8, leap 11, trust 000
    Это означает, что уровень доверия очень мал (stratum=16, самый низкий уровень), то есть сервер сам себе не доверяет, чтобы отдавать время. Необходимо либо подождать, либо изменить список серверов, с которыми он синхронизируется. Поскольку в конфиге у нас прописано, что сервер наш stratum 3, то такое сообщение мы вряд ли увидим.

    Настраиваем клиентов.

    LINUX
    Клиенты у меня тоже Gentoo, в основном, конфигурация клиента прописывается в файле /etc/conf.d/ntp-client. Тут не мудрим, оставляем все как есть, только указываем наш сервер в параметрах синхронизации:

    # /etc/conf.d/ntp-client

    # Command to run to set the clock initially
    # Most people should just leave this line alone ...
    # however, if you know what you"re doing, and you
    # want to use ntpd to set the clock, change this to "ntpd"
    NTPCLIENT_CMD="ntpdate"

    # Options to pass to the above command
    # This default setting should work fine but you should
    # change the default "pool.ntp.org" to something closer
    # to your machine. See http://www.pool.ntp.org/ or
    # try running `netselect -s 3 pool.ntp.org`.
    NTPCLIENT_OPTS="-s -b -u 192.168.0.1 "

    Добавляем в автозагрузку:
    # rc-update add ntp-client default
    Следует иметь в виду, что служба ntp-client синхронизирует время только один раз, при запуске системы, поэтому для машин работающих длительное время без перезапуска делаем следующее:
    Создаем в папке /etc/cron.hourly исполняемый файл со следующим содержимым
    #!/bin/sh
    NTPCLIENT_OPTS="-s -b -u 192.168.0.1"

    Ntpdate $NTPCLIENT_OPTS >> /dev/null 2>&1

    Все, теперь наша машина будет синхронизироваться с ntp ежечасно.

    WINDOWS 2003 Server
    Все телодвижения выполняем в командной строке.

    #w32tm /config /syncfromflags:manual /manualpeerlist:192.168.0.1
    #w32tm /config /update
    Далее, в командной строке указываем приоритетный NTP сервер, перезапускаем службу точного времени и принудительно синхронизируем время:
    #net time /setsntp:192.168.0.1
    #net stop w32time && net start w32time
    #w32tm /resync
    В результате должны получить:
    Команда синхронизации отправлена на local computer...
    Команда выполнена успешно.
    Через некоторое время можно проверить журнал событий системы. Если все настроено и отработало верно, то в журнале будет информационное сообщение от источника W32Time с кодом (ID) 37 и текстом "NTP-клиент поставщика времени получает правильные данные о времени от 192.168.0.1", а затем с кодом 35 и текстом "Служба времени выполняет синхронизацию системного времени с источником времени 192.168.0.1".

    UPD
    WINDOWS 2012 Server

    Тут все аналогично Windows 2003 Server, но делаем все в Windows PowerShell запущенной от имени администратора.
    Указываем какой ntp сервер использовать для синхронизации:

    PS C:\> w32tm /config /syncfromflags:manual /manualpeerlist:192.168.0.1 /syncfromflags:MANUAL
    PS C:\> w32tm /config /update
    Далее, в командной строке перезапускаем службу точного времени и принудительно синхронизируем время:
    PS C:\> Service-Stop w32time
    PS C:\> Service-Start w32time
    PS C:\> w32tm /resync
    В результате должны получить:
    Отправка команды синхронизации на локальный компьютер
    Команда выполнена успешно.
    Проверяем:
    На выходе должны получить нечто подобное:
    Индикатор помех: 0(предупреждений нет)
    Страта: 3 (вторичная ссылка - синхронизирована с помощью (S)NTP)
    Точность: -6 (15.625ms за такт времени)
    Задержка корня: 0.0356903s
    Дисперсия корня: 7.8069513s
    Идентификатор опорного времени: 0xC0A86301 (IP-адрес источника: 192.168.0.1)
    Время последней успешной синхронизации: 22.03.2016 16:21:25