Возможно ли организовать сетевую синхронизацию времени между сегментами сети связанными через однонаправленный шлюз?
Добрый день, коллеги!
Имеется примерно следующая топология:
Интернет -> открытый сегмент -> однонаправленный шлюз -> закрытый сегмент
В каждом сегменте настроен свой NTP сервер. Соответственно, в открытом сегменте NTP сервер берет время из интернета и раздает его клиентам внутри сегмента. В закрытом сегменте к внешнему серверу доступа нет, поэтому время выставлено руками и раздается внутри сегмента. Часто бывает такая ситуация, когда между сегментами время рассинхронизируется на 5-10-15-20 мин. Поэтому, появляется проблема синхронизации времени между сегментами. Хотелось бы для этого использовать однонаправленный шлюз.
Шлюз умеет передавать данные только с разрешенных IP адресов открытого сегмента по протоколу UDP. Схема передачи примерно такая:
Разрешенный IP(открытый сегмент) начинает передачу на специальный IP(открытый сегмент) прописанный в конфиге шлюза
-------->
Шлюз принимает UDP пакеты и меняет у них заголовок "Адрес получателя" в соответствии с таблицей, прописанной в конфиге
-------->
Отправляет модифицированный пакет получателю в закрытый сегмент.
Возможно ли как-нибудь организовать синхронизацию в такой схеме? Вариант приобретения дополнительного оборудование, пока не рассматривается)
Отдельная железка с экранчиком, который показывает сколько пакетов через него прошло. Можно только вставить SD-карту с заранее сгенерированным конфигом.
Пример конфига до компиляции:
wan mac AA:BB:CC:DD:FF:EE #рандомный мак, который будет назначен шлюзу
# access-list
ip permit 1.1.1.1 #разрешенные адреса в открытой сети
#mapping table
route 1.1.1.2 2.2.2.2 AA:BB:CC:DD:FF:00
#1.1.1.2 - специальный IP в открытой сети, на который должны отправлять данные разрешенные устройства;
#2.2.2.2 - IP целевого устройства в закрытой сети;
#AA:BB:CC:DD:FF:00 - mac-адрес целевого устройства в закрытой сети
Кажетмюся в такой схеме невозможно учесть сетевые задержки. Т.е. либо верить, что они в среднем небольшие и допустимы для вашей задачи. Либо решения нет. Если, например шлюз каждый пакет будет задерживать на 10 минут, ваша система об этом никак не сможет узнать
Вариант 1:
* открытый сегмент: ваша программа запрашивает NTP и шлет его ответ в закрытый сегмент (rs232, ethernet, ... :).
* закрытый сегмент: Пишете сервер времени, он принимает пакеты из однонаправленого шлюза и корректирует себя. Можно настроить NTP сервер (стандартный) закрытого сегмента на синхронизацию с ним.
5-10-15-20 мин
- значит боятся задержки на секунды не стоит? Это жизнь упрошает. Если добавить несколько часов (аппаратных счетчиков) в каждом сегменте, можно с их помошью выявлять припозднившиеся пакеты. Тоесть вы шлете из внешнего во внутрений сколько там натикало во внешнем.
Вариант 2: По честному. Сделать счетчик (на К176ИЕ12 или К176ИЕ5 или К561ИЕ10 ), два регистра хранения (К561КП6,... или кучке ле5 смотря что есть столе), опторазвязку по ним от компа и завести на lpt, rs232, usb (ft232,...). Это лудше чем однонаправленый сетевой шлюз, так как физически в обратную сторону не пойдет. А вот фильтры трафика можно и обмануть, подозреваю что потеряные пакеты он таки запрашивает снова :)
В закрытом сегменте сети поднимаете ntp сервер, покупаете GPS антенну и берете время с нее. У меня на работе везде такая схема, gps антенны все на rs232, ntpd только подшаманить и все. Везде это порядка 40 объектов, точность времени нужна по специфичности работы софта(телеметрия железа и датчиков).
Алексей Тен, ага, через время на линуксах с открытыми дровами и rs232 =) Алексей Черемисин, у нас тоже все гибридные, единственное абсолютно все на rs232\485\422.