Модуль dev_freeradius

Материал из Felix2
Перейти к: навигация, поиск


Модуль осуществляет интеграцию с RADIUS сервером FreeRADIUS.
Модуль dev_freeradius позволяет АСР Felix2 взаимодействовать с различным оборудованием по протоколу RADIUS.



Sign-attention.png Для корректной работы модуля необходимо установить пакет freeradius и расширение freeradius-mysql.

В Linux Debian это можно сделать следующей командой:

     apt-get install freeradius freeradius-mysql 

После этого нужно запустить скрипт

      /usr/share/felix2/dev_freeradius/install.sh 

для создания базы данных RADIUS и копирования конфигурационных файлов FreeRADIUS и АСР Felix2. Старые версии конфигурационных файлов будут сохранены с префиксом "~".
Установка закончена.


Параметры конфигурации модуля

  • <dev_freeradius> - в этом блоке мы описываем сервера доступа NAS (Network Access Server) с которыми должна взаимодействовать АСР Felix2.
    • <nas> - блок описания NAS.
      • ip – IP адрес сервера доступа.
      • secret – Пароль, который необходимо указать на сервере доступа, для подключения к FreeRADIUS.
      • type – Тип сервера доступа. Поддерживаются следующие типы NAS: "cisco", "mikrotik", "other" (По умолчанию используется тип "other").
      • subnet – IP адреса/подсети пользователей в биллинге которые должны работать через данный сервер доступа (По умолчанию: 0.0.0.0-255.255.255.255).
      • pod – Использовать PoD (Packet of Disconnect) пакеты RADIUS для отключения пользователей при блокировке услуги (По умолчанию используется - 1).
      • coa – Использовать CoA (Change of Authorization) пакеты RADIUS для изменения параметров предоставления услуги. Оборудование должно поддерживать данную функцию (По умолчанию НЕ используется - 0). Если оборудование не поддерживает CoA пакеты, то при изменении параметров предоставления услуги посылается PoD пакет, и новые параметры применяются только после переподключения пользователя.
      • pod_command – команда отправки PoD пакета.
        По умолчанию для mikrotik:
        echo '${radius_packet}' | /usr/bin/radclient -r1 ${nas_ip} disconnect ${nas_secret}&
        По умолчанию для cisco:
        echo '${radius_packet}' | /usr/bin/radclient ${nas_ip}:1700 disconnect ${nas_secret}&
      • coa_command – команда отправки CoA пакета. По умолчанию:
        echo '${radius_packet}' | /usr/bin/radclient ${nas_ip}:1700 coa ${nas_secret}&
      • <radius_packet> - параметры RADIUS пакетов с помощью которых происходит взаимодействие с сервером доступа.
        • type - определяет тип пакета. Поддерживаются следующие типы пакетов:
          1. connect – отправляется на сервер доступа при подключении пользователя. В нем описываются параметры предоставления услуги.
          2. disconnect – оправляется на сервер доступа при отключении пользователя (или при изменении параметров услуги, если CoA пакеты не поддерживаются).
          3. update_rate-limit – отправляется на сервер доступа при изменении ограничения скорости доступа. Данный пакет отсылается только если включена поддержка CoA пакетов.
        • <attribute> - RADIUS атрибуты передаваемые в данном пакете
          • name – имя RADIUS атрибута.
          • value – значение, или шаблон значения RADIUS атрибута.
            В шаблонах RADIUS атрибутов могут использоваться следующие параметры для подстановки:
            1. ${user_name} – логин пользователя.
            2. ${framed_ip_address} – IP адрес пользователя.
            3. ${rate-limit_in} – ограничение входящей скорости в байтах (для интерфейса).
            4. ${rate-limit_out} – ограничение исходящей скорости в байтах (для интерфейса).
            5. ${normal_burst_in} – рассчитывается как ${rate-limit_in}*1.5/8
            6. ${normal_burst_out} – рассчитывается как ${rate-limit_out}*1.5/8
            7. ${extended_burst_in} – рассчитывается как ${rate-limit_in}*2
            8. ${extended_burst_out} – рассчитывается как ${rate-limit_out}*2
            9. ${old_rate-limit_in}, ${old_rate-limit_out}, ${old_normal_burst_in}, ${old_normal_burst_out}, ${old_extended_burst_in}, ${old_extended_burst_out} - предыдущие значения ограничений скорости и burst (при изменении ограничений скорости).

Пример конфигурации модуля

    <module name="service_inet" file="modules/service_inet.so" />
    <module name="dev_freeradius" file="modules/dev_freeradius.so" />

    ...

    <service_inet>
        <ip_switch>
            <interface name="dev_freeradius" />
        </ip_switch>
    </service_inet>

    ...

    <dev_freeradius>
        <nas ip="10.1.100.2" secret="12345" type="mikrotik">
            <radius_packet type="disconnect">
                <attribute name="User-Name" value="${user_name}" />
                <attribute name="Framed-IP-Address" value="${framed_ip_address}" />
            </radius_packet>

            <radius_packet type="connect">
                 <attribute name="Service-Type" value="Framed-User" />
                 <attribute name="Framed-Protocol" value="PPP" />
                 <attribute name="Framed-Compression" value="Van-Jacobsen-TCP-IP" />
                 <attribute name="MS-Primary-DNS-Server" value="10.1.100.1" />
                 <attribute name="MS-Secondary-DNS-Server" value="8.8.8.8" />
                 <attribute name="Framed-IP-Address" value="${framed_ip_address}" />
                 <attribute name="Framed-IP-Netmask" value="255.255.255.255" />
                 <attribute name="Mikrotik-Rate-Limit" value="${rate-limit_in}/${rate-limit_out}" />
            </radius_packet>
        </nas>
    </dev_freeradius>

    ...

