pf + pbr + squid

FreeBSD, NetBSD, OpenBSD, DragonFly и т. д.

Модератор: arachnid

Аватара пользователя
Davsharyan
Сообщения: 39
ОС: Debian Lenny

pf + pbr + squid

Сообщение Davsharyan »

OS: FreeBSD 7.0

Есть 2 канала для инета. Некаторые хосты идут через второй канал а все остальное через первый ( default gateway ), Все это делается с помощью pf+pbr.
Теперь поставил сквид и все соединения, после выхода из прокси идут через дефолтовый шлюз, как и должно было быть.
Как сделать чтобы после выхода пошли по нужному каналу ???

Код для сквида

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

rdr on $lan_if inet proto tcp from $squid_users to any port www -> 127.0.0.1 port 3128
pass in quick on $lan_if inet proto tcp from $squid_users to 127.0.0.1 port 3128 keep state


пробовал через route-to не помогло ...

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

pass in quick route-to \
    ($realtime_vpn_if $realtime_vpn_gw) round-robin inet \
    from any to 85.25.86.50 flags S/SA keep state
<<EOF
everything that has a beginning has an end as well...
EOF
Спасибо сказали:
dudu
Сообщения: 8
ОС: freebsd 7.0

Re: pf + pbr + squid

Сообщение dudu »

Недавно тоже нужно было реализовать подобное, тема Несколько провайдеров
так и не сделал, ушел в сторону mikrotik and freesco, но уж очень хочется иметь это все на FreeBSD
думаю, что все же нужно через route add -net X.X.X.X и т.д.
Спасибо сказали:
Аватара пользователя
IgnesBSD
Сообщения: 82
ОС: FreeBSD

Re: pf + pbr + squid

Сообщение IgnesBSD »

Не особо понял о чем речь, но может это поможет http://habrahabr.ru/blogs/linux/49137/ . Там правда про Linux, но все же.
Все мы обмануты счастьем ...
Спасибо сказали:
Аватара пользователя
Davsharyan
Сообщения: 39
ОС: Debian Lenny

Re: pf + pbr + squid

Сообщение Davsharyan »

dudu писал(а):
14.05.2009 06:02
Недавно тоже нужно было реализовать подобное, тема Несколько провайдеров
так и не сделал, ушел в сторону mikrotik and freesco, но уж очень хочется иметь это все на FreeBSD
думаю, что все же нужно через route add -net X.X.X.X и т.д.


У тебя вроде нету транспарентного сквида ...
Что-то не так делаеш в фаере ...У меня все нормально отправляется через нужный канал ...
Вот мой конфиг - http://paste2.org/p/209157

Насчет микротика тоже думаю над этим ...
<<EOF
everything that has a beginning has an end as well...
EOF
Спасибо сказали:
Аватара пользователя
izen.fire
Сообщения: 268
ОС: Windows XP

Re: pf + pbr + squid

Сообщение izen.fire »

Davsharyan писал(а):
13.05.2009 15:44
OS: FreeBSD 7.0

Есть 2 канала для инета. Некаторые хосты идут через второй канал а все остальное через первый ( default gateway ), Все это делается с помощью pf+pbr.
Теперь поставил сквид и все соединения, после выхода из прокси идут через дефолтовый шлюз, как и должно было быть.
Как сделать чтобы после выхода пошли по нужному каналу ???
Нужно тэгировать трафик в PF и строить правила на основе обработки тэгированных пакетов. Такое описано в PF FAQ.
Ротор поля наподобие дивергенции градуирует себя вдоль спина и там внутре ево неонка.
Спасибо сказали:
dudu
Сообщения: 8
ОС: freebsd 7.0

Re: pf + pbr + squid

Сообщение dudu »

простите за теорию: но разве файерволл способен направлять пакеты между интерфейсами, его роль - фильтрация
Спасибо сказали:
Аватара пользователя
Davsharyan
Сообщения: 39
ОС: Debian Lenny

Re: pf + pbr + squid

Сообщение Davsharyan »

dudu писал(а):
16.05.2009 09:59
простите за теорию: но разве файерволл способен направлять пакеты между интерфейсами, его роль - фильтрация


)))) а что они построени только чтобы разрешить или дропить траффиГ ? ) Policy Based Routing
<<EOF
everything that has a beginning has an end as well...
EOF
Спасибо сказали:
Аватара пользователя
Davsharyan
Сообщения: 39
ОС: Debian Lenny

Re: pf + pbr + squid

Сообщение Davsharyan »

Пока что обнаружил что пчелайн пропускает пакеты не своими src ip аддрессами )

Вот так было написано в моем конфиге ) даже не замечал ... разрешал выход через интерфейс пчелайна отовсюду

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

pass out quick on $beeline_vpn_if  inet from any to any keep state


Меняем на

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

pass out quick on $beeline_vpn_if  inet from ($beeline_vpn_if)  to any keep state

И в броузере получаем
Изображение

Меняем на другой интерфейс ....

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

pass out quick on $beeline_vpn_if  inet from ($realtime_vpn_if)  to any keep state

и чудо работает ...
<<EOF
everything that has a beginning has an end as well...
EOF
Спасибо сказали:
Аватара пользователя
izen.fire
Сообщения: 268
ОС: Windows XP

Re: pf + pbr + squid

Сообщение izen.fire »

dudu писал(а):
16.05.2009 09:59
простите за теорию: но разве файерволл способен направлять пакеты между интерфейсами, его роль - фильтрация
Лично для себя я ещё не выяснил, нужно ли прописывать в таблице маршрутизации альтернативные маршруты (как это описано тут в части, касающейся статических маршрутов) или же PF сможет работать и без этой таблицы — тупо переправлять IP-пакеты с одного интерфейса на другой, не принимая в расчёт шлюзы, на которые смотрят эти интерфейсы. (Просто для меня эта тема новая и не исследованная.) Хотелось бы увидеть пример реально работающих необходимых и достаточных настроек для простого (без использования очередей) распределения трафика к двум провайдерами средствами PF. Было бы полезно выработать такое решение, когда используется схема с одним постоянным подключением по проводному каналу (Ethernet), а второе соединение поднимается по требованию (например, EGPRS-модем) в порядке резервирования основного канала.
Ротор поля наподобие дивергенции градуирует себя вдоль спина и там внутре ево неонка.
Спасибо сказали:
Аватара пользователя
Davsharyan
Сообщения: 39
ОС: Debian Lenny

Re: pf + pbr + squid

Сообщение Davsharyan »

Свежая голова хороша для работы и конешн руки которые должны рости откуда надо )
Оказывается все очень просто реашется ...

Все пакеты отправляем в сквид, потом те URL/Host которые нужно отправить по другому каналу добавляем в директиву tcp_outgoing_address и pf-у говорим, все уходящие (вот здесь была проблема, надо было взят out пакеты а не in) пакеты которые идут с дефолтового интерфейса у которого src ip адресс втарого канала перенаправить по нужному шлюзу.

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

acl viarealtime url_regex -i "/usr/local/etc/squid/filters/via_realtime.conf"
tcp_outgoing_address 172.22.7.101 viarealtime


На языке pf будет так

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

rdr on $lan_if inet proto tcp from $lan_if/24 to any port www -> 127.0.0.1 port 3128
pass in quick on $lan_if inet proto tcp from $lan_if/24 to 127.0.0.1 port 3128 keep state

pass out quick on $beeline_vpn_if route-to \
    ($realtime_vpn_if $realtime_vpn_gw) round-robin inet \
    from $realtime_vpn_if/32 to any flags S/SA keep state
<<EOF
everything that has a beginning has an end as well...
EOF
Спасибо сказали: