Дефолтовый трафик с роутера идет через 1.1.1.1, множественные таблицы маршрутизации в ядре не собирал.
Надо, чтобы когда внешний клиент из инета обращается к 1.1.1.1:3389 или к 2.2.2.2:3389 - запрос перенаправлялся роутером на сервер терминалов, ответ возвращался с сервера терминалов по default gw на роутер, и он отдавал пакет обратно на тот интерфейс, с которого пришел ответ.
Проблема в следующем: при обращении на основной интерфейс (1.1.1.1), клиент получает ответ, на второй - нет.
Собственно, ситуация следующая:
Пакет заходящий через 1.1.1.1 проходит через nat, проходит через локальную сеть на сервер терминалов, после чего ответ выходя с сервера терминалов попадает на роутер и обратно через nat выходит к клиенту. Тут все ок.
Пакет заходящий через 2.2.2.2 проходит через nat, проходит через локальную сеть на сервер терминалов, после чего ответ выходя с сервера терминалов попадает на роутер,а вот дальше он похоже пытается выйти через тот дефолтовый интерфейс с ip 1.1.1.1, вместо 2.2.2.2.
Похоже на то, что роутер теряет какой-то тег, который должен был бы говорить о том, что исходный пакет пришел с 2.2.2.2, чтобы ответ возвращался туда же. Можно ли как-то решить эту проблему? Другими словами, на роутер (на интерфейс лок. сети) с терминала приходит ответ с порта 3389, как понять, с какого внешнего интерфейса пришел запрос, на который ответил сервер терминалов?
Приходит в голову только поиграться с keep-state, но что-то я не совсем понимаю, куда тут его пристроить. Или может быть, надо включить какой-то ключ ipfw nat, который я не включил? И вообще реализуемо ли это теми средствами, которыми я пытаюсь это реализовать?
У меня оба nat'а запускаются так:
Код: Выделить всё
${fwcmd} nat 2 config if ${ext_if_2} reset same_ports redirect_port tcp 192.168.0.2:3389 3389
${fwcmd} nat 1 config if ${ext_if_1} reset same_ports redirect_port tcp 192.168.0.2:3389 3389
Код: Выделить всё
${fwcmd} add fwd ${ext_gw_2} ip from 2.2.2.2 to any out xmit ${ext_if_1}