Всем привет
В рамках дипломного проекта (а в общем-то и моей работы :) ) надо помимо всего прочего приделать человеческий биллинг. Исходные данные:
* 2 внешних провайдера. Пользователь может выбрать используемого провайдера в интерфейсе (веб-интерфейс всё равно писать, так что его реализация не входит в данный вопрос)
* Привязка к IP или МАС крайне нежелательна. Хочется, чтобы внутри биллинга везде, где только можно, фигурировало имя пользователя
* Имеется сервер доступа (rp-pppoe)
* Имеется единое хранилище учёток пользователей (к сожалению, только AD)
* Требуется вести live-аккаунтинг, то есть превышение квоты должно приводить к запрету доступа не позднее, чем через 1-5 минут
Я придумал такое решение:
При подключении rp-pppoe дёргает ррр. ррр после аутентификации напрямую через AD или через RADIUS (что предпочтительнее) запускает скрипт /etc/ppp/auth-up, который передаёт имя пользователя и имя интерфейса моей проге. Прога делает у себя запись с привязкой user-if, достаёт из базы квоты и сведения о выбранном провайдере и добавляет нужные правила в netfilter. При этом используется -m quota, чтобы обеспечить блокирование доступа при превышении квоты. При этом запущен программный netflow-сенсор, который сливает нетфлоу также моей проге. При приходе пакета нетфлоу происходит его обработка и собственно учёт.
Возник вопрос:
А можно ли как-то хитро воспользоваться возможностями freeradius в плане акаунтинга, чтобы уменьшить размер велосипеда или вообще отказаться от него? Вообще какие возможности аккаунтинга предоставляет протокол RADIUS? Возможно ли организовать live-учёт? И вообще правильно ли я понимаю третью букву А (если неправильно - где можно почитать, кроме RFC)? Какие у вас есть предложения по архитектуре решения?