В eltex-radius есть возможность проксирования на сторонний сервер. По умолчанию только запросов авторизации и только на один сервер. В статье описана настройка проксирования авторизации и аккаунтинга, на один и более серверов.
Конфигурация по умолчанию
Общие настройки проксирования находятся в файле /etc/eltex-radius/local.conf и выглядят так:
# Proxying proxy_auth=0 proxy_domain_regex="^(.+\.)?enterprise\.root$" proxy_host="127.0.0.1" proxy_port=18121 proxy_secret="eltex"
proxy_auth– статус проксирования, 0 или 1, по умолчанию 0, выключено;proxy_domain_regex– регулярное выражение, по которому определяются запросы авторизации и в каких доменах они будут проксированы (для проксирования всех запросов можно установить значение:"^(.+\.)?root$");proxy_host– адрес сервера, на который будут проксироваться запросы;proxy_port– порт сервера;proxy_secret– секрет, заданный для сервера eltex-radius на сервере, на который будет осуществляться проксирование.
В такой конфигурации eltex-radius будет выступать в роли NAS.
Более тонкие настройки находятся в файле /etc/eltex-radius/proxy.conf и выглядят следующим образом:
Проксирование авторизации на сторонний RADIUS-сервер
Рассмотрим самый простой случай проксирования запросов авторизации на один сторонний RADIUS-сервер.
Для этого нужно отредактировать файл /etc/eltex-radius/local.conf следующим образом:
# Proxying proxy_auth=1 proxy_domain_regex="^(.+\.)?enterprise\.root$" proxy_host="10.10.10.11" proxy_port=1812 proxy_secret="topsecret"
В такой конфигурации все запросы авторизации в иерархии доменов enterprise.root будут проксироваться на сервер с адресом 10.10.10.11 на порт 1812, при этом в качестве secret будет использована фраза topsecret.
Аккаунтинг в такой конфигурации будет по прежнему обрабатываться локально, т. е. eltex-radius.
Редактирование /etc/eltex-radius/proxy.conf в этом случае не требуется.
Проксирование авторизации на сторонний RADIUS-сервер при docker инсталяции.
Рассмотрим самый простой случай проксирования запросов авторизации на один сторонний RADIUS-сервер.
Чтобы изменения настроек не терялись при обновлении, перенесите нужные переменные из environment/eltex-radius.env(приведенные ниже) в environment-overrides/eltex-radius.env. Настройка выполняется следующим образом:
# Proxying 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
В такой конфигурации все запросы авторизации в иерархии доменов enterprise.root будут проксироваться на сервер с адресом 10.10.10.11 на порт 1812, при этом в качестве secret будет использована фраза topsecret.
После чего необходимо пересобрать контейнер
sudo docker compose down eltex-radius sudo docker compose up -d eltex-radius
Проксирование одного SSID на сторонний RADIUS-сервер
Для этого нужно отредактировать файл /etc/eltex-radius/local.conf следующим образом:
# Proxy SSID (for example to eltex-eap-tls) #139679 proxy_ssid_enabled=1 proxy_ssid_value="SSID_NAME" proxy_ssid_host="10.10.10.11" proxy_ssid_port=18122 proxy_ssid_secret="eltex"
В такой конфигурации все запросы авторизации на ssid SSID_NAME будут проксироваться на сервер с адресом 10.10.10.11 на порт 18122 (уникальный порт) при этом в качестве secret будет использована фраза eltex.
Аккаунтинг в такой конфигурации будет по прежнему обрабатываться локально, т. е. eltex-radius.
Редактирование /etc/eltex-radius/proxy.conf в этом случае не требуется.
Проксирование авторизации и аккаунтинга на сторонний RADIUS-сервер
Для проксирования аккаунтинг-запросов также, как и запросов авторизации необходимо внести изменения в файле /etc/eltex-radius/proxy.conf.
В секции home_server изменить значение параметра type на auth+acct:
home_server auth_proxy {
type = auth+acct
ipaddr = "${proxy_host}"
port = "${proxy_port}"
secret = "${proxy_secret}"
response_window = 20
#
# Start "zombie_period" after this many responses have
# timed out.
#
# response_timeouts = 1
zombie_period = 40
revive_interval = 120
status_check = status-server
check_interval = 30
check_timeout = 4
num_answers_to_alive = 3
max_outstanding = 65536
}
В секции realm auth proxy заменить параметр auth_pool на pool, значение оставить тем же:
realm auth_proxy {
pool = auth_proxy_failover
}
А также, в файле /etc/eltex-radius/servers/default в секцию preacct после preprocess добавить строку proxy_auth:
preacct {
preprocess
proxy_auth
acct_counters64
acct_unique
acct_ciscoavpair
# Parse common cisco-avp ('domain' for example)
common_ciscoavpair
rewrite_called_station_id
if (${pcrf_enabled} == 0) {
fill_ap_domain
fill_ssid_security
}
files
}
Проксирование авторизации и аккаунтинга на группу сторонних RADIUS-серверов
Этот вариант требует значительной модификации конфигурационных файлов. Будет рассмотрено проксирование на 2 сторонних RADIUS-сервера, но предложенным методом можно масштабировать и далее.
Отредактировать /etc/eltex-radius/local.conf, добавив индивидуальные параметры host, port и secret для каждого из серверов, на которые осуществляется проксирование:
# Proxying proxy_auth=1 proxy_domain_regex="^(.+\.)?root$" proxy1_host="10.10.10.11" proxy1_port=1812 proxy1_secret="topsecret" proxy2_host="10.10.10.12" proxy2_port=1812 proxy2_secret="topsecret"
Согласно этим настройкам модифицировать /etc/eltex-radius/local.conf. Для каждого сервера должна быть добавлена и описана секция home_server с уникальным именем.
Все home_server должны быть добавлены в пул home_server_pool, который, в свою очередь, должен быть указан в realm auth_proxy. Так как проксировать предполагается и аккаунтинг, и авторизацию - параметр, указывающий на пул, должен называться pool.
home_server auth_proxy1 {
type = auth+acct
ipaddr = "${proxy1_host}"
port = "${proxy1_port}"
secret = "${proxy1_secret}"
response_window = 20
#
# Start "zombie_period" after this many responses have
# timed out.
#
# response_timeouts = 1
zombie_period = 40
revive_interval = 120
status_check = status-server
check_interval = 30
check_timeout = 4
num_answers_to_alive = 3
max_outstanding = 65536
}
home_server auth_proxy2 {
type = auth+acct
ipaddr = "${proxy2_host}"
port = "${proxy2_port}"
secret = "${proxy2_secret}"
response_window = 20
zombie_period = 40
revive_interval = 120
status_check = status-server
check_interval = 30
check_timeout = 4
num_answers_to_alive = 3
max_outstanding = 65536
}
home_server_pool auth_proxy_failover {
type = fail-over
home_server = auth_proxy1
home_server = auth_proxy2
}
realm auth_proxy {
pool = auth_proxy_failover
}
В файле /etc/eltex-radius/servers/default в секцию preacct после preprocess добавить строку proxy_auth, как описано в предыдущем разделе.
Приведенная конфигурация настраивает проксирвоание в режиме failover, что задается параметром type в секции home_server_pool. Также доступен режим балансировки нагрузки между серверами, о чем подробнее можно узнать по второй ссылке из раздела Источники.
Проксирование авторизации и аккаунтинга на сторонний RADIUS-сервер при docker инсталяции.
Для проксирования аккаунтинг-запросов также, как и запросов авторизации необходимо внести изменения в файле контейнера /etc/eltex-radius/proxy.conf.
1)sudo docker cp eltex-radius:/etc/eltex-radius/proxy.conf /home/tester/ - копируем нужный файл из контейнера
В секции home_server изменить значение параметра type на auth+acct:
В секции realm auth proxy заменить параметр auth_pool на pool, значение оставить тем же:
2)sudo docker cp eltex-radius:/etc/eltex-radius/servers/default /home/tester/ - копируем еще один файл контейнера
в файле /etc/eltex-radius/servers/default в секцию preacct после preprocess добавить строку proxy_auth:
3)Файлы складываем в директорию data/eltex-radius/etc/eltex-radius/
и в docker-compose.yml в секции volumes для сервиса eltex-radius добавляем
- ./data/eltex-radius/etc/eltex-radius/proxy.conf:/etc/eltex-radius/proxy.conf:ro - ./data/eltex-radius/etc/eltex-radius/default:/etc/eltex-radius/servers/default:ro
4)Даем необходимые права файлам
sudo chmod 664 data/eltex-radius/etc/eltex-radius/proxy.conf sudo chmod 664 data/eltex-radius/etc/eltex-radius/default
5)Пересоздаем контейнер
sudo docker compose down eltex-radius sudo docker compose up -d eltex-radius
Проксирование авторизации и аккаунтинга на группу сторонних RADIUS-серверов при docker инсталяции.
Этот вариант требует значительной модификации конфигурационных файлов. Будет рассмотрено проксирование на 2 сторонних RADIUS-сервера, но предложенным методом можно масштабировать и далее.
Чтобы изменения настроек не терялись при обновлении, перенесите нужные переменные из environment/eltex-radius.env(приведенные ниже) в environment-overrides/eltex-radius.env. Настройка выполняется следующим образом:
# Proxying RADIUS_PROXY_AUTH=1 RADIUS_PROXY_DOMAIN_REGEX=^(.+\.)?root$ RADIUS_PROXY1_HOST=10.10.10.11 RADIUS_PROXY1_PORT=1812 RADIUS_PROXY1_SECRET=topsecret RADIUS_PROXY2_HOST=10.10.10.12 RADIUS_PROXY2_PORT=1812 RADIUS_PROXY2_SECRET=topsecret
Для проксирования двух и более доменов на разные RADIUS-сервера необходимо внести изменения в файле контейнера /etc/eltex-radius/local.conf
sudo docker cp eltex-radius:/etc/eltex-radius/local.conf /home/tester/ - копируем нужный файл из контейнера, и настраиваем следующим образом
# Proxying
proxy_auth=$ENV{RADIUS_PROXY_AUTH}
proxy_domain_regex=$ENV{RADIUS_PROXY_DOMAIN_REGEX}
proxy1_host=$ENV{RADIUS_PROXY_HOST}
proxy1_port=$ENV{RADIUS_PROXY_PORT}
proxy1_secret=$ENV{RADIUS_PROXY_SECRET}
proxy2_host=$ENV{RADIUS_PROXY_HOST}
proxy2_port=$ENV{RADIUS_PROXY_PORT}
proxy2_secret=$ENV{RADIUS_PROXY_SECRET}
Для каждого сервера должна быть добавлена и описана секция home_server с уникальным именем.
Все home_server должны быть добавлены в пул home_server_pool, который, в свою очередь, должен быть указан в realm auth_proxy. Так как проксировать предполагается и аккаунтинг, и авторизацию - параметр, указывающий на пул, должен называться pool.
home_server auth_proxy1 {
type = auth+acct
ipaddr = "$ENV{RADIUS_PROXY1_HOST}"
port = "$ENV{RADIUS_PROXY1_PORT}"
secret = "$ENV{RADIUS_PROXY1_SECRET}"
response_window = 20
#
# Start "zombie_period" after this many responses have
# timed out.
#
# response_timeouts = 1
zombie_period = 40
revive_interval = 120
status_check = status-server
check_interval = 30
check_timeout = 4
num_answers_to_alive = 3
max_outstanding = 65536
}
home_server auth_proxy2 {
type = auth+acct
ipaddr = "$ENV{RADIUS_PROXY2_HOST}"
port = "$ENV{RADIUS_PROXY2_PORT}"
secret = "$ENV{RADIUS_PROXY2_SECRET}"
response_window = 20
#
# Start "zombie_period" after this many responses have
# timed out.
#
# response_timeouts = 1
zombie_period = 40
revive_interval = 120
status_check = status-server
check_interval = 30
check_timeout = 4
num_answers_to_alive = 3
max_outstanding = 65536
}
home_server_pool auth_proxy_failover {
type = fail-over
home_server = auth_proxy1
home_server = auth_proxy2
}
realm auth_proxy {
pool = auth_proxy_failover
}
В файле /etc/eltex-radius/servers/default в секцию preacct после preprocess добавить строку proxy_auth, как описано в предыдущем разделе.
Файлы складываем в директорию data/eltex-radius/etc/eltex-radius/
и в docker-compose.yml в секции volumes для сервиса eltex-radius добавляем
- ./data/eltex-radius/etc/eltex-radius/proxy.conf:/etc/eltex-radius/proxy.conf:ro - ./data/eltex-radius/etc/eltex-radius/default:/etc/eltex-radius/servers/default:ro - ./data/eltex-radius/etc/eltex-radius/local.conf:/etc/eltex-radius/local.conf:ro
Даем необходимые права файлам
sudo chmod 664 data/eltex-radius/etc/eltex-radius/proxy.conf sudo chmod 664 data/eltex-radius/etc/eltex-radius/default sudo chmod 664 data/eltex-radius/etc/eltex-radius/local.conf
Пересоздаем контейнер
sudo docker compose down eltex-radius sudo docker compose up -d eltex-radius
Проксирование двух и более доменов на разные RADIUS-сервера
Данная конфигурация может потребоваться для частичного, поэтапного перевода клиентов с одного прокси сервера на другой.
В приведенной ниже конфигурации домены Central, North-West обрабатываются на старом сервере, а South, Volga переведены на новый. После 'перевода' (например, North-West из proxy_domain_regex в proxy_domain_regex_2) нужно обязательно перезапустить основной eltex-radius.
Для работы с двумя условиями проксирования и двумя серверами нужно выполнить следующие настройки:
В файле /etc/eltex-radius/local.conf добавить вторую группу доменов
# Proxying (настраиваем первую группу доменов) proxy_auth=1 proxy_domain_regex="^(.+\.)?(Central|North-West)\.root$" proxy_host="1.1.1.1" proxy_port=1812 proxy_secret="password1" # добавляем вторую группу доменов proxy_domain_regex_2="^(.+\.)?(South|Volga)\.root$" proxy_host_2="2.2.2.2" proxy_port_2=1812 proxy_secret_2="password2"
В файле /etc/eltex-radius/proxy.conf добавить второй сервер
home_server auth_proxy_2 {
type = auth
ipaddr = "${proxy_host_2}"
port = "${proxy_port_2}"
secret = "${proxy_secret_2}"
response_window = 20
#
# Start "zombie_period" after this many responses have
# timed out.
#
# response_timeouts = 1
zombie_period = 40
revive_interval = 120
status_check = status-server
check_interval = 30
check_timeout = 4
num_answers_to_alive = 3
max_outstanding = 65536
}
home_server_pool auth_proxy_failover_2 {
type = fail-over
home_server = auth_proxy_2
}
realm auth_proxy_2 {
auth_pool = auth_proxy_failover_2
}
В файле /etc/eltex-radius/policy.d/proxy добавить второе условие проксирования
# Proxy Domain
proxy_auth {
if ("${proxy_auth}" == 1) {
if (&Eltex-Domain && &Eltex-Domain =~ /${proxy_domain_regex}/) {
update control {
Proxy-To-Realm = "auth_proxy"
}
# If request is going to be proxied, local processing is pointless
handled
}
if (&Eltex-Domain && &Eltex-Domain =~ /${proxy_domain_regex_2}/) {
update control {
Proxy-To-Realm = "auth_proxy_2"
}
# If request is going to be proxied, local processing is pointless
handled
}
}
}
После этого остается только перезапустить eltex-radius.
Проверить, как отработает проксирование можно, заглянув в отладку. В приведенном примере видим, как авторизация на SSID South в домене South.root проксируется на home server 2.2.2.2.
sudo eraddebug (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"
Подмена (добавление) атрибутов RADIUS при проксировании запросов на сторонний сервер
Для того, чтобы изменять (или обогащать) RADIUS запросы дополнительным атрибутом при проксировании их через eltex-radius необходимо изменить секцию # Proxy Domain в конфигурационном файле /etc/eltex-radius/policy.d/proxy.
Рассмотрим обогащение пакетов на примере атрибута NAS_ID. ТД Eltex в этом атрибуте передают свой MAC адрес, для изменения значения этого атрибута раскомментируйте необходимую секцию.
В примере ниже при проксировании RADIUS запросов с доменом SSID - "domain_1.root" на сторонний RADIUS сервер, значение NAS-ID будет изменено на строчку "domain1". Если на Eltex-radius от доверенной ТД придет запрос с доменом SSID "domain_2.root", то значение NAS-ID станет "domain2".
# Proxy Domain
proxy_auth {
if ("${proxy_auth}" == 1) {
if (&Eltex-Domain && &Eltex-Domain =~ /${proxy_domain_regex}/) {
#If you need to configure NAS-Identifier substitution when proxying requests via eltex-radius
if (&Eltex-Domain == "domain_1.root") {
update request {
NAS-Identifier := "domain1"
}
}
elsif (&Eltex-Domain == "domain_2.root") {
update request {
NAS-Identifier := "domain2"
}
}
update control {
Proxy-To-Realm = "auth_proxy"
}
# If request is going to be proxied, local processing is pointless
handled
}
}
}
# Proxy SSID (for example to eltex-eap-tls) #139679
proxy_ssid {
if ("${proxy_ssid_enabled}" == 1) {
if (Called-Station-SSID == "${proxy_ssid_value}") {
update control {
Proxy-To-Realm = "auth_ssid"
}
# If request is going to be proxied, local processing is pointless
handled
}
}
}
- domain_1.root и domain_2.root - название домена SSID;
- domain1 и domain2 - значения, которые будут подставляться в NAS-ID вместо MAC адреса ТД.
В случае, если условия для домена не прописаны в /etc/eltex-radius/policy.d/proxy NAS_ID изменяться не будет
Для применения изменений конфигурации eltex-radius, необходимо перезапустить сервис командой:
service eltex-radius restart
Отключение проверки status-server встречного сервера
При работе проксирования по умолчанию работает механизм проверки статуса встречного сервера . Если до сервера, на который идет проксирование, пропала на некоторое время связь, а потом восстановилась, то требуется, чтобы этот сервер ответил на запрос status-server - только после этого проксирование возобновится.
В ходе эксплуатации может возникнуть ситуация, при которой встречный сервер не умеет отвечать на status-server, либо он не настроен должным образом. В таком случае, есть возможность отключить эту проверку на проксирующем сервере.
Для этого нужно внести следующие изменения в конфигурацию:
В файле /etc/eltex-radius/proxy.conf:
в разделе home_server auth_proxy установить:
значение status_check = none, по умолчанию выставлено status-server
значение revive_interval = 60, по умолчанию 120
в разделе home_server_pool auth_proxy_failover установить:
значение type = fail-over, по умолчанию выставлено load-balance
После чего, необходимо перезапустить сервис командой:
service eltex-radius restart
В итоге: в случае прерывания связи между серверами, после восстановления связности сервис станет доступен в течении 60 секунд.
