LINUX.ORG.RU

Общедоступный WiFi


0

0

Здравствуйте, интересует как сделать общедоступную WiFI сеть по неким паролям. Для примера взять "WiFi в баре". Посетитель покупает любой продукт, ему вместе с продуктов, по требованию дают некий код. Который генерируется например каждый час, или каждый день. При подключении к любому сайту, ему высвечивается лого фирмы с просьбой ввода логина и пароля. Только после этого он может серфить интернет. Например, как в MacDonald's.

Старался найти информацию на эту тему, но ничего не нашел. Буду рад любым ссылкам или другой помощи в этом вопросе.

Как я понимаю, берется наверное любая ТД, на которую можно перепрошить обычный никс, и там уже все это настраивается.


Вариантов масса.
1. Готовые решения: Nomadix, Alepo, Handlink, Aptilo.
2. Wiki: http://en.wikipedia.org/wiki/Hotspot_(Wi-Fi)
3. Radius:
http://www.wifi-radius.com/aradial-radius-server-billing-pop-hotspot.html
4. Дистрибутивы готовые к такому: mikrotik, m0n0wall и др.
5. Реализация идет через файрвол + апач + скрипты. Идея: неавтаризованный доступ перенаправляется на страницу с логином-паролем. Далее после ввода их, запись с маком+ip прописывается в таблицу файрвола. Скрипт считает время и удаляет запись. Что-то в таком духе, ничего сложного.

gh0stwizard ★★★★★
()
Ответ на: комментарий от gh0stwizard

> 5. Реализация идет через файрвол + апач + скрипты. Идея: неавтаризованный доступ перенаправляется на страницу с логином-паролем.

как подменять DNS? т.е. сначала . = 10.0.0.1, после этого - любой сайт согласно его DNS-записи?

GuttaLinux8
()
Ответ на: комментарий от GuttaLinux8

Нет, любой запрос на внешнюю сеть при не авторизованном доступе ведет на страничку с логином-паролем. Т.е запросы 80, 8080 и др. портов (считаем что пользователь хочет открыть нужную ему страницу ведут на login/pass page).
DNS не причем, WiFi AP сама дает настройки, выделяет IP, дает клиенту маску сети, шлюз, DNS сервера и т.п. Вся начинка работает уже после нее, т.е. на нашем сервере. (Имеется ввиду, что нет разницы чем является AP - готовой железкой в коробке или сетевой платой в сервере).

gh0stwizard ★★★★★
()
Ответ на: комментарий от gh0stwizard

чтобы система куда-то шла - нужнно, чтобы

литерный адрес преобразовался в цифровой по цифровому адресу система пошла по текущему гейтвею

т.е. если я на такой системе неавторизованно сделаю dig ya.ru - система выполнит dns-запрос, даже если я неавторизован, я правильно понимаю? т.е. я уже фактически одной ногой в интернете?

GuttaLinux8
()
Ответ на: комментарий от GuttaLinux8

Что ж вы не понятные такие :)
dig ya.ru дает нам инфу в том виде каком она есть. IP-адрес указанного литерного адреса, является отправной точкой: 1) он принадлежит нашей сети - пропускаем пакет; 2) выходит за рамки нашей сети - перенаправляется ip-пакет.
Вопрос из смежной темы как пустить интернет через определенный порт (proxy).

gh0stwizard ★★★★★
()
Ответ на: комментарий от GuttaLinux8

>т.е. я уже фактически одной ногой в интернете?

Чтобы быть в интернете мало получить dns-ответ. Нужно еще сделать запрос на сервер (по-конкретному IP) раз, получить от этого сервера два. Представьте ситуацию, что литерных имен вообще нет, так будет проще.

gh0stwizard ★★★★★
()
Ответ на: комментарий от gh0stwizard

> Чтобы быть в интернете мало получить dns-ответ. Нужно еще сделать запрос на сервер (по-конкретному IP) раз, получить от этого сервера два. Представьте ситуацию, что литерных имен вообще нет, так будет проще.

это оверхед и неправильно. а если сайт в данный момент выпал из dns, или ещё что-то случилось, или внешний dns перегружен? хотелось бы такой способ, чтобы dns для неавторизованых показывал одно, а для авторизованных - другое

GuttaLinux8
()
Ответ на: комментарий от GuttaLinux8

