cisco + rate limit
cisco + rate limit
Добрый день, уважаемые !
Ситуация такая. Реализую безлимит через пппое, с ограничением полосы через радиус-атрибуты. Строку 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 по дефолту не передается при указанном ограничении скорости.
Если кто реализовал такое - поделитесь пожалста.
Ситуация такая. Реализую безлимит через пппое, с ограничением полосы через радиус-атрибуты. Строку 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 по дефолту не передается при указанном ограничении скорости.
Если кто реализовал такое - поделитесь пожалста.
-
- Site Admin
- Сообщения: 5749
- Зарегистрирован: Пт янв 28, 2005 3:11 pm
- Контактная информация:
нет, не помогает 
при прописывании пар от радиуса возвращается только
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"
, при передаче в тарифном плане - тишина...
Подскажите плиз, где можно прописать отладочный вывод в файл тех пар, которые уже будут вылетать на радиус ?

при прописывании пар от радиуса возвращается только
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"
, при передаче в тарифном плане - тишина...
Подскажите плиз, где можно прописать отладочный вывод в файл тех пар, которые уже будут вылетать на радиус ?
-
- Site Admin
- Сообщения: 5749
- Зарегистрирован: Пт янв 28, 2005 3:11 pm
- Контактная информация:
в тарифном плане добавляю -
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 сьедается правая часть строки после знака =,
и радиус получает атрибуты не как список значений, а как просто строку (остаются открытые кавычки).
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 сьедается правая часть строки после знака =,
и радиус получает атрибуты не как список значений, а как просто строку (остаются открытые кавычки).
-
- Site Admin
- Сообщения: 5749
- Зарегистрирован: Пт янв 28, 2005 3:11 pm
- Контактная информация:
Провел некоторые изыскания 
Добавляю строку 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 - эффект тот же

Добавляю строку 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 - эффект тот же

Добрый день !
Добился того, чтобы возвращалась 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
Добился того, чтобы возвращалась 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
-
- Сообщения: 95
- Зарегистрирован: Сб июн 24, 2006 5:38 pm
-
- Site Admin
- Сообщения: 5749
- Зарегистрирован: Пт янв 28, 2005 3:11 pm
- Контактная информация:
да не вопрос. В общем, мне нужно было реализовать передачу пар из тарифного плана. В частности - анлим, порезанный по скоростям.
для этого я в радиус-параметры тарифного плана вставлял строки типа 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';
}
Теперь все корректно передается радиусу. Может и не эстетично, но работает !
для этого я в радиус-параметры тарифного плана вставлял строки типа 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';
}
Теперь все корректно передается радиусу. Может и не эстетично, но работает !
-
- Site Admin
- Сообщения: 5749
- Зарегистрирован: Пт янв 28, 2005 3:11 pm
- Контактная информация: