В eltex-radius есть возможность проксирования на сторонний сервер. По умолчанию он проксирует только запросы авторизации и только на один сервер. 

В данной инструкции описана настройка проксирования авторизации и аккаунтинга, на один и более серверов, используя плейбуки Ansible.

Более подробно про установку скриптом в Docker с помощью плейбуков Ansible можно посмотреть здесь:

v1.37_Пошаговая установка SoftWLC в Docker через Ansible скриптом-установщиком

Конфигурация по умолчанию

Настраиваемые параметры можно найти по пути:

/home/<имя пользователя>/ansible/softwlc-ansible-1.36/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  

В такой конфигурации 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 секунд.