XoRe 0 Опубликовано: 2007-03-15 12:47:57 Share Опубликовано: 2007-03-15 12:47:57 Как пробросить порт при наличии нескольких каналов в инет Стоит машинка на FreeBSD 6.0. У машинки 3 линка в интернет (у 2 линков реальные ип адреса, у третьего ип из сети 10.0.0.0, выходит в интернет через НАТ провайдера). Причем один линк (который через НАТ) указан, как default gateway. А на каждый из двух других линков прописано по некоторому количеству статических маршрутов. И есть линк в локальную сеть 192.168. А в локальной сети стоит ещё одна машинка. Допустим, адреса на линках в интернет такие: 1.1.1.1, 2.2.2.2 и 10.0.0.3. И допустим, внутренний ип-адрес машинки 192.168.0.1. А ип-адрес ещё одной машинки в локалке 192.168.0.2. Задача: пробросить в локальную сеть пару портов на 192.168.0.2. Причем нужно, чтобы 192.168.0.2 видел, с какого адреса из интернета к нему идет подключение. Кажется простым делом, с которым справляется ipfw+natd благодаря опции redirect-port. Он отлично справляется, если все идет через один канал. А когда несколько каналов, то получается вот что: Приходит пакет с какого-то адреса в интернете (допустим с адреса 5.5.5.5) на адрес 1.1.1.1. (пакет 5.5.5.5 -> 1.1.1.1). Проходит внутрь локалки, становясь пакетом вида 5.5.5.5 -> 192.168.0.2. Машинка в локальной сети отвечает пакетом 192.168.0.2 -> 5.5.5.5. И тут начинаются грабли. Если ответный пакет уйдет в интернет с линка 1.1.1.1, то он преобразуется в пакет 1.1.1.1 -> 5.5.5.5. И все будет нормально, ушел пакет 5.5.5.5 -> 1.1.1.1, пришел пакет 1.1.1.1 -> 5.5.5.5, соединение установлено. А если ответный пакет уйдет с линка 2.2.2.2 или 10.0.0.3, то компьтеру придет ответный пакет 2.2.2.2 -> 5.5.5.5 или 10.0.0.3 -> 5.5.5.5, что довольно сложно опознать, как ответ на пакет 5.5.5.5 -> 1.1.1.1. Сейчас это делается посредством программы redir (/usr/ports/net/redir). Но у этой программы есть один нюанс. При посылке пакета вида 5.5.5.5 -> 1.1.1.1 при прохождении через нашу машинку пакет преобразовывается в 192.168.0.1 -> 192.168.0.2. Т.е. для машины 192.168.0.2 все соединения идут с адреса 192.168.0.1. Необходимо сделать проброс так, чтоб 192.168.0.2 видел, с какого адреса из интернета к нему идет подключение. Подскажите, пожалуйста, решение для сей ситуации. Ссылка на сообщение Поделиться на других сайтах
masters 126 Опубліковано: 2007-03-15 14:42:53 Share Опубліковано: 2007-03-15 14:42:53 А через NAT (natd) попробуй. Вот тут описано как это забадяжить: http://www.opennet.ru/base/net/nat_jump.txt.html Ну я не знаю, как там работает - с какого IP будет запрос идти, т.к. не пробовал - но можешь попробовать, потом расскажешь По идее - это то, что тебе нужно Ссылка на сообщение Поделиться на других сайтах
XoRe 0 Опубліковано: 2007-03-16 08:18:35 Автор Share Опубліковано: 2007-03-16 08:18:35 2masters: Большой поклон) Статья натолкнула на решение. Для примера буду использовать адреса выше, а пробрасываемые порты пусть будут 10000 и 20000. Решение: В ipfw у меня НАТ описан так: ${ipfw} add 16010 divert 8668 ip from not me to any via fxp0 ${ipfw} add 16020 divert 8669 ip from not me to any via fxp1 ${ipfw} add 16030 divert 8672 ip from not me to any via fxp2 Нужно прописать такое правило: ${ipfw} add 15610 divert 8669 tcp from 192.168.0.2 10000,20000 to any out Причем, как видно из номера правила, его нужно прописать ПЕРЕД правилами с обычным натом. Суть решения в том, что тогда даже если пакет собирается уйти наружу через другой интерфейс, он все равно будет завернут на нат того интерфейса, через который должен выходить. После ната у исходящего пакета будет нужный внешний адрес, т.е. 1.1.1.1. Ну а с помощью правил: ${ipfw} add 23010 fwd 1.1.1.2 ip from 1.1.1.1 to any ${ipfw} add 23030 fwd 2.2.2.3 ip from 2.2.2.2 to any ${ipfw} add 23040 fwd 10.0.0.4 ip from 10.0.0.3 to any Пакет уйдет через тот линк, через который нужно. fwd правила - это реализация policy based routing. В целом решение получается такое: Определиться с интерфейсом, на котором пробрасывать порты. Такой интерфейс должен быть один. Настроить на нем редирек портов вида: -redirect_port tcp 192.168.0.2:10000 20000 Ну и добавить в фаерволл правило, которое будет подхватывать исходящие пакеты с пробрасываемого порта и прописывать им нужный внешний адрес. Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВхід
Уже зарегистрированы? Войдите здесь.
Войти сейчас