У меня есть сервер FreeRadius, и я хотел бы установить ограничение на количество пользователей, подключенных к определенному NAS. Моя текущая настройка такова, что каждый пользователь, который подключается к определенному NAS, добавляется в группу пользователей Radius, которая присоединена к этому NAS. Затем RadGroupReply выполняет то, что я хочу делать для пользователей конкретного NAS. В настоящее время я могу установить ограничение максимальной скорости загрузки, а также тайм-аут сеанса, но мне интересно, какой атрибут использовать, если бы я ограничивал максимальное количество пользователей, которым разрешено подключаться к определенному NAS.
Спасибо.
Конечно, сначала вам нужно настроить учет RADIUS с базой данных SQL, такой как postgresql или MySQL.
Затем вам нужно реализовать решение для обнаружения устаревших сеансов. Это может быть так же просто, как включение промежуточных обновлений и закрытие сеансов, в которых последнее обновление было раньше. (NOW() - <interim time>)
с помощью задания cron. Как рассчитать время в прошлом сильно различается от базы данных к базе данных, поэтому вам нужно будет найти правильный синтаксис для используемой базы данных.
Наконец, вам нужно будет написать политику unlang, которая получает текущее количество сеансов для NAS и сравнивает его с настроенным максимумом. В FreeRADIUS v3.0.x вы можете связать произвольные пары с NAS, добавив их в клиентские разделы.
Пример клиентского раздела:
client test {
ipaddr = 127.0.0.1
secret = 'testing123'
max_users = 10
}
Пример политики:
authorize {
if ("%{sql:SELECT COUNT(*) FROM radacct WHERE nasipaddress = '%{NAS-IP-Address}' AND acctstoptime != NULL}" > "%{client:max_users}") {
update reply {
Reply-Message := 'Sorry, too many users connected, please try again later'
}
reject
}
}