Captive Portal на базе Ubiquiti UniFi

Captive Portal может работать на базе программного беспроводного контроллера и точек доступа Ubiquiti UniFi. Маршрутизатор может быть как выделенным сервером, так и тем же сервером, на котором функционирует LANBilling.

В документации рассматривается только вариант разворачивания контроллера в одной сети с точками доступа — on-site. Также возможна настройка облачного варианта контроллера — off-site.

  1. Настройте агент.

  2. Настройте LBHotel для работы с контроллером Unifi.

  3. Настройте контроллер Unifi.

Настроить агент

Создать агент

Добавьте агент и задайте параметры:

  • Флаг «Сохранять только последнюю неудачную попытку авторизации» — включить

  • Флаг «Выделять адреса динамически из пула» — отключить

  • Флаг «Не отправлять атрибут Framed-IP-Address с пустым значением» — включить

  • Флаг «Запускать handler при изменении текущей скорости» — включить

  • «Тайм-аут зависшей сессии (сек)» — 300 секунд

    image

Добавить LBHotel в качестве NAS

Компонент LBHotel выполняет роль центрального модуля. Он принимает введённые на форме авторизации данные, выполняет запрос к серверу RADIUS и, в случае успешного ответа, открывает доступ в сеть.

  1. Добавьте сервер доступа с настройками:

    • IP — 127.0.0.1;
    • метод авторизации — LOGIN;
    • секрет — придумайте пароль, например captive-secret.
  2. Откройте конфигурационный файл модуля LBarcd:

    nano /etc/billing.conf.LBarcd
    

    ``

  3. Раскомментируйте параметр handler и укажите путь к скрипту остановки сессий:

    # External script handler
    handler = /usr/local/billing/handler.lbhotel.vgstop.sh
    

    ``

  4. Перезапустите LBarcd:

    systemctl restart lbarcd
    

    ``

Настроить LBHotel для работы с контроллером Unifi

  1. Откройте конфигурационный файл LBHotel:

    nano /etc/lbhotel.conf
    

    ``

  2. Включите специальный режим работы:

    # Used mode (common or unifi)
    mode=unifi
    

    ``

  3. Измените порт взаимодействия с порталом на 8088, так как порт по умолчанию 8080 будет занят контроллером UniFi:

    # Socket used for communication with apache/PHP
    socket=0.0.0.0:8088
    

    ``

  4. Введите секрет, который ранее был указан в настройках NAS:

    # RADIUS shared secret
    sharedsecret=captive-secret
    

    ``

  5. Перезапустите LBHotel:

    systemctl restart lbhotel
    

    ``

Настройки отключают в LBHotel работу с брандмауэром iptables и сообщают о взаимодействия с API UniFi контроллера при открытии и закрытии доступа в сеть.

Убедитесь, что в iptables не осталось специализированных цепочек, которые создаются при запуске LBHotel в обычном режиме работы:

iptables -F FORWARD
iptables -F lbhotel_filter
iptables -X lbhotel_filter
iptables -t nat -F PREROUTING
iptables -t nat -F lbhotel_prerouting
iptables -t nat -X lbhotel_prerouting
iptables -t mangle -F FORWARD
iptables -t mangle -F lbhotel_shaper
iptables -t mangle -X lbhotel_shaper

Настроить контроллер Unifi

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

  1. Нажмите «Add New Site» в выпадающем списке сайтов в верхнем правом углу. Для каждого Captive Portal должен быть создан отдельный сайт.

    image
  2. На странице сайта перейдите в раздел «Settings».

  3. На вкладке «Site» повторно выберите страну и временную зону для сайта.

    image
  4. Примените настройки.

  5. На вкладке «Wireless Networks» создайте новую беспроводную сеть с открытым доступом, установите настройку «Apply guest policies (captive portal, guest authentication, access)».

    image
  6. Примените настройки.

  7. На вкладке «Guest Control» включите настройку «Enable Guest Portal».

  8. Выберите аутентификацию на внешнем Captive Portal «External portal server».

  9. Укажите IP-адрес сервера с порталом и имя виртуального хоста, созданного для определённого Captive Portal.

    На этой же вкладке можно задать список IP-адресов, на которые возможен доступ без авторизации на портале.

    image
  10. Примените настройки.

  11. Перейдите в раздел «Devices» и добавьте из списка обнаруженных нужную точку доступа, нажав «Adopt». Она будет готова к работе и сконфигурирована исходя из заданных настроек сайта.

  12. Вы можете создать в директории /usr/lib/unifi/data/sites/<закодированное имя сайта> файл config.properties со следующим содержимым:

    # отключить перенаправление запросов http на https портала (если на портале нет https)
    config.redirect_to_https=false
    # разрешить перенаправление https на портал (по умолчанию выключено)
    config.redirect_https=true
    
  13. Скопируйте файл /usr/local/billing/unifi_ctl.py.sample и измените его расширение на «py»:

    cp /usr/local/billing/unifi_ctl.py.sample /usr/local/billing/unifi_ctl.py
    
  14. В файле укажите логин и пароль администратора для доступа к контроллеру, адрес контроллера, порт и версию API:

    username = 'root'
    password = 'password'
    controller = '127.0.0.1'
    port = '8443'
    version = 'v4'
    
  15. Контроллер UniFi при перенаправлении на Captive Portal добавляет к имени виртуального хоста строку вида: /guest/s/<закодированное имя сайта>. Поэтому добавьте в конфигурационный файл хоста директиву Alias. Пример:

    Alias /guest/s/pw8hiid3 /usr/share/lanbilling/phpclient/captive-portal/public