Freebsd сервер точного часу на базі ntpd

У Мережі є велика кількість інформації про синхронізацію часу на комп'ютерах з Linux / Unix, проте, основна маса статей дає трохи застарілі рекомендації і дуже коротко розглядає питання виявлення і усунення можливих проблем. У даній статті я постарався усунути вищезгадані недоліки.

Постановка задачі

Початкові дані

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

Вибір публічних NTP-серверів

Якщо для всіх NTP-серверів виводяться нульові значення параметрів і повідомлення: «немає сервера, відповідного для синхронізації»:

Вам слід слід вирішити в брандмауері входить UDP-трафік зі 123 порту серверів, розташованих в Інтернет, і вихідний UDP-трафік на 123 порт серверів, розташованих в Інтернет. Наприклад, в разі ipfw (8) потрібно додати такі правила:

У момент написання статті в Stratum Two Time Servers була інформація про восьми публічних NTP-серверах, розташованих в Росії, при цьому «мертвим» виявився тільки ntp.xland.ru. а решта сім успішно використовуються в ролі джерел точного часу.

Налаштування головного NTP-сервера

За замовчуванням конфігурація ntpd зберігається в файлі /etc/ntp.conf. У моєму випадку цей файл має наступне вміст:

В даному файлі задані такі значення параметрів: server. - список публічних NTP-серверів, з якими синхронізується наш сервер, restrict. - обмеження доступу до сервера (рядок 8 - обмеження за замовчуванням - доступ заборонений, рядки 9-15 - обмеження доступу органів державної NTP-серверів - заборонено змінювати стан сервера, запитувати час і відправляти повідомлення про винятки, рядки 16-18 - обмеження доступу з боку клієнтів - заборонено змінювати стан сервера і відправляти повідомлення про винятки), logfile - ім'я лог-файлу. Опис усіх опцій, які можна задати у файлі конфігурації ntpd, міститься в ntp.conf (5). Для того, щоб ntpd запускався при запуску операційної системи і робив початкову коригування часу (це не помилка, тепер ntpd вміє робити грубу початкову коригування часу без допомоги ntpdate) необхідно додати в файл /etc/rc.conf рядки:

За замовчуванням лог ntpd має ім'я ntp.log і знаходиться в папці / var / log. Для того, щоб newsyslog (8) виконував його ротацію, необхідно додати в файл /etc/newsyslog.conf рядок:

Цей рядок забезпечує усічення балки ntp при досягненні розміру 100 кілобайт і збереження трьох попередніх копій балки, стислих архиватором bzip2 (1) (Ви можете змінити ці параметри на свій розсуд). На цьому настройка внутрішнього NTP-сервера завершується. Можна запустити сервер командою /etc/rc.d/ntpd start. а потім запросити його стан командою /etc/rc.d/ntpd status. Якщо вона видасть повідомлення ntpd is running as pid. все нормально, якщо ж - ntpd is not running. Вам слід знайти і усунути помилки в файлах конфігурації. Після цього потрібно почекати не менше півгодини і виконати команду ntpdate -q localhost. Якщо Ви уважно виконали всі необхідні кроки, вона видасть повідомлення про те, що NTP-сервер має stratum 3 і може використовуватися для синхронізації часу:

Іншою ознакою коректної роботи NTP-сервера можна вважати появу в балці ntpd приблизно таких повідомлень:

Діагностика головного NTP-сервера

Для діагностики стану головного NTP-сервера найзручніше використовувати утиліту ntpq (8). призначену для запиту різної інформації у NTP-сервера. ntpq може працювати як в інтерактивному, так і в пакетному режимі, розгляд всіх її можливостей виходить далеко за рамки цієї статті. В контексті розв'язуваної задачі більш ніж достатньо команди запиту стану бенкетів - ntpq -p. (Інші форми цієї команди - ntpq -c peers. Peers в інтерактивному режимі). Інформацію, виведену командою ntpq -p. краще пояснити на прикладі:

Синхронізація часу на інших комп'ютерах з FreeBSD

Щоб уникнути плутанини зазначу, що під «іншими комп'ютерами» в даному випадку розуміються всі комп'ютери корпоративної мережі з FreeBSD за винятком головного NTP-сервера. Засоби FreeBSD дозволяють реалізувати два варіанти синхронізації часу. Перший розглянутий вище, і після заміни публічних NTP-серверів на головний NTP-сервер підійде для будь-якого комп'ютера корпоративної мережі з FreeBSD. Зміни стосуються єдиного файлу конфігурації /etc/ntp.conf. який необхідно привести до наступного вигляду:

Для того, щоб команда точної коригування часу щогодини виконувалася за допомогою cron (8). необхідно увійти в систему під root'том. виконати команду crontab -e. що дозволяє внести зміни в crontab поточного користувача (тобто root'a), і додати рядок:

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

висновок

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

  • спасибі за опис процесу діагностики за допомогою ntpq. Але є деякі неточності. Так, маркет '' може означати не тільки відсутність сервера, але і циклічну синхронізацію або занадто велику дистанцію.
    '.' - сервер відкинутий, тому що він не в числі перших 10 NTP-серверів, відсортованих за значенням sync distance і тому малоймовірно, що він буде використовуватися для синхронізації
    '#' - сервер є претендентом (survivor), але не в числі перших 6 NTP-серверів, відсортованих по sync distance.

    Так як маркери тісно пов'язані з розумінням роботи NTP-алгоритму, сенс деяких з них неочевидний.

    Ви де брали опис даних маркерів?

    Опис маркерів попалося на якомусь зарубіжному форумі, але так глибоко, як Ви, я не морочився. NTPD, налаштований по цій статті, працює на кількох серверах з FreeBSD і RHEL, і мені цього достатньо.

    По-моєму, якщо точне значення невідомий, краще його опустити. Інакше питання потім виникають. В man з приводу значень маркера написано достатончо докладно, але навіть профі може сісти в калошу без знань деталей роботи NTP-алгоритму (combining algorithm, clustering algorithm)
    А так, для роботи цілком достатньо значень маркера '+', '-', ''

    Якщо життя змусить (у чому я дуже сумніваюся), напишу докладніше 🙂

  • FreeBSD-9.1-p3 ядро ​​default, ipfw - open

    21 Aug 11:57:30 ntpd [1447]: Listening on interface # 7 age0, fe80 :: 21d: 60ff: fe6d: 18ea # 123 Enabled
    21 Aug 11:57:36 ntpd [1 453]: host name not found: ntp.psn.ru
    21 Aug 11:57:36 ntpd [1 453]: host name not found: time2.one4vision.de
    21 Aug 11:57:36 ntpd [1 453]: host name not found: ntp.ucsd.edu
    21 Aug 11:57:36 ntpd [1 453]: host name not found: time.nist.gov

    командою - синхронізується ок! але автоматом видає, що више.как прибрати tcp6?
    Дякуємо!

    командою - синхронізується ок! але автоматом видає, що вище

    Додайте імена NTP-серверів в / etc / hosts. ntpd запускається раніше bind, тому у нього виникає проблема з дозволом імен.

    як прибрати tcp6?

    Видаліть рядок. 1 з / etc / hosts.

  • Схожі статті