NetUP Freeradius 2 Cisco-avpair rate-limit (Решение)

Технические вопросы по UTM 5.0
Ответить
solomon
Сообщения: 316
Зарегистрирован: Вт мар 16, 2010 08:39

NetUP Freeradius 2 Cisco-avpair rate-limit (Решение)

Сообщение solomon »

Здравствуйте? подскажите как настроить отправку rate-limit на cisco использую Freeradius2 данные выцепляю запросом

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

SELECT '','test','Framed-IP-Address',inet_ntoa( ip_groups.ip & 0xffffffff ) AS ip,'=' FROM UTM5007.ip_groups WHERE uname ='test' AND is_deleted = '0' AND inet_ntoa( ip_groups.ip & 0xffffffff ) LIKE '93.215.%'  UNION SELECT '', 'test', 'Framed-Pool', 'mainpool', '=' FROM ip_groups WHERE uname ='test' AND inet_ntoa( ip_groups.ip & 0xffffffff ) NOT LIKE '93.215.%' UNION select '', 'test', 'Cisco-Rate-Limit', radius_data.value, '=' FROM radius_data   WHERE radius_data.owner_id=( select sl.service_id FROM ip_groups ig, iptraffic_service_links isl, service_links sl where ig.uname='test' 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 radius_data.vendor=9
Собственно результат запроса

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

+--+------+-------------------+--------------------------------------------------------------------------------------------------------+---+
|  | test | Framed-IP-Address | Value                                                                                                  | = |
+--+------+-------------------+--------------------------------------------------------------------------------------------------------+---+
|  | test | Framed-Pool       | mainpool                                                                                               | = |
|  | test | Cisco-Rate-Limit  | lcp:interface-config#1=rate-limit output 256000 32000 32000 conform-action transmit exceed-action drop | = |
|  | test | Cisco-Rate-Limit  | lcp:interface-config#1=rate-limit input 256000 32000 32000 conform-action transmit exceed-action drop  | = |
+--+------+-------------------+--------------------------------------------------------------------------------------------------------+---+
Последний раз редактировалось solomon Сб июл 21, 2012 10:37, всего редактировалось 1 раз.

olegnv
Сообщения: 53
Зарегистрирован: Чт сен 08, 2011 07:48

Re: HELP Freeradius 2 Cisco отправка avpair

Сообщение olegnv »

solomon писал(а):Здравствуйте? подскажите как настроить отправку rate-limit на cisco использую Freeradius2
На Cisco используете ISG?

solomon
Сообщения: 316
Зарегистрирован: Вт мар 16, 2010 08:39

Сообщение solomon »

нет не используем

solomon
Сообщения: 316
Зарегистрирован: Вт мар 16, 2010 08:39

Сообщение solomon »

собственно как подсунуть передачу параметров в пакет Access-Accept
я в таблицу radgroupreply вносил данные для тестирования - они прицепились.
понял что необходимо в запрос подсунуть данные и видимо копать нужно в dialup.conf - правильно ли я думаю?

solomon
Сообщения: 316
Зарегистрирован: Вт мар 16, 2010 08:39

Сообщение solomon »

за выдачу отвечает получается этот запрос authorize_group_reply_query,
поскольку если прописать в radgroupreply парметры ограничения скорости он передает их в пакет, если я их удаляю оттуда передачи параметров не происходит... ладно думаю дальше...
Сделал вирутальную таблицу запросом

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

 authorize_group_reply_query = "SELECT id, groupname, attribute, \
          value, op \
          FROM ${groupreply_table} \
          WHERE groupname = '%{Sql-Group}' \
#          ORDER BY id \
          UNION select '', '%{SQL-Group}', 'Cisco-AVPair', radius_data.value, '=' \
#          UNION select id, '%{SQL-User-Name}', 'Cisco-Rate-Limit', radius_data.value, '=' \
             FROM radius_data \
             WHERE radius_data.owner_id=( select sl.service_id FROM ip_groups ig, iptraffic_service_links isl, service_links sl \
             where ig.uname='%{SQL-User-Name}' 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 radius_data.vendor=9"
но все равно не передает параметры ограничения скорости...
У кого нить есть оптимальное решение данной проблемы?

solomon
Сообщения: 316
Зарегистрирован: Вт мар 16, 2010 08:39

Сообщение solomon »

опыт продолжается

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

INSERT INTO radgroupreply (id,groupname,attribute,value,op) VALUES ('5','Dynamic_Test_Freeradius','Cisco-AVPair','interface-config#1=rate-limit input 256000 32000 32000 conform-action transmit exceed-action drop \nrate-limit output 256000 32000 32000 conform-action transmit exceed-action drop',':=');

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

Sending Access-Accept of id 93 to 172.16.2.40 port 1645
        Framed-Pool = "dialup_pool"
        Cisco-AVPair := "interface-config#1=rate-limit input 256000 32000 32000 conform-action transmit exceed-action drop \nrate-limit output 256000 32000 32000 conform-action transmit exceed-action drop"
        MS-CHAP2-Success = 0x01533d30333830463130333534434239443346373045333432303838383444363536463936423831373138
        Framed-IP-Address = 95.y.x.26
        Framed-IP-Netmask = 255.255.255.240
С этим видом строки прошла регистрация пользователя, циско приняла данные

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

Jul 20 16:29:40 172.16.2.40 952: *Mar  5 07:02:38.168: Vi3 AAA/AUTHOR/LCP: Process Attr: interface-config
Jul 20 16:29:40 172.16.2.40 953: *Mar  5 07:02:38.176: Vi3 AAA/AUTHOR/LCP: IF_config:
Jul 20 16:29:40 172.16.2.40 954: rate-limit input 256000 32000 32000 conform-action transmit exceed-action drop 
Jul 20 16:29:40 172.16.2.40 955: rate-limit output 256000 32000 32000 conform-action transmit exceed-action drop
Jul 20 16:29:40 172.16.2.40 956: 

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

Virtual-Access3 
  Input
    matches: all traffic
      params:  256000 bps, 32000 limit, 32000 extended limit
      conformed 22 packets, 3104 bytes; action: transmit
      exceeded 0 packets, 0 bytes; action: drop
      last packet: 18780ms ago, current burst: 0 bytes
      last cleared 00:00:32 ago, conformed 0 bps, exceeded 0 bps
  Output
    matches: all traffic
      params:  256000 bps, 32000 limit, 32000 extended limit
      conformed 3 packets, 652 bytes; action: transmit
      exceeded 0 packets, 0 bytes; action: drop
      last packet: 4488ms ago, current burst: 0 bytes
      last cleared 00:00:32 ago, conformed 0 bps, exceeded 0 bps

solomon
Сообщения: 316
Зарегистрирован: Вт мар 16, 2010 08:39

Сообщение solomon »

Получилось подключиться тестовым пользователем с динамическим адресом из пула Freeradius', удалось добиться отправки cisco-avpair на маршрутизатор cisco.
Проверил скрорость в интернете на internet.yandex.ru, она соответсвует заявленой скорости ТП 256Кбит.
Мои действия:
1 - в файле sql.conf прописал таблицу radius_data(таблица биллинга UTM) вместо radgroupreply (таблица Freeradius'a)
# groupreply_table = "radgroupreply"
groupreply_table = "radius_data"
2 - в dialup.conf изменил запрос authorize_group_reply_query

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

authorize_group_reply_query = "SELECT id, '%{SQL-Group}', 'Cisco-AVPair', radius_data.value, '=' \
FROM radius_data \
WHERE radius_data.owner_id=( select sl.service_id FROM ip_groups ig, iptraffic_service_links isl, service_links sl \
where ig.uname='%{SQL-User-Name}' 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 radius_data.vendor=9"
3 - Поскольку не нашел метод отправки 2х параметров ограничения скорости на cisco input & output, объеденил 2 параметра в одну строку с обязательным разделением переноса строки в виде каретки \n
Параметр назначается в Тарифном плане, в Фиктивной услуге Передача-IP трафика.
ID вендора=9 ID аттрибута=1
Вид строки -

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

interface-config#1=rate-limit input 256000 32000 32000 conform-action transmit exceed-action drop \nrate-limit output 256000 32000 32000 conform-action transmit exceed-action drop
Обратил внимание что после сохранения строки с кареткой переноса строки, при следующем открытии она пропадает (\n), но при неоднокраной проверке ограничение скорости все равно выставляется что свидетельствует данные с cisco

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

[root@solomon ~]# rsh -l root 172.16.2.40 show int rate-limit
connect to address 172.16.2.40 port 544: Connection refused
Trying krb4 rsh...
connect to address 172.16.2.40 port 544: Connection refused
trying normal rsh (/usr/bin/rsh)

Virtual-Access3 
Input
matches: all traffic
params: 256000 bps, 32000 limit, 32000 extended limit
conformed 21 packets, 2894 bytes; action: transmit
exceeded 0 packets, 0 bytes; action: drop
last packet: 544ms ago, current burst: 0 bytes
last cleared 00:00:12 ago, conformed 1000 bps, exceeded 0 bps
Output
matches: all traffic
params: 256000 bps, 32000 limit, 32000 extended limit
conformed 0 packets, 0 bytes; action: transmit
exceeded 0 packets, 0 bytes; action: drop
last packet: 445592252ms ago, current burst: 0 bytes
last cleared 00:00:12 ago, conformed 0 bps, exceeded 0 bps
[root@solomon ~]#


Пробовал прописывать Radius аттрибут с пробелом и двумя тоже, чтобы убедиться в том что при первой записи аттрибута обязательно указывать 'перенос строки' - \n, хоть и в дальнейшем она не отображается.
Это были тесты с динамическим адресом, сейчас приступаю к статическому.
Прописав адрес 95.y.x.29 в ip-группе пользователя, авторизовался удачно ))). Скорость тоже выставилась на cisco.

