Jump to content
Калькуляторы

ISG в Linux

Кому-нибудь интересен сабж?

 

Что реализовано: TAL (Transparent auto-login с автостартом/стопом сессии) - аналог "ip subscriber routed", traffic policing, интерфейс - RADIUS (Cisco AV-Pair правда не эмулировал)... О туннелях (PPPoE, PPTP, L2TP) речи не идет. Делалось для классического IPoE. Работает в production - в онлайне до 4k сессий, трафик ~120 pps.

Если кому интересно, спрашивайте, что нужно (нужно - именно на практике, то есть обязательно, потому что все не реализуешь). Если все будет хорошо, можно будет привести в порядок, доделать фичи и выложить как open source. :)

 

UPD: http://bitbucket.org/sysoleg/lisg/

Edited by Умник

Share this post


Link to post
Share on other sites

Можно подробнее ? как дела с аккаунтингом ? реализовано на ядерном уровне или в юзер-спейсе ?

Share this post


Link to post
Share on other sites
zander, RADIUS-аккаунтинг есть конечно же. Подсчет трафика и полисинг выполняется в ядре, все остальные функции (взаимодействие с RADIUS-сервером) - в юзерспейсе (демон на Perl).
Edited by Умник

Share this post


Link to post
Share on other sites

Сабж весьма интересен!

Подсчет трафика в ядре чем реализован? Полисинг или шейп? Для управления qidsc'ами демон использует tc или через netlink/libnl? Как осуществляется снупинг трафика для старта сессии?

 

UPD старт по DHCPDISCOVER/DHCPREQUEST ?

Edited by DemYaN

Share this post


Link to post
Share on other sites

Изменение параметров сессии на лету через CoA?

Share this post


Link to post
Share on other sites
Подсчет трафика в ядре чем реализован? Полисинг или шейп? Для управления qidsc'ами демон использует tc или через netlink/libnl?

Подсчет трафика и полисинг в целях оптимизации реализован средствами модуля ядра. Поэтому qdisc и tc не используется. Полисинг сделан в соответствии с RFC 2697 (http://www.faqs.org/rfcs/rfc2697.html). Только цветов не три, а два (красный и зеленый), то есть желтый приравнен к красному (для задач полисинга трафика обычных юзеров три цвета не требуется).

 

Как осуществляется снупинг трафика для старта сессии?

Kernel space реализован средствами модуля Netfilter, старт сессии (то есть отправка запроса на RADIUS) происходит по unclassified source IP-address. Смысл такой:

 

iptables -A FORWARD -s 10.123.0.0/16 -j ISG --session-init "inet"

iptables -A FORWARD -d 10.123.0.0/16 -j ISG

 

Первое правило - для "инициализации" сессий и подсчета/полисинга трафика от юзеров.

Второе правило - для подсчета/полисинга трафка на юзеров.

 

Каждого юзера из 10.123.0.0/16 в iptables добавлять естественно не нужно. Вся "магия" - внутри модуля. :) На RADIUS все уходит в нормальном виде - Packets/Octets In/Out для каждого аутентифицированного юзера.

 

Старт - исключительно по unclassified source IP, потому что подразумевалось, что пользователь не подключен напрямую к BRAS, и BRAS не выступает в качестве DHCP-релея для юзера. Впрочем, если это необходимо, можно подумать как реализовать. Для этого я и создал тему. :)

 

Изменение параметров сессии на лету через CoA?
Изменение параметров сессии налету возможно, а вот CoA-интерфейса нет.

 

Какие функции CoA обычно юзаются провайдерами?

Share this post


Link to post
Share on other sites

CoA для изменения профиля на лету (включение "турбо", смена тарифа и т.д.)

Каким устанавливается время жизни сессии? при отсутствии пакетов во стороны source IP абонента.

 

Вообще тема интересная, наверное уже можна начинать с примеров, совместно будет допиливать.

Share this post


Link to post
Share on other sites

управление модулем я так понимаю осуществляется через sysctrl? а связь с RADIUS через perl конструкцию?

Share this post


Link to post
Share on other sites

Так же наверное многим было бы интересно классификации трафика по разным зонам (направление и/или протокол), причем в зависимости от source ip.

 

Например "местный" трафик идет на 100Мбит, внешний на 10Мбит, для абонента с source IP = 1.1.1.2

и

для source IP 1.1.1.3 "местный" на 50Мбит и внешний на 3Мбит.

 

Share this post


Link to post
Share on other sites

Интересная тема

1. ip portbundle L4redirect

2. Cisco AV-Pair для совместимости isg-radius-billing

3. препейд есть ?

4. vrf

vrf red - > nat

vrf green - > Inet

 

Share this post


Link to post
Share on other sites

4. vrf

в linux нет стандартных средств для полноценного vrf, а linux-vrf заглох

Edited by DemYaN

Share this post


Link to post
Share on other sites
Каким устанавливается время жизни сессии?
Это настраивается. Если от src IP определенное количество секунд не было трафика, то сессия STOP-ится. Также есть возможность виртуально рестартить сессию каждые N секунд (например, раз в сутки), чтобы в биллинге не было длинных (неделя, месяц) сессий.

 

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

 

управление модулем я так понимаю осуществляется через sysctrl? а связь с RADIUS через perl конструкцию?
Демон, написанный на Perl, управляет модулем через Netlink (но это уже особенности реализации - не суть важно), а также взаимодействует с RADIUS-сервером для аутентификации и аккаунтинга пользователей.

 

