...
Редактирование /etc/eltex-radius/proxy.conf в этом случае не требуется.
Проксирование
...
одного SSID на сторонний RADIUS-сервер
...
Для проксирования аккаунтинг-запросов также, как и запросов авторизации необходимо внести изменения в файле этого нужно отредактировать файл /etc/eltex-radius/proxylocal.conf.В секции home_server изменить значение параметра type на auth+acctследующим образом:
| Блок кода | ||||||
|---|---|---|---|---|---|---|
| ||||||
# 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 {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_intervaltype = 120 auth+acct status_checkipaddr = status-server"${proxy_host}" check_intervalport = 30"${proxy_port}" check_timeoutsecret = 4"${proxy_secret}" num_answers_to_aliveresponse_window = 3 20 # 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 # Start "zombie_period" after this many responses have # timed out. acct_counters64# # acct_uniqueresponse_timeouts = 1 acctzombie_ciscoavpair period = 40 # Parse common cisco-avp ('domain' for example)revive_interval = 120 commonstatus_ciscoavpair check rewrite_called_station_id = status-server if (${pcrf_enabled}check_interval == 0) {30 check_timeout fill_ap_domain= 4 fill_ssid_securitynum_answers_to_alive = 3 } max_outstanding = 65536 } |
В секции realm auth proxy заменить параметр auth_pool на pool, значение оставить тем же:
| Блок кода | ||||
|---|---|---|---|---|
| ||||
realm auth_proxy { pool = files } |
Проксирование авторизации и аккаунтинга на группу сторонних RADIUS-серверов
Этот вариант требует значительной модификации конфигурационных файлов. Будет рассмотрено проксирование на 2 сторонних RADIUS-сервера, но предложенным методом можно масштабировать и далее.
...
auth_proxy_failover
} |
А также, в файле /etc/eltex-radius
...
/servers/default в секцию preacct после preprocess добавить строку proxy_auth:
| Блок кода | ||||
|---|---|---|---|---|
| ||||
#preacct 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 { { 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 type = auth+acct fill_ssid_security } ipaddr = "${proxy1_host}" 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 { 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_outstandingtype = 65536 } home_server auth_proxy2 { type = auth+acct auth+acct ipaddr = "${proxy2proxy1_host}" port = "${proxy2proxy1_port}" secret = "${proxy2proxy1_secret}" response_window = 20 # zombie_period = 40 # Start revive_interval = 120 "zombie_period" after this many responses have status_check = status-server# timed out. check_interval = 30 # # checkresponse_timeouttimeouts = 41 num_answers_to_alivezombie_period = 340 maxrevive_outstandinginterval = 65536 } 120 home_server_pool auth_proxy_failover { status_check type = failstatus-overserver homecheck_serverinterval = auth_proxy130 homecheck_servertimeout = auth_proxy2 } realm auth_proxy { 4 num_answers_to_alive pool= 3 max_outstanding = auth_proxy_failover } |
В файле /etc/eltex-radius/servers/default в секцию preacct после preprocess добавить строку proxy_auth, как описано в предыдущем разделе.
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. Также |
| Информация |
Приведенная конфигурация настраивает проксирвоание в режиме failover, что задается параметром type в секции home_server_pool. Также доступен режим балансировки нагрузки между серверами, о чем подробнее можно узнать по второй ссылке из раздела Источники. |
...
| Блок кода | ||||
|---|---|---|---|---|
| ||||
# 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
}
# If request is going to be proxied, local processing is pointless
handled
}
}
} |
После этого остается только перезапустить eltex-radius.
Проверить, как отработает проксирование можно, заглянув в отладку. В приведенном примере видим, как авторизация на SSID South в домене South.root проксируется на home server 2.2.2.2.
}
} |
После этого остается только перезапустить 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 | ||||
| Блок кода | ||||
| ||||
sudo eraddebug (0) Wed Jun 16 14:35:15 2021: Debug: Starting proxy toUser-Name home server 2.2.2.2 port 1812= "test" (0) Wed Jun 16 14:35:15 2021: Debug: Sent AccessNAS-IP-RequestAddress Id 232 from 0.0.0.0:32770 to 2.2.2.2:1812 length 221= 10.25.96.115 (0) Wed Jun 16 14:35:15 2021: Debug: UserNAS-NameIdentifier = "test "A8-F9-4B-B2-48-EA" (0) Wed Jun 16 14:35:15 2021: Debug: NAS-IPPort-AddressId = 10.25.96.115"10" (0) Wed Jun 16 14:35:15 2021: Debug: NAS-IdentifierPort = "A8-F9-4B-B2-48-EA"0 (0) Wed Jun 16 14:35:15 2021: Debug: NASCalled-PortStation-Id = "10A8-F9-4B-B2-48-E0:South" (0) Wed Jun 16 14:35:1518 2021: Debug: NASEltex-PortDomain = 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 при проксировании запросов на сторонний сервер
...
"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
|
Рассмотрим обогащение пакетов на примере атрибута 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}"&Eltex-Domain == "domain_1.root") { update request { if (&Eltex-Domain && &Eltex-Domain =~ /${proxy_domain_regex}/) { #If you need to configure NAS-Identifier substitution when proxying requests via eltex-radius := "domain1" if (&Eltex-Domain == "domain_1.root") { } } update request { elsif (&Eltex-Domain == "domain_2.root") { NAS-Identifier := "domain1" update request { } NAS-Identifier := "domain2" } elsif (&Eltex-Domain == "domain_2.root") { } } update request { update control { NAS-Identifier := "domain2" Proxy-To-Realm = "auth_proxy" } } } # If request is going to be proxied, local processing is pointless update control { handled } Proxy-To-Realm = "auth_proxy" } } # Proxy SSID (for example to eltex-eap-tls) #139679 proxy_ssid { if ("${proxy_ssid_enabled}" == 1) }{ if (Called-Station-SSID == "${proxy_ssid_value}") { #update Ifcontrol request{ is going to be proxied, local processing is pointless Proxy-To-Realm = "auth_ssid" handled} # If request is } going to be proxied, local processing is } } pointless # Proxy SSID (for example to eltex-eap-tls) #139679 proxy_ssid { handled 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 изменяться не будет |
}
}
} |
- 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
После чегоДля применения изменений конфигурации eltex-radius, необходимо перезапустить сервис командой:
| Блок кода | ||||
|---|---|---|---|---|
| ||||
service eltex-radius restart |
Отключение проверки status-server встречного сервера
При работе проксирования по умолчанию работает механизм проверки статуса встречного сервера . Если до сервера, на который идет проксирование, пропала на некоторое время связь, а потом восстановилась, то требуется, чтобы этот сервер ответил на запрос status-server - только после этого проксирование возобновится.
В ходе эксплуатации может возникнуть ситуация, при которой встречный сервер не умеет отвечать на status-server, либо он не настроен должным образом. В таком случае, есть возможность отключить эту проверку на проксирующем сервере.
Для этого нужно внести следующие изменения в конфигурацию:
В итоге: в случае прерывания связи между серверами, после восстановления связности сервис станет доступен в течении 60 секунд.
Отключение при инсталляции в Docker.
В файле 1)sudo docker cp eltex-radius:/etc/eltex-radius/proxy.conf /home/tester/ - копируем proxy.conf из контейнера
2)В файле /etc/eltex-radius/proxy.conf:
в разделе разделе home_server auth_proxy установить:
значение status_check = none, по умолчанию выставлено status-server
значение revive_interval = 60, по умолчанию 120
в разделе home_server_pool auth_proxy установить_failover установить:
значение status_check = none, по умолчанию выставлено status-server
значение revive_interval = 60, по умолчанию 120
в разделе home_server_pool auth_proxy_failover установить:
значение type = fail-over, по умолчанию выставлено load-balance
После чего, необходимо перезапустить сервис значение type = fail-over, по умолчанию выставлено load-balance
3)Файл складываем в директорию data/eltex-radius/etc/eltex-radius/proxy.conf
и в docker-compose.yml в секции volumes для сервиса eltex-radius добавляем
| Блок кода | ||||
|---|---|---|---|---|
| ||||
- ./data/eltex-radius/etc/eltex-radius/proxy.conf:/etc/eltex-radius/proxy.conf:ro |
командой:
4)sudo chmod 664 data/eltex-radius/etc/eltex-radius/proxy.conf - даем нужные права файлу
5)Пересоздаем контейнер
| Блок кода | ||||
|---|---|---|---|---|
| ||||
servicesudo docker compose down eltex-radius restart sudo docker compose up -d eltex-radius |
В итоге: в случае прерывания связи между серверами, после восстановления связности сервис станет доступен в течении 60 секунд.
Источники
...