Настройка синхронизации времени между серверами.


Для синхронизации внутренних часов серверов с внешним источником или между собой применяется протокол NTP.
Для начала немного теории для понимания того, что мы делаем. И главное — зачем?

Начнём с того, что время между серверами синхронизировать не просто можно, но и нужно. Практически в обязательном порядке. В том случае, если время на серверах (логических разделах) сильно разнится, то вы рискуете получить огромное количество проблем. И что самое забавное, не всегда источник этих проблем можно будет определить. Самый простой пример — Kerberos. В случае рассинхронизации времени между клиентом, сервером Kerberos, и сервером приложений, вполне вероятна ситуация, когда клиент не сможет получить сервис у сервера приложений. И это не смотря на то, что тикет с Kerberos сервера будет успешно получен. Почему? Да потому что, серверу приложений может показаться что тикет клиента устарел ещё пол-часа назад. А всё из-за разницы во времени. И это самый простой пример. Можно упомянуть и HACMP c delay timers. И стандартные системы  аутентификации AIX (начиная с compat и заканчивая LDAP). И многое, многое другое… Будем считать, что в необходимости синхронизации времени мы вас убедили. 🙂

Роли серверов:
Сервер(server) – по запросу дает точное время клиентам.  Роль могут брать на себя сервера различного уровня (stratum).
Пир(peer) — берет время с сервера и по запросу может его отдавать. Обычно эта роль может применяться для серверов с уровнем 1 или 2.
Клиент – компьютеры, которые получают время от серверов с низким уровнем(обычно 1 или 2), но никогда его не отдает.

Несколько слов о безопасности NTP. NTP при работе использует UDP и TCP. Порт 123. Очень важно правильно настроить firewall в вашей сети. В противном случае вы рискуете нарваться на атаку «компрометация сервера времени». Что чревато отказом в обслуживании со стороны серверов приложений и серверов аутентификации. Да и внешний источник  времени надо выбирать аккуратно. По тем же причинам.
Для повышения уровня безопасности можно в конфигурационный файл добавить строку:
    restrict default noserve noquery
Наличие такой строки запрещает узлу отвечать на внешние запросы связанные со временем.

Уровень(stratum) – все сервера времени распределены на уровни. Сервер уровня 1 берет время из внешнего источника(уровень 0). Сервера уровня 2 берут время от сервера уровня 1 и так далее. Максимальный уровень сервера может быть 15, т.е уровней всего 16.

В качестве  источника точного времени можно использовать всё что угодно. Вы можете определить источником точного времени  сервер в Internet, можете получать время с подключенного GPS приёмника. Да хоть солнечные часы. Главное что бы вы смогли с них данные снять.

ntp.jpg

Итак начнем настраивать AIX в соответствии с выбраной схемой.
На каждом сервере необходимо выполнить несколько действий:
1.Настройка файла конфигурации NTP /etc/ntp.conf
2.Синхронизация с источником времени предыдущего уровня.
3.Старт xntpd демона. Команда smitty xntpd -> выбрать «both» (запустить сейчас и после перезагрузки).
4.Проверить синхронизацию командой ntpq -p

Настройка /etc/ntp.conf  для сервера(уровень 1)

server 127.127.1.0
fudge 127.127.1.5 stratum 1

server pool.ntp.org # пул серверов точного времени в интернете или какой-нибудь другой источник времени
driftfile /etc/ntp.drift
tracefile /etc/ntp.trace

Настройка /etc/ntp.conf для серверов 2го уровня.
server 127.127.1.0
fudge 127.127.1.5 stratum 2
server 10.1.1.100 # ip адрес или имя сервера более низкого уровня в локальной сети
peer 10.1.1.150 # ip адрес пира, находящегося на том же уровне
driftfile /etc/ntp.drift
tracefile /etc/ntp.trace

Настройка /etc/ntp.conf для клиентов:

server 127.127.1.0
fudge 127.127.1.0 stratum 3
server 10.1.1.150 # ip адрес или имя сервера более низкого уровня в локальной сети
server 10.1.1.151 # ip адрес или имя сервера более низкого уровня в локальной сети
driftfile /etc/ntp.drift
tracefile /etc/ntp.trace

Для упрощения можно оставить только уровень сервера верхнего уровня и уровень клиентов.

 

Оставьте комментарий