Сегодня разберём установку и настройку ntp сервера или сервера времени на Linux |Ubuntu | Debian. Данное руководство применима и для настройки ntpd на любом другом Linux дистрибутиве (например CentOS).
Установка ntp сервера
Устанавливаем ntp сервер следующей командой:
sudo apt install ntp
Настройка NTP сервера
После успешной установки нашего ntp сервера переходим к его настройке. Открываем файл с настройками:
sudo nano /etc/ntp.conf
Настраиваем серверы, с которых наш 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
Перезапускаем сервис:
sudo service restart ntp
Если используется брандмауэр, добавляем правило:
iptables -I INPUT 1 -p udp --dport 123 -j ACCEPT
или с помощью ufw:
ufw allow in on enp0s8 to any port 123 proto udp
- где enp0s8 — сетевой интерфейс, на котором слушает наш сервер.
Дополнительные настройки
Настройка файла хранения логов:
logfile /var/log/ntp.log
Тестирование ntp сервера
Проверить состояние получения эталонного времени можно командой:
ntpq -p
Мы должны увидеть, примерно, следующее:
remote refid st t when poll reach delay offset jitter
ru.pool.ntp.org .POOL. 16 p - 64 0 0.000 0.000 0.001
0.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.001
1.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.001
LOCAL(0) .LOCL. 5 l - 64 1 0.000 0.000 0.001
2.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.001
3.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.001
ntp.ubuntu.com .POOL. 16 p - 64 0 0.000 0.000 0.001
ntp2.vniiftri.r .MRS. 1 u - 64 1 20.530 -0.295 0.011
bsd.bonti.ru 89.109.251.23 2 u 2 64 1 23.632 -9.956 0.001
cello.corbina.n 193.190.230.65 2 u 2 64 1 19.931 1.989 0.001
- где: remote — адрес сервера времени, с которым синхронизируется наш сервер;
- refid — вышестоящий сервер (с которым сервер из графы выше получает время);
- st — уровень сервера (stratum);
- t — пир (unicast или multicast);
- when — когда последний раз сверялось время;
- poll — периодичность синхронизации с этим сервером;
- reach — состояние работоспособности. Если удалось произвести синхронизации восемь раз подряд — становится равным 377;
- delay — время задержки;
- offset — разница между нашим временем и временем на сервере; положительное — наши часы спешат, отрицательное — отстают;
- jitter — смещение времени на удаленном сервере.
Проверить отдачу времени сервером можно введя команду на другом Linux:
ntpdate 10.5.5.1
Правильный ответ имеет следующий вид:
ntpdate[3576]: adjust time server 10.5.5.1 offset 0.017657 sec
- время было рассинхронизировано на 0.017657 секунд.
Отобразить текущее время можно командой:
date
Если после синхронизации время некорректно, настраиваем правильный часовой пояс:
cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
- московское время (GMT+3).
Настройка клиента Linux
Для клиентов можно выбрать 2 стратегии настройки — с помощью ntp или утилиты ntpdate.
NTP
Устанавливаем ntp:
Ubuntu / Debian:
sudo apt install ntp
CentOS / Red Hat:
yum install ntp
В настройка /etc/ntp.conf в качестве сервера оставляем только наш локальный сервер, например:
server 10.5.5.1
Остальные pool и server удаляем или комментируем.
Перезапускаем NTP:
sudo service restart ntp
ntpdate
Утилита командной строки выполняет разовую синхронизацию. Чтобы автоматизировать процесс, добавляем задание в cron:
crontab -e
0 0 * * * /usr/sbin/ntpdate 10.5.5.1
- в данном примере задание будет выполняться раз в день в 00:00. /usr/sbin/ntpdate — полный путь расположения утилиты, в разных системах может быть разным — проверить стоит командой which ntpdate.
Ошибки ntp
- the NTP socket is in use, exiting
Как правило, данная ошибка возникает при попытке синхронизировать время с помощью ntpdate, когда в системе работает демон ntp.
Причина: NTP сокет в системе уже занят, как правило, ntpd.
Решение: либо не использовать ntpdate, так как ntp умеет сверять время, либо отключить сервис ntpd командой
sudo service ntp stop.
- Connection refused
Возникает при попытке выполнить команду ntpq -p.
Причина: нет разрешения на обращение к серверу.
Решение: проверьте, удастся ли выполнить запрос командой ntpq -pn 127.0.0.1 или ntpq -pn ::1. Также убедитесь, что настройка restrict позволяет серверу подключаться к самому себе по нужному протоколу.
- no server suitable for synchronization found
Ошибка появляется при попытке синхронизировать время с другим сервером синхронизации.
Причина: сервер синхронизации не доступен по одной из причин: 1) не работает или выключен, 2) установлен restrict, 3) на сервере не запущен ntpd, 4) нет сетевой доступности из-за проблем на сети или брандмауэра.
Решение:
Убедиться, что сервер доступен по сети. Проверить настройки ntp.conf — наличие соответствующего restrict. Проверить состояние сервиса командой service ntp status. Проверить настройки брандмауэра — убедиться в наличие правила, которое разрешает UDP порт 123.