{{indexmenu_n>2}}
======Настройка балансировки и распределения по группам RADIUS серверов======
Используется для сценария, когда необходимо распределить RADIUS трафик абонентов с разными типами доступа IPoE, PPPoE, L2TP между разными группами RADIUS серверов.
{{ :dpi:dpi_components:freeradius:radius_proxy.svg |}}
В данном примере рассмотрим распределение авторизации и аккаунтинга в режиме load-balance для разных типов доступа между группами RADIUS-серверов:
- IPoE на RADIUS_1 (1812, 1813), RADIUS_1.1 (1822, 1823)
- PPPoE на RADIUS_2 (2812, 2813), RADIUS_2.1 (2822, 2823)
- L2TP на RADIUS_3 (3812, 3813), RADIUS_3.1 (3822, 3823)
Разделение Auth/Acc различных типов доступа происходит на основе атрибута ''VasExperts-Service-Type'' с использованием операторов ветвления (if-else).
RADIUS СоА сообщения могут отправляться от RADIUS серверов в BRAS (fastPCRF) следующим способом:
- Напрямую от RADIUS (billing) в fastPCRF. Необходимо добавить отдельные CoA-клиенты в fastPCRF. [[dpi:bras_bng:radius_integration:radius_auth_coa|]]. Указано на схеме красным пунктиром.
- Через Proxy: RADIUS (billing) → RADIUS Proxy → fastPCRF. Описан пример ниже.
=====Конфигурация FreeRADIUS как Proxy=====
Конфигурация proxy расположена в ''/etc/raddb/proxy.conf''. В ней определены основные разделы:
proxy server{
retry_delay = 5
retry_count = 3
default_fallback = no
#dead_time = 120
wake_all_if_all_dead = yes
}
* ''retry_delay'' — интервал ожидания (в секундах) после неудачной попытки установить соединение с сервером.
* ''retry_count'' — максимальное число попыток отправки запроса к серверу, после которого он считается "мёртвым".
* ''default_fallback'' — параметр, определяющий отправку reject-ответа клиенту, если все серверы находятся в состоянии "мёртвые".
* ''wake_all_if_all_dead'' — параметр, определяющий периодическую проверку доступности серверов, помеченных как "мёртвые".
Раздел, определяющий параметры "домашних" серверов (на которых хранятся данные об абонентах).
home_server rad_1 {
type = auth+acct
ipaddr = 10.166.220.232
port = 1812
secret = secret
# proto = udp
# optional items
src_ipaddr = 10.16.20.117
response_window = 6
zombie_period = 40
status_check = status-server
check_interval = 6
check_timeout = 4
num_answers_to_alive = 2
max_outstanding = 65536
coa {
irt = 2
mrt = 16
mrc = 5
mrd = 30
}
limit {
max_connections = 16
max_requests = 0
lifetime = 0
idle_timeout = 0
}
}
* ''type'' — назначение сервера; чаще всего используется для авторизации (''auth'') либо для авторизации и аккаунтинга (''auth+acct'').
* ''ipaddr'' — IPv4-адрес RADIUS-сервера; при необходимости может использоваться ''ipv6addr''.
* ''port'' — порт, на который проксируются запросы (обычно ''1812''). В режиме ''auth+acct'' задаётся только порт авторизации, а порт аккаунтинга определяется как ''port+1''.
* ''proto'' — протокол передачи данных; по умолчанию ''udp''.
* ''secret'' — общий секрет, используемый для подписи и защиты пакетов между RADIUS-сервером и прокси.
* ''src_ipaddr'' — IP-адрес источника, с которого прокси отправляет запросы.
* ''response_window'' — интервал ожидания ответа от сервера; по его истечении сервер помечается как "zombie" и получает минимальный приоритет при выборе.
* ''zombie_period'' — максимальный период ожидания ответа от сервера на любой пакет, по истечении которого сервер считается "мёртвым".
* ''status_check'' — способ проверки состояния сервера.
* ''check_interval'' — интервал между отправкой пакетов проверки состояния.
* ''check_timeout'' — время ожидания ответа на пакет проверки состояния.
* ''num_answers_to_alive'' — количество успешных проверок подряд, после которых сервер считается "живым".
* ''max_outstanding'' — максимальное число неподтверждённых пакетов (разница между отправленными и полученными), при превышении которого отправка новых пакетов приостанавливается для предотвращения перегрузки RADIUS-сервера.
* ''coa'' — секция, описывающая интервалы и количество повторных передач для Change of Authorization.
* ''limit'' — секция, применимая только при использовании TCP. Включает параметры:
* ''max_connections'' — максимальное количество соединений;
* ''max_requests'' — максимальное число запросов в рамках одного соединения;
* ''lifetime'' — время жизни соединения в секундах;
* ''idle_timeout'' — максимальный период бездействия в рамках соединения, после которого оно закрывается.\\ \\ Значение ''0'' для всех параметров означает отсутствие ограничений.
Для proxy определить необходимое количество серверов. Серверы, отвечающие за один и тот же тип авторизации, сгруппировать в ''pool''. Раздел ''home_server_pool'' использовать для балансировки нагрузки и переключения между серверами.\\
В статье приведён пример минимальной конфигурации, полный вариант конфигурации доступен в архиве.
home_server_pool pool_rad_servers {
type = load-balance
home_server = rad_1
}
Важно, чтобы ''home_server'' были одного типа, то есть все — ''auth'' или ''auth+acct''.
В разделе ''realm'' указать, какой пул серверов следует использовать для этой области.
realm rlm_prod_servers {
pool = pool_rad_servers
nostrip
}
При использовании пула, содержащего только серверы авторизации, применять ''auth_pool''; при пуле, включающем только аккаунтинг, использовать ''acct_pool''. Рекомендуется использовать универсальный ''pool'', объединяющий оба варианта.\\
Проксирование CoA-пакетов выполнять на основе атрибута ''Operator-Name'' через ''coa_pool''. Для настройки CoA использовать файл ''/etc/raddb/sites-available/coa'', в котором задаются параметры проксирования CoA-запросов. В конфигурации указать условия, при которых запрос направляется в соответствующий ''realm'', а в каждом ''home_server'' определить параметры, используемые для CoA (как правило, они заданы по умолчанию).\\
Рекомендуется для работы с CoA использовать прямое взаимодействие PCRF – RADIUS, так как все параметры настраиваются в ''fastpcrf.conf'', а обмен данными осуществляется напрямую.
Описание настройки данных функций приведено в статье [[dpi:bras_bng:radius_integration:radius_auth_coa|статья]].
Параметр ''nostrip'' использовать для отключения разделения значения ''User-Name''.
=====Конфигурация виртуального сервера FreeRADIUS=====
Файл конфигурации расположен в ''/etc/raddb/sites-available/default''.\\
Все параметры указывать для ''default''. В первую очередь настроить раздел ''listen'', в котором задать подсети и порты для прослушивания, а также типы принимаемых сообщений.
server default {
listen {
type = auth
ipaddr = *
port = 0
limit {
max_connections = 16
lifetime = 0
idle_timeout = 30
}
}
listen {
ipaddr = *
port = 0
type = acct
limit {
}
}
Настроить раздел для IPv6:
listen {
type = auth
ipv6addr = :: # any. ::1 == localhost
port = 0
limit {
max_connections = 16
lifetime = 0
idle_timeout = 30
}
}
listen {
ipv6addr = ::
port = 0
type = acct
limit {
}
}
Далее перейти к разделу авторизации, в котором перечислены поддерживаемые протоколы авторизации.\\
В данном разделе задать правило маршрутизации запросов: все запросы авторизации с атрибутом ''VasExperts-Service-Type'' со значениями ''0'' и ''1'' направлять в область DHCP, со значениями ''2'', ''3'' и ''4'' — в область PPPoE, остальные запросы отклонять с Reject. Значения атрибута для других типов авторизации с расшифровкой приведены в словаре vasexperts и в [[dpi:dpi_components:freeradius:local_auth|статье]].
authorize {
preprocess
chap
mschap
digest
suffix
files
-sql
-ldap
expiration
logintime
if (Tunnel-Type) {
update control {
Proxy-To-Realm := "rlm_prod_servers_3"
}
}
else {
if (VasExperts-Service-Type == 0 || VasExperts-Service-Type == 1) {
update control {
Proxy-To-Realm := "rlm_prod_servers_1"
}
}
else ( VasExperts-Service-Type == 2 || VasExperts-Service-Type == 3 || VasExperts-Service-Type == 4 ) {
update control {
Proxy-To-Realm := "rlm_prod_servers_2"
}
}
else {
reject
}
}
}
Раздел определяет методы аутентификации, которые будет использовать FreeRADIUS. Так как они пустые — будут использоваться модули по умолчанию.
authenticate {
Auth-Type PAP {
}
Auth-Type CHAP {
}
Auth-Type MS-CHAP {
}
}
preacct {
preprocess
acct_unique
suffix
files
}
Раздел тарификации и аккаунтинга, в котором заданы правила обработки пакетов с различными значениями ''VasExperts-Service-Type'', аналогично модулю авторизации. Существенным отличием является первое правило для ''Acct-Status-Type'', на основе которого прокси направляет на RADIUS общие пакеты начала тарификации, а не отбрасывает их.
accounting {
-sql
if (Acct-Status-Type == Accounting-On || Acct-Status-Type == Accounting-Off) {
update control {
Proxy-To-Realm := "rlm_acct_servers"
}
}
else {
if (Tunnel-Type) {
update control {
Proxy-To-Realm := "rlm_prod_servers_3"
}
}
else {
if (VasExperts-Service-Type == 0 || VasExperts-Service-Type == 1) {
update control {
Proxy-To-Realm := "rlm_prod_servers_1"
}
}
else (VasExperts-Service-Type == 2 || VasExperts-Service-Type == 3 || VasExperts-Service-Type == 4 ) {
update control {
Proxy-To-Realm := "rlm_prod_servers_2"
}
}
}
}
}
session {
}
Завершающие разделы. Задать параметр таймаута сессии и действие системы при Reject.
post-auth {
update reply {
Session-Timeout := 4294967295
}
-sql
Post-Auth-Type REJECT {
}
Post-Auth-Type Challenge {
}
}
pre-proxy {
}
post-proxy {
}
}