{{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.
- Через Proxy: RADIUS (billing) → 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'' — адрес RADIUS сервера, также может быть ''ipv6addr''.
* ''port'' — порт, на который проксировать запросы (обычно ''1812''). Также при режиме ''auth+acct'' назначается только первый порт для ''auth'', а порт аккаунтинга определяется, как ''port+1''.
* ''proto'' — протокол передачи данный, по умолчанию ''udp''.
* ''secret'' — используется для "шифрования" и "подписи" пакетов между RADIUS и сервером проксирования.
* ''src_ipaddr'' — адрес, с которого отправляются запросы от прокси.
* ''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 и в [[статье]].
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 {
}
}