закрываем все вопросы по связке netup-radius + mpd + shape

Форум для размещения материалов по реализации различных схем использования ПО, решению частых проблем и предупреждению частых ошибок
Blackmore
Сообщения: 365
Зарегистрирован: Вс фев 06, 2005 09:24
Откуда: подмосковье

закрываем все вопросы по связке netup-radius + mpd + shape

Сообщение Blackmore »

Имеем: FreeBSD 6.2 и mpd 4.3 в качестве pppoe-терминатора
Нужно: нарезать каналы для пользователей с безлимитными тарифами

Делаем:

1. Обновим порты и поставим свежий стабильный mpd (4.3)
2. если не пересобирать ядро, должны быть загружены модули:

ng_socket.ko
netgraph.ko
ng_iface.ko
ng_ppp.ko
ng_ether.ko
ng_pppoe.ko
ng_tee.ko
ng_vjc.ko
ng_bpf.ko
ng_car.ko

3. конфигурим mpd в качестве pppoe сервера

mpd.conf:
startup:
# configure the console
# set console port 5005
# set console ip 0.0.0.0
# set console user foo bar
# set console user foo1 bar1
# set console open
# configure the web server
set web port 5006
set web ip 1.1.2.3
set web user пользователь пароль
set web open
#

default:
load lnk0
load lnk1
load lnk2

lnk0:
new -i ng0 lnk0 lnk0
set ipcp ranges 10.100.100.1/32 1.1.1.1/32
load pppoe_standard

lnk1:
new -i ng1 lnk1 lnk1
set ipcp ranges 10.100.100.1/32 1.1.1.2/32
load pppoe_standard

lnk2:
new -i ng2 lnk2 lnk2
set ipcp ranges 10.100.100.1/32 1.1.1.3/32
load pppoe_standard

pppoe_standard:
load radius
set iface disable on-demand
set iface disable proxy-arp
set iface idle 0
set bundle disable multilink
set link yes acfcomp protocomp
set link no pap chap
set link enable chap-md5
set link mtu 1492
set link mru 1492
set link max-redial -1
set link keep-alive 60 180
set ipcp yes vjcomp
set pppoe service *
set pppoe enable incoming
set pppoe disable originate

radius:
set radius retries 3
set radius timeout 3
set radius server ip-вашего-радиуса secret 1812 1813
set radius me ip-вашего-терминатора
#set auth acct-update 300
set auth enable radius-auth
set auth disable internal
#set auth enable radius-acct
set radius enable message-authentic

файла /etc/radius.conf - не нужно, т.к. все прописывается в конфиге mpd

mpd.links:

lnk0:
set link type pppoe
set pppoe iface em0 < не забудем указать свой

lnk1:
set link type pppoe
set pppoe iface em0

lnk2:
set link type pppoe
set pppoe iface em0

на этом с mpd все

4. указываем в списках NAS (админка) ваш сервер доступа

5. в radius-параметрах тарифного плана пишем 2 параметра

vendor: 12341
attr: 7
значение: out#1=all shape 128000 pass
тип: string

vendor: 12341
attr: 7
значение: in#1=all shape 128000 pass
тип: string

пример приведен для канала в 128 кбит

или вдумчиво курим http://mpd.sourceforge.net/doc/mpd62.html

страница мануала про radius-авторизацию и атрибуты
для написания собственных фильтров и ограничителей

6. на всякий случай перезагрузим радиус - помогает

7. С Новым Годом !
Последний раз редактировалось Blackmore Сб дек 29, 2007 10:08, всего редактировалось 1 раз.

Аватара пользователя
Chris
Сообщения: 2323
Зарегистрирован: Чт июн 02, 2005 14:08
Откуда: 33 76 77 71 86 37 98

Сообщение Chris »

Молодец! Спасибо!

Blackmore
Сообщения: 365
Зарегистрирован: Вс фев 06, 2005 09:24
Откуда: подмосковье

Сообщение Blackmore »

