LINUX.ORG.RU
ФорумAdmin

NAT


0

0

Стоит фигня. Работает через Windows шлюз (есть спец. программа). Начальник из экономии требует Linux. Нужен NAT. Алгоритм работы спец. программы следующий: Программа сервер - ISS открывает по одному входному UDP порту(по умолчанию) на каждом сетевом интерфейсе. Далее, изначально с входных портов ISS воспринимает только пакеты SYN: [0x5F] - идентификатор пакета SYN [0x10] - количество 16-битных слов, следующих за данным байтом [DEST_BOARD_IP (4)] - IP адрес платы назначения (4 байта) [DEST_BOARD_ PORT (2)] - UPD порт платы назначения (2 байта) [RESERVED(2)] - зарезервировано - 2 байта [DEST_SWITCH_IP (4)] - IP адрес SWITCH-а , за которым скрыта плата [DEST_SWITCH_ PORT (2)] : [RESERVED(2)] [SRC_BOARD_IP (4)] [SRC _BOARD_ PORT (2)] [RESERVED(2)] [SRC _SWITCH_IP (4)] [SRC T_ SWITCH_PORT(2)] [RESERVED(2) Алгоритм работы ISS. 1.. При приходе пакета SYN на любой входной интерфейс, сравнивается адрес: DEST_SWITCH_IP = = MY_SWITCH_IP && DEST_SWITCH_ PORT = = MY_SWITCH_ PORT для каждого сетевого интерфейса, если найдено совпадение, то данный пакет ретранслируется через соответсвующий интерфейс (где совпало) на адрес платы, указанный в пакете SYN: DEST_BOARD_IP && DEST_BOARD_PORT. Если совпадения не найдено, то пакет рестранслируется непосредственно на адрес DEST_SWITCH_IP && DEST_SWITCH_PORT. В момент ретрансляции первого пакета SYN - запоминается маршрут ретрансляции: IN_IP_ADDR, IN_UDP_PORT <-aOUT_IP_ADDR,OUT_UDP_PORT. Далее, все пакеты поступившие на IN, или OUT точку БЕЗ АНАЛИЗА ретранслируются в противоположную точку . Т.е. пакеты, пришедшие от OUT - > пересылаются в IN, и наоборот от IN в OUT. Если в течение 10 секунд, по маршруту НИ в одном направлении не было пакетов, то запись о нем стирается (запись может создать только следующий пакет SYN на прот 4120). !!! Если пакет SYN с ТЕМ-ЖЕ ИСХОДЯЩИМ адресом (SRC_IP,SRC_PORT) но другим адресом назначения (DSP_IP,DST_UDP) поступает, а соединение с ИСХОДЯЩИМ адресом УЖЕ БЫЛО УСТАНОВЛЕНО РАНЕЕ, ТО ЭТО СОЕДИТНЕНИЕ ПЕРЕКЛЮЧАЕТСЯ НА ДРУГОЙ АДРЕС НАЗНАЧЕНИЯ (ИЗМЕНЯЕТЯ СООТВЕТВИЕ IN(SRC)<->OUT (DST a NEW_DST).

Вообще такое на Линуксе возможн. Если да то как???

anonymous

Можно - например через patch-o-matic-ng. Из pom-ng - u32, recent match extentions + ROUTE target или REDIRECT. Или можно через iproute2 + u32 clasifier.

Но только не ясно зачем это надо. Да и по-моему вам для начала следует прочитать rfc по протоколам ip, tcp, udp - а то фраза "открывает по одному входному UDP порту(по умолчанию) на каждом сетевом интерфейсе. Далее, изначально с входных портов ISS воспринимает только пакеты SYN ....... UPD порт платы назначения (2 байта) .... IP адрес SWITCH-а" говорит по-моему о том что вы не понимаете о чём говорите.

anonymous
()

Что-то подумал - может нужен просто DNAT? Но rfc всё таки следует почитать.

anonymous
()

Текст алгоритма спец. программы взят из технической документации. У меня сложилось впечетление, что он очень оригинален. Если использовать DNAT, то как быть с SYN. Можно пожайлуста варианты примеров, в Линуксе я еще чайник?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.