Network Time Protocol daemon (Русский)
Network Time Protocol является одним из самых распространённых методов для синхронизации системных часов на GNU/Linux с серверами времени в интернете. Он разработан для смягчения последствий переменной задержки в сети и обычно может поддерживать время с точностью до десятков миллисекунд при синхронизации через интернет. Точность в локальных сетях даже лучше, до одной миллисекунды.
The NTP Project предоставляет эталонную реализацию протокола, которая называется просто NTP. Эта статья описывает, как установить и запустить демон NTP: как клиент, так и сервер.
Смотрите Синхронизация времени для информации о других реализациях NTP.
Установка
Установите пакет ntp . По умолчанию ntpd работает в режиме клиента и не требует дополнительной настройки. Вы можете перейти к разделу #Использование, если вас устраивает стандартный файл конфигурации Arch. Для настройки сервера смотрите #Режим сервера NTP.
Настройка
Основной демон ntpd настраивается в файле /etc/ntp.conf . Смотрите ntp.conf(5) для дополнительной информации.
Подключение к серверам NTP
NTP-серверы выстроены в многоуровневую иерархию; уровни называются слоями (англ. strata). Устройства, которые считаются самостоятельными источниками времени, считаются первичными (stratum 0); серверы, непосредственно подключённые к stratum 0 устройствам, считаются источниками stratum 1; серверы, подключенные к stratum 1 серверам, считаются источниками stratum 2 и так далее.
Важно понимать, что слой сервера не может рассматриваться как показатель его точности или надёжности. Обычно для синхронизации пользовательских машин используются stratum 2 серверы. Если вы ещё не знаете, к каким серверам вы собираетесь подключиться, вам следует выбрать пул серверов, расположенный недалеко от вашего местоположения, из списка серверов на pool.ntp.org (альтернативная ссылка).
Начиная с ntp version 4.2.7.p465-2, Arch Linux использует свой собственный стандартный пул NTP-серверов, который предоставляет the NTP Pool Project (смотрите FS#41700). Измените его под свои нужды, например если вы хотите использовать сервера своей страны:
Опция ‘iburst’ рекомендуется, с ее помощью посылается шквал пакетов, если не удается установить соединение с сервером с первого раза. Напротив, опцию ‘burst’ не используйте никогда без особого разрешения, так как Вы можете попасть в «черный список».
Режим сервера NTP
При настройке своего NTP-сервера проверьте, что у вас включен orphan mode [устаревшая ссылка 2022-09-22 ⓘ] , чтобы в случае пропажи интернета он продолжил обслуживать сеть; включите orphan mode с помощью параметра tos (может настроить до stratum 15), чтобы он никогда не использовался, пока интернет доступен:
Затем определите правила, которые позволят клиентам подключиться к вашему сервису (localhost тоже считается клиентом) с помощью команды restrict; в файле уже должна быть примерно такая строка:
Она запрещает всем модифицировать что-либо и предотвращает запрос статуса вашего сервера: nomodify запрещает перенастройку ntpd (через ntpq или ntpdc), а noquery важен для предотвращения дампа статуса ntpd (тоже через ntpq или ntpdc).
Можете также добавить следующие опции:
Если вы хотите изменить что-то из этого, читайте полную документацию по опции «restrict» в ntp.conf(5) , подробные инструкции по ntp и #Использование.
Теперь нужно указать ntpd, какие подключения к Вашему серверу разрешены; если Вы не конфигурируете сервер NTP, следующей строки будет достаточно:
Если Вы желаете принудительно определить адреса по протоколу IPv6, напишите -6 перед IP-адресом или именем хоста (-4 принудительно устанавливает протокол IPv4), например:
Наконец, установите файл-буфер (в котором будет находиться погрешность часов системы) и журнал (лог):
Примерная конфигурация выглядит так:
Использование
По умолчанию пакет настроен на режим клиента и использует отдельные пользователя и группу для избавления от root-прав. При ручном запуске через консоль всегда указывайте опцию -u :
Опция -u используется в двух systemd-службах. Они также используют опцию -g , которая отключает порог (panic-gate). Таким образом они будут синхронизировать время даже если время на NTP-серверах очень сильно отличается от локального системного времени.
Both services are tied to the system’s resolver, and will start synchronizing when an active network connection is detected.
Запуск ntpd при загрузке системы
Включите службу ntpd.service . Смотрите также #Запуск в chroot.
Используйте ntpq для просмотра списка настроенных пиров и статуса синхронизации:
Задержка, смещение и джиттер должны быть отличны от нуля. Серверы, с которыми синхронизируется ntpd, отмечены звёздочкой. Может потребоваться несколько минут, прежде чем ntpd выберет сервер для синхронизации; попробуйте проверить через 17 минут (1024 секунды).
Синхронизация один раз при загрузке
В качестве альтернативы включите службу ntpdate.service для однократной синхронизации (опция -q ) в non-forking режиме (опция -n ) при загрузке системы вместо запуска постоянно работающего демона в фоне. Этот метод не рекомендуется на серверах и в целом на машинах, которые работают без перезагрузки более нескольких дней.
Если синхронизированное время нужно записать в аппаратные часы компьютера, создайте drop-in файл для этой службы:
Советы и рекомендации
Запуск ntpd при подключении сети
ntpd может быть запущен вашим менеджером сети, чтобы демон запускался только при появлении интернета.
Добавьте следующие строки в ваш профиль netctl:
ntpd можно включать/выключать вместе со стартом сетевого соединения с помощью диспетчерских скриптов. Пакет networkmanager-dispatcher-ntpd AUR устанавливает скрипты, настроенные на запуск и остановку ntpd.service одновременно с соединением.
KDE может использовать NTP (ntp должен быть установлен) путём нажатия правой кнопкой мыши по часам и выбору синхронизации даты/времени. Однако при этлм демон ntp должен быть отключен. [2]
Использование ntpd с GPS
Многие статьи предлагают настраивать ntpd на получение времени из GPS через общую память, однако как минимум с версии 4.2.8 появился гораздо более хороший метод. Он подключается напрямую к gpsd, так что gpsd должен быть установлен.
Добавьте следующие строки в /etc/ntp.conf :
Для проверки сперва убедитесь, что gpsd работает:
Затем подождите несколько минут и запустите ntpq -p . Он должен показать, что ntpd общается с gpsd:
- Если reach равен 0, это означает, что ntpd не смог пообщаться с gpsd. Подождите несколько минут и попробуйте снова.
- GPS-устройство должно поддерживать PPS. Вы можете проверить своё устройство с помощью команды ppscheck /dev/gps0 .
Запуск в chroot
Создайте каталог /etc/systemd/system/ntpd.service.d/ (если его ещё нет) и drop-in файл customexec.conf в нём со следующим содержимым:
Затем измените /etc/ntp.conf , прописав пути относительно chroot. Измените:
Создайте необходимое chroot-окружение, чтобы getaddrinfo() работал:
и пропишите bind mount для упомянутых файлов:
Затем перезапустите демон ntpd . После перезапуска вы можете проверить, действительно ли он запустился в chroot, посмотрев, куда ведёт символьная ссылка /proc/
Должно ссылаться на /var/lib/ntp вместо / .
Скорее всего придётся немного подождать, чтобы проверить корректность настройки driftfile, так как ntpd пишет и читает не очень часто. Если вы ошиблись, демон отпечатает ошибку в журнале; если всё в порядке, он обновит метку времени. Если вы не наблюдаете ошибок в течение суток и время при этом обновляется, значит всё хорошо.
Ограничение прослушивающих сокетов
Вы можете ограничить сокеты, которые прослушивает ntpd, используя опцию interface:
Установка NTP на Ubuntu 18.04
Если вы когда-нибудь задавались вопросом о том, как работает автоматический переход на зимнее/летнее время либо задумывались, как компьютер берет из интернета информацию о точном времени, настраивая внутренние часы, то сегодняшняя статья — для вас. А еще для тех, кому необходимо настроить синхронизацию часов на сервере, работающем под управлением операционной системы Ubuntu 18.04, и на компьютере-клиенте, где установлен аналогичный дистрибутив Linux.
Речь пойдет об NTP — протоколе сетевого времени. Именно он повсеместно применяется для решения таких задач. После прочтения статьи вы сможете:
- Установить NTP-сервер и настроить его для работы на серверной версии Ubuntu 18.04.
- Установить клиентское приложение NTP на машине-клиенте с Ubuntu 18.04, а также убедиться в том, что синхронизация с сервером происходит так, как положено.
Установка NTP-сервера на Ubuntu 18.04
Все действия, которые необходимо совершить для достижения цели — то есть, для установки NTP-сервера и синхронизации времени — будут описаны пошагово. Повторять их следует в такой же последовательности, ничего не упуская.
Шаг 1: Обновление списка репозиториев
Сначала рассмотрим как установить NTP сервер Ubuntu 18.04. Но установку любого ПО в Ubuntu предваряет выполнение следующей команды:
sudo apt update -y
Она необходима для того, чтобы ОС обновила список репозиториев и имела актуальный перечень программных файлов, установленных на жестком диске.
Шаг 2: Установка NTP-сервера
Когда компьютер закончит выполнение предыдущей команды, самое время дать ему следующее задание. Оно заключается в установке протокола NTP на Ubuntu 18.04 c длительным сроком поддержки. Команда выглядит так:
sudo apt install ntp
После ее получения система проверит, доступны ли ей установочные файлы и сообщит о том, какой объем памяти будет занимать программа. На экране появится запрос на инсталляцию, который нужно подтвердить, нажав клавиши Y и ENTER, либо отклонить нажатием N и Enter (в том случае, если вы решили отложить все это дело на потом).
После завершения не помешает убедиться в том, что установка прошла успешно. Сделать это можно, спросив систему, какая именно версия NTP доступна на компьютере в данный момент:
Шаг 3: Настройка пулов NTP-сервера
Работа NTP-сервера по умолчанию строится на четырех «родных» пулах для Ubuntu. Их адреса прописаны в файле конфигурации /etc/ntp.conf . Нет прямой необходимости что-либо здесь менять, однако, есть смысл заменить пулы на те, которые расположены ближе к физическому месту нахождения сервера.
Воспользовавшись ссылкой https://support.ntp.org/bin/view/Servers/NTPPoolServers, вы можете подобрать наиболее предпочтительные для вас пулы. Мы же воспользуемся еврпейскими пулами NTP.
Чтобы переписать адреса пулов, нужно открыть упомянутый файл конфигурации в текстовом редакторе. Для этого служит следующая команда:
sudo vim /etc/ntp.conf
Список пулов удобнее всего скопировать со страницы сайта и вставить в файл вместо тех, что были там раньше:
sudo vim /etc/ntp.conf
server 0.europe.pool.ntp.org
server 1.europe.pool.ntp.org
server 2.europe.pool.ntp.org
server 3.europe.pool.ntp.org
Затем придется сохранить файл и закрыть его. Однако, сами по себе изменения в силу не вступят — чтобы сервер синхронизировался с новыми пулами, следует перезапустить службу NTP, а затем проверить ее статус. Делают это при помощи двух команд:
sudo systemctl restart ntp
sudo systemctl status ntp
Если брандмауэр UWF активен, компьютеры-клиенты не смогут получать информацию с нашего сервера. Чтобы предоставить им доступ, нужно разрешить ему работу со службой NTP, выполнив одну из указанных команд:
sudo ufw allow ntp
sudo ufw allow 123 / udp
С новыми настройками брандмауэр заработает только после перезагрузки:
sudo ufw reload
Проверить, все ли сделано правильно, можно с помощью такой команды:
sudo ufw status
Если на вашем экране появилось то же самое, что вы видите на скриншоте, значит, установка и настройка NTP-сервера оказалась успешной. Теперь можно перейти к аналогичным действиям на машине-клиенте.
Установка и настройка NTP-клиента в Ubuntu 18.04
В этом разделе будет описан способ установки NTP-клиента на Ubuntu 18.04, который выполняет роль клиента и должен синхронизировать время Ubuntu с нашим сервером, настроенным ранее.
Шаг 1: Обновление репозиториев
Начало ничем не отличается — следует выполнить команду для обновления списка репозиториев и файлов.
sudo apt update -y
После завершения можно приступать к следующему шагу.
Шаг 2: Установка Ntpdate
Ntpdate — это утилита, которая позволяет синхронизировать время компьютера (локальное) с серверным (глобальным). При этом используются ресурсы NTP. Для инсталляции программы в систему предназначена команда
sudo apt install ntpdate
Чтобы машина-клиент воспринимала NTP-сервер по его названию, нужно отредактировать файл /etc/hosts, внеся в него IP-адрес NTP-сервера и соответствующее имя хоста. Работа с файлом осуществляется при помощи текстового редактора:
sudo vim /etc/hosts
IP-адрес и имя хоста должны выглядеть следующим образом:
Шаг 3: Проверка синхронизации времени
Такую проверку выполняют в ручном режиме с помощью команды
sudo ntpdate имя_хоста_ntp_сервера
Поскольку в предыдущем шаге мы присвоили хосту имя, то в нашем случае эта команда будет выглядеть немного иначе:
sudo ntpdate bionic
В ответ система отобразит временной сдвиг.
Для синхронизации времени между клиентом и сервером NTP понадобится отключить службу timesynchd на компьютере-клиенте. Для этого используют следующую команду:
sudo timedatectl set-ntp off
Шаг 4: Установка NTP-клиента
Следующий этап — установка NTP-клиента. Выполняют её командой:
sudo apt install ntp
Как и в случае с сервером, система запросит разрешения на продолжение установки. Чтобы согласиться, нужно нажать букву Y клавиатуре и ENTER.
Шаг 5: Настройка NTP-клиента
Теперь наша цель — использовать настроенный ранее NTP-сервер в качестве NTP-сервера для клиентской машины. Чтобы это стало возможным не обойтись без редактирования файла /etc/ntp.conf.
sudo vim /etc/ntp.conf
Когда файл откроется, нужно пролистать его в конец и сделать там небольшую приписку, указав bionic как имя хоста для NTP-сервера:
server bionic prefer iburst
После этого обязательно сохраняем изменения и закрываем файл. Для активации новых настроек следует перезапустить службу NTP:
sudo systemctl restart ntp
Шаг 6: Проверка синхронизации времени
Получить информацию о том, как происходит синхронизация, и происходит ли она вообще, можно командой
Вывод может быть таким:
Выводы
На этом — все. Установка NTP Ubuntu 18.04 была завершена успешно. Мы настроили как серверную часть, так и клиентскую для синхронизации с NTP-сервером. Свои вопросы и пожелания пишите в комментариях.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Похожие записи
Оцените статью
Об авторе
Автор: James Kiarie
Больше восьми лет назад мною было принято решение объявить бойкот оконной монополии и установить на свой компьютер Ubuntu. С тех пор это моя основная ОС. Иногда в порядке эксперимента «подселяю» к ней собратьев из семьи Linux. Увлекаюсь фотографией и горным туризмом. В свободное от работы время пишу статьи для losst.ru.
9 комментариев к “Установка NTP на Ubuntu 18.04”
В России не будет же перевода времени.
это пока да. но потом придёт какой-нибуть дрянелькин и решит что управлять страной не по плечу и займётся тем что никому не нужно и будет управлять не только временим а геометрию часовых поясов перекраивать. а за ним придёт какой нибуть грёбпутин и решит что всё дерьмо надо как-то разгребать и начнёт так жэ с того что мало кому нужно, выправлять время. но это так об истории а вопрос далее.
спасибо автору за статью! да достаточно хороша, но немножко не полная. действительно сайт посвещён только операцыонке линуксов, но по скольку эта статья касается серверных задач, надо жэ предполагать что сети состоят не только из одних линуксов. но хотябы в скользь упомянуть и про другие настройки остальных операцыонок. к примеру для виндовозников подобный сервер в сети не совсем полезен. к примеру в командной строке виндовозни команда net time \\host к подобному серваку на линуксе обратиться можэт и дажэ достаточно хорошо с ним синхронизируется. но вот стандартная служба с этим линуксовым сервером времени работать не будет. по скольку эта самая виндовозная служба работает с серверами времени через http. вопрос? как на линуксе организовать http сервер времени для синхронизацыи всех машин под любой операцыонкой?
всем всего хорошего!
Обратите внимание за запись в /etc/ntp.conf
# If you want to provide time to your local subnet, change the next line.
# (Again, the address is an example only.)
#broadcast 192.168.123.255
Но для виндов лучше в настройках обновления времени через по Интернет указать локальный сервер NTP. Или в DNS локальной сети узлу time.windows.com, который перегружен и часто недоступен, сопоставить IP сервера NTP.
Вторым вариантом м.б. все запросы по udp по порту 123 от потребителей локальной сети заворачивать на порт 123 компьютера, на котором установлен сервер NTP.
Здравствуте ! Занимательно! Но у вас при вводе sudo vim /etc/ntp.conf. работает не vim , а nano.
в целом неплохо, но для новичков
nano — фу, vim — рулит
Может ошибка в статье? У меня на sudo systemctl restart ntp отвечает Failed to restart ntp.service: Unit ntp.service not found, и с start/enable то же самое. Попробовал заменить ntp на ntpd по аналогии с sshd, и запустилось.
Всё-таки непонятно, если у меня не какой-то сервер, а просто домашний компьютер с Xubuntu 1804 ?
И я хочу ,чтобы в нём часики шли поточнее, какие команды мне набрать и что подредактировать?
Меню -> Системные -> Дата и время -> В строке «Конфигурация» выбрать «Синхронизировать с серверами Интернет».
На Xubuntu 1604 именно так я и поступал. Заходил в Настройки, выбирал : «Синхронизировать с серверами Интернет», на что система сообщала ,что необходимо установить поддержку протокола NTP и тут же предлагала решение, автоматически устанавливались какие-то пакеты и всё работало.
А в Xubuntu 1804 это уже так не работает. На мои действия я получаю ответ:
«Поддержка протокола NTP не установлена.Установите и активируйте. »
Что я должен установить и что активировать?
About time synchronisation
Network Time Protocol (NTP) is a networking protocol for synchronising time over a network. Basically, a client requests the current time from a server, and uses it to set its own clock.
Behind this simple description, there is a lot of complexity. There are three tiers of NTP servers; tier one NTP servers are connected to atomic clocks, while tier two and tier three three servers spread the load of actually handling requests across the Internet.
The client software is also a lot more complex than you might expect. It must factor in communication delays and adjust the time in a way that does not upset all the other processes that run on the server. Luckily, all that complexity is hidden from you!
By default, Ubuntu uses timedatectl / timesyncd to synchronise time, and they are available by default. See our guide If you would like to know how to configure timedatectl and timesyncd .
Users can also optionally use chrony to serve NTP.
How time synchronisation works
Since Ubuntu 16.04, timedatectl / timesyncd (which are part of systemd ) replace most of ntpdate / ntp .
About timesyncd
timesyncd replaces not only ntpdate , but also the client portion of chrony (formerly ntpd ). So, on top of the one-shot action that ntpdate provided on boot and network activation, timesyncd now regularly checks and keeps your local time in sync. It also stores time updates locally, so that after reboots the time monotonically advances (if applicable).
About timedatectl
If chrony is installed, timedatectl steps back to let chrony handle timekeeping. This ensures that no two time-syncing services can conflict with each other.
ntpdate is now considered deprecated in favor of timedatectl (or chrony ) and is no longer installed by default. timesyncd will generally keep your time in sync, and chrony will help with more complex cases. But if you had one of a few known special ntpdate use cases, consider the following:
- If you require a one-shot sync, use: chronyd -q
- If you require a one-shot time check (without setting the time), use: chronyd -Q
While use of ntpd is no longer recommended, this also still applies to ntpd being installed to retain any previous behaviour/config that you had through an upgrade. However, it also implies that on an upgrade from a former release, ntp / ntpdate might still be installed and therefore renders the new systemd -based services disabled.
Configuring NTP
The topology I will be using for this exercise is as follows:
All machines in this exercise are using Debian 8 as their operating system.
I will first start by installing the ntp package on S1 with the following command.
Once that is done, you can start making the necessary configurations in /etc/ntp.conf.
Edit /etc/ntp.conf with an editor of your choice (vim, nano etc.).
This configuration is subject to change depending upon where you are based. Find the suitable NTP servers based on your location and add them after the line that reads:
In my case, I have added these two servers:
You can also use pools of NTP servers based on your region. As far as I know, ntpd handles them both in the same way except when you use pools, you will get a different NTP everytime a request is made. For the sake of learning, I have also added pools according to my region and commented out the existing default ones by putting a hash sign (#) before them.
I have added the network range I am using to allow receiving requests.
The last two parameters here are access restrictions that you can apply to the subnet.
The notrap option prevents ntpdc control message protocol traps. The nomodify options prevents any changes to the configuration.
I have also added a NTP broadcast for the subnet which will be useful in the second part where I will set up a client that listens to this server for NTP.
Now, you can start the NTP service and check if it’s running correctly.
You can also check which NTP server is being used and some other detailed info by running:
Output should state the NTP servers that we have specified in the /etc/ntp.conf file. In this case,
As you can see, the NTP server that has the least delay is being used first, the others are fallback. Also, third server on the output is coming from the pool we have added (there are two more in the output coming from the pools).
Setting up a client
For the client that will listen on local broadcasts, install ntp as stated above.
It is pretty straightforward to listen to local NTP broadcasts.
Edit /etc/ntp.conf configuration file with your preferred text editor.
Uncomment the lines at the end after:
The lines that should be uncommented are:
Restart the ntp service to make sure the changes take effect and check its status.
Check your NTP server and other detailed information by running:
Output should state your server’s domain name. In my case:
As you can see, my server’s domain name is shown in the output. refid here shows the IP address of the NTP server that the first machine is using. Two machines are using the same NTP server which means both their times should be in sync.