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.

Надеюсь у вас все получилось и в итоге мы имеем готовый хотспот.:)

Комментарии

9 комментариев

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

  • Все круто, спасибо за мануал!) Дайте совет на какой версии ubuntu лучше всего будет это организовать?

  • 4 этап Привязываем FreeRadius к MySQL

    Редактируем файл /usr/local/etc/raddb/sql.conf

    Прописываем туда реквизиты доступа к созданной базе «user_radius«, «user_radius_password«, «db_radius«.

    этот момент я не понял… где именно их прописывать? открыл файл и …?

    • Там должны быть строчки:
      database = «mysql»
      login = «radius»
      password = «radpass»

      Где и меняем на соответствующие значения

  • А можно ли получить скрин веб интерфейса и еще если не сложно напишите мне на почту я бы хотел 1 вопрос обсудить. Нужен ваш совет.

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

Ваш e-mail не будет опубликован.

Sidebar