- About time synchronisation
- How time synchronisation works
- About timesyncd
- About timedatectl
- Further reading
- How To Setup NTP Server using timedatectl on Linux
- Get current Timezone
- Set timedatectl NTP Server
- Recent Posts
- NTP сервер на Linux Ubuntu
- Установка сервера
- Настройка NTP
- Дополнительные настройки
- Тестирование
- Настройка клиента Linux
- NTP
- ntpdate
- Настройка клиента Windows
- Некоторые ошибки
- 1. the NTP socket is in use, exiting
- 2. Connection refused
- 3. no server suitable for synchronization found
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.
Further reading
- ntp.org: home of the Network Time Protocol project
- pool.ntp.org: project of virtual cluster of timeservers
- Freedesktop.org info on timedatectl
- Freedesktop.org info on systemd-timesyncd service
- Chrony FAQ
- Feeding chrony from GPSD
- Also see the Ubuntu Time wiki page for more information.
How To Setup NTP Server using timedatectl on Linux
Systemd has built-in tools to manage time on Linux, which shipped in most Linux distro which uses systemd such as RHEL/CentOS, Fedora, Debian, Ubuntu, Linux Mint and Archlinux. The timedatectl command allows you to change time, date, and timezone on Linux system.
In this tutorial, we’ll manage time in Linux by setting the date, time and timezone using timedatectl command. It’s a best practice to use the correct time on your Linux server to make troubleshooting or checking file log more easiers.
Get current Timezone
Using timedatectl command is straight forward, let’s get our current time and timezone
To get list of known timezone, run following command
timedatectl list-timezones
To set timezone, use sub-command set-timezone, for example
timedatectl set-timezone "Africa/Casablanca"
the timezone will changes after that command executed, which can be verify using timedatectl status
Set timedatectl NTP Server
The best way to keep time synced and updated is using NTP (Network Time Protocol). The list of public NTP server can be found on ntppool.org
To enable NTP run following command
If you notice we haven’t set the NTP server, to check the NTP server list used execute timedatectl show-timesync –all
LinkNTPServers= SystemNTPServers= FallbackNTPServers=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org ServerName=2.debian.pool.ntp.org ServerAddress=2606:4700:f1::123 RootDistanceMaxUSec=5s PollIntervalMinUSec=32s PollIntervalMaxUSec=34min 8s PollIntervalUSec=34min 8s NTPMessage={ Leap=0, Version=4, Mode=4, Stratum=3, Precision=-26, RootDelay=48.583ms, RootDispersion=671us, Reference=A230E10, OriginateTimestamp=Sat 2020-10-24 04:29:02 +01, ReceiveTimestamp=Sat 2020-10-24 04:29:02 +01, TransmitTimestamp=Sat 2020-10-24 04:29:02 +01, DestinationTimestamp=Sat 2020-10-24 04:29:02 +01, Ignored=no PacketCount=79, Jitter=322us } Frequency=607537
NTP server used by timedatectl stored at /etc/systemd/timesyncd.conf file, change the NTP= line to
NTP=time.cloudflare.com time.google.com time.facebook.com
restart the systemd-timesyncd services to applied the changes
systemctl restart systemd-timesyncd.service
Check the NTP server timedatectl show-timesync —all
LinkNTPServers= SystemNTPServers=time.cloudflare.com time.google.com time.facebook.com FallbackNTPServers=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org ServerName=time.cloudflare.com ServerAddress=2606:4700:f1::1 RootDistanceMaxUSec=5s PollIntervalMinUSec=32s PollIntervalMaxUSec=34min 8s PollIntervalUSec=1min 4s NTPMessage={ Leap=0, Version=4, Mode=4, Stratum=3, Precision=-25, RootDelay=48.599ms, RootDispersion=534us, Reference=A230E10, OriginateTimestamp=Sat 2020-10-24 04:39:41 +01, ReceiveTimestamp=Sat 2020-10-24 04:39:41 +01, TransmitTimestamp=Sat 2020-10-24 04:39:41 +01, DestinationTimestamp=Sat 2020-10-24 04:39:41 +01, Ignored=no PacketCount=1, Jitter=0 } Frequency=664177
The reason I prefer using a well-known company for NTP server because I notice some NTP server randomly disappear from internet, and the uptime under 90% in a month which unacceptable for production server.
Recent Posts
NTP сервер на Linux Ubuntu
Опубликовано: 12.01.2018
Тематические термины: NTP, Linux, Ubuntu. Следить за актуальностью времени на всех узлах локальной сети удобнее с помощью сервера синхронизации времени NTP. В инструкции рассказано об установке и настройке такого сервера на Linux Ubuntu Server 16.04. Данное руководство можно использовать для настройки ntpd на любом другом Linux (например, Debian или CentOS).
Установка сервера
Настройка NTP
pool ru.pool.ntp.org iburst
server ntp2.vniiftri.ru iburst prefer
pool 0.ubuntu.pool.ntp.org iburst
pool 1.ubuntu.pool.ntp.org iburst
server 127.127.1.0
* iburst — отправлять несколько пакетов (повышает точность); ru.pool.ntp.org / 0.ubuntu.pool.ntp.org / 1.ubuntu.pool.ntp.org — адреса серверов, с которыми наш сервер будет сверять время; server — указывает на выполнение синхронизации с сервером, а не пулом серверов; prefer — указывает на предпочитаемый сервер. server 127.127.1.0 — позволит в случае отказа сети Интернет брать время из своих системных часов. Настраиваем безопасность:
restrict default kod notrap nomodify nopeer noquery
restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap
restrict 127.0.0.1
restrict ::1
- restrict default — задает значение по умолчанию для всех рестриктов.
- kod — узлам, которые часто отправляют запросы сначала отправить поцелуй смерти (kiss of death), затем отключить от сервера.
- notrap — не принимать управляющие команды.
- nomodify — запрещает команды, которые могут вносить изменения состояния.
- nopeer — не синхронизироваться с хостом.
- noquery — не принимать запросы.
- restrict 192.168.0.0 mask 255.255.255.0 — разрешить синхронизацию для узлов в сети 192.168.0.0/24.
- IP адреса127.0.0.1 и ::1 позволяют обмен данные серверу с самим собой.
Настройки по умолчанию могут быть разные для IPv4 и IPv6:
restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery
systemctl restart ntp || service restart ntp
Если используется брандмауэр, добавляем правило:
iptables -I INPUT 1 -p udp —dport 123 -j ACCEPT
ufw allow in on enp2s0 to any port 123 proto udp
* где enp2s0 — сетевой интерфейс, на котором слушает наш сервер.
Дополнительные настройки
Настройка файла хранения логов:
Тестирование
Проверить состояние получения эталонного времени можно командой:
Мы должны увидеть, примерно, следующее:
remote refid st t when poll reach delay offset jitter
==============================================================================
ru.pool.ntp.org .POOL. 16 p — 64 0 0.000 0.000 0.000
ntp.ubuntu.com .POOL. 16 p — 64 0 0.000 0.000 0.000
*91.189.94.4 17.253.34.253 2 u 58 64 377 55.802 3.790 0.412
-91.189.91.157 132.246.11.231 2 u 56 64 377 113.456 -1.746 0.334
+91.189.89.198 192.53.103.108 2 u 1 64 377 54.595 4.229 0.608
+91.189.89.199 17.253.34.253 2 u 61 64 377 54.061 2.637 0.557
- remote — адрес сервера времени, с которым синхронизируется наш сервер;
- refid — вышестоящий сервер (с которым сервер из графы выше получает время);
- st — уровень сервера (stratum);
- t — пир (unicast или multicast);
- when — когда последний раз сверялось время;
- poll — периодичность синхронизации с этим сервером;
- reach — состояние работоспособности. Если удалось произвести синхронизации восемь раз в подряд становится равным 377;
- delay — время задержки;
- offset — разница между нашим временем и временем на сервере; положительное — наши часы спешат, отрицательное — отстают;
- jitter — смещение времени на удаленном сервере;
- * — с этим сервером синхронизирует время наш ntpd;
- + — сервер можно использовать для сверки часов;
- — — не рекомендован для синхронизации;
- x — не доступен.
Проверить отдачу времени сервером можно введя команду на другом Linux:
Правильный ответ имеет следующий вид:
ntpdate[3576]: adjust time server 192.168.0.15 offset 0.017657 sec
* время было рассинхронизировано на 0.017657 секунд.
Отобразить текущее время можно командой:
Если после синхронизации время некорректно, настраиваем правильный часовой пояс:
cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
Настройка клиента Linux
Для клиентов можно выбрать 2 стратегии настройки — с помощью ntp или утилиты ntpdate.
NTP
В настройка /etc/ntp.conf в качестве сервера оставляем только наш локальный сервер, например:
Остальные pool и server удаляем или комментируем.
systemctl restart ntp || service restart ntp
ntpdate
Утилита командной строки выполняет разовую синхронизацию. Чтобы автоматизировать процесс, добавляем задание в cron:
0 0 * * * /usr/sbin/ntpdate 192.168.0.15
* в данном примере задание будет выполняться раз в день в 00:00. /usr/sbin/ntpdate — полный путь расположения утилиты, в разных системах может быть разным — проверить стоит командой which ntpdate.
Настройка клиента Windows
В командной строке выполняем:
w32tm /config /manualpeerlist:»192.168.0.15,0×8″ /syncfromflags:manual /update
Некоторые ошибки
1. the NTP socket is in use, exiting
Как правило, данная ошибка возникает при попытке синхронизировать время с помощью ntpdate, когда в системе работает демон ntp.
Причина: NTP сокет в системе уже занят, как правило, ntpd.
Решение: либо не использовать ntpdate, так как ntp умеет сверять время, либо отключить сервис ntpd командой service ntp stop.
2. Connection refused
Возникает при попытке выполнить команду ntpq -p.
Причина: нет разрешения на обращение к серверу.
Решение: проверьте, удастся ли выполнить запрос командой ntpq -pn 127.0.0.1 или ntpq -pn ::1. Также убедитесь, что настройка restrict позволяет серверу подключаться к самому себе по нужному протоколу.
3. no server suitable for synchronization found
Ошибка появляется при попытке синхронизировать время с другим сервером синхронизации.
Причина: сервер синхронизации не доступен по одной из причин: 1) не работает или выключен, 2) установлен restrict, 3) на сервере не запущен ntpd, 4) нет сетевой доступности из-за проблем на сети или брандмауэра.
- Убедиться, что сервер доступен по сети.
- Проверить настройки ntp.conf — наличие соответствующего restrict.
- Проверить состояние сервиса командой service ntp status.
- Проверить настройки брандмауэра — убедиться в наличие правила, которое разрешает UDP порт 123.