Freeradius Xlat

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску

FreeRadius Xlat

FreeRadius предоставляет интересные возможности для опереривания с данными. В моем случае мне не хотелось для каждого абонента делать дублирование данных из биллинга ( в моем случае таблица mtraf) в radcheck и radreply.


select * from radcheck;
+----+----------+------------------+----+------------------------------------------------------------+
| id | username | attribute        | op | value                                                      |
+----+----------+------------------+----+------------------------------------------------------------+
|  4 | tan      | Simultaneous-Use | := | 1                                                          |
|  7 | tan      | Password         | := | `%{sql:SELECT pwd FROM mtraf WHERE domain='%{User-Name}'}` |
+----+----------+------------------+----+------------------------------------------------------------+

(обратить внимание на обратные кавычки, в которые взят запрос) Аналогично, для передачи лимитов по скорости (но вместо того что бы указать для каждого %{User-Name} можно указать значения по умолчани.

#
DEFAULT Framed-Protocol == PPP
        Framed-Protocol = PPP,
        Service-Type = Framed-User,
        Cisco-AVPair += "%{sql:SELECT CONCAT('lcp:interface-config=rate-limit input ',ul_in*1024, ' ', ROUND(ul_in*1000/8), ' ', ROUND(ul_in*1000/8), ' conform-action transmit exceed-action drop') from mtraf where domain='%{User-Name}'}",
        Cisco-AVPair += "%{sql:SELECT CONCAT('lcp:interface-config=rate-limit output ',ul_in*1024, ' ', ROUND(ul_out*1000/8), ' ', ROUND(ul_out*1000/8), ' conform-action transmit exceed-action drop') from mtraf where domain='%{User-Name}'}",
        PPPD-Upstream-Speed-Limit  :=  "%{sql:SELECT ul_in  from mtraf where domain='%{User-Name}'} ",
        PPPD-Downstream-Speed-Limit := "%{sql:SELECT ul_out from mtraf where domain='%{User-Name}'} "