Если у кого есть что дополнить - не стесняйтесь :)

mikkey finn
Сообщения: 1612
Зарегистрирован: Пт ноя 10, 2006 15:23

Сообщение mikkey finn »

я так понял, шейпером является Ng_car. Не отказался бы от комментариев по поводу использования дефолтного режима шейпера Ng_car. Их там всего 4 :)
Гуглом пользоваться умею.

Аватара пользователя
Ata-man
Сообщения: 427
Зарегистрирован: Пт янв 21, 2005 10:04
Откуда: Екатеринбург

Сообщение Ata-man »

я так понял, шейпером является Ng_car. Не отказался бы от комментариев по поводу использования дефолтного режима шейпера Ng_car. Их там всего 4
Гуглом пользоваться умею.
- Поддерживаю!

Blackmore
Сообщения: 365
Зарегистрирован: Вс фев 06, 2005 09:24
Откуда: подмосковье

Сообщение Blackmore »

таки каких комментариев хочет мсье ?

mikkey finn
Сообщения: 1612
Зарегистрирован: Пт ноя 10, 2006 15:23

Сообщение mikkey finn »

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

Arti
Сообщения: 266
Зарегистрирован: Пн окт 01, 2007 02:44

Сообщение Arti »

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

Если мы жмём 200 мегабит в 1 мегабит и между точками соединения маленькая задержка, то получаем большой процент дропа, скорей всего нормально работать tcp не будет.

Шейпер кроме тупого рейд-лимита ещё вносит задержку, чтобы уменьшить процент дропнутых пакетов.

Так что нет особого выбора в вопросе чем "зажимать" полосу клиента в сотни раз меньше общей пропускной способности канала.

P.S.
В mpd 4.3 в new опцию i лучше не задавать.

Blackmore
Сообщения: 365
Зарегистрирован: Вс фев 06, 2005 09:24
Откуда: подмосковье

Сообщение Blackmore »

В mpd 4.3 в new опцию i лучше не задавать
совершенно верно - могут быть проблемы с поднятием большого количества бандлов

замечания Александра Мотина (один из разработчиков mpd) по поводу режимов ng_car (на opennet.ru была дискуссия ):
Пример того как можно ограничить скорость на интерфейсе:

#!/bin/sh

kldload ng_ether
kldload ng_car

ngctl -f- <<-EOF
mkpeer re0: car lower lower
name re0:lower re0_car
connect re0: re0_car: upper upper
msg re0_car: setconf { upstream={ cbs=8192 ebs=65535 cir=100000 greenAction=1 yellowAction=1 redAction=2 mode=2 } downstream={ cbs=8192 ebs=65535 cir=1000000 greenAction=1 yellowAction=1 redAction=2 mode=2 } }
EOF


Если считать что к re0 у нас подключен клиент, то upstream это трафик от клиента в инет,
downstream - трафик из инета к клиенту.

cir - скорость в битах в секунду (в мане опечатка)

mode=2 - это RED

цифры для cbs/ebs взяты с потолка. Рекомендации по поводу этих
параметров можно поискать в инете по ключевым словам random early detection
можно тут посмотреть например
http://www.icir.org/floyd/REDparameters.txt
Параметры RED в ng_car фиксированные и не настраиваются. Описание cbs/ebs можно читать в мануалах циски. cbs при shape рекоментуется порядка 4-8К, ebs не используется.

Для скоростей более 5-10Мбит/с может быть оправдано применение rate-limit (mode=3) вместо shape для экономии ресурсов. При этом рекомендуемый cbs - объем трафика за секунду, ebs - объем трафика за полторы секунды.

>А смысл этого, если есть pipe/altq?

Pipe и altq это весьма мощные и точные инструмент, однако они по определению жестко привязаны к обработке IP трафика фаерволом (ipfw или pf).