Так же наверное многим было бы интересно классификации трафика по разным зонам (направление и/или протокол)
Нужно разобраться как это сделано в Cisco ISG. :)

 

ip portbundle L4redirect
L4redirect сделать несложно, он определенно будет. Может быть не в начальном alpha-релизе, но будет.

 

Cisco AV-Pair для совместимости isg-radius-billing
Имеет смысл реализовать наиболее часто использумеые провайдерами фишки ISG. В этой теме пытаюсь выяснить, что это за фишки.

 

препейд есть ?
Это фиксированные лимиты трафика, после которых услуга отключается? Нет, сейчас нет. Если многим нужно - можно и это сделать.
Edited by Умник

Share this post


Link to post
Share on other sites

ну собственно нужно:

- поддержка Cisco AV-pair для совместимости

- классификация трафика по зонам (примеры можно найти тут http://wiki.sirmax.noname.com.ua/)

- препейд трафик

- L4 redirect конечно же

- Изменение профайла сессии "на лету"

ждем первых опытных образцов =)

Edited by shicoy

Share this post


Link to post
Share on other sites

Так же интересно что происходит с не авторизованными абонентами?

Вообще в идеале хотелось бы видеть такую схему:

 

Если авторизован нормально, то пускаем в сеть и т.д.

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

Если авторизован с пометкой "плохой", то заворачиваем куда-то (например на страничку предупреждения об вирусах)

Если неавторизован, то заворачиваем куда-то (например на страничку с предупреждением)

и т.д.

Share this post


Link to post
Share on other sites
Если авторизован с пометкой "плохой", то заворачиваем куда-то

А что в данном случае является "пометкой"?

Share this post


Link to post
Share on other sites

Radius AVPair, что-то вроде

 

ip:traffic-class=input access-group name REDIRECT_PORTAL

ip:traffic-class=output access-group name REDIRECT_PORTAL

 

т.е. ISG получив такую AVPair на сессию будет заворачивать трафик этой сессии на портал.

 

В презентации есть примеры:

http://www.ciscoexpo.ru/moscow/2008/downlo...SG_segusaro.pdf

 

Более точно наверное смогу сказать цисководы.

 

А основанием для выдачи пометки будет служить ответ биллинга через RADIUS в выдачей нужной AVPair

Но это уже частности, главно имху реализовать через AVPair редирект трафика в нужном направлении.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
alks, где можно посмотреть на открытую реализацию хорошего (или хотя бы какого) "isg-radius-billing"?

Share this post


Link to post
Share on other sites

Как посмотреть какие сессии уже авторизованны и какие параметры им назначены (скорость)?

Share this post


Link to post
Share on other sites

Используйте ISG.pl. При запуске без параметров покажет все approved сессии.

show_all - покажет все сессии (вместе со счетчиками), включая unapproved (session_id = 0000000000000000)

show_count - покажет текущее количество сессий

clear - принудительное завершение сессии для пользователя на порту Async#

change_rate - сменить rate на порту Async# без разрыва сессии

 

Share this post


Link to post
Share on other sites
alks, где можно посмотреть на открытую реализацию хорошего (или хотя бы какого) "isg-radius-billing"?

Открытых реализаций к сожалению не знаю - я использую АСР Билмастер с модулем под ISG

если память не изменяет, инлайн кажется использует переписанный free-radius

общая структура системы такова что на самом isg шлюзе есть только "машина состояний" policy-map type control

описывающая классы событий типа

event session-start

event service-start

event service-stop

event account-logon

и т.д.

----

ACL для трафик-классов типа

ip access-list extended ACL-Passthru-In

permit ip any any

ip access-list extended ACL-Passthru-Out

permit ip any any

----

и subscriber feature prepaid name - описывает параметры препейда по квотам на трафик/время

----

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

к примеру

основная услуга клиента

Service-Type Framed-User

Cisco-Account-Info AFreeResource

Cisco-Account-Info A2mb -- дочерний профиль с учетом трафика и скоростью 2мбит/c

Cisco-Account-Info GServiceGroup1

-----

дочерний профиль 2mb

N 1440 Service-Type Outbound-User

N 1441 Cisco-AVPair prepaid-config=default

N 1445 Cisco-Service-Info TP

N 1446 Cisco-Service-Info MS

N 1447 Cisco-Service-Info QU;2048000;256000;288000;D;2048000;256000;288000

N 1922 Cisco-Service-Info IInternet 2mb/s

N 2353 Cisco-AVPair ip:traffic-class=in access-group name ACL-Passthru-In priority 100

N 2354 Cisco-AVPair ip:traffic-class=out access-group name ACL-Passthru-Out priority 100

---

по portbundle подробно рассказать?

 

P.S. в последних версиях isg появился новый event для control-policy

event access-reject - получаем reject от радиуса и можем, к примеру, сделать L4 редирект клиента на страничку "дай бабла"

class type control always event session-reject

10 service-policy type service name Bl_Access

 

Edited by alks

Share this post


Link to post
Share on other sites

alks, спасибо за подробное описание проприетарных особенностей Cisco. Возьму на заметку.

 

dolphinik, PoD - это суть одно из сообщений CoA (то есть CoA включает PoD). Планирую заняться CoA в lISG ближе к концу этой недели. Скорее всего в последних числах декабря сделаю релиз.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now