В данном примере используется один сервер доступа (10.1.100.2 - Miktotik) для всех абонентов.


Система АСР Felix2 может поддерживать несколько серверов доступа.
В следующем примере пользователи имеющие в биллинге адреса
10.1.102.0/24 получают доступ в интернет (по протоколу PPTP или PPPoE) через сервер доступа с IP адресом 10.1.100.2 (mikrotik),
10.1.103.0/24 через сервер доступа с IP адресом 10.1.100.3 (mikrotik),
10.1.104.0/24 через сервер доступа с IP адресом 10.1.100.4 (cisco).


<module name="service_inet" file="modules/service_inet.so" />
<module name="dev_freeradius" file="modules/dev_freeradius.so" />

...

<service_inet>
    <ip_switch>
        <interface name="dev_freeradius" />
    </ip_switch>
</service_inet>

...


<dev_freeradius>

    <nas ip="10.1.100.2" secret="12345" type="mikrotik" subnet="10.1.102.0/24">
        <radius_packet type="disconnect">
            <attribute name="User-Name" value="${user_name}" />
            <attribute name="Framed-IP-Address" value="${framed_ip_address}" />
        </radius_packet>

        <radius_packet type="connect">
             <attribute name="Service-Type" value="Framed-User" />
             <attribute name="Framed-Protocol" value="PPP" />
             <attribute name="Framed-Compression" value="Van-Jacobsen-TCP-IP" />
             <attribute name="MS-Primary-DNS-Server" value="10.1.100.1" />
             <attribute name="MS-Secondary-DNS-Server" value="8.8.8.8" />
             <attribute name="Framed-IP-Address" value="${framed_ip_address}" />
             <attribute name="Framed-IP-Netmask" value="255.255.255.255" />
             <attribute name="Mikrotik-Rate-Limit" value="${rate-limit_in}/${rate-limit_out}" />
        </radius_packet>
    </nas>

    <nas ip="10.1.100.3" secret="12345" type="mikrotik" subnet="10.1.103.0/24">
        <radius_packet type="disconnect">
            <attribute name="User-Name" value="${user_name}" />
            <attribute name="Framed-IP-Address" value="${framed_ip_address}" />
        </radius_packet>

        <radius_packet type="connect">
             <attribute name="Service-Type" value="Framed-User" />
             <attribute name="Framed-Protocol" value="PPP" />
             <attribute name="Framed-Compression" value="Van-Jacobsen-TCP-IP" />
             <attribute name="MS-Primary-DNS-Server" value="10.1.100.1" />
             <attribute name="MS-Secondary-DNS-Server" value="8.8.8.8" />
             <attribute name="Framed-IP-Address" value="${framed_ip_address}" />
             <attribute name="Framed-IP-Netmask" value="255.255.255.255" />
             <attribute name="Mikrotik-Rate-Limit" value="${rate-limit_in}/${rate-limit_out}" />
        </radius_packet>
    </nas>


    <nas ip="10.1.100.4" secret="12345" type="cisco" coa="1" subnet="10.1.104.0/24" >
        <radius_packet type="update_rate-limit">
            <attribute name="User-Name" value="${user_name}" />
            <attribute name="Framed-IP-Address" value="${framed_ip_address}" />
            <attribute name="Cisco-AVPair" value="lcp:interface-config#1=no rate-limit input ${old_rate-limit_in} ${old_normal_burst_in} ${old_extended_burst_in} conform-action transmit exceed-action drop" />
            <attribute name="Cisco-AVPair" value="lcp:interface-config#1=no rate-limit output ${old_rate-limit_out} ${old_normal_burst_out} ${old_extended_burst_out} conform-action transmit exceed-action drop" />
            <attribute name="Cisco-AVPair" value="lcp:interface-config#1=rate-limit input ${rate-limit_in} ${normal_burst_in} ${extended_burst_in} conform-action transmit exceed-action drop" />
            <attribute name="Cisco-AVPair" value="lcp:interface-config#1=rate-limit output ${rate-limit_out} ${normal_burst_out} ${extended_burst_out} conform-action transmit exceed-action drop" />
        </radius_packet>
        
        <radius_packet type="disconnect">
            <attribute name="User-Name" value="${user_name}" />
            <attribute name="Framed-IP-Address" value="${framed_ip_address}" />
        </radius_packet>

        <radius_packet type="connect">
            <attribute name="Service-Type" value="Framed-User" />
            <attribute name="Framed-Protocol" value="PPP" />
            <attribute name="Framed-Compression" value="Van-Jacobsen-TCP-IP" />
            <attribute name="MS-Primary-DNS-Server" value="10.1.1.1" />
            <attribute name="MS-Secondary-DNS-Server" value="8.8.8.8" />
            <attribute name="Framed-IP-Address" value="${framed_ip_address}" />
            <attribute name="Framed-IP-Netmask" value="255.255.255.255" />
            <attribute name="Cisco-AVPair" value="lcp:interface-config#1=rate-limit input ${rate-limit_in} ${normal_burst_in} ${extended_burst_in} conform-action transmit exceed-action drop\nrate-limit output ${rate-limit_out} ${normal_burst_out} ${extended_burst_out} conform-action transmit exceed-action drop" />
            <attribute name="Cisco-AVPair" value="lcp:interface-config#1=rate-limit output ${rate-limit_out} ${normal_burst_out} ${extended_burst_out} conform-action transmit exceed-action drop"  />
            <attribute name="Cisco-AVPair" value="lcp:interface-config#1=rate-limit input ${rate-limit_in} ${normal_burst_in} ${extended_burst_in} conform-action transmit exceed-action drop" />
        </radius_packet>
    </nas>

</dev_freeradius>