Увімкнення сервера ntp. Встановлення ntp в Ubuntu

Увімкнення сервера ntp. Встановлення ntp в Ubuntu

Доброго дня, гості та постійні читачі. Поступово переходжу від основ до більш поглибленого вивчення Linux. Сьогодні хочу розглянути роботу протоколу ntp, а також налаштування сервера часу на Linux(ntp server). Отже, почнемо з теорії.

Протокол NTP

Network Time Protocol (NTP)- мережевий протокол для синхронізації внутрішнього годинника комп'ютера з використанням мереж зі змінною латентністю (читай "шириною"/якістю каналу).

NTP використовує для своєї роботи протокол UDP та порт 123.

Поточна версія протоколу - NTP 4. NTPвикористовує ієрархічну систему «вартових рівнів»(їх також називають Stratum). Рівень 0 (або Stratum 0)- це, зазвичай, пристрої, що представляють собою атомний годинник (молекулярний, квантовий), GPS годинник або радіогодинник. Дані пристрої зазвичай не публікуються у всесвітню мережу, а підключаються безпосередньо до серверам часу рівня 1за допомогою протоколу RS-232 (на ілюстрації позначені жовтими стрілками). Рівень 1синхронізований з високоточним годинником рівня 0, зазвичай працюють як джерела для серверів рівня 2. Рівень 2синхронізується з однією з машин рівня 1, а також можлива синхронізація з серверами свого рівня. Рівень 3працює аналогічно до другого. Зазвичай у мережу публікуються сервери рівнів від другого та нижче. Протокол NTPпідтримує до 256 рівнів. Також хочеться відзначити, що сервери рівнів 1 і 2, а іноді і 3 не завжди відкриті для загального доступу. Іноді, щоб синхронізуватися з ними, потрібно надіслати запит поштою - адміністраторам домену.

Навіщо робиться обмеження доступу до серверам? З переходом на кожен рівень трохи зростає похибка щодо первинного сервера, зате збільшується загальна кількість серверіві, отже, .

Призначення сервера NTP у локальній мережі

Навіщо нам може знадобитися NTP server?Наприклад, існують служби операційних систем, які можуть залежати від синхронізованого часу. Найбільш яскравим прикладом таких служб є протокол автентифікації Kerberos. Для його роботи необхідно, щоб на комп'ютерах, доступ до яких здійснюється з використанням цього протоколу, системний час відрізнявся не більше ніж на 5 хвилин. Крім того, точний час на всіх комп'ютерах значно полегшує аналіз журналів безпеки під час розслідування інцидентів у локальної мережі.

Режими роботи NTP сервера/клієнта

Клієнт/сервер

Цей режим на сьогоднішній день найчастіше використовується в Інтернеті. Схема роботи – класична. Клієнт посилає запит, який протягом певного часу сервер надсилає відповідь. Налаштування клієнта здійснюється за допомогою директиви server у конфігураційному файлі, де вказується ім'я сервера часу DNS.

Симетричний активний/пасивний режим

Цей режим використовується в тому випадку, якщо використовується синхронізація часу між великою кількістю рівноправних машин. Крім того, що кожна машина синхронізується із зовнішнім джерелом, вона також здійснює синхронізацію зі своїми сусідами (peer), виступаючи для них як клієнт і сервер часу. Тому навіть якщо машина "втратить" зовнішнє джерело, вона все ще зможе отримати точний час від своїх сусідів. Сусіди можуть працювати у двох режимах – активному та пасивному. Працюючи в активному режимі, машина сама передає свій час усім машинам-сусідам, перерахованим у секції peers конфігураційного файлу ntp.conf. Якщо ж у цій секції сусіди не вказані, вважається, що машина працює в пасивному режимі. Для того, щоб зловмисник не зміг скомпрометувати інші машини, представившись як активне джерело, необхідно використовувати аутентифікацію.

Режим Broadcast

Цей режим рекомендується використовувати в тих випадках, коли мала кількість серверів обслуговує велику кількість клієнтів. Працюючи в цьому режимі, сервер періодично розсилає пакети, використовуючи широкомовну адресу підмережі. Клієнт, налаштований на синхронізацію у такий спосіб, отримує широкомовний пакет сервера та здійснює синхронізацію із сервером. Особливістю цього режиму є те, що час доставляється в рамках однієї підмережі (обмеження broadcast-пакетів). Крім того, для захисту від зловмисників необхідно використовувати аутентифікацію.

Режим Multicast

Цей режим багато в чому схожий на broadcast. Відмінність у тому, що з доставки пакетів використовуються multicast-адреси мереж класу D адресного простору IP-адрес. Для клієнтів та серверів задається адреса multicast-групи, яку вони використовують для синхронізації часу. Це уможливлює синхронізацію груп машин, розташованих у різних підмережах, за умови, що маршрутизатори, що їх з'єднують, підтримують протокол IGMP і налаштовані на передачу групового трафіку.

Режим Manycast

Цей режим є нововведенням четвертої версії протоколу NTP. Він має на увазі пошук клієнтом серед своїх мережевих сусідів багатоcast-серверів, отримання від кожного з них зразків часу (з використанням криптографії) і вибір на підставі цих даних трьох «кращих» багатоcast-серверів, з якими клієнт буде проводити синхронізацію. У разі виходу з ладу одного із серверів клієнт автоматично оновлює свій список.

Для передачі зразків часу клієнти та сервери, що працюють у багатоcast-режимі, використовують адреси multicast-груп (мережі класу D). Клієнти та сервери, які використовують одну й ту саму адресу, формують одну асоціацію. Кількість асоціацій визначається кількістю використовуваних multicast-адрес.

Час у Linux

Коротко розповім, який час існує в Linux та як його задати. У Linux, як і в іншій ОС, існує два часи. Перші - апаратні , іноді звані Real Time Clock, скорочено ( RTC) (вони ж - годинник BIOS) зазвичай вони пов'язані з кварцовим кристалом, що коливається, мають точність ходу до декількох секунд на день. Точність залежить від різних коливань, наприклад, навколишньої температури. Другий годинник - внутрішній програмний годинник , які йдуть безперервно, у тому числі і під час перерв у роботі системи. Вони схильні до відхилень, пов'язаних з великим системним навантаженням і затримкою переривань. Однак система зазвичай зчитує показання апаратного годинника при завантаженні і потім використовує системний годинник.

Дата та час операційної системивстановлюється при завантаженні на основі значення апаратного годинника, а також налаштувань часового поясу. Налаштування часового поясу беруться з файлу /etc/localtime. Даний файл – є посилання (але частіше – копія) одного з файлів у структурі каталогу /usr/share/zoneinfo/.

Апаратний годинник Linux може зберігати час у форматі UTC(Аналог GMT), або поточний територіальний час. Загальна рекомендація в тому, який час встановлювати (?) наступна: якщо на комп'ютері встановлено кілька ОС і одна з них - Windows, то необхідно використовувати поточний час (бо Windows бере час з BIOS/CMOS і вважає його локальним). Якщо використовуються тільки операційні системи UNIX сімейства, то бажано зберігати час у BIOS у форматі UTC.

Після завантаження операційної системи годинник операційної системи та BIOS повністю незалежні. Ядро системи раз на 11 секунд синхронізує системний годинник з апаратним.

Через деякий час між апаратним і програмним годинником може бути різниця в кілька секунд. Який же годинник містить правильний час? Ні ті, ні інші, поки ми не налаштуємо синхронізацію часу.

Примітка:

Ядро Linux"а завжди зберігає і обчислює час, як число секунд, що минули з півночі 1-го січня 1970 року, незалежно від того, встановлено ваш годинник на локальний або всесвітній час. Перетворення на локальний час здійснюється в процесі запиту.

Оскільки кількість секунд з 1-го січня 1970 року всесвітнього часу зберігається як знакове 32-бітове ціле (це справедливо для Linux/Intel систем), ваш годинник перестане працювати десь у 2038 році. Linux не має проблеми 2000 року, але має проблему 2038 року. На щастя, на той час всі linux"и будуть запущені на 64-х розрядних системах. 64-х бітне ціле буде містити наш годинник приблизно до 292271-мільйонного року.

NTP Server Linux

Вступ

Існує безліч реалізацій для синхронізації часу для ОС Linux. Найбільш відомими є Xntpd (NTP версія 3), ntpd (NTP версія 4), Crony та ClockSpeed. У прикладі ми будемо використовувати ntp-сервер ntpd.

Демон ntpd є одночасно сервером часу і клієнтом, залежно від налаштувань конфігураційного файлу /etc/ntpd.conf (іноді /etc/ntp.conf), демон може і "приймати" час з приділених серверів і "роздавати" іншим хостам час.

Загальна схема синхронізації часуу локальній мережі наступна: необхідно мати 1 або 2 сервери, які мають доступ до глобальної мережі, які отримуватимуть час з Інтернету. Усі комп'ютери локальної мережі синхронізують із вказаними серверами, які отримують час з Інтернету.

Встановлення ntpd

Власне, встановлення демоназводиться до встановлення наступних пакетів: ntp(пакет, що включає самого демона), ntpdate(Утиліта для ручної синхронізації часу - застаріла), ntp-doc(документація по пакету), у деяких дистрибутивах потрібно буде встановити так само ntp-utils(Утиліти для діагностики), в деяких вони включені в пакет ntp. Як робити установку програм у Linux, я описував у . Після встановлення пакета, в більшості дистрибутивів, демон буде вже налаштований як ntp-клієнт (наприклад у Debian було так). Відповідно, автоматично було створено основні конфігураційні файли: /etc/ntp.conf і /var/lib/ntp/ntp.drift і автоматично запущено демон.

Перед налаштуванням демона на синхронізацію із зовнішнім світом я порадив би встановити поточну системну дату на значення, максимально наближене до реального часу. Встановлення дати в Linuxпроводиться командою: date MMDDhhmmCCYY.ss,де MM – місяць, DD – день місяця, hh – годинник, mm – хвилини, CCYY – 4 цифри року, ss – секунди. При цьому значення CCYY.ssвказувати необов'язково.

Як видно, вказана команда встановить поточну дату та час на 27 грудня 2010 року, 20:06:30. Команда dateбез параметрів, виводити поточний системний час. Ця команда має купу параметрів, з якими можна ознайомитися в man date.

Також необхідно правильно налаштувати апаратний годинник і часовий пояс. Як говорилося вище, часовий пояс налаштовується копіюванням необхідного файлузони з каталогу /usr/share/zoneinfo/у файл /etc/localtime:

Ntp-server:~# cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime

Апаратні годинник я налаштував на UTC:

# cat /etc/sysconfig/clock | grep UTC # UTC = true indicates that the clock is set to UTC; UTC=true ntp2-server:~# cat /etc/default/rcS | grep UTC UTC=yes

У першому прикладі вказано конфігураційний файл, який визначає використання UTC для RH, другий - для Deb-дистрибутивів.

Окрім встановлення налаштувань на використання часу у форматі UTC, необхідно задати апаратний час . (У більшості випадків у цьому немає необхідності, тому що заданий системний час неминуче синхронізується з апаратним, силами ядра). Але все ж таки, якщо у вас є бажання це зробити... Команда hwclockчитає та встановлює апаратний годинник на підставі переданих йому параметрів. Доступні параметри наведено на сторінці керівництва команди. Ось кілька прикладів використання hwclock:

Ntp-server# hwclock # зчитує час з апаратного годинника ntp-server# hwclock --systohc --utc # встановлює час апаратного годинника рівним # UTC на підставі системного часу ntp-server# hwclock --systohc # встановлює час апаратного годинника # рівним місцевому на основі системного часу ntp-server# hwclock --set --date "22 Mar 2002 13:17" # встановлює час апаратного годинника # рівним зазначеному рядку

Іншим варіантом зміни часу в апаратному годиннику - це доступ до BIOS при завантаженні системи. Оскільки час ОС незалежно від апаратного годинника, будь-які зміни в BIOS будуть враховані при наступному завантаженні.

Тепер, коли у нас все підготовлено та встановлено, приступимо до на будівництві.

Управління демоном ntpd

Управління демоном ntpdнічим не відрізняється від управління будь-якими іншими демонами. Запуск або перезапуск служби ntpd:

#/etc/init.d/ntp start #/etc/init.d/ntp restart

Зупинка:

#/etc/init.d/ntp stop

#/bin/kill `cat /var/run/ntpd.pid`

Демон має такі параметри запуску:

P - PID-файл,
-g - дозволити перехід на великий стрибок часу
-c - конфіг файл
-q – примусова ручна синхронізація

Налаштування сервера ntpd

Насамперед пораджу змінити параметри запуску демона в наступному конфігураційному файлі:

Ntp-server:~# cat /etc/default/ntp NTPD_OPTS="-g"

# cat /etc/sysconfig/ntpd # Parameters for NTP daemon. # See ntpd(8) for more details. .... # Specifies additional parameters for ntpd. NTPD_ARGS="-g"

Цей параметр дозволить синхронізувати годинник, навіть якщо утворилася дуже велика різниця в часі.

Отже, як я вже казав, інформація про конфігурацію демона ntpdлежить у файлі /etc/ntp.conf.Синтаксис файлу стандартний, як і в багатьох інших конфігах: порожні рядки та рядки, що починаються із символу "#", ігноруються. Ось простий приклад:

Ntp-server:~# cat /etc/ntp.conf server ntplocal.example.com prefer server timeserver.example.org server ntp2a.example.net driftfile /var/db/ntp.drift

Параметр serverзадає, які сервери будуть використовуватися для синхронізації, по одному у кожному рядку. Якщо сервер заданий з аргументом prefer, як ntplocal.example.com, то цьому серверу надається перевага перед рештою. Відповідь від бажаного сервера буде відкинута, якщо він значно відрізняється від відповідей інших серверів, інакше він використовуватиметься безвідносно до інших відповідей. Аргумент preferзазвичай використовується для серверів NTP, про які відомо, що вони є дуже точними, такими, на яких використовується спеціальне обладнання точного часу.

Параметр driftfileзадає файл, який використовується для зберігання зміщення частоти системного годинника. Наскільки я зрозумів, цей файл постійно зберігає якесь значення, яке формується на підставі аналізу минулих коригувань часу і якщо зовнішні джерела часу стають недоступними, то коригування часу відбувається за значенням файлу drift.Він повинен змінюватися ніякими іншими процесами. І перед вказівкою даного файлуу конфігурації - файл має бути створено.

За промовчанням сервер NTP буде доступний для всіх хостів в Інтернеті. Параметр restrictу файлі /etc/ntp.confдозволяє контролювати, які машини можуть звертатися до вашого сервера. Якщо ви хочете заборонити всім машинам звертатися до вашого сервера NTP, додайте наступний рядок у файл /etc/ntp.conf:

restrict default ignore

Якщо ви хочете дозволитисинхронізувати свій годинник з вашим сервером тільки машин у вашій мережі, але заборонитиїм налаштовувати серверабо бути рівноправними учасниками синхронізації часу, то замість зазначеної додайте рядок:

restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

де 192.168.1.0 є IP-адресою вашої мережі, а 255.255.255.0 її мережевою маскою. /etc/ntp.confможе містити декілька директив restrict.

Для коректної і більш точної роботи демона, бажано вибрати сервери рівня - від stratum 2 (можна звичайно stratum1, але доведеться вбити час на пошуки такого сервера) і з обраних stratum 2 ті, до яких мінімальна "відстань". Зазвичай, такі сервери можуть надаватися вашим провайдером. Кількість серверів, що вибираються, бажано - більше 2-х 3-х, чим більше тим краще, але в розумних межах. Якщо Вам ліньки вибирати найкращі сервери, то можна взяти список відкритих серверів другого рівня звідси: http://support.ntp.org/bin/view/Servers/StratumTwoTimeServers.

Вибираємо перелік еталонних NTP серверів

Ідемо за вказаною адресою (http://support.ntp.org/bin/view/Servers/StratumTwoTimeServers) та підбираємо список початкових серверів. З даного спискувибираємо сервери, що задовольняють нашим вимогам, за допомогою аналізу виведення команди ntpdate. При виконанні команди застосовується наступний синтаксис:

ntpdate параметри сервери_через_пробіл

Щоб наш запит не вносив зміни до системи, необхідно використовувати параметр -q, який вказує використання запиту без внесення змін. Також можна використовувати ключ -d, що вказує, що команда буде виконуватися в налагоджувальному режимі, з виведенням додаткових відомостей, без внесення реальних змін (при даному ключі виводиться купа іншого сміття:), який нам у даний моментне потрібен). Інші параметри можна переглянути в man 8 ntpdate. Із вказаного посилання я вибрав усі сервери Open Access, розташовані в Росії (RU) + той, який надав провайдер і запустив команду, вийшло приблизно таке:

Ntp-server:~# ntpdate -q ntp2.ntp-servers.net ntp1.vniiftri.ru ntp2.vniiftri.ru ntp4.vniiftri.ru ntp0.ntp-servers.net ntp1.ntp-servers.net ntp.corbina.net server 88.147.255.85, stratum 1, offset 0.006494, delay 0.09918 server 62.117.76.142, stratum 1, offset 0.002552, delay 0.06920 server 62.117.76.141, stratum 1, offset 0.003147, delay 0.06918 server 62.117.76.140, stratum 1, offset 0.004823, delay 0.07350 server 88.147.254.228, stratum 1, offset -0.002355, delay 0.12030 server 88.147.254.229, stratum 1, offset -0.000922, delay 0.10577 server 62.117.76.138, stratum 1, offset 0.005331, delay 0.07401 server 195.14 .40.141, stratum 2, offset 0.002846, delay 0.07188 13 Jan 19:14:09 ntpdate: adjust time server 62.117.76.141 offset 0.003147 sec

У прикладі наші сервери вдало видали рівень stratum1, що не може не тішити (крім сервера провайдера), offset - це розбіжність у часі з цим сервером у секундах, delay - затримка синхронізації в секундах. Зазвичай, б Пробільша точність виходить під час використання серверів, які мають низьку затримку передачі пакетів через мережу. Для виявлення цього можна скористатися . Відповідно, обравши спочатку ті, у яких час відповіді менший, а з них – ті, до яких менше хопів. Я ж, щоб не гаяти часу, скористаюся всім зазначеними серверами і впишу їх у конфігураційний файл. Разом, знаючи все вищеперелічене, опишу свій файл, що вийшов. /etc/ntp.conf:

