Свій Біг Бен, Linux, Операційні системи, статті

Станіслав Лапшанскій, СофтТерра

Синхронізація своєї Linux або FreeBSD машини зі світовим часом по протоколу NTP.

Одного разу я втомився встановлювати годинник моєї робочої машини у відповідність з точним часом переданим по радіо. Тим більше що точність одержуваного результату завжди могла вважатися тільки задовільною, але ніяк не відмінною – відхилення від точного часу на 1-2 секунди усунути при такому методі практично неможливо.

На щастя питання точного часу занепокоїв задовго до мене професора Делаверського університету (University of Delaware) Девіда Міллза (David Mills), який подарував світові реалізацію мережного протоколу синхронізації часу (Network Time Protocol). На даний момент основною є четверта версія (NTP v4) цього протоколу.

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

Розглянемо використання NTP в системі FreeBSD (Linux).

Спочатку необхідно завантажити останню версію вихідних текстів пакета NTP з офіційного сайту
www.ntp.org.Потім слід звичайна процедура розпакування, компіляції та установки:
tar xvfz ntp-4.0.xx.tar.gz
cd ntp-4.0.xx
./configure
make
make install (з правами суперкористувача root)

Тим хто з тих чи інших причин бажає обійтися без процедури компіляції рекомендую скачатипакет у вигляді rpm (RedHat-подібні Linux), deb (Debian Linux) або pkg (FreeBSD) файлу з ftp-серверакомпанії виробника вашої операційної системи. Настійно рекомендую завжди користуватисясамою останньою версією пакета з метою зниження ризику хакерської атаки (втім це виконання цьогоправила бажано для будь-якого програмного забезпечення).

Існує два основні шляхи синхронізації часу: епізодичний (використовується утилітаntpdate) і постійний (використовується демон ntpd). Слід зауважити, що для успіху процедурисинхронізації часу потрібні права суперкористувача root. Так само необхідно врахувати використанняпротоколом NTP для синхронізації часу сто двадцять третій порту, який необхідно відкрити для вхідного івихідного трафіку (справедливості заради слід зазначити, що використання утиліти ntpdate зключем-u звільняє від цієї необхідності).

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

Отже розглянемо простий спосіб синхронізації часу в момент встановлення PPP-з’єднання зпровайдером. Для цього в файл / etc / ppp / ip-up (в FreeBSD) або / etc / ppp / ip-up.local (всучасних версіях Linux) необхідно додати єдиний рядок:
ntpdate clepsydra.dec.com
Де clepsydra.dec.com – URL сервера часу.

Публічних серверів точного часу в Інтернеті дуже багато. Велика кількість адресзаслуговують на довіру, разом з правилами їх використання, опубліковано за адресами
eecis.udel.edu/~mills/ntp/clock1.htm і eecis.udel.edu/~mills/ntp/clock2.htm. Ці спискипостійно доповнюються та оновлюються.

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

Виявляється автоматично отримати точний час на годиннику вашого комп’ютера – досить просто.Однак якщо ви щасливий володар постійного підключення до Інтернету і у вас знайдеться 2-3мегабайта вільної пам’яті, то можна скористатися другим способом синхронізації часу придопомоги демона ntpd, отримавши при цьому гарантовану точність ходу годинника свого комп’ютера змаксимальним відхиленням від еталону в межах десятка мілісекунд.

Для реалізації цього способу синхронізації часу необхідно створити конфігураційний файл
/etc/ntp.conf.
Приклад файлу / etc / ntp.conf:
# Список серверів часу із зазначенням максимального і мінімальногоінтервалу часу запуску процесу синхронізації
server ntp.alaska.edu prefer minpoll 8 maxpoll 16
server clepsydra.dec.com minpoll 8 maxpoll 16
server clock.isc.org minpoll 8 maxpoll 16

# Вказівка ​​ntpd в крайньому випадку звертатися до вбудованих годинах
server 127.127.1.0
fudge 127.127.1.0 stratum 8

# Вказівка ​​прав доступу до сервера (за замовчуванням “все заборонено”)
restrict default ignore
restrict 199.165.76.11 noquery
restrict 204.123.2.5 noquery

restrict 204.152.184.72 noquery

restrict 127.127.1.0

restrict 127.0.0.1

Запуск демона ntpd спричинить синхронізацію годин вашого комп’ютера з зазначеними серверами вавтоматичному режимі з інтервалом із зазначеного проміжку. Тепер за точність ваших годин можнаручатися.

Якщо до ваш комп’ютер підключений до локальної мережі, то цілком розумним буде зробити з нього серверточного часу вашої локальної мережі. Для цього в попередній приклад необхідно додати наступнедозвіл:
# Права доступу для внутрішньої мережі класу B 172.16.0.0/255.255.0.0
restrict 172.16.0.0 mask 255.255.0.0 noquery

Для синхронізації часу на UNIX-машинах локальної мережі доцільно використовувати утиліту ntpdate, запускаючи її за допомогою демона cron кілька разів на добу. Для Windows-машин доцільно використовувати командний файл такого змісту:
net time /setsntp:my.ntp.server
net time /set

Де my.ntp.server – DNS-ім’я вашого локального NTP сервера (замість імені цілком підійде іIP-адресу).

Що ще почитати:
Інформація по протоколу NTP в Інтернеті як не дивно не так вже й багато, найчастіше вона повторюють оригінальну документацію. Ось список джерел послужили відправною точкою для даної статті:

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


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*