COA: відмінності між версіями
Sv (обговорення | внесок) Немає опису редагування |
Sv (обговорення | внесок) |
||
(Не показано 17 проміжних версій цього користувача) | |||
Рядок 1: | Рядок 1: | ||
Модуль Change of Authorization | === Модуль Change of Authorization === | ||
COA - это расширение Radius протокола, позволяющее | COA - это расширение Radius протокола, позволяющее посылать команды на оборудование. | ||
===Зачем нужен COA?=== | |||
Стандартно Radius работает в одном направлении - оборудование посылает информацию на Radius-сервер (например, запрос на авторизацию или данные по трафику), тот обращается к NoDeny чтобы авторизовать абонента, зафиксировать трафик, получить данные для установки скорости порта на оборудовании или другие действия. | |||
Если же возникает необходимость изменить параметры соединения, например, скорость уже подключенного клиента - зачастую это проблематично по двум причинам: | |||
# Оборудование или сервис (dhcp или pppoe) могут устанавливать параметры соединения только в момент подключения клиента; | |||
# Если же они и могут делать это "посредине" работы сессии, то смогут это сделать только во время accounting-пакетов. Т.е чтобы послать команду нам придется ждать такой пакет, а в некоторых случаях, например, с dhcp, это может быть несколько минут. | |||
COA позволяет послать radius-атрибуты на оборудование (dhcp/pppoe сервер) ровно в тот момент когда это потребуется. Ситуация: клиент подключен в данный момент, но произошло подключение нового тарифа, не хватило денег и учетку автоматически заблокировало - модуль COA сразу же пошлет команду на оборудование (dhcp/pppoe сервер). Это может быть команда урезания скорости, изменения аксесс-группы или иное. | |||
===Запуск=== | |||
<pre> | <pre> | ||
Рядок 12: | Рядок 23: | ||
В переменных $coa_connect__state_on, $coa_connect__state_off и $coa_disconnect указываются атрибуты, которые посылаются Radius-сервером клиенту в определенных ситуациях: | В переменных $coa_connect__state_on, $coa_connect__state_off и $coa_disconnect указываются атрибуты, которые посылаются Radius-сервером клиенту в определенных ситуациях: | ||
* В '''$coa_connect__state_on''' атрибуты, которые посылаются когда | * В '''$coa_connect__state_on''' атрибуты, которые посылаются когда подключен абонент, которому разрешен доступ в интернет | ||
* В '''$coa_connect__state_off''' атрибуты, которые посылаются когда | * В '''$coa_connect__state_off''' атрибуты, которые посылаются когда подключен абонент, которому запрещен доступ в интернет | ||
* В '''$coa_disconnect''' атрибуты, которые посылаются когда абонент отключается (перестает быть авторизованным) | * В '''$coa_disconnect''' атрибуты, которые посылаются когда абонент отключается (перестает быть авторизованным) | ||
Рядок 59: | Рядок 70: | ||
* speed_in1_kb - входящая скорость в килобитах | * speed_in1_kb - входящая скорость в килобитах | ||
* speed_in1_mb - входящая скорость в мегабитах | * speed_in1_mb - входящая скорость в мегабитах | ||
<br><br> | |||
'''Если в параметрах авторизации будет параметр nas''' - coa пакет будет послан на сервер, ip которого берется из nas. В противном случае пакет будет послан на ip, указанный в конфиге. | |||
===Пример настройки mpd=== | |||
В mpd.conf в секцию startup необходимо добавить: | |||
<pre> | |||
set radsrv peer 127.0.0.1 hardpass5 | |||
set radsrv open | |||
</pre> | |||
===Пример настройки mikrotik=== | |||
Внимание: coa в mikrotik работает начиная с версии 6.33 | |||
<pre> | |||
/radius incoming set accept=yes | |||
</pre> | |||
===Как модуль работает с несколькими NAS-ами=== | |||
Если вы настраивали Radius по документации, то в параметры авторизации каждой сессии будет записан параметр nas - сервер, который принял авторизацию. Модули coa/webcoa учитывают это и посылают запросы на этот сервер, а из конфига берется только пароль. Проверить, что этот параметр присутствует, можно в данных учетной записи кликнув по соответствующему ip и в окне найти параметр «дополнительно»: | |||
<br> | |||
[[Файл:Webcoa.png]] |
Поточна версія на 09:35, 1 липня 2023
Модуль Change of Authorization
COA - это расширение Radius протокола, позволяющее посылать команды на оборудование.
Зачем нужен COA?
Стандартно Radius работает в одном направлении - оборудование посылает информацию на Radius-сервер (например, запрос на авторизацию или данные по трафику), тот обращается к NoDeny чтобы авторизовать абонента, зафиксировать трафик, получить данные для установки скорости порта на оборудовании или другие действия.
Если же возникает необходимость изменить параметры соединения, например, скорость уже подключенного клиента - зачастую это проблематично по двум причинам:
- Оборудование или сервис (dhcp или pppoe) могут устанавливать параметры соединения только в момент подключения клиента;
- Если же они и могут делать это "посредине" работы сессии, то смогут это сделать только во время accounting-пакетов. Т.е чтобы послать команду нам придется ждать такой пакет, а в некоторых случаях, например, с dhcp, это может быть несколько минут.
COA позволяет послать radius-атрибуты на оборудование (dhcp/pppoe сервер) ровно в тот момент когда это потребуется. Ситуация: клиент подключен в данный момент, но произошло подключение нового тарифа, не хватило денег и учетку автоматически заблокировало - модуль COA сразу же пошлет команду на оборудование (dhcp/pppoe сервер). Это может быть команда урезания скорости, изменения аксесс-группы или иное.
Запуск
perl noserver.pl -v -g=coa.cfg.pm
Предварительно необходимо настроить конфиг в /usr/local/nodeny/modules/coa/create.cfg.coa.cfg.pm.
В переменных $coa_connect__state_on, $coa_connect__state_off и $coa_disconnect указываются атрибуты, которые посылаются Radius-сервером клиенту в определенных ситуациях:
- В $coa_connect__state_on атрибуты, которые посылаются когда подключен абонент, которому разрешен доступ в интернет
- В $coa_connect__state_off атрибуты, которые посылаются когда подключен абонент, которому запрещен доступ в интернет
- В $coa_disconnect атрибуты, которые посылаются когда абонент отключается (перестает быть авторизованным)
Не обязательно использовать все три переменные.
Атрибуты задаются таким образом:
$coa_connect__state_on = { type => тип пакета, template => шаблон, };
Если же необходимо послать несколько команд:
$coa_connect__state_on = [ { type => тип пакета, template => шаблон, }, { type => тип пакета, template => шаблон, } ];
Тип пакета может быть:
- coa - предписывает изменить параметры сессии
- disconnect - предписывает отключить клиента
Шаблон - это текст с атрибутами в виде:
атрибут=значение
В двойных фигурных скобках можно указать данные конкретного абонента, например:
- ip - ip адрес
- auth_ses - имя сессии
- speed_in1_kb - входящая скорость в килобитах
- speed_in1_mb - входящая скорость в мегабитах
Если в параметрах авторизации будет параметр nas - coa пакет будет послан на сервер, ip которого берется из nas. В противном случае пакет будет послан на ip, указанный в конфиге.
Пример настройки mpd
В mpd.conf в секцию startup необходимо добавить:
set radsrv peer 127.0.0.1 hardpass5 set radsrv open
Пример настройки mikrotik
Внимание: coa в mikrotik работает начиная с версии 6.33
/radius incoming set accept=yes
Как модуль работает с несколькими NAS-ами
Если вы настраивали Radius по документации, то в параметры авторизации каждой сессии будет записан параметр nas - сервер, который принял авторизацию. Модули coa/webcoa учитывают это и посылают запросы на этот сервер, а из конфига берется только пароль. Проверить, что этот параметр присутствует, можно в данных учетной записи кликнув по соответствующему ip и в окне найти параметр «дополнительно»: