Документация по модулю Hotspot и принадлежащим к нему страницам перенесена в Confluence http://abills.net.ua:8090/display/AB/Mikrotik

Mikrotik HotSpot

Инструкция по настройке Hotspot на Mikrotik RouterBoard.

Рекомендуется сбросить конфигурацию перед настройкой

Настройка через веб-форму

Настройка / Сервер доступа / Изменить / Hotspot
Для типов серверов, которые поддерживают Hotspot (в даный момент это mikrotik_dhcp), доступна конфигурация хотспота через веб-интерфейс.

Конфигурация предусматривает установку на чистый Mikrotik

Для установки необходим доступ на Mikrotik через SSH-ключ.


Аргументы формы:

DNS Название Название хотспота (как будет отображаться в браузере во время редиректа)
ABillS IP Адрес Адрес сервера билинга, на котором расположены start.cgi и Radius сервер
Mikrotik Интерфейс Интерфейс микротика для конфигурации хотспота (список интерфейсов подтягивается с устройства)
IP Адрес Локальный адрес микротика на интерфейсе хотспота
Размер Сеть Длина сетевой части адреса ( в битах )
Сеть Сеть на интефейсе хотспота
DHCP Диапазон Диапазон адресов для выдачи клиентам
Роутер по умолчанию Маршрутизатор по умолчанию
DNS Дополнительный DNS для выдачи клиентам (основным будет адрес локального интерфейса)


Walled Garden - сюда добавляем хосты на которые нужно разрешать доступ до авторизации (платёжные системы, сайт компании), поддерживаются как IP адреса, так и домены (можно использовать wildcard маски *.vk.com)

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

Создайте линк на стартовую страницу

# ln -s /usr/abills/Abills/modules/Hotspot/start.cgi /usr/abills/cgi-bin/start.cgi


Добавьте в libexec/config.pl:

$conf{HOTSPOT_LOGIN_URL}= 'http://X.X.X.X/login?fastlogin=true&login=%LOGIN%&password=%PASSWORD%' X.X.X.X - IP адрес микротика со стороны клиента. Линк для кнопки «Залогиниться в хотспот» на start.cgi

Автоматическая настройка

Возможна автоматическая настройка Хотспота через програму mikrotik_hotspot.pl

Примеры

Настройка хотспота на микротике, адрес которого 192.168.0.60, RADIUS и start.cgi на 192.168.0.62:

# ./mikrotik_hotspot.pl CONFIGURE_HOTSPOT=y IP_ADDRESS=192.168.0.60 BILLING_IP_ADDRESS=192.168.0.62


То же, с заливкой SSH сертификата и интерфесе хотспота wlan1:

# ./mikrotik_hotspot.pl CONFIGURE_HOTSPOT=y IP_ADDRESS=192.168.0.60 BILLING_IP_ADDRESS=192.168.0.62 UPLOAD_KEY=y HOTSPOT_INTERFACE=wlan1


Програма сохраняет настройки предыдущих вызовов, для повторной конфигурации:

# ./mikrotik_hotspot.pl READ_CONFIG=192.168.0.64.arguments


Значения по умолчанию

Любое из значений можно поменять, задав через аргументы командной строки

UPLOAD_KEY n
BACKUP n
CONFIGURE_HOTSPOT n
BACKUP_AUTO n
SSH_PORT 22
RADIUS_SECRET secretpass
CERTS_DIR /usr/abills/Certs/
IDENTITY_FILE /usr/abills/Certs/id_rsa.abills_admin
REMOTE_ADMIN_NAME abills_admin
LOGIN admin
MASK 255.255.255.0
HOTSPOT_INTERFACE wlan1
BACKUP_FILE \$IP_ADDRESS_\$DATE.backup
HOTSPOT_ADDRESS 192.168.4.1
HOTSPOT_NETWORK 192.168.4.0
HOTSPOT_NETMASK 24
MIKROTIK_GATEWAY 192.168.0.1
DHCP_RANGE 192.168.4.3-192.168.4.254
MIKROTIK_DNS 8.8.8.8
HOTSPOT_DNS_NAME hotspot.abills.net.ua

Ручная настройка