Netgraph же по определению не имеет жестких структур и позволяет на уровне ядра строить любые конфигурации из имеющихся составных частей. Модуль ng_car - это еще один кубик в этот конструктор. Сам по себе он предельно прост и имеет стандартный интерфейс, что позволяет использовать его ведзе, где требуется ограничение скорости передачи, вне зависимости от контекста. Он может работать с чем угодно, от IP до езернетных или PPP фреймов, или вообще с абстрактного потоком байтов.

Лично я использую связку ng_bpf+ng_car под управлением для дифференцированного по типу трафика ограничения скорости PPPoE подключений. Простая замена связки ipfw+pipe на эквивалентную связку ng_bpf+ng_car при 500 активных интерфейсах и 50Мбит/c трафика дала двухкратное снижение загрузки роутера за счет избавления от обхода длинного списка ipfw правил. И это еще в режиме shape. Если же перевести ng_car в режим rate-limit, его ресурсоемкость станет вообще нулевой, на уровне нескольких арифметических операций на пакет.
имхо достаточно комментариев, Вы не находите ? - все остальное - заточка под себя (под конкретные задачи), т.е экспериментально, внимательно читая ман, опять же призываю не стеснятся выкладывать готовые варианты с описанием для чего было сделано именно так :)

chainic
Сообщения: 2
Зарегистрирован: Вт янв 08, 2008 15:16

Сообщение chainic »

люди!!!!!!
кто ставил на SuSe ?

chainic
Сообщения: 2
Зарегистрирован: Вт янв 08, 2008 15:16

Сообщение chainic »

какие то косяки всплывают....
libldap не может найти при распаковывании пакета, хотя openldap стоит

Аватара пользователя
Chris
Сообщения: 2323
Зарегистрирован: Чт июн 02, 2005 14:08
Откуда: 33 76 77 71 86 37 98

Сообщение Chris »

Какой SUSE! Иди отсюда! Не позорься!

atdp03
Сообщения: 100
Зарегистрирован: Ср апр 26, 2006 09:24

Сообщение atdp03 »

Чтобы конструкция заработала с freeradius, нужно примерно следующее:

Код: Выделить всё

authorize_group_reply_query = "
SELECT rd.id, 'shape', 'mpd-limit', unhex&#40;rd.value&#41;, '+=' 
FROM ip_groups ig, iptraffic_service_links isl, service_links sl, radius_data rd
WHERE ig.uname = '%&#123;SQL-User-Name&#125;'
AND ig.is_deleted =0
AND ig.ip_group_id = isl.ip_group_id
AND isl.is_deleted =0
AND isl.id = sl.id
AND sl.is_deleted =0
AND rd.owner_id = sl.service_id
AND rd.attr = 7
UNION
SELECT rd.id, 'shape', 'mpd-filter', unhex&#40;rd.value&#41;, '+='
FROM ip_groups ig, iptraffic_service_links isl, service_links sl, radius_data rd
WHERE ig.uname = '%&#123;SQL-User-Name&#125;'
AND ig.is_deleted =0
AND ig.ip_group_id = isl.ip_group_id
AND isl.is_deleted =0
AND isl.id = sl.id
AND sl.is_deleted =0
AND rd.owner_id = sl.service_id
AND rd.attr = 6"
Первый селект дёргает аттрибут 7 (mpd-limit), второй - аттрибут 6 (filter), дабы пустить нужный трафик (в моём случае) мимо шейпинга.

В dictionary добавляем:

Код: Выделить всё

$INCLUDE        /usr/local/share/freeradius/dictionary.mpd
Содержимое файлика:

Код: Выделить всё

#----------------------------------------------------------
# dictionary.mpd

VENDOR          mpd             12341

ATTRIBUTE       mpd-rule        1       string          mpd
ATTRIBUTE       mpd-pipe        2       string          mpd
ATTRIBUTE       mpd-queue       3       string          mpd
ATTRIBUTE       mpd-table       4       string          mpd
ATTRIBUTE       mpd-table-static       5       string          mpd
ATTRIBUTE       mpd-filter      6       string          mpd
ATTRIBUTE       mpd-limit       7       string          mpd
ATTRIBUTE       mpd-drop-user   154     integer         mpd
#----------------------------------------------------------
Прописываем параметры тарифных планов, добавляем в конфиг mpd:

