
Пожалуйста, обратитесь к иллюстрации.
У меня есть две машины в локальной сети, только одна из них имеет подключение к Интернету (через другой интерфейс). На сервере 1 установлены неисправные аппаратные часы. На сервере 2 установлены хорошие аппаратные часы реального времени.
К сожалению, у сервера 1 обычно есть подключение к Интернету, а у сервера с хорошим аппаратным RTC — нет, поэтому в зависимости от состояния подключения к Интернету сервер 1 либо самый точный, либо крайне ненадежный.
Крайне важно, чтобы обе машины работали в тесной синхронизации друг с другом.
Возможно ли сделать так, чтобы система автоматически переходила от сценария 1 к сценарию 2, возможно, посредством автоматической корректировки уровня каждой машины?
решение1
Во-первых, вам вряд ли разрешат доступ к Stratum1сервер, если только вы не известны администраторам сервера Stratum 1 и они не дали вам явного разрешения на это. Сказав это, то, какой у этого сервера стратум, не имеет значения для этого ответа, поэтому я буду называть эту машину сервером "низкого стратума" для ясности.
Вам следует настроить его server2
на получение времени с сервера нижнего уровня, а не с server1
. Для этого потребуется, чтобы он мог (по крайней мере для NTP) получить доступ к интернет-ссылке на server1
. Если server2
у нет ссылки на Интернет, с помощью которой он мог бы получить доступ к серверу нижнего уровня, то вы можете разрешить ему сделать это, выполнив следующие команды на server1
(как root):
iptables -A FORWARD -s server2 -p udp --dport 123 -j ACCEPT
iptables -A FORWARD -s server2 -p tcp --dport 123 -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sysctl -w net.ipv4.ip_forward=1
Первые две строки разрешают трафик NTP от хостаserver2
только. Примечание: Я не уверен на 100%, что TCP-соединения обязательны, но это не повредит. Вы можете также добавить -d lowstratumserver
эти две строки, чтобы эта машина не могла получить доступ ни к одному другому серверу (только к серверу нижнего уровня). Следующая строка разрешает обратный трафик от установленных соединений. Четвертая строка включает преобразование сетевых адресов. Последняя строка включает пересылку IP-пакетов. С ними server1
теперь есть (минимальный) маршрутизатор.
Если маршрутизатор по умолчанию server2
отсутствует server1
, вам также потребуется добавить явный маршрут для сервера нижнего уровня:
ip route add lowstratumserver via server1
При этом server2
будет использовать server1
его как маршрутизатор для сетевого подключения lowstratumserver
и свой обычный маршрутизатор для всего остального.
Затем настройте server2
использование в качестве источника NTP сервера нижнего уровня в Интернете, а не server1
.
Наконец, настройте его server1
так, чтобы он подключался к server2
, а не к серверу Stratum 1 в Интернете.
Теперь server2
синхронизируется с сервером нижнего уровня в Интернете, а не с server1
; и server1
будет синхронизироваться server2
всегда, устраняя необходимость добавлять настройку отказоустойчивости (которая в лучшем случае будет нестабильной).
Это приведет к небольшой потере точности из-за дополнительного скачка, но всегда лучше синхронизировать машины в вашей локальной сети с машиной с хорошим аппаратным RTC, чем с машиной с некачественным.