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

Исходное сообщение
"распределить юзеров на 10 внешних каналов  с шейпингом"

Отправлено pingwin , 16-Фев-09 18:57 
Есть 10 ADSL подключений в одном месте входящий трафик 8 Мб/с, исходящий 512кб/с, все внешние айпи динамические, на каждом адсл рутере нат. Задача - пользователям локальной сети (100+) сделать ограничения трафика асинхронные (например 1000/80, 2000/160 кб/с), чтобы проще было привязать каждого к одному шлюзу (до 20 на шлюз). Думаю это делать на FreeBSD, как можно и как лучше будет реализовать такой шейпер? Сложно ли будет сделать балансировку между имеющимися каналами с сохранением ограничений трафика?

Содержание

Сообщения в этом обсуждении
"распределить юзеров на 10 внешних каналов  с шейпингом"
Отправлено ronin , 16-Фев-09 19:21 
>Есть 10 ADSL подключений в одном месте входящий трафик 8 Мб/с, исходящий
>512кб/с, все внешние айпи динамические, на каждом адсл рутере нат. Задача
>- пользователям локальной сети (100+) сделать ограничения трафика асинхронные (например 1000/80,
>2000/160 кб/с), чтобы проще было привязать каждого к одному шлюзу (до
>20 на шлюз). Думаю это делать на FreeBSD, как можно и
>как лучше будет реализовать такой шейпер? Сложно ли будет сделать балансировку
>между имеющимися каналами с сохранением ограничений трафика?

Могу рассказать как это сделать на Линуксе (маршрутизатор на Линуксе с использованием iptables + iproute2 + отдельная тачка под FreeBSD в качестве шейпера). Есть опыт построения такой сети на 4 канала, но уже продумал масштабирование на произвольное количество каналов. Интересует?


"распределить юзеров на 10 внешних каналов  с шейпингом"
Отправлено pingwin108 , 16-Фев-09 20:03 
>Могу рассказать как это сделать на Линуксе (маршрутизатор на Линуксе с использованием
>iptables + iproute2 + отдельная тачка под FreeBSD в качестве шейпера).
>Есть опыт построения такой сети на 4 канала, но уже продумал
>масштабирование на произвольное количество каналов. Интересует?

да, весьма интересно


"распределить юзеров на 10 внешних каналов  с шейпингом"
Отправлено pingwin108 , 17-Фев-09 11:45 
>Могу рассказать как это сделать на Линуксе (маршрутизатор на Линуксе с использованием
>iptables + iproute2 + отдельная тачка под FreeBSD в качестве шейпера).
>Есть опыт построения такой сети на 4 канала, но уже продумал
>масштабирование на произвольное количество каналов. Интересует?

Автор темы я, писал не залогинившись, ronin опишите свой метод пожалуйста


"распределить юзеров на 10 внешних каналов  с шейпингом"
Отправлено blackjackchik , 18-Фев-09 10:23 
>>Могу рассказать как это сделать на Линуксе (маршрутизатор на Линуксе с использованием
>>iptables + iproute2 + отдельная тачка под FreeBSD в качестве шейпера).
>>Есть опыт построения такой сети на 4 канала, но уже продумал
>>масштабирование на произвольное количество каналов. Интересует?
>
>Автор темы я, писал не залогинившись, ronin опишите свой метод пожалуйста

А еще в FreeBSD 7.1 появилась фишка мультироутинга собрав ядро с ROUTETABLES=10 можно задавать маршруты по умолчанию для каждой таблицы маршрутизации с помощю setfib. И после этого шаманить над фаерволом с тем же setfib.

Но можно все это разрулить и на фре без тачки на линуксе и без ROUTETABLES только с помощью ipfw или pf.

ПС. Не помню сколько максимум таблиц можно задавать опцией ROUTETABLES


"распределить юзеров на 10 внешних каналов  с шейпингом"
Отправлено pingwin108 , 18-Фев-09 10:58 
>А еще в FreeBSD 7.1 появилась фишка мультироутинга собрав ядро с ROUTETABLES=10
>можно задавать маршруты по умолчанию для каждой таблицы маршрутизации с помощю
>setfib. И после этого шаманить над фаерволом с тем же setfib.
>
>
>Но можно все это разрулить и на фре без тачки на линуксе
>и без ROUTETABLES только с помощью ipfw или pf.

