Совмещение PPPoE и IPoE на СКАТ с помощью FreeRADIUS Proxy

Пример условий:

Оператор связи использует две технологии доступа для оказания услуг интернета: PPPoE и IPoE. В качестве BRAS-маршрутизатора выступает VasExperts СКАТ DPI. Требуется настроить разделение авторизаций и аккаунтинга со СКАТ по PPPoE/IPoE.

Решение:

  • настроить два экземпляра агента LBarcd: один для IPoE, второй для PPPoE,

  • применять FreeRADIUS в режиме RADIUS Proxy,

  • разделение запросов авторизации — по значению атрибута VasExperts-Service-Type,

  • разделение запросов аккаунтинга — по префиксу в логинах учётных записей.

    Примечание: с версии СКАТ DPI VasExperts 14.0 атрибут VasExperts-Service-Type доступен на этапе аккаунтинга — настройка разделения запросов по префиксу УЗ не потребуется.


  1. Установить и настроить агенты LBarcd
  2. Установить и настроить FreeRADIUS
  3. Требования со стороны СКАТ и биллинга

Установить и настроить агенты LBarcd

  1. Установите два экземпляра агента LBarcd.

    Обратите внимание: не забудьте указать для каждого экземпляра агента LBarcd свои порты RADIUS authentication и RADIUS accounting.

    Пример файла конфигурации агента LBarcd, используемого для IPoE
    Пример файла конфигурации агента LBarcd, используемого для PPPoE

    отступ

    • для IPoE-клиентов выбран тип взаимодействия со СКАТ cisco_isg. Адреса разрешено отдавать динамически, сохраняя статические записи, при этом есть проверка авторизации по IP-адресу. DHCP не LBinet.

    • для PPPoE клиентов выбран тип взаимодействия generic.

    Используются handler-скрипты.

    Пример handler-скрипта, используемого для IPoE
    Пример handler-скрипта, используемого для PPPoE

Установить и настроить FreeRADIUS

Установить FreeRADIUS

  1. Установить FreeRADIUS:

    apt install freeradius
    

    ``

    После установки FreeRADIUS запускается автоматически.

  2. Добавить в автозагрузку:

    systemctl enable freeradius
    

    ``

Команды для управления сервисом

