Skip to end of metadata
Go to start of metadata

Установка Uni-Fi контроллера

Установка портала авторизации

Uni-Fi авторизация проходит через скрипт сgi-bin/guest/s/default/index.cgi
В настройках Uni-Fi выставить тип авторизации: External guest portal, и прописать адрес билинга.

В скрипте index.cgi есть 3 основные функции:

  • unifiLogin() - Вход в API

  • getJson() - Получение данных из контролера

  • sendJson() - Отправка команды

  • unifiLogout() - Выход из API

Авторизация клиента проходит в несколько стадий:

  1. Неавторизированый клиент перенаправляется на guest/s/default/index.cgi, с GET параметрами, которые обрабатываются скриптом.

  2. Со страницы пользователя отправляется запрос на Uni-Fi контроллер для получения статуса клиента. В зависимости от статуса, пользователю показывается форма логина или статус.  Если MAC адреса клиента нет в списке, полученном от контролера, выводится надпись «You have to be redirected via hotspot».

  3. При получении скриптом формы авторизации, отсылается запрос в билинг.

  4. Если пользователю можно ходить в интернет, скрипт отправляет на Uni-Fi команду для авторизации пользователя.

  5. Пользователю показывает данные статистики и ссылку на URL, куда он хотел попасть и кнопку «Отключить».

Подробное описание

В билинге есть сервер доступа Uni-fi. Там и в config.pl прописаны параметры соединения с сервером.
Поскольку сам Uni-fi ничего на билинг не отправляет, billd опрашивает Uni-fi каждые 5 минут (плагин ubiquiti_online.pm, период можно поменять в настройках плагинов billd) клиент подключается к точке. Через некоторое время (от 2 секунд) клиент появится в списке клиентов на контроллере. Когда клиент заходит в интернет (или когда ОС проверит наличие интернета), его отредиректит на портал указанный в настройках Uni-fi.

Авторизация

Тут вступает index.cgi портала. По маку, который пришёл в запросе, он в списке клиентов на контроллере находит нужного и сверяет статус клиента.
Дальше, в зависимости от статуса:

  • неавторизован - показывает форму логина

  • авторизован - показывает форму статуса (там где сначала колёсико крутится)

  • не нашёл MAC - отвечает, что нет такого клиента на контроллере.

Когда пользователь вводит свой логин и пароль - на сервер, скриптом страницы, асинхронно отправляется запрос на авторизацию, формируется внутренний запрос к Dv.
В ответе Dv при успешной авторизации возвращаются параметры таймаута сесии и скорости.
С этих параметров, формируется запрос на Uni-fi для авторизации пользователя на точке.
Если аторизация успешная, скрипт страницы после отображения сообщения, покажет таблицу статуса и запросит дополнительные даные для отображения клиенту. На этой же странице находится кнопка «Отключить», для самостоятельного завершения сесии клиентом.
Для удобности, в верхней части страницы - линк на страницу, куда направлялся пользователь.

Аккаунтинг и продолжительность сесии

Поскольку сам Uni-fi ничего не отправляет, то обновление данных происходит только, когда выполняется billd
Billd опрашивает Uni-fi, и по макам клиентов, определяет к какой учетной записи они принадлежат и добавляет время.
Продолжительность сессии подсчитывается только когда сессия закончится, поэтому billd не скидывает абонентов.
Абонентов скидывает сам Uni-fi по таймауту сессии. При повторной авторизации, биллинг сверит данные из пользовательского онлайна и если времени онлайна больше, чем позволено для тарифного плана, закончит сессию, и отдаст негативный результат авторизации.

Добавляем сервер доступа в ABillS

Настройка>Сервера доступа

IPIP Адрес точки
ТипUni-fi
AliveВремя обновления статистики и подтверждения активности сессии. Рекомендуемое значение 300
MACМAC точки доступа. Если не указать МAC система не будет видеть к какой точке авторизировался абонент в журнале последних подключений (Отчёт>Интернет>Последнее подключение)
Radius-Identifier

Unifi Site Name . Берём с веб-строки контролера. 
Если поле не заполнено используется идентификатор default

:Управление:
IP:PORT:IP адрес и порт для контролера (по умолчанию 8443)
Пользователь:admin 
Имя пользователя для контроля
Пароль:Секретный ключ
  • No labels