Jump to content
Калькуляторы

Способы шейпирования трафика RADIUS-атрибуты для Cisco и внешние скрипты под Linux и FreeBSD

http://www.netup.ru/articles.php?n=40

 

В статье описаны способы шейпирования трафика как с помощью RADIUS-атрибутов, так и средствами внешних скриптов.

 

Ваше мнение?

Share this post


Link to post
Share on other sites
так и делаем, freebsd, mpd5
А взглянуть на "пакет" передаваемых атрибутов можно?

И еще - сколько макс. он-лайн держит mpd у Вас?

 

Share this post


Link to post
Share on other sites

у меня в потолке было 850 сессий, трафика 57М, 20kpps. Шейп на ngcar, ос 6.4

Share this post


Link to post
Share on other sites
у меня в потолке было 850 сессий, трафика 57М, 20kpps. Шейп на ngcar, ос 6.4
Неплохо! У меня пока выше 300 сессий не поднималось. Шейп аналогичный (на ng_car), mpd 5.2, FreeBSD 6.3 (amd64)

Скармливаю радиусу такую конструкцию для mpd

mpd-filter +="1#1=nomatch dst net 172.16.0.0/12", 
mpd-filter +="1#2=nomatch dst net 192.33.48.0/23", 
mpd-filter +="2#1=nomatch src net 172.16.0.0/12", 
mpd-filter +="2#2=nomatch src net 192.33.48.0/23", 
mpd-limit +="in#1#Ext=flt1 shape 512000 96000 pass", 
mpd-limit +="in#2#Loc=all shape 384000 72000 pass", 
mpd-limit +="out#1#Ext=flt2 shape 512000 96000 pass", 
mpd-limit +="out#2#Loc=all rate-limit 4000000 750000 1500000 pass", 
mpd-input-acct +="Ext", 
mpd-output-acct +="Ext"

Фильтры только для того, чтобы mpd отдавал радиусу только "внешний" трафик.

Пока всё жужжит очень красиво, тьфу-тьфу-тьфу! :-)

 

P.S. До mpd+ng_car юзал pptpd на Linux (Fedora 6) с "костылями" на скриптах. Не скажу, что было проблемно, т.к. он-лайн было не более 100, больше не нравились собственно "костыли". Так-что испытать все "прелести" pptpd не довелось - вовремя ушел на мпд, чем в настоящее время очень доволен.

Сейчас федора трудится в качестве роутера и фаервола (вот в этом плане, ИМХО, у Linux-а есть свои преимущества перед FreeBSD). Но это уже совсем другая тема...

Edited by AlKov

Share this post


Link to post
Share on other sites
у меня в потолке было 850 сессий, трафика 57М, 20kpps. Шейп на ngcar, ос 6.4
Неплохо! У меня пока выше 300 сессий не поднималось. Шейп аналогичный (на ng_car), mpd 5.2, FreeBSD 6.3 (amd64)

Скармливаю радиусу такую конструкцию для mpd

mpd-filter +="1#1=nomatch dst net 172.16.0.0/12", 
mpd-filter +="1#2=nomatch dst net 192.33.48.0/23", 
mpd-filter +="2#1=nomatch src net 172.16.0.0/12", 
mpd-filter +="2#2=nomatch src net 192.33.48.0/23", 
mpd-limit +="in#1#Ext=flt1 shape 512000 96000 pass", 
mpd-limit +="in#2#Loc=all shape 384000 72000 pass", 
mpd-limit +="out#1#Ext=flt2 shape 512000 96000 pass", 
mpd-limit +="out#2#Loc=all rate-limit 4000000 750000 1500000 pass", 
mpd-input-acct +="Ext", 
mpd-output-acct +="Ext"

Фильтры только для того, чтобы mpd отдавал радиусу только "внешний" трафик.

Пока всё жужжит очень красиво, тьфу-тьфу-тьфу! :-)

А на линуксах подобные навороты для подсчета на РРРоЕ можно наколдовать?

Share this post


Link to post
Share on other sites

А на линуксах подобные навороты для подсчета на РРРоЕ можно наколдовать?

Скорее всего, что нет. Во всяком случае, для себя я подходящего решения не нашел. Поэтому и перевел все это "хозяйство" на FreeBSD, что и Вам советую. :)

Share this post


Link to post
Share on other sites

Переход на новую систему? Было бы толковое руководство с описанием хотя бы основных граблей - переезд на новую платформу - дело хлопотное.

Share this post


Link to post
Share on other sites
Переход на новую систему? Было бы толковое руководство с описанием хотя бы основных граблей - переезд на новую платформу - дело хлопотное.
До боли знакомые фразы! Сам "пел" те же песни, пока не попробовал. ;)

Но поступил немного похитрее - выбил у начальства денег на новое железо для NAS-а, неспеша воздвигнул на него FreeBSD (с помощью гугла, плаканья на форумах и какой-то матери:)). Фрю переустанавливал 3 раза. :) Далее также неспешно перетащил на новую машину линуксовый биллинг, запустил второй NAS и приступил к отладочным "играм", не трогая боевую машину.

