Документация по модулю 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:
ABillS: настройка Mikrotik+HotSpot+ABillS
Страница авторизации на 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.