Используется для сценария, когда необходимо распределить RADIUS трафик абонентов с разными типами доступа IPoE, PPPoE, L2TP между разными группами RADIUS серверов.
В данном примере рассмотрим распределение Авторизации и Аккаунтинга между группами серверов в режим load-balance для разных типов доступа между группами RADIUS серверов:
Разделение Auth/Acc различных типов доступа происходит на основе атрибута VasExperts-Service-Type с использованием операторов ветвления (if-else).
RADIUS СоА сообщения могут отправляться от RADIUS серверов в BRAS (fastPCRF) следующим способом:
Конфигурация 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 и общение происходит напрямую.
Для настройки этих функций есть статья.
И параметр nostrip, отвечающий за отсутствие деления User-Name.
Файл конфигурации расположен в /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 { } }