Дерево страниц
Перейти к концу метаданных
Переход к началу метаданных

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

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


Общие настройки проксирования находятся в файле /etc/eltex-radius/local.conf и выглядят так:

часть конфигурационного файла /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 и выглядят следующим образом:

Настройки по умолчанию
# -*- text -*-
##
## proxy.conf -- proxy radius and realm configuration directives
##

proxy server {
	default_fallback = no
}

home_server auth_proxy {
	type = auth
	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
}

home_server_pool auth_proxy_failover {
	type = fail-over
	home_server = auth_proxy
}

realm auth_proxy {
	auth_pool = auth_proxy_failover
}

realm LOCAL {
	#  If we do not specify a server pool, the realm is LOCAL, and
	#  requests are not proxied to it.
}

#realm "~(.*\.)*example\.net$" {
#      auth_pool = my_auth_failover
#}

# Proxy SSID (for example to eltex-eap-tls) #139679
home_server auth_ssid {
	type = auth
	ipaddr = "${proxy_ssid_host}"
	port = "${proxy_ssid_port}"
	secret = "${proxy_ssid_secret}"

	response_window = 20

    #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_ssid_failover {
    type = fail-over
    home_server = auth_ssid
}

realm auth_ssid {
    auth_pool = auth_ssid_failover
}


Проксирование авторизации на сторонний RADIUS-сервер


Рассмотрим самый простой случай проксирования запросов авторизации на один сторонний RADIUS-сервер.

Для этого нужно отредактировать файл /etc/eltex-radius/local.conf следующим образом:

часть конфигурационного файла /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-сервер


Для проксирования аккаунтинг-запросов также, как и запросов авторизации необходимо внести изменения в файле /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. Также доступен режим балансировки нагрузки между серверами, о чем подробнее можно узнать по второй ссылке из раздела Источники.

Отключение проверки 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 секунд.

Источники


  1. https://wiki.freeradius.org/version4/upgrade/proxy
  2. https://github.com/FreeRADIUS/freeradius-server/blob/v3.0.x/raddb/proxy.conf


  • Нет меток