>это оверхед и неправильно. а если сайт в данный момент выпал из dns, или ещё что-то случилось, или внешний dns перегружен? хотелось бы такой способ, чтобы dns для неавторизованых показывал одно, а для авторизованных - другое.

1. dns-сервер наш, пусть он будет просто перенаправлять пакеты.
2. Хотите замену на внешние, пожалуйста никто не запрещает. В случае с isc dhcp (в стандартной поставке) надо будет только делать записи по маку и настройками для конкретного, а потом еще рестартнуть демон.

Как хотите так и сделайте, никто не запрещает :)
Я же сказал вариантов реализации масса. Но суть одна.

gh0stwizard ★★★★★
()
Ответ на: комментарий от gh0stwizard

есть такая клевая штука как ip over dns (nstx), одно время сам пользовался. правда надо иметь свой фейковый днс сервер. так что если пользователь может использовать только днс, может и получить доступ в интернет

CFA
()
Ответ на: комментарий от gh0stwizard

Чем свинку ставить - не проще ли просто в iptables hashlimit srcip разумный выставить? Нормальный днс-туннель все равно на несколько порядков больше жрет, чем нормальный днс-сервер.

nnz ★★★★
()
Ответ на: комментарий от GuttaLinux8

>хотелось бы такой способ, чтобы dns для неавторизованых показывал одно, а для авторизованных - другое

Не забывай про кеширование днс на стороне клиента.

m0xf
()
Ответ на: комментарий от GuttaLinux8

> как подменять DNS? т.е. сначала . = 10.0.0.1, после этого - любой сайт согласно его DNS-записи?

Зачем? Представим себе такую конфигурацию на шлюзе:

Внутренняя сеть на интерфейсе eth0, IP=192.168.1.1/24
Внешний канал заведен на eth1

Теперь задаем такие правила на iptables:

iptables -A POSTROUTING -t mangle -o eth1 -s 192.168.1.0/24 -j DROP ### R1. Вырезаем все что не замаскарадено
iptables -A PREROUTING -t nat -i eth0 -s 192.168.1.0/24 -j DNAT --to-destination 192.168.1.1 ### R2. По умолчания редиректим ВСЮ внутреннюю сеть на локальный IP шлюза

После чего для каждого авторизованного клиента командуем:

iptables -I PREROUTING 1 -i eth0 -s 192.168.1.2 -j RETURN ### RXX. Вместо 192.168.1.2 подставляется IP-адрес клиента

Пока клиент не прошел авторизацию, он будет постоянно попадать под правило R2. Как только он прошел авторизацию, начинает попадать под одно из правил RXX. -I POSTROUTING 1 нам гарантирует, что R2 всегда будет последним правилом и никогда не применится к тем, кто есть в одном из RXX.

no-dashi ★★★★★
()
Ответ на: комментарий от no-dashi

Да, еще одно правило забыл:

iptables -A POSTROUTING -o eth1 -j MASQUERADE -s 192.168.1.0/24 -d ! 192.168.1.0/24

А теперь следствие - у нас нет нужды е...ся с DNS и их подменой, и ни одна скотина не выскочит наружу.

В принципе, если бы стояла задача только "не пущать неавторизованных", можно было бы обойтись правилами в filter/FORWARD. Поскольку клиент должен попадать на локальный сайт для авторизации, приходится воевать в таблице NAT. А поскольку делать редирект надо до того как будет принято решение о маршрутизации и локальной обработке, приходится воевать в цепочке PREROUTING.

То есть применяем политику "все кто не авторизован, заворачиваются на лкоальный IP".

no-dashi ★★★★★
()
Ответ на: комментарий от gh0stwizard

> перенаправляется на страницу с логином-паролем. Далее после ввода их, запись с маком+ip прописывается в таблицу файрвола.

Возникает вопрос, что будет если я поснифирю сеть и задаплю активные в данный момент IP и MACи, а после войду в сеть с этими данными? Пробовали?

papay ★★★
()
Ответ на: комментарий от papay

только что попробовал, gw не отвечает мне:) даж на пинги не отвечает, хотя все остальное в сети пингую...

P.S. gw - Nomadix

papay ★★★
()
Ответ на: комментарий от papay

>Возникает вопрос, что будет если я поснифирю сеть и задаплю активные в данный момент IP и MACи, а после войду в сеть с этими данными? Пробовали?

Пробовали. То что ты завалил gw не есть гуд :)
http://xgu.ru/wiki/ARP-spoofing

gh0stwizard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.