На все про все (вместе с изучением особенностей незнакомой до этого мне ОС) у меня ушло около 2-х месяцев. При этом еще занимался текущими делами. Затем назначил "час Х" и.. Перевел новую систему в боевое положение. Далее пошел собственно тюнинг (фильтры и проч.) уже на "живых зверях". :)

Правда, работать в эти месяцы пришлось не по 8 час, а по 12-14... Вообщем, было бы желание.

Share this post


Link to post
Share on other sites
А на линуксах подобные навороты для подсчета на РРРоЕ можно наколдовать?
Скорее всего, что нет. Во всяком случае, для себя я подходящего решения не нашел. Поэтому и перевел все это "хозяйство" на FreeBSD, что и Вам советую. :)

Можно, можно наколдовать...

Просто немного со скриптами обращаться надо уметь

Share this post


Link to post
Share on other sites
А на линуксах подобные навороты для подсчета на РРРоЕ можно наколдовать?
Скорее всего, что нет. Во всяком случае, для себя я подходящего решения не нашел. Поэтому и перевел все это "хозяйство" на FreeBSD, что и Вам советую. :)

Можно, можно наколдовать...

Просто немного со скриптами обращаться надо уметь

Шейпить проблема не большая. Вот подсчет не всего трафика, а части, а еще лучше отдельно 2-3 разных видов отдельно очень интересует.

Share this post


Link to post
Share on other sites

Я так понимаю mpd можно указать считать только определенный класс траффика? В этом суть?

Share this post


Link to post
Share on other sites
Я так понимаю mpd можно указать считать только определенный класс траффика? В этом суть?
угу, в этом то и прикол, что не надо netflow разгребать...

 

mpd при acct-update собирает с ng_bpf нод информацию сколько трафика прошло по каждой,

у каждой ноды есть своё имя (у меня - это идентифатор зоны в базе)

Share this post


Link to post
Share on other sites

nuclearcat

У меня нет радиус-аккаунтинга (через тунели только анлимы), но действительно, не могли б натолкнуть на мысль как считать по направлениям.

 

ISG это умеет делать, я проверял, а вот как это сделать с pptpd - нет идей даже отдаленнно.

 

 

Share this post


Link to post
Share on other sites

Linux,

