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

dd-wrt-1

 

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 клиенты

dd-wrt-2

 

 

 

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      Имя_хоста

Если соединение прошло успешно то в выводе команды мы должны увидеть слова «AccessAccept»

 


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 readable

Warning: 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, так как во внутренней сети этого нельзя делать, дабы избежать нелегального подключения левых клиентов по проводной сети.

Добавить комментарий

Ваш адрес email не будет опубликован.

Sidebar