пятница, декабря 04, 2009

Radius attribute rewrite

Столкнулся с проблемой, что при pppoe подключении не передается параметр Calling-station-ID, с мак адресом клиента. Нашлось удовлетворительное решение.

Как оказалось, в некоторых (?) версиях IOS, некоторые radius атрибуты железо от cisco пересылает несколько по другому, чем обычно.

В данном случае, речь о Radius атрибуте - Calling-station-ID, который передается от NAS к серверу AAA (тут - radius), при PPPoE подключении.
Так, вот, при подключении клиента, к NAS, посылается запрос на аутентификацию к radius серверу и в этом запросе, присутствует атрибут Calling-station-ID, в котором передается адрес клиента (mac адрес, при использовании pppoe).

Однако, есть софт, в котором этот атрибут не передается.
Только после аутентификации, в запросе на старт accounting, в поле vendor-specific attribute, на radius, передается параметр,

Cisco-AVPair = "client-mac-address=00a0.a000.1234"

Соответственно, при отключении клиента, передается запрос, на остановку accounting и параметр

Cisco-AVPair = "client-mac-address=00a0.a000.1234".

Существует проблема с некоторыми биллинговыми системами и их тех.поддержкой, например NetUP (а когда-то версия на perl, так замечательно распаковывалась).
NetUP, не умеет (а может умеет, но сапорт об этом не знает), вытаскивать информацию из vendor-specific attribute.
Судя по примерам конфигураций для NetUP radius cервера, они использовали, что-то стандартное (может и FreeRadius, возможно с переделками).
FreeRadius, также, как и многие другие radius сервера, умеет создавать/изменять атрибуты на лету, в том числе при акаунтинге.

Уметь-то, умеют, а как сделать? Потратив кучу времени на man, чтение документации на сайтах, замучив google и yandex, нашел только одно, реально полезное описание.

Так, как многие системы не поддаются изменению, либо поддаются, но для изменений нужно много сил, времени, тестирования и т.д., проще привести radius информацию к нужному виду, а именно, вытащить из vendor-specific attribute, так нужный mac адрес.

В radius.conf вписываем функцию

attr_rewrite macaddr {
attribute = Calling-Station-Id
searchfor = "[+ ]"
replacewith = "%{client-mac-address}"
new_attribute = yes
}


В разделе конфига preacct (вызывается перед accounting), указываем preprocess, в секции preprocess пишем macaddr, хотя можно попробовать, вписать сразу в preacct.
В словарь вписываем, нечто вроде
ATTRIBUTE client-mac-address 171 string
В итоге получаем:

Cisco-AVPair = "client-mac-address=00a0.a000.1234"
client-mac-address = "00a0.a000.1234"


Описание тут:
http://nixx.kursk.ru/conf/cisfreerad.html

Комментариев нет: