URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 93932
[ Назад ]

Исходное сообщение
"FreeBSD балансировка 2 каналов с 1 шлюзом"

Отправлено masters , 19-Окт-12 12:30 
Есть FreeBSD 8.2 и 2 канала на одного провайдера. Как сделать round-robin балансировку при помощи ipfw и probe - тут все понятно.
Только что делать, если шлюз один у обоих каналов? Возможно-ли в ipfw делать fwd на шлюз, только через определенную сетевую?

Содержание

Сообщения в этом обсуждении
"FreeBSD балансировка 2 каналов с 1 шлюзом"
Отправлено михалыч , 19-Окт-12 15:27 
> Есть FreeBSD 8.2 и 2 канала на одного провайдера. Как сделать round-robin
> балансировку при помощи ipfw и probe - тут все понятно.
> Только что делать, если шлюз один у обоих каналов? Возможно-ли в ipfw
> делать fwd на шлюз, только через определенную сетевую?

Вот с помощью pf точно возможно "через определенную сетевую".
А с fwd я думаю у вас не получится.


"FreeBSD балансировка 2 каналов с 1 шлюзом"
Отправлено Serjant , 19-Окт-12 15:57 
> Есть FreeBSD 8.2 и 2 канала на одного провайдера. Как сделать round-robin
> балансировку при помощи ipfw и probe - тут все понятно.
> Только что делать, если шлюз один у обоих каналов? Возможно-ли в ipfw
> делать fwd на шлюз, только через определенную сетевую?

А как у Вас получился один шлюз для разных сетей? Ну мне так, для общего развития :)


"FreeBSD балансировка 2 каналов с 1 шлюзом"
Отправлено Pahanivo , 19-Окт-12 16:51 
> А как у Вас получился один шлюз для разных сетей? Ну мне
> так, для общего развития :)

где написано что они разные? :)


"FreeBSD балансировка 2 каналов с 1 шлюзом"
Отправлено Serjant , 19-Окт-12 16:56 
> где написано что они разные? :)

Два канала из одной сети??? Я даже уже и не знаю :))


"FreeBSD балансировка 2 каналов с 1 шлюзом"
Отправлено sirius , 19-Окт-12 17:27 
>> где написано что они разные? :)
> Два канала из одной сети??? Я даже уже и не знаю :))

Даа бывает и такое))
По сабжу, делаете две таблицы маршрутизации, прописываете в них роут по умолжанию с параметрами ifp, каждый через свою сетевую, и через ipfw делаете setfib в свою таблицу маршрутизации.


"FreeBSD балансировка 2 каналов с 1 шлюзом"
Отправлено михалыч , 19-Окт-12 18:04 
>>> где написано что они разные? :)
>> Два канала из одной сети??? Я даже уже и не знаю :))
> Даа бывает и такое))
> По сабжу, делаете две таблицы маршрутизации, прописываете в них роут по умолжанию
> с параметрами ifp, каждый через свою сетевую, и через ipfw делаете
> setfib в свою таблицу маршрутизации.

Да, бывает.

Через setfib можно попробовать так:
В ядро добавить
options ROUTETABLES=2 (ну или столько, сколько надо ))
берем две таблицы (не путаем с таблицами маршрутизации ))
пусть это будут 10 и 11 таблицы
набиваем в них IP
ipfw -q table 10 add 192.168.10.2
ipfw -q table 10 add 192.168.10.3
ipfw -q table 10 add 192.168.10.4

ipfw -q table 11 add 192.168.11.2
ipfw -q table 11 add 192.168.11.3
ipfw -q table 11 add 192.168.11.4

указываем для каждой таблицы маршрутизации дефолт
setfib 0 route -q add default 192.168.12.1
setfib 1 route -q add default 192.168.12.1

и в правилах ipfw добавляем что-то вроде
add 10 setfib 0 all from table(10) to any out xmit em1
add 11 setfib 1 all from table(11) to any out xmit em2

с pf это решается и вовсе без указания дефолтов
с помощью route-to

вот примерный кусок
int_if="em0"
ext_if1="em1"
ext_if2="em2"
ext_gw1="192.168.12.1"
ext_gw2="192.168.12.1"

pass in on $int_if route-to { ($ext_if1 $ext_gw1) } from <table10> to any
pass in on $int_if route-to { ($ext_if2 $ext_gw2) } from <table11> to any


"FreeBSD балансировка 2 каналов с 1 шлюзом"
Отправлено user , 19-Окт-12 20:28 

Э-э-э, ребята, в ipfw уже есть расширенные таблицы, nat global и еще другие вкусности.
И все прекрасно балансируется без фибов.



"FreeBSD балансировка 2 каналов с 1 шлюзом"
Отправлено universite , 20-Окт-12 19:59 
>  Э-э-э, ребята, в ipfw уже есть расширенные таблицы, nat global и
> еще другие вкусности.
>  И все прекрасно балансируется без фибов.

Покажи пример "nat global"


"FreeBSD балансировка 2 каналов с 1 шлюзом"
Отправлено user , 20-Окт-12 21:29 
>>  Э-э-э, ребята, в ipfw уже есть расширенные таблицы, nat global и
>> еще другие вкусности.
>>  И все прекрасно балансируется без фибов.
> Покажи пример "nat global"

Ну у меня 4 направления в Инет, реализованы per-interface acl, per-session load balancing

вот кусок рулесета с внешних ифейсов . Трафик от самого роутера равномерно распределяется по направлениям, но можно тоже реализовать с вероятностями, но тада нужно еще один нат вводить. 4 инстанса ната для каждого направления.

$cmd 2010 nat global ip4 from not me to any recv vlan\*
$cmd 2020 fwd tablearg ip4 from me to any recv vlan\* xmit "table(100)"

$cmd 2041 prob 0.25 skipto 2061 ip4 from not me to any
$cmd 2042 prob 0.50 skipto 2062 ip4 from not me to any
.....

$cmd 2061 nat 1 ip4 from any to any xmit em0
$cmd 2062 nat 2 ip4 from any to any xmit em1
.....
$cmd 2090 fwd tablearg log ip4 from me to any xmit "table(100)"

Используем расширенные таблицы aaa.bbb.ccc.ddd - соотв. default gw

ipfw table 100 add em0 aaa.bbb.ccc.ddd
ipfw table 100 add em1 eee.fff.ggg.hhh
.....

Суть в том, что первый пакет из лок. сети устанавливает соединение -> стейт в нате (2061-2064) и форвардинг, следующие пакеты уже не обрабатываются этими правилами, а только нат глобал ( имеется уже стейт) и далее форвардинг (2010-2020)
Пакеты самого роутера обрабатываются только правилами 2061-...
Ядро скомпилено с опцией RADIX_MPATH, добавлено 4 default gw. Можно еще добавить к каждому default gw вес, но у меня роутер с этим вылетает в корку...
Я все так настраивал, что бы не заморачиваться с IP, используя имена ифейсов.