Ntp-server:~# cat /etc/ntp.conf # Сервера локальної мережі (закоментовані, не використовуються - в мережі один сервер) #server 192.168.0.2 #server 192.168.0.5 # інтернет-сервера server ntp2.ntp-servers.net server ntp1.vniiftri.ru server ntp2.vniiftri.ru server ntp4.vniiftri.ru server ntp0.ntp-servers.net server ntp1.ntp-servers.net server ntp3.vniiftri.ru server ntp.corbina.net # Файли сервера driftfile /var/lib/ntp/ntp.drift logfile /var/log/ntpstats # обмеження доступу до сервера: # за замовчуванням ігноруємо все restrict default ignore # локалхост без параметрів - значить дозволено все. Параметри йдуть лише на заборони. restrict 127.0.0.1 # далі описуються сервери, з якими ми синхронізуємося в локальній мережі. # Дозволяємо їм все крім трапів і запитів до нас restrict 192.168.0.2 noquery notrap restrict 192.168.0.5 noquery notrap # для локалки так само дозволяємо все, крім трапів і модифікацій restrict 192.168.0.1. доступ: restrict ntp2.ntp-servers.net restrict ntp1.vniiftri.ru restrict ntp2.vniiftri.ru restrict ntp4.vniiftri.ru restrict ntp0.ntp-servers.net restrict ntp1.ntp-servers.net restrict ntp3. restrict ntp.corbina.net # а цей хак, який виставляє рівень довіри серверу (strata) самому собі рівний 3 # у двох словах чим вищий рівень тим менше число. 0 - це атомний годинник, # 1 - це синхронізовані з ними, 2 - з першим, і так далі. server 127.127.1.1 fudge 127.127.1.1 stratum 3