Код: Выделить всё

log +radius2
И при подключениях наблюдаем следующее:

Код: Выделить всё

Feb  7 18&#58;31&#58;24 access3 mpd&#58; &#91;pp9&#93; RADIUS&#58; RadiusGetParams&#58; RAD_MPD_LIMIT&#58; out#2=all shape 40000 pass
Feb  7 18&#58;31&#58;24 access3 mpd&#58; &#91;pp9&#93; RADIUS&#58; RadiusGetParams&#58; RAD_MPD_LIMIT&#58; in#2=all shape 40000 pass
Feb  7 18&#58;31&#58;24 access3 mpd&#58; &#91;pp9&#93; RADIUS&#58; RadiusGetParams&#58; RAD_MPD_LIMIT&#58; in#1=flt1 pass
Feb  7 18&#58;31&#58;24 access3 mpd&#58; &#91;pp9&#93; RADIUS&#58; RadiusGetParams&#58; RAD_MPD_LIMIT&#58; out#1=flt2 pass
Feb  7 18&#58;31&#58;24 access3 mpd&#58; &#91;pp9&#93; RADIUS&#58; RadiusGetParams&#58; RAD_MPD_FILTER&#58; 1#1=match dst net 10.0.0.0/8
Feb  7 18&#58;31&#58;24 access3 mpd&#58; &#91;pp9&#93; RADIUS&#58; RadiusGetParams&#58; RAD_MPD_FILTER&#58; 2#1=match src net 10.0.0.0/8
Feb  7 18&#58;31&#58;24 access3 mpd&#58; &#91;pp9&#93; RADIUS&#58; RadiusGetParams&#58; RAD_MPD_FILTER&#58; 1#2=match dst net 192.168.0.0/16
Feb  7 18&#58;31&#58;24 access3 mpd&#58; &#91;pp9&#93; RADIUS&#58; RadiusGetParams&#58; RAD_MPD_FILTER&#58; 2#2=match src net 192.168.0.0/16
Feb  7 18&#58;31&#58;24 access3 mpd&#58; &#91;pp9&#93; RADIUS&#58; RadiusGetParams&#58; RAD_MPD_FILTER&#58; 1#3=match dst net 172.16.0.0/12
Feb  7 18&#58;31&#58;24 access3 mpd&#58; &#91;pp9&#93; RADIUS&#58; RadiusGetParams&#58; RAD_MPD_FILTER&#58; 2#3=match src net 172.16.0.0/12
Сенькс этой ветке,
этой: http://forum.nag.ru/forum/index.php?showtopic=41232
и вот этой: http://www.chris.ru/speak/index.php?showtopic=721

PS: Пламенный привет хотлайну, который на вопрос "как получить читаемый текст аттрибутов радиуса из того что хранится в базе (вида "6f757423323d616c6c20736861706520343030303020706173..."), ответил:
К сожалению, в рамках услуги "техническая поддержка" консультации по структуре базы данных UTM5 не оказываются.

Blackmore
Сообщения: 365
Зарегистрирован: Вс фев 06, 2005 09:24
Откуда: подмосковье

Сообщение Blackmore »

atdp03 респект - весьма доходчиво - у мну к сожалению до FreeRadius по этим вопросам руки не дошли

sedd
Сообщения: 5
Зарегистрирован: Пт ноя 30, 2007 16:16

Сообщение sedd »

для pptp - shape должно работать ?
у меня в логах mpd выплевывает
Feb 15 16:17:27 vpn2 mpd: [pptp0] IFACE: unknown action: 'shape'
Feb 15 16:17:27 vpn2 mpd: [pptp0] IFACE: unknown action: 'shape'
линк устанавливается, пакеты не бегают даже до VPN интерфейса сервера. В чем могут быть грабли ?
mpd 4.4, freebsd 6.2

Закрыто