cisco + rate limit

Ответить
scorpio
Сообщения: 17
Зарегистрирован: Чт окт 18, 2007 9:22 am
Откуда: Magnitogorsk

cisco + rate limit

Сообщение scorpio »

Добрый день, уважаемые !

Ситуация такая. Реализую безлимит через пппое, с ограничением полосы через радиус-атрибуты. Строку cisco-avpair+="lcp:interface-config#1=rate-limit output 64000 8000 8000 conform-action transmit exceed-action drop" передаю через Radius Parameters в тарифном плане. Вот тут и начинается самое интересное.

ДО внесения изменений при авторизации радиус получает такой ответ:
Packet-Type = Access-Accept
Thu Oct 18 13:34:47 2007
Session-Timeout = 1164313
Framed-IP-Address = 195.хх.хх.хх
Framed-IP-Netmask = 255.255.255.255

ПОСЛЕ добавления строки получает или такое:

Packet-Type = Access-Accept
Thu Oct 18 12:10:57 2007
Session-Timeout = 1169343
Cisco-AVPair = "lcp:interface-config#1, Framed-IP-Address = 195.xx.xx.xx, Framed-IP-Netm
ask = 255.255.255.255, "

или такое:
Packet-Type = Access-Accept
Thu Oct 18 12:20:12 2007

в зависимости от добавления\убавления кавычек.

Соответственно, авторизация не проходит.
Посмотрел в rauth.pl на предмет парсинга, строка с += разбирается корректно. Делаю робкое предположение, что когда все переменные складываются в %RAD_REPLY - тут и происходит мешанина.
В скрипте я нашел закомменченную строку с $RAD_REPLY{'cisco-avpair'}=... и поставил туда свое значение - все передалось корректно.

Внимание - вопрос:
Надо как-то правильно это дело прописать, всмысле я что-то не так пишу ? Или встроенными средствами можно это сделать ? По крайней мере rate limit по дефолту не передается при указанном ограничении скорости.

Если кто реализовал такое - поделитесь пожалста.

~AsmodeuS~
Site Admin
Сообщения: 5749
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Сообщение ~AsmodeuS~ »

cisco-avpair+= "shell:priv-lvl=15",
cisco-avpair+= "ssid=wifi1",
cisco-avpair+= "ssid=wifi2",
cisco-avpair+= "ssid=wifi3"

scorpio
Сообщения: 17
Зарегистрирован: Чт окт 18, 2007 9:22 am
Откуда: Magnitogorsk

Сообщение scorpio »

нет, не помогает :(

при прописывании пар от радиуса возвращается только

Packet-Type = Access-Accept
Fri Oct 19 13:15:04 2007

Packet-Type = Access-Accept
Fri Oct 19 13:15:07 2007

и все

версия abills 0.36b, cisco 7301, тип NAS - cisco

PS:
обновил до версии 0.37b - эффект тот же. если заталкиваю строку cisco-avpair+="lcp:interface-config#1=rate-limit output 64000 8000 8000 conform-action transmit exceed-action drop" в Radius Parameters -

rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=78, length=60
Session-Timeout = 1074303
Cisco-AVPair = "lcp:interface-config"

, при передаче в тарифном плане - тишина...

Подскажите плиз, где можно прописать отладочный вывод в файл тех пар, которые уже будут вылетать на радиус ?

~AsmodeuS~
Site Admin
Сообщения: 5749
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Сообщение ~AsmodeuS~ »

в конфиге включить дебаг мод

или сморекть радиус radiusd -x

scorpio
Сообщения: 17
Зарегистрирован: Чт окт 18, 2007 9:22 am
Откуда: Magnitogorsk

Сообщение scorpio »

в тарифном плане добавляю -
Cisco-Avpair += "lcp:interface-config=ip vrf forwarding Internet"

в отладке радиуса:
...
rad_check_password: Found Auth-Type Accept
rad_check_password: Auth-Type = Accept, accepting the user
radius_xlat: '/usr/abills/libexec/rauth.pl'
Exec-Program: /usr/abills/libexec/rauth.pl
Exec-Program output: Session-Timeout = 830534, Framed-IP-Address = 195.xx.xx.xx, Framed-IP-Netmask = 255.255.255.255, Cisco-Avpair + = "lcp:interface-config,
Exec-Program-Wait: plaintext: Session-Timeout = 830534, Framed-IP-Address = 195.xx.xx.xx, Framed-IP-Netmask = 255.255.255.255, Cisco-Avpair + = "lcp:interface-config,
Exec-Program: returned: 0
...

Получается, что в строке с AVPair сьедается правая часть строки после знака =,
и радиус получает атрибуты не как список значений, а как просто строку (остаются открытые кавычки).

~AsmodeuS~
Site Admin
Сообщения: 5749
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Сообщение ~AsmodeuS~ »

наверное както не тк вы пары завели в биллинге

scorpio
Сообщения: 17
Зарегистрирован: Чт окт 18, 2007 9:22 am
Откуда: Magnitogorsk

Сообщение scorpio »

Провел некоторые изыскания :)