через консоль:

 /interface bridge add name=Hotspot_clients disabled=no comment="Hotspot clients bridge"
 /interface bridge port add bridge=Hotspot_clients interface=wlan1
 /interface wireless set wlan1 bridge-mode=enabled mode=bridge band=2ghz-b/g/n wireless-protocol=802.1

Установим Hotspot:

 
/ip hotspot setup
Select interface to run HotSpot on 

hotspot interface: Hotspot_clients
Set HotSpot address for interface 

local address of network: 10.0.0.1/16    
masquerade network: yes
Set pool for HotSpot addresses 

address pool of network: 10.0.0.3-10.0.255.254    
Select hotspot SSL certificate 

select certificate: none                    
Select SMTP server 

ip address of smtp server: 0.0.0.0
Setup DNS configuration 

dns servers: 8.8.8.8
DNS name of local hotspot server 

dns name: 
Create local hotspot user 

name of local hotspot user: admin
password for the user: admin

/ip hotspot profile set hsprof1 use-radius=yes
/radius set timeout=00:00:01 numbers=0

Открываем доступ для билинга и различных адресов из интернета:

 /ip hotspot walled-garden ip add dst-host=8.8.8.8 comment="DNS Allowed"
 /ip hotspot walled-garden ip add dst-host=8.8.4.4
 /ip hotspot walled-garden ip add dst-host=10.0.0.2 comment="Access to ABillS Server"
 /ip hotspot walled-garden ip add dst-host=webmoney.ru comment="Access to Webmoney.ru"

Подключаем внешний Radius сервер в настройках Mikrotik:

/radius add address=10.0.0.2 secret=radsecret service=hotspot

После этого в билинге нужно Добавить сервер доступа Mikrotik

Создайте линк на стартовую страницу

# ln -s /usr/abills/Abills/modules/Hotspot/start.cgi /usr/abills/cgi-bin/start.cgi

через Winbox:

Страница авторизации на Mikrotik

Страница авторизации, с ссылкой на стартовую страницу на билинге, на которой клиент может купить карточку доступа к Hotspot.

Установка

Распаковываем архив и заливаем на Mikrotik.

У пользователя abills_admin должны быть включены права ftp.

cd /usr/abills/misc/hotspot/
tar -xvf hotspot.tar
scp -r hotspot abills_admin@10.0.0.1:/

Если IP адрес интерфейса хотспота отличается от 10.0.0.1, то на странице hotspot/login.html изменить значение переменной ext_url на нужное значение.

Описание

Возможности:

  • Переход на страницу биллинга для покупки карточки доступа (модуль Cards) или включения гостевого доступа
  • Мультиязычный интерфейс
  • Запись и чтение из cookie выбранного языка
  • Переход на start.cgi с указанным языком
  • Вывод ошибок авторизации в браузер
  • Быстрая авторизация

Скрипт multilang.js

- Позволяет реализовать мультиязычный интерфейс.
На данный момент есть поддержка 2-ух языков:

  • Английский
  • Русский

Для добавления новых языков нужно создать новую секцию в switch(lang) и заполнить переменные, а на странице hotspot/login.html добавить элемент в список Languages.

Скрипт fastlogin.js

Пользователь после регистрации может авторизоваться по ссылке вида:
http://10.0.0.1/login?fastlogin=true&login=%LOGIN%&password=%PASSWORD%
Для этого в config.pl добавить:

$conf{HOTSPOT_LOGIN_URL}='http://10.0.0.1/login?fastlogin=true&login=%LOGIN%&password=%PASSWORD%'

Альтернативная схема авторизации

Для расширения возможностей работы с хотспотом был добавлен еще один вариант взаимодействия биллинга с хотспотом.

Настройка Хотспота (на Mikrotik) полностью аналогична описанной выше. Отличие только в странице авторизации login.html

login.html
<html>
  <title>...</title>
  <body>
    <form name="redirect" action="https://192.168.0.1:9443/start.cgi" method="post">
      <input type="hidden" name="mac" value="$(mac)">
      <input type="hidden" name="username" value="$(username)">
      <input type="hidden" name="link_login_only" value="$(link-login-only)">
      <input type="hidden" name="link_orig" value="$(link-orig)">
      <input type="hidden" name="server_name" value="$(server-name)">
      <input type="hidden" name="error" value="$(error)">
    </form>
    <script language="JavaScript">
      document.redirect.submit();
    </script>
  </body>
</html>

В файле необходимо изменить адрес на ваш.

Конфигурация

$conf{HOTSPOT_AUTO_LOGIN} = 1; Использование альтернативного способа авторизации (по умолчанию используется старая схема)
$conf{HOTSPOT_LOG} = '/usr/abills/var/log/hotspot_log'; Отдельный лог для событий связанных с хотспотом. (авторизация, регистрация, ошибки)
$conf{HOTSPOT_REDIRECT_URL} = 'https://www.google.com'; Страница куда будет перенаправлен пользователь после подключения.
$conf{HOTSPOT_MAC_LOGIN} = 1; Разрешить авторизацию пользователей по мак адресу клиента.
$conf{HOTSPOT_CHECK_PHONE} = 1; Обязательная проверка телефона. Система отправляет смс с пин-кодом на указанный номер.
$conf{HOTSPOT_AUTH_NUMBER} = '+XXXXXXXXXXX'; Номер телефона, на который нужно перезвонить пользователю для авторизации
$conf{HOTSPOT_SN_LOGIN} = 'Facebook'; Разрешить авторизацию пользователей через Фейсбук.
$conf{HOTSPOT_BUY_CARDS} = 1; Разрешить регистрацию только после оплаты тарифа. (Должен быть настроен прием онлайн платежей)
$conf{HOTSPOT_SHOW_FB} = 'https://www.facebook.com/Mypage'; Предложение лайкнуть ФБ страницу. (Работает только с авторизацией через Фейсбук)
$conf{HOTSPOT_LOGIN_PREFIX} = 'hs'; Префикс который добавляется к логину пользователей хотспота.
$conf{HOTSPOT_GUESTS_GROUP} = 'HotGroup'; Группа для пользователей, которые регистрируются через хотспот.
$conf{HOTSPOT_GUESTS_GID} = '800'; Номер(ID) этой группы.
$conf{HOTSPOT_TPS}='7'; Явно указать тариф для пользователей хотспота. По умолчанию используется гостевой тариф.

Примеры конфигурации

MAK авторизация

$conf{HOTSPOT_AUTO_LOGIN} = 1;
$conf{HOTSPOT_MAC_LOGIN} = 1;
$conf{HOTSPOT_REDIRECT_URL} = 'https://www.google.com';

Пользователь подключается к сети WiFi, на его устройстве автоматически открывается браузер. После нескольких автоматических редиректов в браузере открывается страница www.google.com (На фоне прошла проверка зарегистрирован ли уже пользователь с этим МАК-адресом, если нет - создан новый пользователь. Данные найденного либо созданного пользователя были отправлены на микротик для авторизации.)

Фейсбук авторизация

$conf{HOTSPOT_AUTO_LOGIN} = 1;
$conf{HOTSPOT_SN_LOGIN} = 'Facebook';
$conf{HOTSPOT_SHOW_FB} = 'https://www.facebook.com/Coca-Cola/';
$conf{HOTSPOT_REDIRECT_URL} = 'https://www.google.com';

Пользователь подключается к сети WiFi, на его устройстве автоматически открывается браузер. При первом подключении откроется страница Фейсбука, с просьбой дать доступ к публичной информации пользователя. Далее откроется страница с виджетом, который предложит лайкнуть страницу. После нажатия кнопки «продолжить» пользователя перенаправит на www.google.com. (На фоне все аналогично первому примеру, только проверяется не мак, а аккаунт Фейсбука).

Один логин для всех гостей

$conf{HOTSPOT_AUTO_LOGIN} = 1;
$conf{HOTSPOT_ONE_LOGIN_FOR_ALL} = 'hotspot_guest:123456';

Все пользователи авторизируются под одним логином, указанным в конфигурации (в примере логин - hotspot_guest, пароль 123456). Вам необходимо заранее создать такого пользователя и выбрать ему гостевой тариф. В настройке пользователя, в поле CID нужно указать 'ANY', для того чтобы система пропускала пользователей с любыми МАК-адресами. В поле «Одновременно» можно указать предельное число одновременно подключенных пользователей с этим логином (или 0 если ограничений нет).

Идентификация пользователя с помощью СМС

$conf{HOTSPOT_AUTO_LOGIN} = 1;
$conf{HOTSPOT_CHECK_PHONE} = 1;
$conf{HOTSPOT_REDIRECT_URL} = 'https://www.google.com';

Пользователь после подключения попадает на форму ввода телефона. На указанный телефон высылается СМС с пин-кодом. После ввода правильного пин-кода пользователь перенаправляется на www.google.com. (На фоне все аналогично первому варианту, дополнительно записывается телефон, и информация про то что он был подтвержден, по умолчанию телефон требует подтверждения не чаще одного раза в сутки).

Идентификация пользователя с помощью звонка на указанный номер

$conf{HOTSPOT_AUTO_LOGIN} = 1;
$conf{HOTSPOT_CHECK_PHONE} = 1;
$conf{HOTSPOT_AUTH_NUMBER} = '+XXXXXXXXXXX';
Для обработки звонка, в extention.conf asteriska нужно добавить
[abills-agi]
exten => 600,1,NoOP(-----start-----)
exten => 600,n,AGI(/usr/abills/Abills/modules/Hotspot/phone_verification.agi)
exten => 600,n,Hangup()

Пользователь после подключения попадает на форму ввода телефона. После ввода телефона, система предложит ему перезвонить на определенный номер для подтверждения. После звонока - в базу будет добавлен пользователь с таким мак-адресом и телефоном, и последующие подключения будут происходить автоматически.

Подключение с онлайн-оплатой активации

$conf{HOTSPOT_AUTO_LOGIN} = 1;
$conf{HOTSPOT_MAC_LOGIN} = 1;
$conf{HOTSPOT_REGISTRATION} = 'NO'; (запретить гостевых пользователей) 
$conf{HOTSPOT_BUY_CARDS} = 1;  (разрешить онлайн оплату тарифа)
$conf{HOTSPOT_TPS}='123;345';  (тарифы доступные для пользователя)

Пользователь после подключения попадает на страницу с списком доступных вариантов подключения, затем выбирает метод оплаты и попадает на страницу выбранной платежной системы. После успешного платежа, в биллинге создается пользователь, и на его счет засчитывается полученная сумма. Дальнейшие подключения происходят автоматически. Если на счету закончились деньги, пользователь увидит сообщение о негативном депозите и может пополнить счет.

Оплата с помощью ваучера

$conf{HOTSPOT_AUTO_LOGIN} = 1;
$conf{HOTSPOT_MAC_LOGIN} = 1;
$conf{HOTSPOT_USE_PIN} = 1;
$conf{HOTSPOT_TPS}='7';

Пользователь сразу попадает на страницу ввода пин-кода, после ввода кода с ваучера появляется интернет. Если оплаченное время прошло - пользователь опять попадает на страницу ввода пина. Коды пополнения генерируются с помощью модуля Cards, и выдаются диллерам. В данной схеме обязательно использовать тариф с почасовой оплатой. Для примера вы создаете тариф с стоимостью 10 единиц за 1 час. И создаете карточки пополнения на 5 единиц. После ввода пин кода пользователь получит интернет на пол часа.

Возможные ошибки

Для регистрации пользователей используется модуль Cards, проверте есть ли все необходимые таблицы в базе данных.

Для оплат используется модуль Paysys, проверте подключен ли модуль и есть ли в конфиге настройки хотя бы одной платежной системы.

Дла авторизации через социальные сети дожно быть добавлено дополнительное информационное поле соответствующей соц.сети.

Для гостевых пользователей должен быть создан тариф с типом оплаты «Гостевой доступ».

Убедитесь что в файле «login.html» залитом на Микротик прописан именно ваш адрес биллинга, а сам адрес добавлен в список walled garden ip list.

Некоторые телефоны не приветствуют перенаправление с https на http и наоборот. Решение проблемы - открыть еще один виртуальный сервер, для доступа к start.cgi по http.