Осталось протестировать DHCP клиентов, ну и всех их одновременно
ответ | редактировать | удалить21 Июл 12 13:31 от Владимир Соломонов
Изменил скорость в ТП с 256 на 2Мбит
отработало замечательно

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

Sending Access-Accept of id 118 to 172.16.2.40 port 1645
Framed-IP-Address = 95.y.x.29
Framed-Pool = "dialup_pool"
Cisco-AVPair = "interface-config#1=rate-limit output 2048000 256000 256000 conform-action transmit exceed-action drop \n rate-limit output 2048000 256000 256000 conform-action transmit exceed-action drop"
MS-CHAP2-Success = 0x01533d37313737353243323432453734303231364231383946424639434438464232453837383046353232

solomon
Сообщения: 316
Зарегистрирован: Вт мар 16, 2010 08:39

Сообщение solomon »

Новые траблы выявлены ((((
Касаются они привязки адресов Динамических, поскольку у нас имеется и dhcp клиенты, и dialup клиенты.
С привязкой в dhcp просто - запускается скрипт с параметрами после отправки пакета с джентльменским набором (IP MASK GW DNS и тд.)
Сейчас думаю как привязывать IP в ip_group dialup-клиентам.

solomon
Сообщения: 316
Зарегистрирован: Вт мар 16, 2010 08:39

Сообщение solomon »

Есть проблема при добавлении маршрутов в PC роутер

Есть команда прописанная в скрипте route_add.sh

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

#!/bin/sh
#for remote execute via ssh (public key)
# -i /root/.ssh/id_rsa_router - location_private_key
#172.16.2.8 - ip linux_router
#add route for vlan 1019 (interface eth1.1019) ip 172.18.6.6
echo $1;
echo $2;
ssh -i /root/.ssh/id_rsa_router 172.16.2.8 "vtysh -d zebra -c 'conf t' -c 'ip route $1/32 eth1.$2' -c 'end'"
Я сделал питоновский скрипт для тестов test_.py, прописал туда этот скрипт(route_add.sh) запускаю python test_.py с передачей паремтров IP & vlan
Все проходит замечательно.

Но когда прописываю в dhcp.py - мне выдает ошибку такого плана

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

Thu Aug 16 17:09:13 2012 : radius send acct-start
172.18.6.3
1019
Warning: Identity file /root/.ssh/id_rsa_router not accessible: Permission denied.
Could not create directory '/.ssh'.
The authenticity of host '172.16.2.8 (172.16.2.8)' can't be established.
RSA key fingerprint is d8:f0:6c:49:35:e1:65:bb:c0:ba:09:21:3c:bc:33:11.
Are you sure you want to continue connecting (yes/no)?
Запускается DHCP от рута находится сервер в /opt/staticDHCPd
Сам ключ лежит в катологе рута
Что интересно напрямую когда запускаешь python test_py - отрабатывает а в DHCP нет зотя вызов то идет и параметры передаются

Помогите плиз разобраться... в чем трабла может быть

dk
Сообщения: 424
Зарегистрирован: Чт авг 10, 2006 08:52

Сообщение dk »

solomon писал(а):Запускается DHCP от рута
А вот выполняться вполне может под другим пользователем.

solomon
Сообщения: 316
Зарегистрирован: Вт мар 16, 2010 08:39

Сообщение solomon »

Да вы правы запускаю я под рутом а выполняется по nobody

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

[root@solomon ~]# ps afxu | grep python
root      3414  0.0  0.1  13604  4400 ?        S    16:34   0:00 /usr/bin/python ./hpssd.py
root      4186  0.0  0.3  26100 10380 ?        SN   16:34   0:00 /usr/bin/python -tt /usr/sbin/yum-updatesd
solomon   4322  0.0  0.7  40376 22364 ?        Ss   16:34   0:00 /usr/bin/python -tt /usr/bin/puplet
nobody    4679  0.0  0.2  44164  6296 pts/2    Sl+  16:42   0:00  |                   \_ python main.py
root      4885  0.0  0.0   4044   756 pts/3    S+   16:48   0:00              \_ grep python

solomon
Сообщения: 316
Зарегистрирован: Вт мар 16, 2010 08:39

Сообщение solomon »

Спасибо за подсказку куда копать....
Есть параметры где указываются UID & GID исправил - все заработало!!!

solomon
Сообщения: 316
Зарегистрирован: Вт мар 16, 2010 08:39

Сообщение solomon »

Не передается FramedIPAddress хоят в логах он есть
Есть у кого нить мысли почему?
ЛОГ

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

Sending Access-Accept of id 166 to 127.0.0.1 port 46205
        Framed-Pool = "dialup_pool"
        Framed-IP-Address = 172.18.6.3
        Framed-IP-Netmask = 255.255.255.0
Finished request 1.
Going to the next request
Waking up in 4.9 seconds.
rad_recv: Accounting-Request packet from host 127.0.0.1 port 46205, id=167, length=63
        Acct-Status-Type = Start
        User-Name = "dhcp_user1"
        Acct-Session-Id = "00:11:95:fc:3d:c2"
        NAS-Port = 1019

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

Стартовый пакет 
IP адрес 
1 'dhcp_user1'
PHP Notice:  Undefined offset: 2 in /netup/utm5/urfaphp/add_ip.php on line 3
2 ''
UsName - dhcp_user1
PHP Notice:  Undefined offset: 2 in /netup/utm5/urfaphp/add_ip.php on line 39

Notice: Undefined offset: 2 in /netup/utm5/urfaphp/add_ip.php on line 39
AcIP - ''
UsID - '105'
rad.pl в accountinge

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

if($RAD_REQUEST{'Acct-Status-Type'} eq 'Start' && not($RAD_REQUEST{'Framed-IP-Address'} =~ m/95.215.68.[0-9]+/i) )
        {
                print "Стартовый пакет \n";
                my $fip = $RAD_REQUEST{'Framed-IP-Address'};
                print "IP адрес ".$fip."\n";
                my $uname = $RAD_REQUEST{'SQL-User-Name'};
                my $sessid = $RAD_REQUEST{'Acct-Session-Id'};
#                my $login = $RAD_REQUEST{'User-Name'};

                system("/usr/bin/php -f /netup/utm5/urfaphp/add_ip.php $fip $uname");
add_ip.php uname передается нормально судя по логам

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

<?php
echo "1 '".$argv&#91;1&#93;."'\n"; //Name user
echo "2 '".$argv&#91;2&#93;."'\n"; // IP user
@ini_set&#40;"display_errors", "1"&#41;;
error_reporting&#40;E_ALL&#41;;

require_once&#40;"/netup/utm5/urfaphp/URFAClient.php"&#41;;

Ответить