Добавляю строку Cisco-Avpair += "lcp:interface-config=ip vrf forwarding Internet", в RADIUS Параметры NAS, прямо в таком виде как тут. В радиусе на выходе получаю:

rad_check_password: Found Auth-Type Accept
rad_check_password: Auth-Type = Accept, accepting the user
radius_xlat: '/usr/abills/libexec/rauth.pl'
Exec-Program: /usr/abills/libexec/rauth.pl
Exec-Program output: Session-Timeout = 786812, Cisco-Avpair = lcp:interface-config=ip vrf forwarding Internet, Framed-IP-Address = 195.xx.xx.xx, Framed-IP-Netmask = 255.255.255.255,
Exec-Program-Wait: plaintext: Session-Timeout = 786812, Cisco-Avpair = lcp:interface-config=ip vrf forwarding Internet, Framed-IP-Address = 195.xx.xx.xx, Framed-IP-Netmask = 255.255.255.255,
Exec-Program: returned: 0


Соответственно, радиус это не принимает, т.к. атрибуты вернулись как plaintext. Кроме того - у Cisco-Avpair сьелся знак + и кавычки.
Удаляем добавленную строку, добавляем ее в описание тарифного плана. В отладке имеем:

rad_check_password: Found Auth-Type Accept
rad_check_password: Auth-Type = Accept, accepting the user
radius_xlat: '/usr/abills/libexec/rauth.pl'
Exec-Program: /usr/abills/libexec/rauth.pl
Exec-Program output: Session-Timeout = 786474, Framed-IP-Address = 195.xx.xx.xx, Framed-IP-Netmask = 255.255.255.255, Cisco-Avpair + = "lcp:interface-config,
Exec-Program-Wait: plaintext: Session-Timeout = 786474, Framed-IP-Address = 195.xx.xx.xx, Framed-IP-Netmask = 255.255.255.255, Cisco-Avpair + = "lcp:interface-config,
Exec-Program: returned: 0


Вернулся тот же plaintext, только в cisco-avpair появился пробел между + и =, и отрезалась строка после второго знака =, вместе с ним.

Пробовал изменить тип NAS - эффект тот же :(

scorpio
Сообщения: 17
Зарегистрирован: Чт окт 18, 2007 9:22 am
Откуда: Magnitogorsk

Сообщение scorpio »

Добрый день !

Добился того, чтобы возвращалась AV-пара, прописанная в NAS-сервере. Подскажите пожалуйста, куда копать, в каком модуле посмотреть, чтобы такая же пара нормально возвращалась из радиус-параметров тарифного плана ? Сейчас пока возвращается рваная строка, опять же появился пробел между + и =:

radius_xlat: '/usr/abills/libexec/rauth.pl'
Exec-Program: /usr/abills/libexec/rauth.pl
Exec-Program output: Session-Timeout = 747170, Framed-IP-Address = 195.xx.xx.xx, Framed-IP-Netmask = 255.255.255.255, Cisco-Avpair + = "lcp:interface-config,
Exec-Program-Wait: plaintext: Session-Timeout = 747170, Framed-IP-Address = 195.xx.xx.xx, Framed-IP-Netmask = 255.255.255.255, Cisco-Avpair + = "lcp:interface-config,
Exec-Program: returned: 0

scorpio
Сообщения: 17
Зарегистрирован: Чт окт 18, 2007 9:22 am
Откуда: Magnitogorsk

Сообщение scorpio »

Все, победил. Пришлось передавать av-пары в сыром виде, без препарсинга. Тогда все нормально работает

realmarkiz
Сообщения: 95
Зарегистрирован: Сб июн 24, 2006 5:38 pm

Сообщение realmarkiz »

scorpio писал(а):Все, победил. Пришлось передавать av-пары в сыром виде, без препарсинга. Тогда все нормально работает

А можно поподробнее как и что прописать для ограничения полосы на cisco?

~AsmodeuS~
Site Admin
Сообщения: 5749
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Сообщение ~AsmodeuS~ »

Уже поправили передачу пар.

Можно о Вашем решении поподробней

scorpio
Сообщения: 17
Зарегистрирован: Чт окт 18, 2007 9:22 am
Откуда: Magnitogorsk

Сообщение scorpio »

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

для этого я в радиус-параметры тарифного плана вставлял строки типа Cisco-AVpair+="lcp:interface-config#2=rate-limit input 64000 8000 8000 conform-action transmit exceed-action drop",Cisco-AVpair+="lcp:interface-config#1=rate-limit output 64000 8000 8000 conform-action transmit exceed-action drop",

про свои злоключения я писал выше. Поборол следующим образом:

/usr/abills/Abills/mysql/Auth.pm:
#TP_RAD_PAIRS

if ($self->{TP_RAD_PAIRS}) {
my @p = split(/,/, $self->{TP_RAD_PAIRS});
foreach my $line (@p) {
my ($rk, $lk)=split(/\+\=/, $line);
#$RAD_PAIRS->{$rk}="$lk";
print $rk."+=",$lk.",";

}
}

то есть выдумывать ничего не стал :)

Для обработки ав-пар из настроек наса:
/usr/abills/libexec/rauth.pl

#GEt Nas rad pairs
$nas->{NAS_RAD_PAIRS} =~ tr/\n\r//d;

my @pairs_arr = split(/,/, $nas->{NAS_RAD_PAIRS});
foreach my $line (@pairs_arr) {
# if ($line =~ /\+\=/ ) {
# my($left, $right)=split(/\+\=/, $line, 2);
# $right =~ s/"//g;

# if (defined($RAD_REPLY{"$left"})) {
# $RAD_REPLY{"$left"} =~ s/\"//g;
# $RAD_REPLY{"$left"}="\"". $RAD_REPLY{"$left"} .",$right\"";
# }
# else {
# $RAD_REPLY{"$left"}="$right";
# }
# }
# else {
# my($left, $right)=split(/=/, $line, 2);
# if ($left =~ s/^!//) {
# delete $RAD_REPLY{"$left"};
# }
# else {
# $RAD_REPLY{"$left"}="$right";
# }
# }
print $line.",";

$RAD_CHECK{'Auth-Type'} = 'Accept';
}

Теперь все корректно передается радиусу. Может и не эстетично, но работает !

~AsmodeuS~
Site Admin
Сообщения: 5749
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Сообщение ~AsmodeuS~ »

Я внёс изминения соответсвенно с Вашими пожеланиями

не погли бы Вы проверить

scorpio
Сообщения: 17
Зарегистрирован: Чт окт 18, 2007 9:22 am
Откуда: Magnitogorsk

Сообщение scorpio »

Добрый день !

Да, теперь пары возвращаются корректно, спасибо !

Ответить