accel-pptpd либо pppoe (можно даже на одном и том же железе одновременно,

pppd, пропатченный для подсчета трафика по разным направлениям (http://abills.net.ua/wiki/doku.php?id=abills:docs:linux:lepppd:ru)

шейпинг через tc (htb, sfq)

 

 

более 1000 сессий - без проблем держит.

железо - Xeon™ CPU 3.00GHz и Core™2 Quad CPU Q8200 @ 2.33GHz

RAM 2 GB

2xIntel gigabit Ethernet

 

вот в данный момент (далеко не ЧНН) - 1031 сессия

Core™2 Quad CPU Q8200 @ 2.33GHz

load average: 0.79, 0.91, 0.81

 

 

Edited by MagMike

Share this post


Link to post
Share on other sites
Linux,

accel-pptpd либо pppoe (можно даже на одном и том же железе одновременно,

pppd, пропатченный для подсчета трафика по разным направлениям (http://abills.net.ua/wiki/doku.php?id=abills:docs:linux:lepppd:ru)

шейпинг через tc (htb, sfq)

Вопрос как в accel-pptpd понаправлениям считать )

Для меня задача сугубо теоретическая, но очень интересно.

Статью у Асмодея читал.

 

Share this post


Link to post
Share on other sites

Примеры для FreeBSD ерундовые. Ни к чему плодить статические пайпы для каждого пользователя.

Намного удобнее использовать динамику.

 

# 128Kbit pipes
$fwcmd pipe 101 delete
$fwcmd pipe 102 delete
$fwcmd pipe 101 config bw 128Kbit/s queue 11 mask dst-ip 0xffffffff
$fwcmd pipe 102 config bw 128Kbit/s queue 11 mask src-ip 0xffffffff

# 256Kbit pipes
$fwcmd pipe 103 delete
$fwcmd pipe 104 delete
$fwcmd pipe 103 config bw 256Kbit/s queue 22 mask dst-ip 0xffffffff
$fwcmd pipe 104 config bw 256Kbit/s queue 22 mask src-ip 0xffffffff


$fwcmd pipe tablearg ip from any to table(1) 
$fwcmd pipe tablearg ip from any to any src-ip table(2)

 

При этом данные дергаются из радиуса в виде:

 

mpd-table-static += "1=192.168.0.1 101"
mpd-table-static += "2=192.168.0.1 102"

mpd-table-static += "1=192.168.0.2 103"
mpd-table-static += "2=192.168.0.2 104"

 

В случае с ng_car можно упереться в то, что все acl не влезут в пакет радиуса (например, при большом количестве сетей). В mpd 5.3 вроде как сделали профилирование acl через конфиг, еще не смотрел.

Share this post


Link to post
Share on other sites
В случае с ng_car можно упереться в то, что все acl не влезут в пакет радиуса (например, при большом количестве сетей).
Это сколько же надо туда напихать?! Вроде как у радиуса пакет до 4Кб.
В mpd 5.3 вроде как сделали профилирование acl через конфиг, еще не смотрел.
Очень интересно! У меня сейчас именно мпд 5.3. А где об этом можно глянуть, не подскажете?

 

Share this post


Link to post
Share on other sites
Это сколько же надо туда напихать?! Вроде как у радиуса пакет до 4Кб.
Я уже на сотне префиксов обломался. А по интерфейсу оно фильтровать не умеет ;(
Очень интересно! У меня сейчас именно мпд 5.3. А где об этом можно глянуть, не подскажете?

Added ability to receive link action from AAA in auth reply. It allows AAA to select bundle/repeater configuration for specific user or session.

Added global traffic filters support to reduce auth reply size. 'set global filter ...' commands.

Думаю, плясать нужно от этого. Описывать разные темплейты бандлов с разными глобальными фильтрами, пользователя загонять в тот или иной темплейт в зависимости от тарифа.

Added ability to include other local or remote config files. 'load ...' command able to accept configuration file path/URI as first argument.

А эта штука позволит фильтры хранить в одном месте и при необходимости их обновлять. Смущает только необходимость перезапуска mpd при изменении списка префиксов. Перечитывать конфиг он вроде до сих пор не научился. Поэтому я и предпочитаю работать с пайпами и таблицами в ipfw.

Share this post


Link to post
Share on other sites

Linux

по 8к статических хешированных правил tc для всех возможных /19 айпи адресов в сети на каждый из 2-х интерфейсов (вход-исход)

~300м трафика

load average: 0.28, 0.62, 0.80

И не к чему плодить линейные правила.

Share this post


Link to post
Share on other sites
azlozello, а можно поподробнее? В частности, не понимаю что значит "cтатических хешированных правил tc", бо в Linux после Фри тяжеловато. Может быть, сможете привести пару примеров?

Share this post


Link to post
Share on other sites

Ну простой пример.

tc qdisc add dev eth0 root handle 1: prio bands 3

 

tc qdisc add dev eth0 parent 1:1 handle 10: pfifo

tc qdisc add dev eth0 parent 1:2 handle 11: pfifo

tc qdisc add dev eth0 parent 1:3 handle 14: htb default 0

 

tc filter add dev eth0 parent 14: prio 8 handle 2: protocol ip u32 divisor 32

tc filter add dev eth0 parent 14: prio 8 handle 3: protocol ip u32 divisor 256

tc filter add dev eth0 protocol ip parent 14: prio 8 u32 match ip dst 10.0.0.0/19 hashkey mask 0x00001f00 at 16 link 2:

tc filter add dev eth0 protocol ip parent 14: prio 8 u32 match ip dst 10.0.0.0/19 hashkey mask 0x000000ff at 16 link 3:

 

ну и соответственно по умолчанию ставим например 4к :)

 

tc class add dev eth0 parent 14: classid 14:1000 htb rate 4Kbit ceil 4Kbit quantum 1514 mtu 1500

tc qdisc add dev eth0 parent 14:1000 handle 1000: red limit 1000000 min 5000 max 100000 avpkt 1000 burst 50

tc filter add dev eth0 protocol ip parent 14: prio 8 u32 ht 2:a0: ht 3:00: match ip dst 10.0.0.0/32 flowid 14:1000

--------------------

--------------------

tc class add dev eth0 parent 14: classid 14:10ff htb rate 4Kbit ceil 4Kbit quantum 1514 mtu 1500

tc qdisc add dev eth0 parent 14:10ff handle 10ff: red limit 1000000 min 5000 max 100000 avpkt 1000 burst 50

tc filter add dev eth0 protocol ip parent 14: prio 8 u32 ht 2:a0: ht 3:ff: match ip dst 10.0.0.255/32 flowid 14:10ff

 

---------||-----------

tc class add dev eth0 parent 14: classid 14:1100 htb rate 4Kbit ceil 4Kbit quantum 1514 mtu 1500

tc qdisc add dev eth0 parent 14:1100 handle 1100: red limit 1000000 min 5000 max 100000 avpkt 1000 burst 50

tc filter add dev eth0 protocol ip parent 14: prio 8 u32 ht 2:a1: ht 3:00: match ip dst 10.0.1.0/32 flowid 14:1100

---------||-----------

и т.д. на все возможные айпи адреса

 

Думаю смысл понятен.

Вместо red можно юзать и htb например

 

Потом простецким скриптом делаем

tc class change ...

на нужный нам айпи и выставляем необходимую скорость

 

Этот пример работает достаточно хорошо.

Можно ещё пару оптимизаций сделать для экономии ресурсов и всяких фишек но надо править исходники tc

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this