Добавить атрибуты VasExperts в словарь FreeRADIUS

  1. Создайте файл словаря с названием dictionary.vasexperts в папке /usr/share/freeradius/.

  2. Добавьте в него содержимое:

    # -*- text -*-
    # Copyright (C) 2020 The FreeRADIUS Server project and contributors
    # This work is licensed under CC-BY version 4.0 https://creativecommons.org/licenses/by/4.0
    # Version $Id: a4c3a0511b5a33ac90ae0ac6e64199a03e5a4dc4 $
    #
    #       VAS Experts dictionary
    #
    VENDOR          VasExperts                      43823
    
    BEGIN-VENDOR    VasExperts
    
    ATTRIBUTE       VasExperts-Policing-Profile             1       string
    ATTRIBUTE       VasExperts-Service-Profile              2       string
    ATTRIBUTE       VasExperts-Enable-Service               3       string
    ATTRIBUTE       VasExperts-Multi-IP-User                4       integer
    ATTRIBUTE       VasExperts-UserName                     5       string
    ATTRIBUTE       VasExperts-Service-Type                 6       integer
    ATTRIBUTE       VasExperts-Restrict-User                7       integer
    ATTRIBUTE       VasExperts-Enable-Interconnect          8       integer
    ATTRIBUTE       VasExperts-OutVLAN                      9       integer
    ATTRIBUTE       VasExperts-Command-Code                 10      integer   # CoA command code
    ATTRIBUTE       VasExperts-OutMAC                       11      string
    
    VALUE   VasExperts-Service-Type         Auth                    0   # L3-authorization, known IP
    VALUE   VasExperts-Service-Type         DHCP                    1   # DHCP
    VALUE   VasExperts-Service-Type         PAP                     2   # PAP authorization
    VALUE   VasExperts-Service-Type         CHAP                    3   # CHAP authorization
    VALUE   VasExperts-Service-Type         MS_CHAPv2               4   # MS-CHAPv2 authorization
    VALUE   VasExperts-Service-Type         MAC_QinQ                5   # MAC/QinQ authorization
    VALUE   VasExperts-Service-Type         ARP                     6   # ARP
    VALUE   VasExperts-Service-Type         DHCPv6                  7   # DHCPv6
    VALUE   VasExperts-Command-Code         Check-Acct              1   # Check Accounting session for Framed-IP-Address
    
    # Accounting
    
    ATTRIBUTE       VasExperts-Acct-Traffic-Class-Name      16      string
    ATTRIBUTE       VasExperts-Acct-Traffic-Class-Input-Octets 17   integer64
    ATTRIBUTE       VasExperts-Acct-Traffic-Class-Output-Octets 18  integer64
    ATTRIBUTE       VasExperts-Acct-Traffic-Class-Input-Packets 19  integer64
    ATTRIBUTE       VasExperts-Acct-Traffic-Class-Output-Packets 20 integer64
    ATTRIBUTE       VasExperts-NAT-IP                       21      ipaddr     # NAT 1:1 white address
    
    # DHCP -> Radius attributes
    
    ATTRIBUTE       VasExperts-DHCP-Hostname                32      octets  # DHCP Opt12
    ATTRIBUTE       VasExperts-DHCP-ClientId                33      octets  # DHCP Opt61
    ATTRIBUTE       VasExperts-DHCP-ClassId                 34      octets  # DHCP Opt60
    ATTRIBUTE       VasExperts-DHCP-RelayInfo               35      octets  # DHCP Opt82
    ATTRIBUTE       VasExperts-DHCP-ClientIP                36      ipaddr  # DHCP Opt50
    ATTRIBUTE       VasExperts-DHCP-Request                 37      integer
    ATTRIBUTE       VasExperts-DHCP-RelayRemoteId           38      octets  # DHCP Opt82 subopt 2
    ATTRIBUTE       VasExperts-DHCP-RelayCircuitId          39      octets  # DHCP Opt82 subopt 1
    
    VALUE   VasExperts-DHCP-Request         Discover                0
    VALUE   VasExperts-DHCP-Request         Inform                  1
    VALUE   VasExperts-DHCP-Request         Request                 2
    
    # Radius -> DHCP (Access-Accept, Access-Reject)
    
    ATTRIBUTE       VasExperts-DHCP-Option                  40      octets  # Any DHCP option in binary form
    ATTRIBUTE       VasExperts-DHCP-DNS                     41      ipaddr  # DNS IP address
    ATTRIBUTE       VasExperts-DHCP-Gateway                 42      ipaddr  # Gateway IP address
    ATTRIBUTE       VasExperts-BOOTP-SName                  43      string  # BOOTP SName
    ATTRIBUTE       VasExperts-BOOTP-File                   44      string  # BOOTP File
    ATTRIBUTE       VasExperts-DHCP-Option-IP               45      string  # IPv4 option: "opt:192.168.6.90", for example: "42:192.168.6.90"
    ATTRIBUTE       VasExperts-DHCP-Option-Num              46      string  # Numeric option: "opt:1500", for example: "58:3600"
    ATTRIBUTE       VasExperts-DHCP-Option-String           47      string  # String option: "opt:text", for example: "56:Hello from DHCP!"
    ATTRIBUTE       VasExperts-DHCP-Option-Bin              48      string  # Binary option in hex form: "opt:xxxxxxxx", for example: "58:100E"
    ATTRIBUTE       VasExperts-ARP-SourceIP                 60      ipaddr  # ARP source IP
    ATTRIBUTE       VasExperts-ARP-TargetIP                 61      ipaddr  # ARP target IP
    
    # DHCPv6 -> Radius attributes
    
    ATTRIBUTE       VasExperts-DHCPv6-Request               70      integer # DHCPv6 request type
    ATTRIBUTE       VasExperts-DHCPv6-UserClass             71      octets  # DHCPv6 User Class option
    ATTRIBUTE       VasExperts-DHCPv6-VendorClass           72      octets  # DHCPv6 Vendor Class option
    ATTRIBUTE       VasExperts-DHCPv6-RemoteId              73      octets  # DHCPv6 RemoteId option [RFC 4649]
    ATTRIBUTE       VasExperts-DHCPv6-SubsId                74      octets  # DHCPv6 SubscriberId option [RFC 4580]
    ATTRIBUTE       VasExperts-DHCPv6-Delegated             75      integer # DHCPv6 flag: (1) - CPE requests delegated prefix, (0) - does not
    
    # Radius -> DHCPv6 attributes
    
    ATTRIBUTE       VasExperts-DHCP-Option-IPv6             80      string  # IPv6 option: "opt:2001:fde3::709", for example: "22:2001:fde3::709"
    ATTRIBUTE       VasExperts-DHCP-Option-IPv6-Prefix      81      string  # IPv6 prefix option: "opt:2001:fde3/64"
    ATTRIBUTE       VasExperts-DHCP6-Option-Num             82      string  # DHCPv6 numeric option: "opt:1500", for example: "58:3600"
    ATTRIBUTE       VasExperts-DHCP6-Option-String          83      string  # DHCPv6 string option: "opt:text", for example: "56:Hello from DHCP!"
    ATTRIBUTE       VasExperts-DHCP6-Option-Bin             84      string  # DHCPv6 binary option in hex form: "opt:xxxxxxxx", for example: "58:100E"
    VALUE   VasExperts-DHCPv6-Request       Solicit                 1
    VALUE   VasExperts-DHCPv6-Request       Request                 3
    VALUE   VasExperts-DHCPv6-Request       Renew                   5
    VALUE   VasExperts-DHCPv6-Request       Rebind                  6
    
    # Attributes 250 - 255 are dedicated to the customer's private use and are not used (ignored) by pcrf
    
    END-VENDOR      VasExperts
    

    ``

  3. Откройте файл /usr/share/freeradius/dictionary.

    В разделе The Cisco VPN300 dictionary uses the same Vendor ID as the ASA one добавьте $INCLUDE dictionary.vasexperts.