Для більш поглибленого розуміння та налаштування сервера опишу деякі параметри конфігурації ntpd, про які не згадував::

  • enable/disable auth/monitor/pll/pps/stats - включити вимкнути режим роботи:
    • auth- з незгаданими сусідами спілкуватися лише у режимі аутентифікації;
    • monitor- дозволити моніторинг запитів;
    • pll- дозволити налаштовувати частоту місцевих годинників за NTP;
    • stats- дозволити збирання статистики;
  • statisticsloopstats- при кожній модифікації локального годинника записує рядок у файл loopstats;
  • statisticspeerstats- кожне спілкування із сусідом записується в журнал, що зберігається у файлі peerstats;
  • statisticsclockstats- кожне повідомлення від драйвера локального годинника записується в журнал, що зберігається у файлі clockstats;
  • statsdir(ім'я_каталого_зі_статистикою)- задає ім'я каталогу, в якому будуть файли зі статистикою сервера;
  • filegen - Визначає алгоритм генерації імен файлів, які складаються з:
    • префікс- постійна частина імені файлу, задається або за компіляції, або спеціальними командами конфигурации;
    • ім'я файлу- додається до префікса без косої межі, дві точки заборонені, може бути змінена ключем file;
    • суфікс- генерується залежно від typename;
  • restrictnumeric-address- задає обмеження доступу: пакети сортуються та маскам, береться вихідна адреса та послідовно порівнюється, від останнього вдалого порівняння береться прапор доступу:
    • немає прапорів- дати доступ;
    • ignore- ігнорувати усі пакети;
    • noquery- ігнорувати пакети NTP 6 та 7 (запит та модифікація стану);
    • nomodify- ігнорувати пакети NTP 6 та 7 (модифікація стану);
    • limited- обслуговувати лише обмежену кількість клієнтів із цієї мережі;
    • nopeer- обслуговувати хост, але з синхронізуватися з ним;
  • clientlimitlimit- для прапора limitedвизначає максимальну кількість клієнтів, що обслуговуються (за дефолтом 3);

Отже, ми отримали ntpd-server, який синхронізується із зовнішнім світом, дозволяє отримувати час для клієнтів з локальної мережі 192.168.0.1 з маскою 255.255.255.0, а також може синхронізуватися з локальним сервером (якщо розкоментувати кілька рядків). Нам залишилося налаштувати клієнтів та дізнатися, як спостерігати за нашим сервером.

Спостереження за сервером ntpd та за синхронізацією

Коли у вас все налаштовано. NTP буде тримати час у синхронізованому стані. Цей процес можна спостерігати за допомогою NTP Query (ntpq):

Ntp-server:~# ntpq -p remote refid st t when poll reach delay offset jitter =============================== =============================================== -n3. time1.d6.hsd .PPS. 1 u 34 64 177 70.162 2.375 8.618 +ntp1.vniiftri.r .PPS. 1 u 33 64177 43.479 -0.020 10.198 *ntp2.vniiftri.r .PPS. 1 u 6 64177 43.616 -0.192 0.688 +ntp4.vniiftri.r .PPS. 1 u 4 64 177 43.623 0.440 0.546 -n1.time1.d6.hsd .PPS. 1 u 53 64 77 92.865 -11.358 38.346 -ns1.hsdn.org .GPS. 1 u 40 64177 78.057 -3.292 35.083 -ntp3.vniiftri.r .PPS. 1 u 44 64 77 47.667 2.292 2.611 -scylla-l0.msk.c 192.43.244.18 2 u 62 64 77 41.565 -1.564 28.914

Ця команда з ключем -p виводить на стандартний висновок список джерел часу з їх характеристиками (інші параметри команди man ntpq). Значення кожної колонки таке:

Ім'я віддаленого сервера NTP. Якщо вказати ключ -n, ви отримаєте IP-адреси серверів замість імен.

Вказує, звідки кожен сервер отримує час на даний момент. Це може бути ім'я хоста або щось на зразок.GPS., що вказує на джерело глобальної системи позиціонування (Global Positioning System).

Stratum (рівень) - це число від 1 до 16, що вказує на точність сервера. Одиниця означає максимальну точність, 16 - сервер недоступний. Ваш рівень дорівнюватиме рівню найменш точного віддаленого сервера плюс 1.

Інтервал між опитуваннями (у секундах). Значення змінюватиметься між мінімальною та максимальною частотою опитувань. На початку інтервал буде невеликим, щоб синхронізація відбувалася швидко. Після того, як годинник синхронізується, інтервал починає збільшуватися, щоб зменшити трафік і навантаження на популярні серверичасу.

Восьмеричне представлення масиву з 8 біт, що відображає результати останніх восьми спроб з'єднання з сервером. Біт виставлено, якщо віддалений сервер відповів.

Кількість часу (в секундах) необхідного для отримання відповіді на запит "котра година?".

Найважливіше поле. Різниця між часом локального та віддаленого серверів. У ході синхронізації це значення має знижуватися (наближатися до нуля), вказуючи на те, що годинник локальної машини йде все точніше.

Дисперсія (Jitter) - це міра статистичних відхилень від значення зміщення (поле offset) з кількох успішним парам запит-ответ. Найменше значення дисперсії краще, оскільки дозволяє точніше синхронізувати час.

Значення символів перед іменами серверів

x - фальшиве джерело за алгоритмом перетину;
. - виключено зі списку кандидатів через велику відстань;
- видалено зі списку кандидатів алгоритмом кластеризації;
+ - входить до кінцевого списку кандидатів;
# - обраний для синхронізації, але є 6 найкращих кандидатів;
* - вибраний для синхронізації;
o - вибрано для синхронізації, але використовується PPS;
пробіл - занадто великий рівень, цикл чи явна помилка;

Служба ntpd"розумна" і сама відсіює джерела часу, що занадто вибиваються за рамки розумного. Через деякий час після запуску ntpd вибере найбільше достовірні джереладаних і синхронізуватиметься з ними. Наведений нами список еталонних NTP серверів регулярно переглядається службою.

Перевірити можливість синхронізації локально на сервері можна командою:

Ntp-server:~# ntpdate -q localhost server 127.0.0.1, stratum 2, offset -0.000053, delay 0.02573 server::1, stratum 2, offset -0.000048, delay 0.02574 14 ::1 offset -0.000048 sec

З висновку команди видно, що наш сервер вже став рівня stratum 2. Для досягнення цього рівня, потрібен деякий час. Можливо, в перші 10-15 хвилин рівень сервера буде вищим.

Про коректну роботу сервера ntp можна так само судити з логів демона ntpd:

Ntp-server:~# cat /var/log/ntpstats/ntp 13 Jan 20:13:16 ntpd: Опубліковано на interface #5 eth0, fe80::a00:27ff:fec1:8059#123 Enabled 13 Jan 20:13: 16 ntpd: Listing on interface #6 eth0, 192.168.0.8#123 Enabled 14 Jan 14:31:00 ntpd: synchronized to 62.117.76.142, stratum 1 14 Jan 14:31:12 13 ntpd :31:10 ntpd: kernel time sync status change 0001 14 Jan 14:34:31 ntpd: synchronized to 88.147.255.85, stratum 1 14 Jan 14:36:04 ntpd: synchronized to 66.1 14:11 14:11 04:36 ntpd: synchronized to 62.117.76.142, stratum 1 14 Jan 15:10:58 ntpd: synchronized to 62.117.76.140, stratum 1 14 Jan 15:17:54 ntpd: no3 reach : synchronized to 62.117.76.140, stratum 1 14 Jan 15:32:14 ntpd: time reset +13.139105 s

Налаштування netfilter (iptables) для сервера NTP

Налаштувавши роботу сервера, непогано було б захистити його. Ми знаємо, що сервер працює на порту 123/udp, при цьому запити так само відправляються з порту 123/udp. Ознайомившись із статтею, та ознайомившись із практичними, можна створити правила фільтрації мережевого трафіку:

Ntp ~ # iptables-save # типові правила iptables для DNS *filter:INPUT DROP:FORWARD DROP:OUTPUT DROP -A -m conntrack --ctstate INVALID -j DROP # дозволити доступ локальної мережі до сервера NTP: -A INPUT -s 192.168.1.1/24 -d 192.168.1.1/32 -p udp -m udp --dport 123 -m conntrack - -ctstate NEW -j ACCEPT -A OUTPUT -o lo -j ACCEPT -A OUTPUT -p icmp -j ACCEPT -A OUTPUT -p udp -m udp --sport 32768:61000 -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 32768:61000 -j ACCEPT -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT # дозволити доступ NTP серверу здійснювати вихідні запити -A OUTPUT -p udp -m udp --sport 123d -m conntrack --ctstate NEW -j ACCEPT COMMIT

Це типовий приклад! Для завдання правил iptables під Ваші завдання та конфігурацію мережі необхідно розуміти принцип роботи netfilter в Linux, почитавши вищевказані статті.

Налаштування клієнтських машин

Для синхронізації часу на UNIX-машинахлокальної мережі доцільно використовувати утиліту ntpdate, запускаючи її за допомогою кілька разів на добу, наприклад, кожну годину. Для цього необхідно додати наступний рядок:

0 * * * * /usr/sbin/ntpdate -s

Ключ -s спрямовує висновок команди. Якщо на клієнтських машинах є кілька зайвих мегабайт оперативної пам'яті, то можна запустити демон ntpd, як і на сервері з наступним конфігом:

Server restrict default ignore restrict noquery notrap restrict 127.0.0.1 nomodify notrap

Думаю, в даному конфізі все зрозуміло: джерело часу (server) - локальний ntpd-сервер, доступ заборонити всім, дозволити тільки локальному ntpd-серверу.

Також на клієнтах необхідно правильно вказати в якому форматі зберігати час і вибрати правильний часовий пояс, .

Для налаштування NTP клієнта Windows, необхідно виконати в консолі такі команди:

C:\>net time /setsntp: Команда здійснена успішно. C:\>net stop w32time У Windows Time service is stopping. У Windows Time service був схвалений успішно. C:\>net start w32time У Windows Time service is starting. У Windows Time service було здійснено успішно. C:\>net time /querysntp current SNTP value is: Команда здійснена успішно.

Висновок

Ну начебто все! Обсяг статті вийшов величезним... Навіть сам не очікував. Підведу невеликий підсумок викладеного. У цій статті нам, сподіваюся, стало зрозуміло, що є і як працює NTP-сервер. Навчилися налаштовувати сервер та клієнтів на UNIX та Windows машинах. У кількох словах, структура синхронізації часу в локальній мережі наступна: Є 1,2 або більше серверів точного часу в локальній мережі, вони синхронізують свій час із зовнішніми джерелами в глобальної мережі. Налаштування сервера та клієнтів засновані на файлах /etc/ntp.conf (основний конфігураційний файл демона ntpd), /etc/localtime (файл поточного часового поясу), а також /etc/sysconfig/ntp (для RH) та /etc/default /ntp (для Deb) – файли параметрів запуску демона. Для локального ntp-сервера в конфігураційному файлі вказуються зовнішні сервери для отримання часу і дозволяється доступ для цих серверів параметром restrict, а також для комп'ютерів локальної мережі, для клієнтів вказується джерело часу - локальні сервериу локальній мережі, а також забороняється доступ для всіх, крім джерела часу в локальній мережі. Всі. Усім дякую за увагу! Буду радий коментарям!

  • (архів статті) описано, як підключити GPS до сервера для організації свого сервера точного часу Stratum1.
  • описано, як настроїти авторизацію на ntp-сервері.

Днями знову знадобилося налаштувати 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 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 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
У результаті маємо отримати:
Команда синхронізації відправлена ​​на локальний комп'ютер...
Команда виконана успішно.
Через деякий час можна перевірити журнал подій системи. Якщо все налаштовано та відпрацювало правильно, то в журналі буде інформаційне повідомлення від джерела 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

Синхронізація часу є важливим завданням, хоча не багато хто замислювався про це. Ну що поганого в часі, що втік на сервері? А чи знаєте ви, що багато проблем із годинником впливають на протоколи, пов'язані з криптографією? З цієї причини в Active Directoryрізниця в годинах більше 5 хвилин призводитиме до проблем автентифікації Kerberos.

Часові рівні. Strata.

Щоб зрозуміти пристрій NTP слід знати про концепцію strataабо stratum. Авторитетні джерела часу, такі як супутники GPS, цезієві атомні годинники, радіо хвилі WWVB - все це stratum 0. Вони авторитетні на тій підставі, що вони мають певний спосіб підтримки високоточного хронометражу. Можна, звичайно, скористатися звичайним кварцовим годинником, але знаючи, що за місяць з ними легко втратити 15 секунд, то краще їх не використовувати як мірил часу. Stratum 0це коли секунда не загубиться за 300 000 років!

Комп'ютери, які безпосередньо (не по мережі!) беруть час у stratum 0- це stratum 1. Оскільки завжди є затримки через передачу сигналу та витрати на встановлення часу, то комп'ютери stratum 1не такі точні як stratum 0, але у реальному житті відмінність сягає кілька мікросекунд (1 мкс = 10 -6 з), що цілком допустиме відхилення.

Наступний рівень комп'ютерів, що беруть час по мережі у stratum 1- це... барабанний дріб... інтрига... stratum 2! Знову таки через різні затримки (мережні точно), stratum 2трохи відстає від stratum 1і вже точно від stratum 0. Насправді це різниця від кількох мікросекунд (1 мкс = 10 -6 з) до кількох мілісекунд (1 мс = 10 -3 з). Багато хто хоче синхронізуватися з шаром не далі stratum 2.

Як відомо зі схеми, stratum 4бере час у вищого stratum 3. stratum 5у stratum 4і так далі. stratum 16вважається найнижчим шаром і час там вважається несинхронізованим.

Щоб синхронізувати час за допомогою протоколу NTP, спочатку потрібно вручну виставити час. Неприпустима різниця між вашим точним часом і показаннями вашого годинника більше 1000 секунд. Якщо сервер часу бреше більше 1000 мілісекунд (1 секунда), то він буде виключений зі списку і будуть використовуватися інші замість нього. Цей механізм дозволяє відсівати погані джерела часу.

Клієнт часу.

У файлі /etc/ntp.conf для клієнта важливі рядки Server. Їх може бути кілька – до 10 штук!

Скільки додавати? Слід мати на увазі:

  • Якщо у вас тільки один сервер (один рядок server), то якщо даний сервер почне брехати, то ви сліпо слідуватимете за ним. Якщо його час втече на 5 секунд і ви втечете слідом за ним.
  • Якщо додано 2 сервери (2 рядки server), то NTP позначить їх обох як false tickers. Якщо один з них буде брехати, то NTP не може зрозуміти хто бреше, тому що немає кворуму.
  • Якщо додано 3 і більше сервера часу, то можна обчислити одного брехуна false tickers. Якщо серверів часу 5 або 6, то можна знайти 2 брехуна false tickers. Якщо серверів 7 чи 8, то 3 false tickers. Якщо серверів 9 та 10, то 4 false tickers.

Проект NTP Pool.

Є такий проект NTP Pool на адресу якого pool.ntp.org/zone/ru/ можна знайти рекомендовані для російських користувачів сервера часу.

server 0.ru.pool.ntp.org
server 1.ru.pool.ntp.org
server 2.ru.pool.ntp.org
server 3.ru.pool.ntp.org

Такі операційні системи, як Debian та Ubuntu, пропонують користувачам свої сервери часу.

server 0.debian.pool.ntp.org
server 1.debian.pool.ntp.org
server 2.debian.pool.ntp.org
server 3.debian.pool.ntp.org

server 0.ubuntu.pool.ntp.org
server 1.ubuntu.pool.ntp.org
server 2.ubuntu.pool.ntp.org
server 3.ubuntu.pool.ntp.org

Якщо викликати на вашому Linux комп'ютері, який використовує NTP команду ntpq -pn

Remote refid st t when poll reach delay offset jitter ======================================== ====================================== +93.180.6.3 77.37.134.150 2 u 62 1024 377 53.658 -0.877 1.174 +85.21.78.23 193.190.230.65 2 u 1027 1024 377 54.651 0.167 1.531 *62.173.138.130 89.109.251.24 2 u 940 1024 377 52.796 -0.143 1.001 +91.206.16.3 194.190.168.1 2 u 258 1024 377 93.882 -0.680 2.196 -91.189.94.4 193.79.237.14 2 u 596 1024 377 100.219 1.562 1.482

Про що говорять назви стовпців:

  • remote- Видалені сервери, з якими ви синхронізуєте час.
  • refid- Вищий stratum для даного сервера.
  • st- Рівень stratum. Від 0 (нам недоступно) до 16 (нам не бажано). Ідеально – 2.
  • t- Тип з'єднання. " u" - unicast або багатоcast, " b- broadcast або multicast, " l" local reference clock, " s"- симетричний вузол," A" - manycast сервер, " B" - broadcast server, " M- multicast сервер.
  • when- час, коли востаннє сервер відповів нам. Параметр відображає число в секундах, але може в хвилинах, якщо число з mабо в годиннику, якщо h.
  • poll- Частота опитування. Мінімум 16 секунд, максимум 32 години. Число має бути 2 n. Зазвичай у цьому параметрі спостерігається 64 секунди або 1024.
  • reach- 8 біт октету, що показує статус спілкування з віддаленим сервером часу: успішний чи збійний. Якщо біти встановлені - успішно, інакше - збій. Значення 377 – бінарно це 0000 0000 1111 1111.
  • delay- значення в мілісекундах показує час між відправкою та отриманням відповіді (round trip time - RTT).
  • offset- Зміщення в мілісекундах між вами та серверами часу. Може бути позитивним та негативним числом.
  • jitter- Абсолютне значення в мілісекундах із зазначенням середньоквадратичного відхилення вашого усунення.

Перед IP адресою NTP сервера є символ – це tally code. Види tally code:

  • " " - відкинуто як неприпустиме. Наприклад, немає зв'язку з ним або він в онлайн, він занадто високий ранг і не обслуговує таких як ви.
  • "x"- відкинуто алгоритмом "перетину" (intersection algorithm). Алгоритм перетину готує список кандидатів партнерів, які можуть стати джерелами синхронізації та обчислюють довірчий інтервал для кожного з них.
  • "." - відкинуто через переповнення таблиці.
  • "-" - відкинуто алгоритмом кластеризації (cluster algorithm). Алгоритм кластеризації сортує список кандидатів за кодами шару та відстані синхронізації.
  • "+" - Сервер включений алгоритмом "комбінування" (combine algorithm). Цей сервер - чудовий кандидат, якщо поточний сервер часу почне відмовляти вам.
  • "#" - сервер є чудовим альтернативним сервером часу. Сервер з # можна побачити тільки якщо у вас більше 10 записів server /etc/ntp.conf
  • "*" – поточний сервер часу. Його показання використовуються для синхронізації вашого годинника.
  • "o"- сервер Pulse per second (PPS). Зазвичай це означає, що сервер часу використовує джерела часу типу GPS супутників та інші сигнали точного часу. Якщо малюється про, інші типи tally code вже відображатися не будуть.

В полі refidможуть бути такі значення:

  • IP-адреса - адреса віддаленого сервера часу.
  • .ACST.- NTP manycast сервер.
  • .ACTS.- Automated Computer Time Service з American National Institute of Standards and Technology.
  • .AUTH.- помилка автентифікації.
  • .AUTO.- помилка у послідовності Autokey.
  • .BCST.- NTP broadcast сервер.
  • .CHU.- Shortwave radio receiver від станції CHU в Ottawa, Ontario, Canada.
  • .CRYPT.- помилка протоколу Autokey.
  • .DCFx.- LF radio receiver від станції DCF77 в Mainflingen, Німеччина.
  • .DENY.- У доступі відмовлено.
  • .GAL.- European Galileo satellite receiver.
  • .GOES.- American Geostationary Operational Environmental Satellite receiver.
  • .GPS.- American Global Positioning System receiver.
  • .HBG.- LF radio receiver від станції HBG в Prangins, Switzerland.
  • .INIT.- Peer association initialized.
  • .IRIG.- Inter Range Instrumentation Group time code.
  • .JJY.- LF radio receiver від станції JJY в Mount Otakadoya, поряд з Fukushima або Mount Hagane на острові Kyushu, Japan.
  • .LFx.- Звичайний LF radio receiver.
  • .LOCL.- локальний годинник хоста.
  • .LORC.- LF radio receiver від Long Range Navigation (LORAN-C).
  • .MCST.- NTP multicast сервер.
  • .MSF.- Anthorn Radio Station поряд з Anthorn, Cumbria.
  • .NIST.- American National Institute of Standards and Technology.
  • .PPS.- годинник Pulse per second.
  • .PTB.- Physikalisch-Technische Bundesanstalt від Brunswick і Berlin, Germany.
  • .RATE.- перевищено поріг опитування NTP.
  • .STEP.- Зміна кроку NTP. Зміщення offsetменше 1000 мілісекунд, але більше 125 мілісекунд.
  • .TDF.- LF radio receiver від станції TéléDiffusion de France в Allouis, France.
  • .TIME.- NTP association timeout.
  • .USNO.- United States Naval Observatory.
  • .WWV.- HF radio receiver від станції WWV в Fort Collins, Colorado, United States.
  • .WWVB.- LF radio receiver від станції WWVB в Fort Collins, Colorado, United States.
  • .WWVH.- HF radio receiver від станції WWVH в Kekaha, на острові Kauai на Hawaii, United States.

По-перше, позбавтеся думки як би отримати час від stratum 1, мовляв вони ближчі за всіх до точного часу. Вони ближче до точнішого часу на планеті, тільки самі вони перевантажені і у них високі затримки RTT для звичайних серверів. Краще знайти нормальний stratum 2і не переживати із цього приводу. Не забувайте, що йдеться про мікросекунди та мілісекунди, що у звичайному житті – цілком достатньо.

По-друге, пам'ятайте, що підключення до найближчого сервера часу не завжди є ідеальним варіантом. Найважливіше не територіальна близькість, а рівень stratum. Проект NTP Pool публікує список серверів лише рівня stratum 1і stratum 2і краще взяти до 10 серверів часу з цього списку, що буде чудово.

По-третє, якщо ви простий домашній користувач-клієнт, то рекомендовані вам сервери у вашій операційній системібудуть ідеальним варіантом, що не потребує зайвих рухів тіла.

Для великих контор, найкращим варіантомбуде підняття свого сервера часу для робочих комп'ютерів. Даний сервер отримуватиме точний час від серверів часу в Інтернеті та надаватиме його локальним комп'ютерам. На серверах Debian та Ubuntu достатньо розкоментувати рядок

Restrict 192.168.0.0 mask 255.255.0.0 nomodify notrap

у конфігураційному файлі демона ntpd - /etc/ntp.conf

Користувачі з мережі 192.168/16 матимуть можливість брати з вашого сервера покази найточніших годин. Для внутрішніх серверів на базі Linux, які не є серверами часу і займаються своїми завданнями, замість запуску демона ntpd в клієнтському режимі - достатньо вказати у файлі /etc/cron.daily/syncntpd. Рекомендується прочитати різницю між ntpdate і ntp і вирішити собі питання.
#!/bin/sh
/usr/sbin/ntpdate IP.адреса.сервера > /dev/null 2>&1
exit 0

і раз на добу, завдяки команді ntpdate, буде зроблено синхронізацію часу. Щоб уникнути непорозумінь, не полінуйтеся перед використанням сервера часу та синхронізації всього і вся через протокол NTP- Виставте вручну правильний час на всіх доступних вам серверах та робочих станціях. Якщо ваш несинхронізований час дуже відрізняється від правильного, то можна спочатку огрести багато непотрібних проблем.

По-четверте, NTP аж ніяк не пов'язаний, в якій країні та які часові пояси використовуються і як відбувається перехід на літній та зимовий час і чи робиться в цій країні такий перехід. Це обов'язок лежить на операційній системі, яку вам потрібно оновлювати, якщо в країні відбуваються зміни у вартових справах. У системах Debian та Ubuntu за це відповідає пакет tzdata, який має бути актуальним.

По-п'яте, краще не піднімати свій NTP сервер на високонавантаженій системі.

За роботу сервера та клієнта NTPвідповідає " Служба часу Windows" ("W32Time").
Для налаштування сервера на ОС Windowsзробіть наступні кроки:

1. Встановлюємо автоматичний запусксервісу " W32Time". Для цього у гілці реєстру
"HKLM\System\CurrentControlSet\Services\W32Time " задаємо для параметра " Start значення 2 .

2. Потім відкриваємо " HKLM\System\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer " і встановлюємо " Enabled " одиницю.

3.Правимо такі параметри:
- Гілка: " HKLM\System\CurrentControlSet\Services\W32Time\Parameters ", параметр " Type "
NoSync - NTP-сервер не синхронізується з зовнішнім джерелом часу. Використовується годинник, вбудований у мікросхему CMOSсамого сервера;
NTP - NTP-сервер синхронізується із зовнішніми серверами часу, які вказані у параметрі реєстру " NtpServer";
NT5DS - NTP-сервер здійснює синхронізацію згідно доменної ієрархії;
AllSync - NTP-Сервер використовує для синхронізації всі доступні джерела;

Параметр " NtpServer ", де вказується хост, з яким синхронізувати час даний сервер. За потреби можна додати кілька хостів, ввівши їх DNSімена або IPадреси через пробіл. В кінці кожного імені через кому можна додавати прапор, який визначає режим синхронізації з сервером часу.
Допускаються такі значення:
0x1 - SpecialIntervalвикористання спеціального інтервалу опитування;
0x2 -режим UseAsFallbackOnly;
0x4 - SymmetricActive, Симетричний активний режим;
0x8 - Client, надсилання запиту у клієнтському режимі.
При використанні прапора " SpecialInterval", необхідно встановлене значенняінтервалу в ключі SpecialPollInterval". При значенні прапора" UseAsFallbackOnlyслужбі часу повідомляється, що даний сервер буде використовуватися як резервний, і перед синхронізацією з ним будуть виконуватися звернення до інших серверів списку. Симетричний активний режим використовується NTP-серверами за замовчуванням, а клієнтський режим можна використовувати у разі проблем із синхронізацією;

Гілка " HKLM\System\CurrentControlSet\Services\W32Time\Config ", параметр " AnnounceFlags відповідає за те, як про себе заявляє NTP-сервер та може приймати такі значення:
0x0 (Not a time server) -сервер не оголошує себе через NetLogonяк джерело часу. Він може відповідати на NTPзапити, але сусіди не зможуть розпізнати його;
0x1 (Always time server) -сервер завжди оголошуватиме себе незалежно від статусу;
0x2 (Automatic time server) -сервер буде оголошувати про себе тільки якщо він отримує надійний час від іншого сусіда (NTPабо NT5DS);
0x4 (Always reliable time server) -сервер завжди заявлятиме себе, як надійне джерело часу;
0x8 (Automatic reliable time server) -контролер домену автоматично оголошується надійним якщо він - PDC-емулятор кореневого домену лісу. Цей прапор дозволяє головному PDCліси заявити про себе як про авторизоване джерело часу навіть за відсутності зв'язку з вищими NTP-Серверами. Жоден контролер або рядовий сервер (має за промовчанням прапор 0x2) не може заявити про себе, як про надійне джерело часу, якщо він не може знайти джерело для себе.
Значення " AnnounceFlags може складати суму його прапорів, наприклад:
10=2+8 - NTP-Сервер заявляє про себе як про надійне джерело часу за умови, що сам отримує час з надійного джерела або є PDCкореневого домену. Прапор 10 задається за замовчуванням як для членів домену, так і для серверів, що окремо стоять.
5=1+4 - NTP-Сервер завжди заявляє про себе як про надійне джерело часу. Наприклад, щоб заявити рядовий сервер (не контролер домену) як надійне джерело часу, потрібний прапор 5 ;

Гілка " HKLM\System\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient ", параметр " SpecialPollInterval " задається в секундах і за замовчуванням його значення дорівнює 604800 , Що складає один тиждень. Це досить багато, тому варто зменшити значення, скажімо, до години. 3600 ).

4. Після налаштувань можна запускати службу часу: " net start w32time ". Якщо сервіс вже працював, застосуйте конфігурацію командою " w32tm /config /update " і перезапустіть: " net stop w32time && net start w32time ".

5. Після перезапуску служби NTP-Сервер вже активний і може обслуговувати клієнтів. Переконатися в цьому можна за допомогою команди. w32tm /query /configuration ". Ця команда виводить повний списокпараметрів служби. Якщо розділ " NtpServer"містить рядок" Enabled:1 ", то все гаразд.

Мережевий протокол завдання часу 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:

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

"+" - сервер можна використовувати як сервер точного часу

"-" - Не рекомендується для використання.
  • Подивитися статус нашого сервера можна за допомогою:
[email protected]:(~)ntpstat
synchronised to NTP server (10.44.0.16) на 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
симметричний активний, 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, у якому корекція зможе виконуватися завжди.

 

 

Це цікаво: