Сервер точного часу своїми руками (на основі демона ntpd)

  1. протокол NTP
  2. Призначення сервера NTP в локальній мережі
  3. Режими роботи NTP сервера / клієнта
  4. Симетричний активний / пасивний режим
  5. режим Broadcast
  6. режим Multicast
  7. режим Manycast
  8. Час в Linux
  9. NTP Server Linux
  10. установка ntpd
  11. Управління демоном ntpd
  12. Налаштування сервера ntpd
  13. Спостереження за сервером ntpd і за синхронізацією
  14. Налаштування netfilter (iptables) для NTP сервера
  15. Налаштування клієнтських машин
  16. Висновок

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

протокол NTP

Network Time Protocol (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. Він має на увазі пошук клієнтом серед своїх мережевих сусідів manycast-серверів, отримання від кожного з них зразків часу (з використанням криптографії) і вибір на підставі цих даних трьох «кращих» manycast-серверів, з якими клієнт буде робити синхронізацію. У разі виходу з ладу одного з серверів клієнт автоматично оновлює свій список.

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

Час в Linux

Коротко розповім, який час існує в Linux і як його поставити. У Linux, як і в іншій ОС, існує 2 години. Перші - апаратні, іноді звані 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, я описував в управління ПО Linux . Після установки пакета, в більшості дистрибутивів, демон буде вже налаштований як як ntp-клієнт (наприклад в Debian було так). Відповідно, автоматично були створені основні конфігураційні файли: /etc/ntp.conf і /var/lib/ntp/ntp.drift і автоматом запущений демон.

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

ntp-server: ~ # date 121720062010.30 Птн Гру 17 20:06:30 MSK 2010

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

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

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

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

[Ntp1 @ proxy ~] # 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

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

Debian:

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

RedHat:

[Ntp2 @ proxy ~] # 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, який вказує, що команда буде виконуватися в отладочном режимі, з висновком додаткових відомостей, без внесення реальних змін (при цьому ключі виводиться купа іншого сміття :), який нам в даний момент не потрібний). Інші параметри можна подивитися в. Із зазначеної посилання я вибрав все сервера 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 ntp3.vniiftri.ru 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 [1946]: adjust time server 62.117.76.141 offset 0.003147 sec

У прікладі наші сервера вдалині бачили рівень stratum1, что НЕ может НЕ радуваті (кроме сервера провайдера У прікладі наші сервера вдалині бачили рівень stratum1, что НЕ может НЕ радуваті (кроме сервера провайдера   ), Offset - це розбіжність у часі з ЦІМ сервером в секундах, delay - затримка сінхронізації в секундах ), Offset - це розбіжність у часі з ЦІМ сервером в секундах, delay - затримка сінхронізації в секундах. Зазвічай, б Про більша точність виходом при вікорістанні серверів, Які ма ють низьких затримки передачі пакетів по мережі. Для Виявлення цього, можливо скористати утілітамі ping и traceroute . Відповідно, Вибравши спочатку ті, у якіх годину ВІДПОВІДІ менше, а з них - ті, до якіх менше хопов. Я ж, Щоб не втрачати час, скорістаюся всім зазначеним серверами и впишу їх в конфігураційній файл. Разом, знаючи все перераховане вище, опишу свій файл, /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 mask 255.255.255.0 nomodify notrap nopeer # дозволяємо зовнішніх джерел часу доступ: 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.vniiftri.ru 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 - дозволити збір статистики;
  • statistics loopstats - за будь-якої модифікації локальних годин записує рядок у файл loopstats;
  • statistics peerstats - кожне спілкування з сусідом записується в журнал, що зберігається в файлі peerstats;
  • statistics clockstats - кожне повідомлення від драйвера локальних годин записується в журнал, що зберігається в файлі clockstats;
  • statsdir {імя_каталого_со_статістікой} - задає ім'я каталогу, в якому будуть знаходиться файли зі статистикою сервера;
  • filegen [file {filename}] [type {typename}] [flag {flagval}] [link | nolink] [enable | disable] - визначає алгоритм генерації імен файлів, які складаються з:
    • префікс - постійна частина імені файлу, задається або при компіляції, або спеціальними командами конфігурації;
    • ім'я файлу - додається до префікса без риски, дві точки заборонені, може бути змінена ключем file;
    • суфікс - генерується в залежності від typename;
  • restrict numeric-address [mask {numericc-mask}] [flag] - задає обмеження доступу: пакети сортуються і маскам, береться початкова адреса і послідовно порівнюється, від останнього вдалого порівняння береться прапор [flag] доступу:
    • немає прапорів - дати доступ;
    • ignore - ігнорувати всі пакети;
    • noquery - ігнорувати пакети NTP 6 і 7 (запит і модифікація стану);
    • nomodify - ігнорувати пакети NTP 6 і 7 (модифікація стану);
    • limited - обслуговувати тільки обмежена кількість клієнтів з даної мережі;
    • nopeer - обслуговувати хост, але не синхронізуватися з ним;
  • clientlimit limit - для прапора 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 64 177 43.479 -0.020 10.198 * ntp2.vniiftri.r .PPS. 1 u 6 64 177 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 64 177 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 виводить на стандартний висновок список джерел часу з їх характеристиками (інші параметри команди в). Значення кожної колонки наступне:

remote

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

refid

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

st

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

poll

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

reach

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

delay

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

offset

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

jitter

Дисперсія (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.02571 14 Jan 14:49:57 ntpdate [2231]: adjust time server :: 1 offset -0.000048 sec

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

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

ntp-server: ~ # cat / var / log / ntpstats / ntp 13 Jan 20:13:16 ntpd [1764]: Listening on interface # 5 eth0, fe80 :: a00: 27ff: fec1: 8059 # 123 Enabled 13 Jan 20 : 13: 16 ntpd [1 764]: Listening on interface # 6 eth0, 192.168.0.8 # 123 Enabled 14 Jan 14:31:00 ntpd [2217]: synchronized to 62.117.76.142, stratum 1 14 Jan 14:31:10 ntpd [2217]: time reset +10.291312 s 14 Jan 14:31:10 ntpd [2217]: kernel time sync status change 0001 14 Jan 14:34:31 ntpd [2217]: synchronized to 88.147.255.85, stratum 1 14 Jan 14 : 36: 04 ntpd [2217]: synchronized to 62.117.76.141, stratum 1 14 Jan 15:04:36 ntpd [2217]: synchronized to 62.117.76.142, stratum 1 14 Jan 15:10:58 ntpd [2217]: synchronized to 62.117.76.140, stratum 1 14 Jan 15:17:54 ntpd [2217]: no servers reachable 14 Jan 15:31:49 ntpd [2217]: synchronized to 62.117.76.140, stratum 1 14 Jan 15:32:14 ntpd [2217]: time reset +13.139105 s

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

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

ntp ~ # iptables-save # типові правила iptables для DNS * filter: INPUT DROP [7511: 662 704]: FORWARD DROP [0: 0]: OUTPUT DROP [0: 0] -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED, ESTABLISHED -j ACCEPT -A INPUT -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 123 --dport 123 -m conntrack --ctstate NEW -j ACCEPT COMMIT

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

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

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

0 * * * * / usr / sbin / ntpdate -s <IP-адреса або FQDN-имя NTP-сервера локальної мережі>

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

server <IP-адреса або FQDN-имя NTP-сервера локальної мережі> restrict default ignore restrict <IP-адреса або FQDN-имя NTP-сервера локальної мережі> noquery notrap restrict 127.0.0.1 nomodify notrap

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

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

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

C: \> net time / setsntp: <IP-адреса або FQDN-имя NTP-сервера локальної мережі> The command completed successfully. C: \> net stop w32time The Windows Time service is stopping. The Windows Time service was stopped successfully. C: \> net start w32time The Windows Time service is starting. The Windows Time service was started successfully. C: \> net time / querysntp The current SNTP value is: <IP-адреса або FQDN-имя NTP-сервера локальної мережі> The command completed successfully.

Висновок

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

Що можу порадити почитати додатково:

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

Upd 2012.02.14: додав настройку netfilter для NTP

З повагою, Mc.Sim!

Інші матеріали в категорії HOWTO

Для чого робиться обмеження на доступ до серверів?
Які ж години містять правильний час?