Настроить файлы конфигурации FreeRADIUS для proxy-режима

Нужно отредактировать следующийе файлы конфигурации FreeRADIUS:

  • default — описать логику разделения пакетов,
  • proxy.conf — описать логику взаимодействия с RADIUS-агентами (LBarcd),
  • clients.conf — описать NAS, с которыми должен взаимодействовать FreeRADIUS в proxy-режиме.
Описать логику разделения пакетов в файле default
  1. Откройте файл /etc/freeradius/3.0/sites-enabled/default.

  2. Отредактируйте секцию authorize. В ней описывается логика разделения запросов авторизации в зависимости от значения атрибута VasExperts-Service-Type.

    Пример:

    authorize {
      # Static + Dynamic ipoe
      if (VasExperts-Service-Type == 0 || VasExperts-Service-Type == 1)
      {
        # Проверка VLAN для ipoe_realm
        if (Nas-Port !~ /^(3251|251|106)$/)
        {
            reject
        }
        else
        {
          update control
          {
            Proxy-To-Realm := "ipoe_realm"
            #State := "ipoe"
          }
        }
      }
      # PPPoE PAP, CHAP, MS-CHAP,  (VasExperts-Service-Type == 3)
      else
      {
        # Проверка VLAN для pppoe_realm
        if (Nas-Port !~ /^(3105|105|106|3100|100|102|2000|2270|2271|2272|2273)$/)
        {
            reject
        }
        else
        {
          update control
          {
            Proxy-To-Realm := "pppoe_realm"
            #State := "pppoe"
          }
        }
      }
    }
    

    ``

    Примечание: если проверка VLAN не требуется, её можно убрать из скрипта.

  3. Отредактируйте секцию accounting. В ней описывается логика разделения пакетов аккаунтинга в зависимости от того, есть ли префикс в логине УЗ (в примере — префикс ip_).

    Пример:

    accounting {
    
            # Проверка вхождения "ip" в User-Name
            if ("%{User-Name}" =~ /ip_/i) {
                update control {
                    Proxy-To-Realm := "ipoe_realm"
                }
            } else {
                update control {
                    Proxy-To-Realm := "pppoe_realm"
                }
            }
    

    ``

    Примечание: для версии СКАТ DPI VasExperts 14.0 или новее скопируйте в секцию accounting тот же скрипт, который используется в authorize.

Описать логику взаимодействия с RADIUS-агентами в файле proxy.conf
  1. Откройте файл /etc/freeradius/3.0/proxy.conf.

  2. Укажите необходимые IP-адреса, порты, пароли, какие порты отвечают за авторизацию и аккаунтинг и т.п.

    Пример файла:

    #  Proxy server configuration
    #
    #  This entry controls the servers behaviour towards ALL other servers
    #  to which it sends proxy requests.
    #
    proxy server {
    	retry_delay = 5
    	retry_count = 3
    	default_fallback = no
    	#dead_time = 120
    	wake_all_if_all_dead = yes
    }
    
    # Радиус ipoe авторизация
    home_server auth_server_ipoe {
    	ipaddr = 127.0.0.1
    	port = 1822
    	type = auth
    	secret = uyQP68pW3y
    	response_window = 20
    	response_timeout = 5
    	max_outstanding = 5
    	weight = 100
    }
    
    # Радиус ipoe аккаунтинг
    home_server acct_server_ipoe {
    	ipaddr = 127.0.0.1
    	port = 1823
    	type = acct
    	secret = uyQP68pW3y
    	response_window = 20
    	response_timeout = 5
    	max_outstanding = 5
    	weight = 100
    }
    
    # Радиус pppoe авторизация
    home_server auth_server_pppoe {
    	ipaddr = 127.0.0.1
    	#ipaddr = 217.197.255.131
    	port = 1842
    	type = auth
    	secret = uyQP68pW3y
    	#response_window = 20
    	#response_timeout = 5
    	#max_outstanding = 5
    	weight = 100
    }
    
    # Радиус pppoe аккаунтинг
    home_server acct_server_pppoe {
    	ipaddr = 127.0.0.1
    	#ipaddr = 217.197.255.131
    	port = 1843
    	type = acct
    	secret = uyQP68pW3y
    	response_window = 20
    	response_timeout = 5
    	max_outstanding = 5
    	weight = 100
    }
    
    # Пул серверов авторизации ipoe
    home_server_pool lb_auth_pool_ipoe {
    	type = load-balance
    	home_server = auth_server_ipoe
    }
    
    # Пул серверов авторизации pppoe
    home_server_pool lb_auth_pool_pppoe {
    	type = load-balance
    	home_server = auth_server_pppoe
    }
    
    # Пул серверов аккаунтинга ipoe
    home_server_pool lb_acct_pool_ipoe {
    	type = load-balance
    	home_server = acct_server_ipoe
    }
    
    # Пул серверов аккаунтинга pppoe
    home_server_pool lb_acct_pool_pppoe {
    	type = load-balance
    	home_server = acct_server_pppoe
    }
    
    realm ipoe_realm {
    	auth_pool = lb_auth_pool_ipoe
    	acct_pool = lb_acct_pool_ipoe
    }
    
    realm pppoe_realm {
    	auth_pool = lb_auth_pool_pppoe
    	acct_pool = lb_acct_pool_pppoe
    }
    

    ``

Описать NAS в файле clients.conf
  1. Откройте файл /etc/freeradius/3.0/clients.conf.

  2. Опишите NAS, с которыми должен взаимодействовать FreeRADIUS в proxy-режиме.

    Пример файла:

    client 10.0.16.54 {
    	ipaddr = 10.0.16.54
    	secret = public
    }
    
    # fastPCRF Клементьевка
    client 217.197.255.134 {
    	ipaddr = 217.197.255.134
    	secret = uyQP68pW3y
    }
    
    # fastdpi
    client 217.197.255.159 {
    	ipaddr = 217.197.255.159
    	secret = uyQP68pW3y
    }
    
    client localhost {
    		ipaddr = 127.0.0.1
    		proto = *
    		secret = secret
    		require_message_authenticator = no
    #       shortname = localhost
    

    ``

Перезапустить FreeRADIUS

После того как внесёте изменения в эти файлы, перезапустите сервис:

systemctl restart freeradius

Требования со стороны СКАТ и биллинга

Чтобы работало поведение, описанное в файле default в секции accounting, необходимо:

  • задавать префикс в логинах учётных записей агента LBarcd, используемого для IPoE (в примере — префикс ip_). Например, ip_alekseev.

  • в таблице options LBcore для опции user-name-in-access-accept-response установить значение 1. В этом случае в Access-Accept будет передаваться атрибут User-Name (логин учётной записи), и по префиксу в логине УЗ FreeRADIUS сможет проксировать запрос на нужный агент LBarcd.

Для справки: документация VasExperts СКАТ DPI: Request, Accept, Reject, Атрибуты авторизации