Пример условий:
Оператор связи использует две технологии доступа для оказания услуг интернета: PPPoE и IPoE. В качестве BRAS-маршрутизатора выступает VasExperts СКАТ DPI. Требуется настроить разделение авторизаций и аккаунтинга со СКАТ по PPPoE/IPoE.
Решение:
настроить два экземпляра агента LBarcd: один для IPoE, второй для PPPoE,
применять FreeRADIUS в режиме RADIUS Proxy,
разделение запросов авторизации — по значению атрибута VasExperts-Service-Type,
разделение запросов аккаунтинга — по префиксу в логинах учётных записей.
Примечание: с версии СКАТ DPI VasExperts 14.0 атрибут VasExperts-Service-Type доступен на этапе аккаунтинга — настройка разделения запросов по префиксу УЗ не потребуется.
Установите два экземпляра агента LBarcd.
Обратите внимание: не забудьте указать для каждого экземпляра агента LBarcd свои порты RADIUS authentication и RADIUS accounting.
отступ
для IPoE-клиентов выбран тип взаимодействия со СКАТ cisco_isg. Адреса разрешено отдавать динамически, сохраняя статические записи, при этом есть проверка авторизации по IP-адресу. DHCP не LBinet.
для PPPoE клиентов выбран тип взаимодействия generic.
Используются handler-скрипты.
Установить FreeRADIUS:
apt install freeradius
``
После установки FreeRADIUS запускается автоматически.
Добавить в автозагрузку:
systemctl enable freeradius
``
Создайте файл словаря с названием dictionary.vasexperts в папке /usr/share/freeradius/.
Добавьте в него содержимое:
# -*- 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
``
Откройте файл /usr/share/freeradius/dictionary.
В разделе The Cisco VPN300 dictionary uses the same Vendor ID as the ASA one добавьте $INCLUDE dictionary.vasexperts.
Нужно отредактировать следующийе файлы конфигурации FreeRADIUS:
Откройте файл /etc/freeradius/3.0/sites-enabled/default.
Отредактируйте секцию 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 не требуется, её можно убрать из скрипта.
Отредактируйте секцию 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.
Откройте файл /etc/freeradius/3.0/proxy.conf.
Укажите необходимые 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
}
``
Откройте файл /etc/freeradius/3.0/clients.conf.
Опишите 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
``
После того как внесёте изменения в эти файлы, перезапустите сервис:
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, Атрибуты авторизации
Есть вопросы по документации? Пожалуйста, напишите их