Страница 1 из 1

Freebsd 8 + 2 провайдера + ipfw + сервисы

Добавлено: 2011-03-16 11:16:41
suspender
Есть тача с 3 сетевухами, 2 из них смотрят в разные интернеты, одна в локалку.
Нужно сделать, чтобы nginx и openvpn отвечали через тот инет, через который пришёл запрос.

Как кошернее всего это сделать ?
1. Забить на ipfw, заботать pf и использовать конструкции reply-to (Кстати, действительно ли это поможет ?)
2. Запускать по ещё одному экземпляру nginx и openvpn с setfib 1 и немного другими конфигами ? (Кстати, как это сделать грамотнее ? через rc.conf + rc-скрипт, мб статья есть или обсуждение ? )
3. Всё таки средствами ipfw как то можно хитро отлавливать и форвардить эти вещи, пускай даже только конкретно openvpn и nginx ? (_Как_ это делается ?)
Конструкциями вида

Код: Выделить всё

$ipfwCmd add 200 setfib 1 ip from any to me in recv $ifext1
$ipfwCmd add 202 setfib 0 ip from any to me in recv $ifext2
я добился только того, что машина стала отвечать на пинги по обоим своим айпишникам. nginx и openvpn упорно продолжают отвечать через default route

4. Какой то другой вариант ?

ps. openvpn использует udp и стандартный порт.

Re: Freebsd 8 + 2 провайдера + ipfw + сервисы

Добавлено: 2011-03-16 12:16:26
терминус_
ариведенная вами конструкция вряд ли делает то о чем вы говорите.

сейчас на связке ipfw + fwd + keep-state такого не сделать из-за бага в ipfw (есть pr, но на него нет реакции разрабов).

Я тут недавно подсел на ng_nat - там в нем есть функционал proxy с которым я хочу поиграться :smile: Если вам не горит, то подождите пару дней - я проверю работу связки keep-state + ng_nat proxy.

Re: Freebsd 8 + 2 провайдера + ipfw + сервисы

Добавлено: 2011-03-16 13:02:40
AzureZ
suspender писал(а): 1. Забить на ipfw, заботать pf и использовать конструкции reply-to (Кстати, действительно ли это поможет ?)
reply-to поможет

Re: Freebsd 8 + 2 провайдера + ipfw + сервисы

Добавлено: 2011-03-20 1:33:51
suspender
reply-to действительно помог.
Кстате, что можно почитать про FreeBSD pf кроме мана ? (Чтобы немного поподробнее разжёвано было). Я почти прочел pf-faq.pdf с сайта openbsd - но там для pf из 4.7, и в примерах даже синтаксис совершенно другой, практически ничего общего с синтаксисом из примеров в имеющихся на этом сайте (lissyara.su) статьях.

Re: Freebsd 8 + 2 провайдера + ipfw + сервисы

Добавлено: 2011-03-21 1:37:30
suspender
Сам вопрос задал - сам и отвечу. Нужно брать pf-faq41.pdf из папки /pub/OpenBSD/doc/ любого ихнего зеркала. (Сам я до этого дошёл не сразу, а только после того как изучил pf-faq на сайте OpenBSD (для 4.7) и стал изучать местные статьи на тему. Поразило кардинальное отличие синтаксиса. Оно реально имеет место быть. Также механизмы различаются)

Re: Freebsd 8 + 2 провайдера + ipfw + сервисы

Добавлено: 2011-04-20 4:11:44
DarkAGeS
up
терминус_
наковырял что-нить?)

Re: Freebsd 8 + 2 провайдера + ipfw + сервисы

Добавлено: 2011-09-04 13:04:13
kfil
следующая конструкция будет работать если обновить систему на текущий момент до 8-stable
http://www.freebsd.org/cgi/query-pr.cgi ... 0&cat=kern

Код: Выделить всё

$ipfwCmd add 200 setfib 1 ip from any to me in recv $ifext1 keep-state
$ipfwCmd add 202 setfib 0 ip from any to me in recv $ifext2 keep-state

Re: Freebsd 8 + 2 провайдера + ipfw + сервисы

Добавлено: 2011-09-04 17:13:43
DarkAGeS
о, спасибо, надо будет попробовать. а в 9beta1 это тоже работает или таки нужен 8 stable, не в курсе?

Re: Freebsd 8 + 2 провайдера + ipfw + сервисы

Добавлено: 2011-09-11 17:59:26
kfil
предыдущий мой пост неверен, сказалась чистота эксперимента..
рабочий пример следующий (аналогичен http://nuclight.livejournal.com/124348.html)

Код: Выделить всё

$ipfwCmd add 200 skipto 400 tag 1 ip from any to me in recv $ifext1 keep-state
$ipfwCmd add 300 skipto 400 tag 2 ip from any to me in recv $ifext2 keep-state
$ipfwCmd add 400 allow in { tagged 1 or tagged 2 }
$ipfwCmd add 500 fwd $gw_ifext1 tagged 1
$ipfwCmd add 600 fwd $gw_ifext2 tagged 2
работает при наложенном патче примененном в 8 Stable
c setfib аналогичная схема не работает так как он не меняет xmit адрес шлюза назначения пакетов, который они получили выйдя из сервисов запущенных обычно в setfib 0
nuclight писал(а):Перед запуском файрвола на out-проходе выполняется просмотр таблицы
маршрутизации, интерфейс сообщается файрволу в oif, который проверяет xmit.
В текущей реализации fwd его не меняет, более того, fwd тут же делает allow
(немедленный возврат из файрвола), чтобы обойти проблему изменения xmit для
остальных правил. Причем, fwd на in-проходе его также НЕ изменит
PS
подобная тема уже обсуждалась
DarkAGeS писал(а):о, спасибо, надо будет попробовать. а в 9beta1 это тоже работает или таки нужен 8 stable, не в курсе?
не знаю, в 100й раз убеждаюсь что всё надо пробовать .. )