| Следующая версия | Предыдущая версия |
| dpi:dpi_components:freeradius:balancing_and_grouping [2025/12/17 15:32] – создано elena.krasnobryzh | dpi:dpi_components:freeradius:balancing_and_grouping [2025/12/19 09:04] (текущий) – [Настройка балансировки и распределения по группам RADIUS серверов] atereschenko |
|---|
| {{ :dpi:dpi_components:freeradius:radius_proxy.svg |}} | {{ :dpi:dpi_components:freeradius:radius_proxy.svg |}} |
| |
| В данном примере рассмотрим распределение Авторизации и Аккаунтинга между группами серверов в режим load-balance для разных типов доступа между группами RADIUS серверов: | В данном примере рассмотрим распределение авторизации и аккаунтинга в режиме load-balance для разных типов доступа между группами RADIUS-серверов: |
| - IPoE на RADIUS_1 (1812, 1813), RADIUS_1.1 (1822, 1823) | - IPoE на RADIUS_1 (1812, 1813), RADIUS_1.1 (1822, 1823) |
| - PPPoE на RADIUS_2 (2812, 2813), RADIUS_2.1 (2822, 2823) | - PPPoE на RADIUS_2 (2812, 2813), RADIUS_2.1 (2822, 2823) |
| - L2TP на RADIUS_3 (3812, 3813), RADIUS_3.1 (3822, 3823) | - L2TP на RADIUS_3 (3812, 3813), RADIUS_3.1 (3822, 3823) |
| Разделение Auth/Acc различных типов доступа происходит на основе атрибута VasExperts-Service-Type с использованием операторов ветвления (if-else). | Разделение Auth/Acc различных типов доступа происходит на основе атрибута ''VasExperts-Service-Type'' с использованием операторов ветвления (if-else). |
| |
| RADIUS СоА сообщения могут отправляться от RADIUS серверов в BRAS (fastPCRF) следующим способом: | RADIUS СоА сообщения могут отправляться от RADIUS серверов в BRAS (fastPCRF) следующим способом: |
| - Напрямую от RADIUS (billing) в fastPCRF. Необходимо добавить Отдельные CoA-клиенты в fastPCRF. | - Напрямую от RADIUS (billing) в fastPCRF. Необходимо добавить отдельные CoA-клиенты в fastPCRF. [[dpi:bras_bng:radius_integration:radius_auth_coa|]]. Указано на схеме красным пунктиром. |
| - Через Proxy: RADIUS (billing) → Proxy → fastPCRF. Описан пример ниже. | - Через Proxy: RADIUS (billing) → RADIUS Proxy → fastPCRF. Описан пример ниже. |
| |
| =====Конфигурация FreeRADIUS как Proxy===== | =====Конфигурация FreeRADIUS как Proxy===== |
| } | } |
| </code> | </code> |
| * ''retry_delay'' — количество секунд ожидания после того, как сервер попытается установить соединение и завершится неудачей. | |
| * ''retry_count'' — максимальное количество попыток отправки запроса к одному, прежде чем он будет считаться "мёртвым". | |
| * ''default_fallback'' — параметр, отвечающий за ответ reject-ом на клиентский запрос при статусе всех серверов "мертвые". | |
| * ''wake_all_if_all_dead'' — параметр, отвечающий за периодическую проверку состояния «мёртвых» серверов. | |
| |
| Раздел определяющий параметры "домашних" серверов, т.е. серверов на которых хранятся данные об абонентах. | * ''retry_delay'' — интервал ожидания (в секундах) после неудачной попытки установить соединение с сервером. |
| | * ''retry_count'' — максимальное число попыток отправки запроса к серверу, после которого он считается "мёртвым". |
| | * ''default_fallback'' — параметр, определяющий отправку reject-ответа клиенту, если все серверы находятся в состоянии "мёртвые". |
| | * ''wake_all_if_all_dead'' — параметр, определяющий периодическую проверку доступности серверов, помеченных как "мёртвые". |
| | |
| | Раздел, определяющий параметры "домашних" серверов (на которых хранятся данные об абонентах). |
| <code bash> | <code bash> |
| home_server rad_1 { | home_server rad_1 { |
| } | } |
| </code> | </code> |
| * ''type'' — для чего используется сервер, чаще всего это авторизация (''auth''), а также авторизация и аккаунтинг (''auth+acct''). | |
| * ''ipaddr'' — адрес RADIUS сервера, также может быть ''ipv6addr''. | * ''type'' — назначение сервера; чаще всего используется для авторизации (''auth'') либо для авторизации и аккаунтинга (''auth+acct''). |
| * ''port'' — порт, на который проксировать запросы (обычно ''1812''). Также при режиме ''auth+acct'' назначается только первый порт для ''auth'', а порт аккаунтинга определяется, как ''port+1''. | * ''ipaddr'' — IPv4-адрес RADIUS-сервера; при необходимости может использоваться ''ipv6addr''. |
| * ''proto'' — протокол передачи данный, по умолчанию ''udp''. | * ''port'' — порт, на который проксируются запросы (обычно ''1812''). В режиме ''auth+acct'' задаётся только порт авторизации, а порт аккаунтинга определяется как ''port+1''. |
| * ''secret'' — используется для "шифрования" и "подписи" пакетов между RADIUS и сервером проксирования. | * ''proto'' — протокол передачи данных; по умолчанию ''udp''. |
| * ''src_ipaddr'' — адрес, с которого отправляются запросы от прокси. | * ''secret'' — общий секрет, используемый для подписи и защиты пакетов между RADIUS-сервером и прокси. |
| * ''response_window'' — период времени, в который прокси ожидает ответа на запрос от сервера. По истечению времени, сервер помечается как "zombie" и является наименее приоритетным для отправки. | * ''src_ipaddr'' — IP-адрес источника, с которого прокси отправляет запросы. |
| * ''zombie_period'' — период времени, в который прокси ожидает ответ от сервера на любой пакет и по истечении которого помечает сервер статусом "мертвый". | * ''response_window'' — интервал ожидания ответа от сервера; по его истечении сервер помечается как "zombie" и получает минимальный приоритет при выборе. |
| * ''status_check'' — определяет, как проверять состояние сервера. | * ''zombie_period'' — максимальный период ожидания ответа от сервера на любой пакет, по истечении которого сервер считается "мёртвым". |
| | * ''status_check'' — способ проверки состояния сервера. |
| * ''check_interval'' — интервал между отправкой пакетов проверки состояния. | * ''check_interval'' — интервал между отправкой пакетов проверки состояния. |
| * ''check_timeout'' — время ожидания ответа на пакет проверки состояния. | * ''check_timeout'' — время ожидания ответа на пакет проверки состояния. |
| * ''num_answers_to_alive'' — количество проверок состояния подряд, после которого сервер считается "живым". | * ''num_answers_to_alive'' — количество успешных проверок подряд, после которых сервер считается "живым". |
| * ''max_outstanding'' — количество пакетов, то есть разница между оправленными на сервер и полученными от сервера, при превышении которого пакеты перестают отправляться чтобы избежать перегрузки RADIUS сервера. | * ''max_outstanding'' — максимальное число неподтверждённых пакетов (разница между отправленными и полученными), при превышении которого отправка новых пакетов приостанавливается для предотвращения перегрузки RADIUS-сервера. |
| * ''coa'' — секция описания интервалов повторных перадач и их количества для Change of Authorization. | * ''coa'' — секция, описывающая интервалы и количество повторных передач для Change of Authorization. |
| * ''limit'' — секция, актуальная только при указании протокола TCP. Это ''max_connections'' — максимальное кол-во подключений; ''max_requests'' — максимальное количество запросов в рамках одной сессии; ''lifetime'' — время жизни соединения в секундах; ''idle_timeout'' — максимальное время ожидания пакетов в рамках сессии, после истечения которого она будет закрыта. Значение ''0'' во всех параметрах данной секции означает "без ограничений". | * ''limit'' — секция, применимая только при использовании TCP. Включает параметры: |
| | * ''max_connections'' — максимальное количество соединений; |
| | * ''max_requests'' — максимальное число запросов в рамках одного соединения; |
| | * ''lifetime'' — время жизни соединения в секундах; |
| | * ''idle_timeout'' — максимальный период бездействия в рамках соединения, после которого оно закрывается.\\ \\ Значение ''0'' для всех параметров означает отсутствие ограничений. |
| | |
| | |
| | Для proxy определить необходимое количество серверов. Серверы, отвечающие за один и тот же тип авторизации, сгруппировать в ''pool''. Раздел ''home_server_pool'' использовать для балансировки нагрузки и переключения между серверами.\\ |
| | В статье приведён пример минимальной конфигурации, полный вариант конфигурации доступен в архиве. |
| |
| Для proxy определите столько серверов, сколько необходимо. Далее необходимо сгруппировать их в pool, если отвечают за один и тот же тип авторизации. Также с помощью раздела ''home_server_pool'' осуществляется балансировка нагрузки и переключение между серверами.\\ | |
| В статье приведена конфигурация в единичном варианте, полная конфигурация доступна в архиве. | |
| <code bash> | <code bash> |
| home_server_pool pool_rad_servers { | home_server_pool pool_rad_servers { |
| } | } |
| </code> | </code> |
| Важно, чтобы ''home_server'' были одного типа, то есть все ''auth'' или ''auth+acct''. | Важно, чтобы ''home_server'' были одного типа, то есть все — ''auth'' или ''auth+acct''. |
| |
| Наконец, в разделе ''realm'' определяются некоторые параметры и указывается, какой пул серверов следует использовать для этой области. | В разделе ''realm'' указать, какой пул серверов следует использовать для этой области. |
| <code bash> | <code bash> |
| realm rlm_prod_servers { | realm rlm_prod_servers { |
| </code> | </code> |
| |
| При использовании пула только с серверами авторизации, можно использовать ''auth_pool'', при пуле только с аккаунтингом ''acct_pool''. Но лучше использовать просто ''pool'', который включает оба предыдущих указателя.\\ | При использовании пула, содержащего только серверы авторизации, применять ''auth_pool''; при пуле, включающем только аккаунтинг, использовать ''acct_pool''. Рекомендуется использовать универсальный ''pool'', объединяющий оба варианта.\\ |
| Также сервер может проксировать пакеты CoA на основе атрибута ''Operator-Name'' через ''coa_pool''. Для настройки CoA использовать ''/etc/raddb/sites-available/coa'', в котором определяются параметры проксирования CoA-запросов. В файле конфигурации важно указать условия, при которых проксируется запрос в один из realm. А в каждом ''home_server'' определить параметры и для CoA (чаще всего они указаны по умолчанию).\\ | Проксирование CoA-пакетов выполнять на основе атрибута ''Operator-Name'' через ''coa_pool''. Для настройки CoA использовать файл ''/etc/raddb/sites-available/coa'', в котором задаются параметры проксирования CoA-запросов. В конфигурации указать условия, при которых запрос направляется в соответствующий ''realm'', а в каждом ''home_server'' определить параметры, используемые для CoA (как правило, они заданы по умолчанию).\\ |
| Но наши рекомендации — для работы с CoA использовать прямую связку PCRF – RADIUS, так как все параметры задаются в ''fastpcrf.conf'' и общение происходит напрямую.\\ | Рекомендуется для работы с CoA использовать прямое взаимодействие PCRF – RADIUS, так как все параметры настраиваются в ''fastpcrf.conf'', а обмен данными осуществляется напрямую. |
| Для настройки этих функций есть [[dpi:bras_bng:radius_integration:radius_auth_coa|статья]]. | Описание настройки данных функций приведено в статье [[dpi:bras_bng:radius_integration:radius_auth_coa|статья]]. |
| | |
| И параметр ''nostrip'', отвечающий за отсутствие деления User-Name. | |
| |
| | Параметр ''nostrip'' использовать для отключения разделения значения ''User-Name''. |
| |
| =====Конфигурация виртуального сервера FreeRADIUS===== | =====Конфигурация виртуального сервера FreeRADIUS===== |
| Файл конфигурации расположен в ''/etc/raddb/sites-available/default''. | Файл конфигурации расположен в ''/etc/raddb/sites-available/default''.\\ |
| Все параметры указывать для ''default''. Сначала раздел ''listen'', в котором указать какие подсети и порты слушать, а также какие типы сообщений принимать. | Все параметры указывать для ''default''. В первую очередь настроить раздел ''listen'', в котором задать подсети и порты для прослушивания, а также типы принимаемых сообщений. |
| <code bash> | <code bash> |
| server default { | server default { |
| </code> | </code> |
| |
| Также раздел для IPv6: | Настроить раздел для IPv6: |
| |
| <code bash> | <code bash> |
| </code> | </code> |
| |
| Далее раздел авторизации, в котором указаны доступные протоколы авторизации.\\ | Далее перейти к разделу авторизации, в котором перечислены поддерживаемые протоколы авторизации.\\ |
| В этом разделе определено правило, по которому все запросы авторизации с атрибутом ''VasExperts-Service-Type'' ''0'' и ''1'' отправляются в область для DHCP, если атрибутом равен ''2'', ''3'' и ''4'' в область PPPoE, а остальные будут отброшены с Reject. Все значения атрибута для других типов авторизации с расшифровкой указаны в словаре vasexperts и в [[статье]]. | В данном разделе задать правило маршрутизации запросов: все запросы авторизации с атрибутом ''VasExperts-Service-Type'' со значениями ''0'' и ''1'' направлять в область DHCP, со значениями ''2'', ''3'' и ''4'' — в область PPPoE, остальные запросы отклонять с Reject. Значения атрибута для других типов авторизации с расшифровкой приведены в словаре vasexperts и в [[dpi:dpi_components:freeradius:local_auth|статье]]. |
| <code bash> | <code bash> |
| authorize { | authorize { |
| </code> | </code> |
| |
| Раздел определяет методы аутентификации, которые будет использовать FreeRADIUS. Так как они пустые, то будут использоваться модули по умолчанию. | Раздел определяет методы аутентификации, которые будет использовать FreeRADIUS. Так как они пустые — будут использоваться модули по умолчанию. |
| |
| <code bash> | <code bash> |
| </code> | </code> |
| |
| Раздел тарификации/аккаунтинга, в котором определены правила обработки пакетов с различными ''VasExperts-Service-Type'', как и в модуле авторизации. Также важным отличием является первое правило для ''Acct-Status-Type'', на основе которого прокси будет отправлять на RADIUS и общие пакеты включения тарификации, а не отбрасывать их. | Раздел тарификации и аккаунтинга, в котором заданы правила обработки пакетов с различными значениями ''VasExperts-Service-Type'', аналогично модулю авторизации. Существенным отличием является первое правило для ''Acct-Status-Type'', на основе которого прокси направляет на RADIUS общие пакеты начала тарификации, а не отбрасывает их. |
| <code bash> | <code bash> |
| accounting { | accounting { |
| </code> | </code> |
| |
| Завершающие разделы. Задается параметр таймаута сессии и действие системы при Reject. | Завершающие разделы. Задать параметр таймаута сессии и действие системы при Reject. |
| <code bash> | <code bash> |
| post-auth { | post-auth { |