В eltex-radius есть возможность проксирования на сторонний сервер. По умолчанию он проксирует только запросы авторизации и только на один сервер.
В данной инструкции описана настройка проксирования авторизации и аккаунтинга, на один и более серверов, используя плейбуки Ansible.
Более подробно про установку скриптом в Docker с помощью плейбуков Ansible можно посмотреть здесь:
v1.37_Пошаговая установка SoftWLC в Docker через Ansible скриптом-установщиком
Конфигурация по умолчанию
Настраиваемые параметры можно найти по пути:
/home/<имя пользователя>/ansible/softwlc-ansible-1.37/inventory/my_softwlc/group_vars/all.yml
И выглядят следующим образом:
# Настройка проксирования radius proxy_vars: radius_proxy_auth: 0 radius_proxy_domain_regex: ^(.+\.)?enterprise\.root$ radius_proxy_host: 127.0.0.1 radius_proxy_port: 1812 radius_proxy_secret: eltex
proxy_auth– статус проксирования, 0 или 1, по умолчанию 0, выключено;proxy_domain_regex– регулярное выражение, по которому определяются запросы авторизации и в каких доменах они будут проксированы (для проксирования всех запросов можно установить значение:"^(.+\.)?root$");proxy_host– адрес сервера, на который будут проксироваться запросы;proxy_port– порт сервера;proxy_secret– секрет, заданный для сервера eltex-radius на сервере, на который будет осуществляться проксирование.
В такой конфигурации eltex-radius будет выступать в роли NAS.
Для более тонких настроек возможно переопределить следущие параметры:
radius_proxy_auth_status_check: status-server radius_proxy_auth_response_window: 20 radius_proxy_auth_revive_interval: 60 radius_proxy_auth_check_interval: 30 radius_proxy_auth_check_timeout: 4 radius_proxy_auth_num_answers_to_alive: 3 radius_proxy_auth_zombie_period: 40
При отсутствии этих параметров значения будут установлены по умолчанию, как указано выше.
Проксирование авторизации на сторонний RADIUS-сервер
Рассмотрим самый простой случай проксирования запросов авторизации на один сторонний RADIUS-сервер.
Для этого нужно отредактировать файл all.yml следующим образом:
# Proxying proxy_vars: radius_proxy_auth: 1 radius_proxy_domain_regex: ^(.+\.)?enterprise\.root$ radius_proxy_host: 10.10.10.11 radius_proxy_port: 1812 radius_proxy_secret: topsecret
После чего запустить скрипт с правами суперпользователя и тегом --configure-radius-proxy:
sudo ./eltex-softwlc-helper-ansible-latest.sh --configure-radius-proxy
В такой конфигурации все запросы авторизации в иерархии доменов enterprise.root будут проксироваться на сервер с адресом 10.10.10.11 на порт 1812, при этом в качестве secret будет использована фраза topsecret.
Аккаунтинг в такой конфигурации будет по прежнему обрабатываться локально, т. е. через eltex-radius.
Проксирование одного SSID на сторонний RADIUS-сервер
Для этого нужно отредактировать файл all.yml следующим образом:
# Proxying proxy_vars: radius_proxy_ssid_enabled: 1 radius_proxy_ssid_value: SSID_NAME radius_proxy_ssid_host: 10.10.10.11 radius_proxy_ssid_port: 1812 radius_proxy_ssid_secret: eltex
После чего запустить скрипт с правами суперпользователя и тегом --configure-radius-proxy:
sudo ./eltex-softwlc-helper-ansible-latest.sh --configure-radius-proxy
В такой конфигурации все запросы авторизации на ssid SSID_NAME будут проксироваться на сервер с адресом 10.10.10.11 на порт 1812 при этом в качестве secret будет использована фраза eltex.
Аккаунтинг в такой конфигурации будет по прежнему обрабатываться локально, т. е. через eltex-radius.
В конфигурации необходимо выбрать один механизм проксирования: либо по домену, либо по SSID.
Проксирование авторизации и аккаунтинга на сторонний RADIUS-сервер
Для проксирования аккаунтинг-запросов также, как и запросов авторизации необходимо внести изменения в файле all.yml.
В переменной proxy_vars изменить значение параметра radius_proxy_acct на 1:
proxy_vars: radius_proxy_acct: 1
После чего запустить скрипт с правами суперпользователя и тегом --configure-radius-proxy:
sudo ./eltex-softwlc-helper-ansible-latest.sh --configure-radius-proxy
Проксирование авторизации и аккаунтинга на группу сторонних RADIUS-серверов
Будет рассмотрено проксирование на 2 сторонних RADIUS-сервера, но предложенным методом можно масштабировать и далее.
Для этого необходимо отредактировать файл all.yml, добавив индивидуальные параметры host, port и secret для каждого из серверов, на которые осуществляется проксирование. Так же необходимо указать значение переменной radius_proxy_auth_failover_type:
# Proxying proxy_vars: radius_proxy_auth: 1 radius_proxy_acct: 1 proxy_domain_regex: ^(.+\.)?root$ # для SSID указать radius_proxy_ssid_failover_type: fail-over radius_proxy_auth_failover_type: fail-over radius_proxy1_host: 10.10.10.11 radius_proxy1_port: 1812 radius_proxy1_secret: eltex radius_proxy2_host: 10.10.10.12 radius_proxy2_port: 1812 radius_proxy2_secret: eltex
После чего запустить скрипт с правами суперпользователя и тегом --configure-radius-proxy:
sudo ./eltex-softwlc-helper-ansible-latest.sh --configure-radius-proxy
Приведенная конфигурация настраивает проксирование в режиме failover, что задается параметром radius_proxy_auth_failover_type. Также доступен режим load-balance - балансировки нагрузки между серверами. Более подробно можно узнать здесь.
Проксирование одного SSID на группу сторонних RADIUS-серверов
Будет рассмотрено проксирование на 2 сторонних RADIUS-сервера, но предложенным методом можно масштабировать и далее.
Для этого необходимо отредактировать файл all.yml, добавив индивидуальные параметры host, port и secret для каждого из серверов, на которые осуществляется проксирование. Так же необходимо указать значение переменной radius_proxy_ssid_failover_type:
# Proxying proxy_vars: radius_proxy_ssid_enabled: 1 radius_proxy_ssid_value: SSID_NAME radius_proxy_ssid_host: 10.10.10.11 radius_proxy_ssid_port: 1812 radius_proxy_ssid_secret: eltex radius_proxy1_ssid_host: 10.10.10.12 radius_proxy1_ssid_port: 1812 radius_proxy1_ssid_secret: eltex
После чего запустить скрипт с правами суперпользователя и тегом --configure-radius-proxy:
sudo ./eltex-softwlc-helper-ansible-latest.sh --configure-radius-proxy
Проксирование двух и более доменов на разные RADIUS-сервера
Данная конфигурация может потребоваться для частичного, поэтапного перевода клиентов с одного прокси сервера на другой.
В приведенной ниже конфигурации домены Central, North-West обрабатываются на старом сервере, а South, Volga переведены на новый.
Для работы с двумя условиями проксирования и двумя серверами нужно выполнить следующие настройки:
В файле all.yml добавить вторую группу доменов:
# Настройка проксирования radius proxy_vars: radius_proxy_auth: 1 # добавляем первую группу доменов radius_proxy_domain_regex: (.+\.)?(Central|North-West)\.root$ radius_proxy_host: 1.1.1.1 radius_proxy_port: 1812 radius_proxy_secret: password1 # добавляем вторую группу доменов radius_proxy_domain_regex_2: ^(.+\.)?(South|Volga)\.root$ radius_proxy_host: 2.2.2.2 radius_proxy_port: 1812 radius_proxy_secret: password2
В каждом из доменов проксирования возможно указывать несколько серверов аналогично примеру в формате с указанием индекса сервера в каждой группе - "radius_proxy<N>"... и указанием постфикса определяющего домен в формате "_N".
Например: radius_proxy3_host_2.
Проверить, как отработает проксирование можно, заглянув в отладку (выполняется на хосте с SoftWLC). В приведенном примере видим, как авторизация на SSID South в домене South.root проксируется на home server 2.2.2.2.
docker exec -it eltex-radius eraddebug -t 0 (0) Wed Jun 16 14:35:15 2021: Debug: Starting proxy to home server 2.2.2.2 port 1812 (0) Wed Jun 16 14:35:15 2021: Debug: Sent Access-Request Id 232 from 0.0.0.0:32770 to 2.2.2.2:1812 length 221 (0) Wed Jun 16 14:35:15 2021: Debug: User-Name = "test" (0) Wed Jun 16 14:35:15 2021: Debug: NAS-IP-Address = 10.25.96.115 (0) Wed Jun 16 14:35:15 2021: Debug: NAS-Identifier = "A8-F9-4B-B2-48-EA" (0) Wed Jun 16 14:35:15 2021: Debug: NAS-Port-Id = "10" (0) Wed Jun 16 14:35:15 2021: Debug: NAS-Port = 0 (0) Wed Jun 16 14:35:15 2021: Debug: Called-Station-Id = "A8-F9-4B-B2-48-E0:South" (0) Wed Jun 16 14:35:18 2021: Debug: Eltex-Domain = "South.root"
Отключение проверки status-server встречного сервера
При работе проксирования по умолчанию работает механизм проверки статуса встречного сервера . Если до сервера, на который идет проксирование, пропала на некоторое время связь, а потом восстановилась, то требуется, чтобы этот сервер ответил на запрос status-server - только после этого проксирование возобновится.
В ходе эксплуатации может возникнуть ситуация, при которой встречный сервер не умеет отвечать на status-server, либо он не настроен должным образом. В таком случае, есть возможность отключить эту проверку на проксирующем сервере.
Для этого нужно в файле all.yml в переменной proxy_vars изменить для необходимого сервера значение radius_proxy_auth_status_check: none, по умолчанию выставленого на status-server
radius_proxy_auth_status_check: none
Если необходимо, возможно изменить значение radius_proxy_auth_revive_interval, по умолчанию выставленого на 60
radius_proxy_auth_revive_interval: 120
Таким образом, в случае прерывания связи между серверами, после восстановления связности сервис станет доступен в течении 120 секунд.