Wi-fi c Web-авторизацией. FreeRadius + dd-wrt + chillispot
В этой статье мы будем организовывать гостевой доступ к интернету с web-авторизацией.
Сразу поясню, что мы должны иметь в начале и что по итогу должно получиться в конце.
Итак, имеем:
— обычный маршрутизатор с dd-wrt на борту к примеру D-link DIR-300 как наиболее дешевый вариант либо что-то другое, это не важно. Маршрутизатор соответственно поддерживает Wi-fi и имеет доступ в интернет.
— компьютер, с установленной Unix подобной ОС. На нем мы расположим сервер авторизации. В статье описана установка на FreeBSD, но это тоже не важно, можете использовать как Debian, так и Ubuntu, как наиболее распространенные, либо что-то другое. Процесс настройки будет отличаться незначительно.
Что будем иметь по итогу:
Пользователь подключается к открытой Wi-fi сети, при попытке открыть любой сайт через браузер видит приветственное сообщение о владельце точки и о способах получения доступа, либо любую другую лабуду, которую сами придумаете.
Далее пользователь получает от вас логин и пароль, либо находит их на приветственной странице, либо просто нажимаем кнопу «Продолжить», вводит их в соответствующие поля, авторизуется и получает долгожданный доступ в интернет. У вас как владельца точки есть возможность назначить каждого пользователя определенной группе, в свою очередь вы можете регулировать скорость доступа, а также время пребывания в сети для каждой группы. После чего у пользователя опять выскочит приветственное сообщение с просьбой ввести логин и пароль.
(Подобная схема к примеру на текущий момент реализована в сети ресторанов Макдональдс)
Все это дело организовываем с помощью:
FreeRadius — сервер авторизации
chillispot — есть на маршрутизаторе с dd-wrt
Для управления поднимем простенький web-сервер, mysql, phpmyadmin.
1 этап настройка маршрутизатора с dd-wrt
Открываем через web-интерфейс наш маршрутизатор. Настраиваем от настроек по умолчанию, поэтому вводим в браузере 192.168.1.1 и попадаем в меню.
Далее будут приводиться мои настройки сети, делайте также, либо подставляйте по примеру свои значения.
1. Вкладка Administration, в поля Router username, router password и re-enter to confirm вводим свои значения.
Тем самым установив свои пароли вместо стандартных для доступа к роутеру.
2. Вкладка Setup — подвкладка Basic Setup , Настраиваем Wan Setup (доступ к интернету)
3. Там же заполняем Поля Router IP и DHCP.
В настройках DHCP уберите флажок «DHCP-Authoritative» и нажмите Apply Settings
4. Вкладка Wireless, в поле Wireless Network Name (SSID) введите имя будущей Wi-fi сети
5.Вкладка Services -> подвкладка Hotspot
Chillispot — Enable — думаю итак понятно без комментариев
Separate Wifi from the LAN Bridge — Enable — этим мы отделяем LAN порты от Wi-fi сети
Primary Radius Server IP/DNS — ip сервера с FreeRadius
Backup Radius Server IP/DNS — ставим значение из предыдущего поля
DNS IP — Внешний DNS (У меня он 192.168.0.1, так как у меня на нем и DNS)
Remote network внутренняя сеть для Wi-fi клиентов
Redirect URL — приветственная страница radius-сервера, должна располагаться на сервере с Freeradius, ее мы сделаем чуть позже
Shared Key — ключ. testing123 ключ по умолчанию, желательно придумать свой, впоследствии в настройках не забываем указывать именно свой ключ
DHCP interface — интерфейс через который подключаются Wi-fi клиенты
2 этап Настройка FreeRadius
Устанавливаем FreeRadius, не забываем поставить галочку напротив MYSQL
cd /usr/ports/net/freeradius2 make install clean |
Редактируем конфигурационный файл /usr/local/etc/raddb/radiusd.conf
Находим строчку
proxy_requests = no |
и проверяем что выставлено именно no
Раскомментируем строчку
$INCLUDE sql.conf |
Следующий файл для редактирования /usr/local/etc/raddb/sites-available/default
Ищем секции
authorize {... accounting {... session {... |
И во всех раскомментируем строчку
sql |
Этим мы подготовили freeradius для связи с mysql
Далее редактируем файл /usr/local/etc/raddb/clients.conf
Ищем секцию client localhost {…
и меняем
client localhost { |
на
client 192.168.0.20 { |
ipaddr = 127.0.0.1 |
на
ipaddr = 192.168.0.20 |
где, 192.168.0.20 ip адрес маршрутизатора с wi-fi
Выставляем свой ключ
secret = testing123 |
Не забываем прописать в /etc/rc.conf строчку
radiusd_enable="YES" |
3 этап Настройка MySQL
Начнем с установки
cd /usr/ports/databases/mysql55-server make install clean |
Добавляем в /etc/rc.conf
mysql_enable = "YES" |
Выставляем пароль для рута
mysqladmin -u root password ВАШ_ПАРОЛЬ |
Теперь заходим в консоль MySQL и вводим только что установленный пароль
mysql -u root -p |
Если вход прошел успешно — продолжаем, создаем базу данных для пользователей и самих пользователей
create database db_radius; grant all privileges on db_radius.* to 'user_radius'@'localhost' identified by 'user_radius_password'; flush privileges; quit; |
Далее либо скачиваем с официального сайта архив с freeradius(http://www.freeradius.org/download.html) и находим там файлы schema.sql nas.sql ippool.sql, либо ищем их по пути /usr/local/etc/raddb/sql/mysql. Ну и на крайний случай выкладываю тут
Из папки с этими файлами импортируем таблицы в нашу базу данных
mysql -u user_radius -p db_radius < schema.sql mysql -u user_radius -p db_radius < nas.sql mysql -u user_radius -p db_radius < ippool.sql |
Проверим все ли прошло успешно:
mysql -u user_radius -p show databases; use db_radius; show tables; |
Мы должны увидеть список из следующих таблиц:
nas, radacct, radcheck, radgroupcheck, radgroupreply, radippool, radpostauth, radreply, usergroup.
4 этап Привязываем FreeRadius к MySQL
Редактируем файл /usr/local/etc/raddb/sql.conf
Прописываем туда реквизиты доступа к созданной базе «user_radius«, «user_radius_password«, «db_radius«.
Теперь создадим тестового юзера для проверки в базе MySQL. Для этого выполним
mysql -u user_radius -p db_radius insert into radcheck (Username, Attribute, Value) VALUES ('testsql', 'Password', 'passwordsql'); |
Не забываем перезагрузить freeradius.
/usr/local/etc/rc.d/radiusd restart |
Проверяем соединение командой
radtest testsql passwordsql 127.0.0.1 0 testing123 |
Здесь всплывут 2 подводных камня:
1. Выше мы уже настроили FreeRadius на то, что клиентом у нас является 192.168.0.20 — то есть временно на период теста меняем обратно на 127.0.0.1 и перезагружаем freeradius.
2. У меня вышла вот такая ошибка:
radclient:: Failed to find IP address for office.local
radclient: Nothing to send.
Чтобы ее исправить необходимо добавить в файл /etc/hosts запись о своем хосте
127.0.0.1 Имя_хоста
Если соединение прошло успешно то в выводе команды мы должны увидеть слова «Access—Accept»
5 этап настройка Веб-сервера с PHP, SSL и поддержкой CGI
Следующим этапом будет настройка веб-сервера с SSL (нужен для страницы авторизации) c поддержкой выполнения CGI скриптов(тоже для страницы авторизации), и с поддержкой php (это для phpmyadmin) как это все сделать можно прочитать здесь.
6 этап Настройка страницы авторизации
После того как у нас появился работающий Веб-сервер нам необходимо настроить страницу авторизации. Кстати это именно та страница, на которую ссылается роутер с dd-wrt в своих настройках.
Для этого скачиваем архив содержащий нужный нам файл hotspotlogin.cgi тут http://www.chillispot.info/download.html
если не получилось, выкладываю тут на всякий случай
Устанавливать ничего не нужно, просто ищем в архиве файл hotspotlogin.cgi и копируем его в папку для cgi скриптов веб-сервера. Не забываем выставить права на выполнение
chmod 755 hotspotlogin.cgi |
Также необходимо раскомментировать в нем строку «$uamsecret = » и вставить свое значение (у нас это testing123).
Если все выше настроено успешно, то при подключении к сети и попытке открыть любой сайт должна открываться страница формируемая hotspotlogin.cgi.
Кстати дизайн страницы можно менять как душе угодно. Предполагаю, что если вы дошли до этой точки настройки, то должны сами разобраться в коде и как это сделать.
7 этап Настройка dialupadmin
Далее процесс настройки приводит нас к мысли что здорово было бы иметь веб-интерфейс для управления hotspot’ом, и базой данных.
Чтобы не увеличивать статью до километровых размеров опустим установку PhpMyAdmin для управления базой, благо инфы по этой теме в интернете навалом.
Опишем установку веб-интерфейса для управления hotspot’ом. Из бесплатных остановимcя на dialupadmin, который идет в комплекте с freeradius. Возможно не самое лучшее решение, но свои минимальные функции выполняет. В принципе можно обойтись и без него, и делать все вручную через базу, так как сам по себе он мне показался «не очень», но тем не менее информация о его настройке не будет лишней.
Для этого либо скачиваем архив с FreeRadius http://www.freeradius.org/download.html (Возможно ранее вы его уже скачали).
И находим там папку dialup_admin, либо ищем ее по пути где-то здесь /usr/share/freeradius-dialupadmin/htdocs /var/www/dialup. Но скорее всего ее там может не оказаться.
Создаем папку для dialupadmin в папке веб-сервера, и перепишем в нее файлы из одноименной папки в архиве.
Здесь я опускаю настройку веб-сервера для папки dialupadmin. Можете положить все в папку по умолчанию и не париться с настройками, либо настроить веб-сервер как вам удобно.
Примечание: в dialupadmin по умолчанию нет никакой встроенной аутентификации, поэтому не забудьте ее сделать средствами веб-сервера поставив пароль на папку.
Приступим к настройке dialupadmin
Сразу сделаю небольшое отступление, если в процессе настройки вы столкнетесь с подобной ошибкой (точно не помню на каком этапе она может возникнуть)
Fatal error: Call to undefined function import_request_variables() in /usr/local/www/dialupadmin/conf/config.php on line 9
То читаем здесь
Продолжим,
Редактируем файл ..dialupadmin/conf/admin.conf
в строке ниже вместо XXXXXX выставляем свой ключ. Например у нас в примере это testing123
general_radius_server_secret: XXXXXX |
Здесь вместо «crypt» выставляем «clear»
general_encryption_method: clear |
Далее настройки базы, в строках ниже указываем свои значения:
sql_username: user_radius sql_password: user_radius_password sql_database: db_radius |
Обратите внимание на строку
sql_debug: true |
Если не хотите чтобы отображалась информация об ошибках после отладки, замените на «false»
Теперь необходимо добавить таблицы в нашу базу данных
Их можно найти по пути ..dialup_admin/sql/mysql
Но не все так просто, из-за чьей-то криворукости, не будем выяснять чьей, необходимо перед импортом таблиц их немного подправить, иначе можем натолкнуться на подобное
Error: File ‘/usr/local/www/dialup_admin/conf/naslist.conf’ does not exist or is not readable
Error: File ‘/usr/local/www/dialup_admin/conf/captions.conf’ does not exist or is not readableWarning: file(/usr/local/www/dialup_admin/conf/username.mappings): failed to open stream: No such file or directory in /usr/local/www/dialupadmin/conf/config.php on line 88
Warning: Invalid argument supplied for foreach() in /usr/local/www/dialupadmin/conf/config.php on line 89
Итак файлы userinfo.sql и badusers.sql в 5 строке удаляем
«DEFAULT ‘0’ «
Также стоит обратить внимание на соответствия названий таблиц в базе и файле ..dialupadmin/conf/admin.conf . С этим могут быть связаны выше описанные ошибки.
Не факт конечно, что вскоре это все не поправят, но на всякий случай привожу все возможные грабли.
Заходим в папку ..dialupadmin/sql/mysql/ и импортируем таблицы (можете это сделать через PhpMyAdmin)
mysql -u user_radius -p db_radius < badusers.sql mysql -u user_radius -p db_radius < mtotacct.sql mysql -u user_radius -p db_radius < totacct.sql mysql -u user_radius -p db_radius < userinfo.sql |
8 этап Добавление данных
Заходим через браузер в веб-интерфейс dialupadmin и создаем 2 группы:
Нажимаем кнопку «New Group» и в поле «Group name» вводим название «Default«, нажимаем кнопку «Create»
Таким же образом создаем группу «Full Bandwidth«.
группа Default будет для гостей здесь мы поставим ограничение скорости, и меньшее время сессии
Full Bandwidth для Vipов.
Заходим через PhpMyAdmin в базу и добавляем записи в таблицу radgroupcheck
id: 1
GroupName: Default
Attribute: Auth-Type
op: ==
Value: Local
id: 2
GroupName: Full Bandwith
Attribute: Auth-Type
op: ==
Value: Local
Теперь добавляем записи в таблицу radgroupreply
id: 1
GroupName: Default
Attribute: Session-Timeout
op: =
Value: 3600
id: 2
GroupName: Default
Attribute: Idle-Timeout
op: =
Value: 600
id: 3
GroupName: Default
Attribute: Acct-Interim-Interval
op: =
Value: 60
id: 4
GroupName: Default
Attribute: WISPr-Redirection-URL
op: =
Value: http://www.google.com
id: 5
GroupName: Default
Attribute: WISPr-Bandwidth-Max-Up
op: =
Value: 128000
id: 6
GroupName: Default
Attribute: WISPr-Bandwidth-Max-Down
op: =
Value: 256000
Следующие атрибуты для группы “Full Bandwidth”:
id: 7
GroupName: Full Bandwidth
Attribute: Session-Timeout
op: =
Value: 3600
id: 8
GroupName: Full Bandwidth
Attribute: Idle-Timeout
op: =
Value: 600
id: 9
GroupName: Full Bandwidth
Attribute: Acct-Interim-Interval
op: =
Value: 60
id: 10
GroupName: Full Bandwidth
Attribute: WISPr-Redirection-URL
op: =
Value: http://www.google.com/
И краткая расшифровка:
Session-Timeout — время в секундах сессии, до разрыва, когда пользователю необходимо будет перелогиниться
WISPr-Redirection-URL — страница куда будут попадать пользователи после открытия сессии, если оставить пустым то переадресация происходить не будет
WISPr-Bandwidth-Max-Up, WISPr-Bandwidth-Max-Down — максимальная скорость интернета на upload и download.
Надеюсь у вас все получилось и в итоге мы имеем готовый хотспот.:)
Классная статья!
Все получилось кроме разграничения скорости и таймаутов сессии в dialupadmin.
Таблицы создал, записи в них сделал.
Но как эти таблицы вяжутся с учетками для логина в хотспот и как система это все понимает?
Как правильно привязать пользователя к группе “Default“ или “Full Bandwidth“?
Четки мануал.
Спасибо.
Здравствуйте.
Не получается настроить связку. Помогите. пожалуйста.
На пункте: 1 этап настройка маршрутизатора с dd-wrt
…
В настройках DHCP уберите флажок “DHCP-Authoritative” и нажмите Apply Settings
и потом
5.Вкладка Services -> подвкладка Hotspot
Chillispot – Enable
Separate Wifi from the LAN Bridge – Disable, так как к роутеру подключены только беспроводные клиенты.
Primary Radius Server IP/DNS – У меня он установлен на сервере с адресом 192.168.14.115
Backup Radius Server IP/DNS – адрес так же адресом 192.168.15.115
DNS IP – Внешний DNS — DNS, который установлен на роутере или DNS на сервере? — Если на сервере, то адрес 192.168.15.115, если роутер, то 192.168.5.1
Redirect URL – Ссылку указал
Shared Key – ключ ввел
UAM Any DNS — 0
UAM Allowed — пусто
При подключении беспроводного устройства, оно долго ждет «Получение IP-адреса» и потом отключается и так до бесконечности. Если делаю Chillispot – Disable, и включаю DHCP-Authoritative, то устройство сразу получает IP. Что не так с настройками?
dnsmasq на сервере работает в статическом режиме, то есть без DHCP, так как во внутренней сети этого нельзя делать, дабы избежать нелегального подключения левых клиентов по проводной сети.