Сложно представить себе полную картину реализации на одной фре. С pf не знаком, как там с шейпингом?

>ПС. Не помню сколько максимум таблиц можно задавать опцией ROUTETABLES

Предполагаю если ROUTETABLES=10  то может 10 таблиц максимум?


"распределить юзеров на 10 внешних каналов  с шейпингом"
Отправлено blackjackchik , 18-Фев-09 12:59 
>[оверквотинг удален]
>>
>>Но можно все это разрулить и на фре без тачки на линуксе
>>и без ROUTETABLES только с помощью ipfw или pf.
>
>Сложно представить себе полную картину реализации на одной фре. С pf не
>знаком, как там с шейпингом?
>
>>ПС. Не помню сколько максимум таблиц можно задавать опцией ROUTETABLES
>
>Предполагаю если ROUTETABLES=10  то может 10 таблиц максимум?

Ну єто понятно что если указать 10 то 10 максимум в вашем случае, а вообще сколько максимум можно задать не помню.

С шейпингом немного сложновато в пф, он использует ALTQ для шейпа. Мне очень нравится DUMMYNET - просто и надежно, пока проблем с ним не было.


"распределить юзеров на 10 внешних каналов  с шейпингом"
Отправлено pingwin108 , 18-Фев-09 13:29 
>С шейпингом немного сложновато в пф, он использует ALTQ для шейпа. Мне
>очень нравится DUMMYNET - просто и надежно, пока проблем с ним
>не было.

Как в ipfw для каждого свою трубу создавать? клиентов то много.


"распределить юзеров на 10 внешних каналов  с шейпингом"
Отправлено blackjackchik , 18-Фев-09 15:21 
>>С шейпингом немного сложновато в пф, он использует ALTQ для шейпа. Мне
>>очень нравится DUMMYNET - просто и надежно, пока проблем с ним
>>не было.
>
>Как в ipfw для каждого свою трубу создавать? клиентов то много.

По маске 0XFFFFFFFF


"распределить юзеров на 10 внешних каналов  с шейпингом"
Отправлено pingwin108 , 19-Фев-09 13:10 
Допустим шейпить будет dummynet на несколько типовых скоростей. Какие возможны варианты равномерного распределения по внешним каналам? Как можно реализовать во фре и линуксе?

"распределить юзеров на 10 внешних каналов  с шейпингом"
Отправлено handler2006 , 17-Сен-09 16:33 
У меня используется статическая схема балансировки нагрузки на 4 канала на линуксе.
В правилах iptables в таблице mangle мы маркируем пакеты 4-мя метками и, в зависимости от значения метки роутим адрес в один из 4-х внешних линков.
Данная конструкция работает надежно, но показала свою малоэффективность.
Сейчас разрабатываю динамическую балансировку, основанную на vpn-туннелях.
Адреса в сети раздаются dhcp-сервером, затем юзер устанавливает vpn-туннель.
На стороне сервера выполняются скрипты
/etc/ppp/ip-up
/etc/ppp/ip-down
В этих скриптах мы прописываем правила iptables (таблицы NAT), в которой мы роутим на выбранный заранее интерфейс и правила шейпинга для данного туннеля (tc add dev $1...)
Ну, с шейпингом тут все ясно, а вот как правильно создавать маршрут для вновь созданного канала? Если мы для канала укажем явно в стартовом скрипте route add default gw $ip_eth1 как на это среагирует система? Думаю, что это не правильно. Допустим, мы опишем все 4 таблицы маршрутизации, как это предложено в http://lartc.org/howto/lartc.rpdb.multiple-links.html , а дальше опять маркировать пакеты?
Может, есть соображения?
Кстати, в указанной ссылке автор утверждает, что балансировка может быть реализована следующим образом:
Instead of choosing one of the two providers as your default route, you now set up the default route to be a multipath route. In the default kernel this will balance routes over the two providers. It is done as follows (once more building on the example in the section on split-access):

        ip route add default scope global nexthop via $P1 dev $IF1 weight 1 \
        nexthop via $P2 dev $IF2 weight 1
      

This will balance the routes over both providers. The weight parameters can be tweaked to favor one provider over the other.
Тогда в таблице nat правил iptables какой адрес мы будем указывать в качестве параметра SNAT ?
iptables -t nat -A POSTROUTING -s $VPN_NET -d $EXT_NET -j SNAT --to-source $P1($P2) ???