Настройка NTP сервера для локальной сети
Для синхронизации системных часов, серверов, рабочих станций, камер видео наблюдения, и других устройств в локальной сети.
Будем использовать локальный сервер точного времени с настроенным протоколом NTP (Network Time Protocol).
Устанавливаем NTP
apt-get install ntp
Все настройки производятся в одном единственном файле ntp.conf.
Добавляем данные в него.
mcedit /etc/ntp.conf
разрешим доступ к серверу времени только из нашей локальной сети
echo "#Разрешим доступ к серверу времени только из нашей локальной сети echo "restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap nopeer ">> /etc/ntp.conf
Посмотрим конфигурационный файл ntp.conf
cat /etc/ntp.conf
если указанной ниже строки нет то добавляем ее или изменяем.
restrict default kod notrap nomodify nopeer noquery
* где:
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 позволяют обмен данные серверу с самим собой.
перезапускаем наш сервер NTP
service ntp restart
Для настройки автоматического запуска демона при загрузке системы, используйте специальную команду.
update-rc.d ntp defaults
Тестирование
Проверить состояние получения эталонного времени можно командой:
ntpq -pn
Ее вывод будет представлен в виде таблицы:
remote refid st t when poll reach delay offset jitter ============================================================================== 0.debian.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000 1.debian.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000 2.debian.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000 3.debian.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000 -195.141.190.190 10.17.10.20 3 u 520 1024 377 60.802 2.831 0.071 -213.141.154.170 89.109.251.22 2 u 999 1024 377 27.349 0.745 0.296 *89.175.20.7 .GPS. 1 u 35m 1024 376 28.392 -0.606 0.137 -85.21.78.8 89.175.22.41 2 u 937 1024 377 27.077 -0.428 0.496 +194.190.168.1 .GPS. 1 u 861 1024 377 30.165 -0.225 12.432 +85.21.78.91 89.109.251.23 2 u 743 1024 377 27.434 -0.619 0.247
В таблице указываются следующие параметры:
remote — адрес сервера точного времени (в этой графе отображаются серверы из списка в конфигурационном файле); refid — вышестоящий сервер (тот, от которого сервер из предыдущей графы получает синхронизацию); st — уровень (stratum) сервера; t — тип пира (u- unicast, m- multicast); when — время последней синхронизации; poll — время в секундах, за которое демон NTP синхронизируется с пиром; reach — состояние доступности сервера; после восьми успешных попыток синхронизации значение этого параметра становится равным 377; delay — время задержки ответа от сервера; offset — разница времени между нашим сервером и сервером синхронизации; положительное значение этого параметра означает, что наши часы спешат, отрицательное — что отстают; jitter — смещение времени на удаленном сервере. Слева от адреса сервера могут быть указаны следующие символы: * сервер выбран для синхронизации; + сервер, пригодный для обновления (с которым можно синхронизироваться); — с сервером синхронизироваться не рекомендуется; х сервер недоступен.
Проверить, пригоден ли сервер из списка для синхронизации, можно при помощи утилиты ntpdate:
Устанавливаем ее
apt-get install ntpdate
и проверяем
ntpdate -q 127.0.0.1
server 127.0.0.1, stratum 2, offset -0.000000, delay 0.02563 4 Dec 12:30:58 ntpdate[24565]: adjust time server 127.0.0.1 offset -0.000000 sec
В данном случае вывода видно, что сервер пригоден для синхронизации, его уровень — 2, смещение — 0.000000 мс, задержка — 0.02563 мс.
Настройка клиента в Linux
Для этих можно использовать 2 способа настройки — с помощью ntp или утилиты ntpdate.
NTP
Устанавливаем ntp:
Ubuntu / Debian:
apt install ntp
В настройка /etc/ntp.conf в качестве сервера оставляем только наш локальный сервер, например:
server 192.168.0.1
Остальные pool и server удаляем или комментируем.
Перезапускаем NTP:
service restart ntp
ntpdate
Утилита командной строки выполняет синхронизацию только при запуске. Для автоматизации процесса, добавляем задание в cron:
crontab -e
*/30 * * * * root /usr/sbin/ntpdate 192.168.0.1
* в данном примере задание будет выполняться каждые 30 минут. /usr/sbin/ntpdate — полный путь расположения утилиты, в разных системах может быть разным — проверить стоит командой which ntpdate.
Настройка клиента в Windows
В командной строке выполняем:
w32tm /config /manualpeerlist:"192.168.0.1,0x8" /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.