Есть 10 ADSL подключений в одном месте входящий трафик 8 Мб/с, исходящий 512кб/с, все внешние айпи динамические, на каждом адсл рутере нат. Задача - пользователям локальной сети (100+) сделать ограничения трафика асинхронные (например 1000/80, 2000/160 кб/с), чтобы проще было привязать каждого к одному шлюзу (до 20 на шлюз). Думаю это делать на FreeBSD, как можно и как лучше будет реализовать такой шейпер? Сложно ли будет сделать балансировку между имеющимися каналами с сохранением ограничений трафика?
>Есть 10 ADSL подключений в одном месте входящий трафик 8 Мб/с, исходящий
>512кб/с, все внешние айпи динамические, на каждом адсл рутере нат. Задача
>- пользователям локальной сети (100+) сделать ограничения трафика асинхронные (например 1000/80,
>2000/160 кб/с), чтобы проще было привязать каждого к одному шлюзу (до
>20 на шлюз). Думаю это делать на FreeBSD, как можно и
>как лучше будет реализовать такой шейпер? Сложно ли будет сделать балансировку
>между имеющимися каналами с сохранением ограничений трафика?Могу рассказать как это сделать на Линуксе (маршрутизатор на Линуксе с использованием iptables + iproute2 + отдельная тачка под FreeBSD в качестве шейпера). Есть опыт построения такой сети на 4 канала, но уже продумал масштабирование на произвольное количество каналов. Интересует?
>Могу рассказать как это сделать на Линуксе (маршрутизатор на Линуксе с использованием
>iptables + iproute2 + отдельная тачка под FreeBSD в качестве шейпера).
>Есть опыт построения такой сети на 4 канала, но уже продумал
>масштабирование на произвольное количество каналов. Интересует?да, весьма интересно
>Могу рассказать как это сделать на Линуксе (маршрутизатор на Линуксе с использованием
>iptables + iproute2 + отдельная тачка под FreeBSD в качестве шейпера).
>Есть опыт построения такой сети на 4 канала, но уже продумал
>масштабирование на произвольное количество каналов. Интересует?Автор темы я, писал не залогинившись, ronin опишите свой метод пожалуйста
>>Могу рассказать как это сделать на Линуксе (маршрутизатор на Линуксе с использованием
>>iptables + iproute2 + отдельная тачка под FreeBSD в качестве шейпера).
>>Есть опыт построения такой сети на 4 канала, но уже продумал
>>масштабирование на произвольное количество каналов. Интересует?
>
>Автор темы я, писал не залогинившись, ronin опишите свой метод пожалуйстаА еще в FreeBSD 7.1 появилась фишка мультироутинга собрав ядро с ROUTETABLES=10 можно задавать маршруты по умолчанию для каждой таблицы маршрутизации с помощю setfib. И после этого шаманить над фаерволом с тем же setfib.
Но можно все это разрулить и на фре без тачки на линуксе и без ROUTETABLES только с помощью ipfw или pf.
ПС. Не помню сколько максимум таблиц можно задавать опцией ROUTETABLES
>А еще в FreeBSD 7.1 появилась фишка мультироутинга собрав ядро с ROUTETABLES=10
>можно задавать маршруты по умолчанию для каждой таблицы маршрутизации с помощю
>setfib. И после этого шаманить над фаерволом с тем же setfib.
>
>
>Но можно все это разрулить и на фре без тачки на линуксе
>и без ROUTETABLES только с помощью ipfw или pf.Сложно представить себе полную картину реализации на одной фре. С pf не знаком, как там с шейпингом?
>ПС. Не помню сколько максимум таблиц можно задавать опцией ROUTETABLES
Предполагаю если ROUTETABLES=10 то может 10 таблиц максимум?
>[оверквотинг удален]
>>
>>Но можно все это разрулить и на фре без тачки на линуксе
>>и без ROUTETABLES только с помощью ipfw или pf.
>
>Сложно представить себе полную картину реализации на одной фре. С pf не
>знаком, как там с шейпингом?
>
>>ПС. Не помню сколько максимум таблиц можно задавать опцией ROUTETABLES
>
>Предполагаю если ROUTETABLES=10 то может 10 таблиц максимум?Ну єто понятно что если указать 10 то 10 максимум в вашем случае, а вообще сколько максимум можно задать не помню.
С шейпингом немного сложновато в пф, он использует ALTQ для шейпа. Мне очень нравится DUMMYNET - просто и надежно, пока проблем с ним не было.
>С шейпингом немного сложновато в пф, он использует ALTQ для шейпа. Мне
>очень нравится DUMMYNET - просто и надежно, пока проблем с ним
>не было.Как в ipfw для каждого свою трубу создавать? клиентов то много.
>>С шейпингом немного сложновато в пф, он использует ALTQ для шейпа. Мне
>>очень нравится DUMMYNET - просто и надежно, пока проблем с ним
>>не было.
>
>Как в ipfw для каждого свою трубу создавать? клиентов то много.По маске 0XFFFFFFFF
Допустим шейпить будет dummynet на несколько типовых скоростей. Какие возможны варианты равномерного распределения по внешним каналам? Как можно реализовать во фре и линуксе?
У меня используется статическая схема балансировки нагрузки на 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) ???