Есть FreeBSD 8.2 и 2 канала на одного провайдера. Как сделать round-robin балансировку при помощи ipfw и probe - тут все понятно.
Только что делать, если шлюз один у обоих каналов? Возможно-ли в ipfw делать fwd на шлюз, только через определенную сетевую?
> Есть FreeBSD 8.2 и 2 канала на одного провайдера. Как сделать round-robin
> балансировку при помощи ipfw и probe - тут все понятно.
> Только что делать, если шлюз один у обоих каналов? Возможно-ли в ipfw
> делать fwd на шлюз, только через определенную сетевую?Вот с помощью pf точно возможно "через определенную сетевую".
А с fwd я думаю у вас не получится.
> Есть FreeBSD 8.2 и 2 канала на одного провайдера. Как сделать round-robin
> балансировку при помощи ipfw и probe - тут все понятно.
> Только что делать, если шлюз один у обоих каналов? Возможно-ли в ipfw
> делать fwd на шлюз, только через определенную сетевую?А как у Вас получился один шлюз для разных сетей? Ну мне так, для общего развития :)
> А как у Вас получился один шлюз для разных сетей? Ну мне
> так, для общего развития :)где написано что они разные? :)
> где написано что они разные? :)Два канала из одной сети??? Я даже уже и не знаю :))
>> где написано что они разные? :)
> Два канала из одной сети??? Я даже уже и не знаю :))Даа бывает и такое))
По сабжу, делаете две таблицы маршрутизации, прописываете в них роут по умолжанию с параметрами ifp, каждый через свою сетевую, и через ipfw делаете setfib в свою таблицу маршрутизации.
>>> где написано что они разные? :)
>> Два канала из одной сети??? Я даже уже и не знаю :))
> Даа бывает и такое))
> По сабжу, делаете две таблицы маршрутизации, прописываете в них роут по умолжанию
> с параметрами 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.4ipfw -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
Э-э-э, ребята, в ipfw уже есть расширенные таблицы, nat global и еще другие вкусности.
И все прекрасно балансируется без фибов.
> Э-э-э, ребята, в ipfw уже есть расширенные таблицы, nat global и
> еще другие вкусности.
> И все прекрасно балансируется без фибов.Покажи пример "nat global"
>> Э-э-э, ребята, в 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, используя имена ифейсов.