Ключевые слова:wireless, wifi, hotspot, perl, billing, auth, radius, (найти похожие документы)
From: Руслан Денисенко
Date: Mon, 25 Jun 2006 14:31:37 +0000 (UTC)
Subject: Перевод Wireless HotSpot HowTo
Оригинал: http://howtoforge.org.ua/?q=node/42
Linksys WRT54GS + OpenWRT + ChillSpot + FreeRadius (Mysql авторизацией
и хранением аккаунтов) + PHP/Perl
Автор: Yunus Bookwal
Оригинал статьи: http://www.howtoforge.com/wireless_hotspot_howto
Версия перевода: 1.0.0
Автор перевода: Руслан Денисенко
Перед тем, как вы начнете
Я порекомендую с чем вам надо ознакомиться:
OpenWRT - www.openwrt.org
ChilliSpot - www.chillipot.org
FreeRadius - www.freeradius.org
Mysql - www.mysql.com
PHP - www.php.net
Perl - www.cpan.orgКраткое введение :
OpenWrt - это дистибутив Linux для Linksys WRT54G.
Мы будем использовать OpenWrt в качестве замены к оригинальной
firmware Linksys, которая прибывает заранееустановленной с
маршрутизатором.
ChilliSpot - это контролер доступа к беспроводным сетям. Он
используется для идентификации пользователей беспроводных сетей.
Поддерживает web based авторизацию для узлов беспроводного доступа .
Chilli демон играет первоначальную роль в полной установке узла
беспроводного доступа. Он работает на маршрутизаторе и обеспечивает
доступ пользователей к беспроводной точке доступа.
FreeRadius - это сервер, который управляет идентификацией удаленного
пользователя и хранением аккаунтов.
Mysql - это opensource сервер базы данных.
Вся пользовательская база данных, все аккаунты хранятся в базе данных
Mysql.
Используйте это howto на ваш собственный риск...!!!
Я следовал по тем шагами которые продемонстрированы здесь. У меня все
работало.
Вам возможно потребуются специальные настройку согласно вашей
потребности.
Установка маршрутизатора Linksys
Я использовал маршрутизатор Linksys WRT54GS для этой установки. Для
других поддерживаемых маршрутизаторов, посмотрите:
http://wiki.openwrt.org/OpenWrtDocs/Installing
Нам нужно установить OpenWrt на маршрутизаторе. Это сделано путем
сброса заранее установленной firmware Linksys с openwrt .
Вам, возможно, нужно сделать downgrade firmware linksys для разрешения
опции boot _ wait .
1. Загрузит firmware можно отсюда
wget ftp://ftp.linksys.com/pub/network/WRT54GS_3.37.2_US_code.zip
на свой компьютер.
2. Сетевой кабель должен быть подключен к PORT 1 на маршрутизаторе.
3. Заходим в браузер, и указываем адрес панели администрирования
LinkSys, обычно
http://192.168.1.1, перейдите к Admin Page -> Upgrade firmware link
4. Загрузим скаченную выше firmware на маршрутизатор.
5. Как только Вы успешно произвели downgrade firmware, перейдите к
Administration -> Diagnostics -> Ping test
6. Введите точно каждую упомянутую ниже строку в область "адреса IP",
одна строка за раз, нажимая кнопку Ping после каждой строки.
;cp${IFS}*/*/nvram${IFS}/tmp/n
;*/n${IFS}set${IFS}boot_wait=on
;*/n${IFS}commit
;*/n${IFS}show>tmp/ping.log
7. Когда вы получите окно последней команды ping , оно должно быть
заполнено длинным списком переменных, включая boot_wait=on где
угодно в списке.
8. Сейчас вы готовы установить актуальную firmware openwrt . Для
этого Вам нужен TFTP клиент.
9. Скачать firmware openwrt
wget http://downloads.openwrt.org/whiterussian/rc3/bin/openwrt-wrt54gs-jffs2.bin
Основная задача использования клиента tftp , чтобы переслать новую
firmware на ваш маршрутизатор.
1. Отключите питание от вашего маршрутизатора
2. Запустите tftp клиент
Укажите адрес маршрутизатора (обычно 192.168.1.1)
Установить mode в octet
Укажите tftp клиенту повторно отсылать файл, пока он не будет
закачен
Отправьте файл
3. Включите маршрутизатор, при этом tftp клиент должен работать и
постоянно пробовать подключиться.
4. Как только tftp client получит ack от bootloader , начнется
отправка firmware
Пожалуйста будьте терпеливы, повторная перепрошивка происходит после
того как firmware переслана на маршрутизатор. Не отключайте
маршрутизатор, он автоматически перезапустится с новой firmware.
Типичная tftp сессия
tftp 192.168.1.1s
tftp> binary
tftp> trace
Packet tracing on.
tftp> put openwrt-wrt54gs-jffs2.bin
На системе Windows , можно сделать так
tftp -i 192.168.1.1 PUT openwrt-wrt54gs-jffs2.bin
из командной строки.
На маршрутизаторах с DMZ индикатором, OpenWrt зажжет DMZ индикатор при
загрузке, после загрузки индикатор погаснет. Иногда автоматический
перезапуск не работает, так что вы сможете безопасно перезапустить
маршрутизатор через 5 минут.
Если все вплоть до этого шага идет отлично, мы готовы использовать
маршрутизатор с новым OpenWrt .
Использование маршрутизатора OpenWrt.
Сейчас Вы можете подключиться к маршрутизатору подобно подключению к
Linux. Но первое что надо сделать после того, как маршрутизатор
перезапущен - установить пароль для ` root ' пользователя.
В этот момент вы можете подключится через telnet к маршрутизатору.
Если вы установили пароль для ` root ', то при следующем перезапуске
вы сможете подключится к маршрутизатору только через ssh .
IP Адрес заданный по умолчанию на маршрутизаторе 192.168.1.1, ваша
машина принадлежит к сетевым диапазонам 192.168.1.*.
# telnet 192.168.1.1
Проверьте что опция boot _ wait включена. boot _ wait должен быть
включен для обновления или восстановления плохой инсталляции.
# nvram get boot_wait
boot _ wait = on
Устанавливаем пароль для пользователя `root'
# passwd
Если вы получили любую ошибку при установке пароля, запустите
следующую команду.
# firstboot
Или маршрутизатору требуется перезагрузка.
# reboot
Сейчас вы можете подключится к маршрутизатору через ssh протокол, и
приступить к его конфигурированию.
# ssh root @192.168.1.1
Мы будем использовать маршрутизатор как <<Точку доступа>>. Запустите
следующие команды на маршрутизаторе.
Эти команды устанавливают параметры сети маршрутизатора, для доступа к
Internet ( WAN ).
# nvram set wan_ifname=vlan1
# nvram set wan_proto=static
# nvram set wan_ipaddr=xxx.xxx.xxx.xxx
# nvram set wan_netmask=255.255.255.0
# nvram set wan_gateway=192.168.1.1
# nvram set wan_dns=192.168.1.1
# nvram commit
Если ваш маршрутизатор получает IP Адрес через DHCP , вам нужно
выполнить только это.
# nvram set wan_ifname=vlan1
# nvram set wan_proto=dhcp
# nvram commit
Для PPPoE Internet подключения
# nvram set wan_ifname=ppp0
# nvram set wan_proto=pppoe
# nvram set ppp_mtu=1492
# nvram set pppoe_ifname=vlan1
# nvram set ppp_username=your_isp_login
# nvram set ppp_passwd=your_isp_password
# nvram commit
Сейчас вам необходимо перезагрузить маршрутизатор.
Установка ChilliSpot
Скачайте следующие архивы на ваш компьютер
Модуль для создания туннеля на маршрутизаторе
# wget http://downloads.openwrt.org/experimental-20050525/bin/packages/kmod-tun_2.4.30-1_mipsel.ipk
Chilli daemon
# wget http://chillispot.org/download/chillispot_1.0-1_mipsel.ipk
# wget http://chillispot.org/download/chillispot-1.0.tar.gz
Скопируйте эти файлы на маршрутизатор
# scp kmod-tun_2.4.30-1_mipsel.ipk root@192.168.1.1:/tmp
# scp chillispot_1.0-1_mipsel.ipk root@192.168.1.1:/tmp
Войдите на маршрутизатор через SSH
# ssh root @192.168.1.1
На маршрутизаторе
# cd /tmp
# ipkg install kmod-tun_2.4.30-1_mipsel.ipk
Редактируем /etc/modules и добавим "tun" в него.
Это загружает модуль tun , после каждой перезагрузки маршрутизатора.
На маршрутизаторе вы можете использовать редактор vi .
OpenWrt поставляется со следующими сетевыми интерфейсами:
* eth0: LAN Switch. Is used as the connection point for the VLANs.
Do never use this port directly.
* eth1: Wireless Interface
* vlan1: Virtual LAN: Internet
* vlan0: Virutal LAN: Port 1 to 4
* br0: Bridge between vlan0 and eth1.
Мы имеем сеть не доступную через радио и наоборот, удалим интерфейс
eth1 с моста.
Запустите следующие команды
# nvram set lan_ifnames="vlan0 eth3"
# nvram commit
# /etc/init.d/S40network restart
Установка chillispot
# cd /tmp
# ipkg install chillispot_1.0-1_mipsel.ipk
Теперь firewall на месте. Скопируйте firewall скрипты из исходных
кодов на маршрутизатор.
Untar исходники chillispot на ваш компьютер
# tar zxvf chillispot-1.0.tar.gz
# cd chillispot-1.0/doc
# scp firewall.openwrt root@192.168.1.1:/tmp
На маршрутизаторе
# rm /etc/init.d/S45firewall
# cp /tmp/firewall.openwrt /etc/init.d/S45firewall
# chmod 755 /etc/init.d/S45firewall
Мне пришлось отредактировать скрипт S 45 firewall и изменить
WANIF=$(nvram_get wan_ifname)
на
WANIF=$(nvram get wan_ifname)
Chilli сам заботится о назначении IP адресов для беспроводных
клиентов. Теперь мы можем безопасно удалить dnsmasq сервис openwrt dns
и dhcp .
# rm /etc/init.d/S#dnsmasq
Замените # в S#dnsmasq подходящим числом.
Сконфигурируем Chilli для загрузки при старте маршрутизатора.
Отредактируем / etc / init . d / S 50 services и добавим эти строки в
конец.
sleep 5
/usr/sbin/chilli
Конфигурационный файл chilli daemon можно найти /etc/chilli.conf на
маршрутизаторе. Сейчас перед всеми дальнейшими конфигурациями chilli ,
мы будем инсталлировать и конфигурировать UAM и FreeRadius сервер.
Мы будем использовать Universal Access Method ( UAM ) для авторизации
и входа в беспроводную точку доступа. С UAM беспроводные клиенты
переадресовываются на страницу входа в систему что бы быть
авторизированным при первом запросе Internet или Extranet .
Я предполагаю что у Вас установлен и сконфигурирован Apache httpd
сервер, для обработки CGI страниц. UAM метод использует скрипт
hotspotlogin.cgi , который можно найти в doc/hotspotlogin.cgi в
директории с исходниками chillispot .
Положите cgi -сценарий в директорию где apache исполняет cgi
-сценарии, по умолчанию используйте /var/www/cgi-bin/ на вашем
сервере.
Откройте для редактирования hotspotlogin . cgi . Разкомментируйте
следующие строки
$uamsecret = "ht2eb8ej6s4et3rg1ulp"; Change this to your liking.
$ userpassword =1;
Сценарий hotspotlogin.cgi требует https( SSL ). Вам, возможно, нужно
сконфигурировать SSL сертификаты.
FreeRadius
Мы будем иметь FreeRadius сервер, сконфигурированный с поддержкой
MySql для авторизации и хранения аккаунтов пользователей.
Если компилировать из исходных кодов
# wget ftp://ftp.freeradius.org/pub/radius/freeradius-1.0.5.tar.gz
# tar zxvf freeradius-1.0.5.tar.gz
# cd freeradius-1.0.5
# ./ configure --with-mysql
# make && make install
Конфигурирование FreeRadius
Мы подготовим базу данных для использования с freeradius .
# mysql -u root -p
> create database radius;
> quit
# mysql -u root -p radius < /usr/share/doc/freeradius-x.x.x/db_mysql.sql
# mysql -u root -p
> GRANT select,insert,update,delete,create,drop ON radius.*
TO `radiususer'@'localhost' IDENTIFIED BY 'radiuspasswd';
> quit
редактируем /etc/raddb/radius.conf или /usr/local/etc/raddb/radius.conf
В итоге ваш radiusd.conf должен выглядеть приблизительно так :
authorize {
preprocess
chap
mschap
# auth_log
# attr_filter
# digest
suffix
sql
# file
# eap
# etc_smbpasswd
# ldap
}
authenticate {
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
Auth-Type MS-CHAP{
mschap
}
# pam
# unix
# Auth-Type LDAP {
# ldap
# }
# eap
}
preacct {
pre process
acct_unique
suffix
# files
}
accounting {
acct_unique
detail
# counter
unix
sql
radutmp
# sradutmp
}
session {
radutmp
}
Файл radius.conf является хорошо комментированным, вы можете настроить
его за вашей потребностью.
Отредактируйте фаил /etc/raddb/sql.conf и введите адрес сервера, логин
и пароль для подключения к вашему MySQL серверу и базе данных RADIUS .
Dialupadmin
Dialupadmin - это система управления пользователями RADIUS,
посредством WEB интерфейса.
Cкопируйте директорию dialup_admin из директории с исходниками
freeradius в /usr/local/dialup_admin
# cp -r freeradius-x.x.x/dialup_admin /usr/local/
Создайте symlink от вашего корневого каталога веба-сервер к
dialup_admin/htdocs
# ln -s /usr/local/dialup_admin/htdocs /var/www/html/dialupadmin
Отредактируйте dialup_admin/conf/admin.conf.
general_radiusd_base_dir: /usr/local/radiusd
general_domain: company.com
general_lib_type: sql
general_radius_server: localhost
general_radius_server_port: 1812
general_encryption_method: clear
sql_type: mysql
sql_server: localhost
sql_port: 3306
sql_username: radiususer
sql_password: radius69passwd
sql_database: radius
Сейчас Вы можете обратиться к dailup_admin по следующему URL :
http://yourwebsever/dialupadmin
Сейчас мы можем продвинуться вперед по конфигурированию chilli на
маршрутизаторе. Файл конфигурации chilli может быть найден в
/etc/chilli.conf на маршрутизаторе. Конфигурационные директивы о
которых нужно изменить.
#dns server that will be specified to the clients machines
dns1 172.16.0.5
dns2 172.16.0.6
#domain name that will be suggested to the clients
domain your.hotspot.com
#radius server IP
radiusserver1 192.168.0.100
radiusserver2 192.168.0.101
#secret shared between the router and the radius servers
#on the radius server it in the file clients.conf
radiussecret somesecret123
#Location ID of the router that will be sent to the radius for
#accounting purpose
radiuslocationi isocc=in,cc=91,ac=400078,network=HOME_Nework
#Location name
radiuslocationname HOME,magnet
dhcpif eth1
#DHCP lease period in seconds
lease 900
#UAM paramter. URL of web server handling authentication.
Uamserver https://youruamserver/cgi-bin/hotspotlogin.cgi
#secret shared between chilli and authentication web server.
#Specify same as mentioned in the hotspotlogin.cgi
uamsecret ht2eb8ej6s4et3rg1ulp
#Domains that users can browse with out authentication
uamallowed www.chillispot.org,www.openwrt.org
Есть другие параметры, которые могут быть изменены согласно вашему
предпочтению.
Тестирование полной установки
Вся основная конфигурация сделана, и готова к проверке .
Укажите браузеру адрес WEB интерфейса dialup_admin. Создайте аккаунт
тестового пользователя.
Будут работать только имя пользователя и пароль, остальные поля можете
оставить пустыми .
Запустите сервер chilli на маршрутизаторе в отладочном режиме.
# /usr/sbin/chilli - f - d
Также запустите radius на сервере, если он не запущен. Использование -
X , чтобы видеть отладочных данные.
# /usr/sbin/radiusd - X
Сейчас с вашей беспроводной клиентской машины, попробуйте выйти в
Интернет.
Ваш браузер должен перейти к странице hotspotlogin.cgi.
Используйте имя/пароль пользователя тестового аккаунта, который вы
создали для входа в систему.
Ребят, а кто нибудь делал нарезку скорости для chillispot который работает в связки с abills?
У меня два NAS сервера(chillispot и mpd5), всё крутиться на одной машине, через mpd5 шейпер работает на УРА, используя ng_car, а, как теперь нарезать скорость для chillispotа?