Перейти к содержимому
Калькуляторы

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

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

 

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

 

Ваше мнение?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

так и делаем, freebsd, mpd5

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

у меня в потолке было 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). Но это уже совсем другая тема...

Изменено пользователем AlKov

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

у меня в потолке было 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 отдавал радиусу только "внешний" трафик.

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Фильтрами можно поделить трафик на несколько классов, и для каждого класа в Radius-accounting будет своя статистика.

http://mpd.sourceforge.net/doc5/mpd36.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

nuclearcat

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

 

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

 

Изменено пользователем MagMike

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Linux,

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

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

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

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

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Примеры для 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 через конфиг, еще не смотрел.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это сколько же надо туда напихать?! Вроде как у радиуса пакет до 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Linux

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

~300м трафика

load average: 0.28, 0.62, 0.80

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.