Wi-fi в кафе, авторизація по смс своїми руками і майже безкоштовно, блог Чередова івана

Вже існує безліч рішень цього завдання. З безкоштовних привабливо виглядає Captive Portal service with SMS auth for pfsense. pfSense заснований на ядрі FreeBSD, але не вимагає яких-небудь знань і умінь, специфічних для даної ОС. Практично весь функціонал доступний через веб-інтерфейс.

Я ж робив свій captive portal на основі замітки Ніка Поповича (Pipefish) "Captive Audience". Вона була написана рівно п'ять років тому, але поки я нічого простіше не знайшов.

Зібрав старенький комп з двома мережевими картами. На нього поставив Linux Debian 8. Він буде виконувати роль маршрутизатора замість DIR300. А останній поклав в резерв (завжди можна увіткнути назад, якщо щось станеться з компом).

На компі підняв DHCP, DNS, MySQL, Apache.

export IPT = "iptables"
export WAN = ppp + # Інтерфейс, який дивиться в інтернет, на ньому піднято PPPoE до провайдера
export LAN = eth0 # Локальна мережа
export LAN_IP_RANGE = 192.168.37.0 / 24

Повністю мій файл firewall.sh тут.

Йому потрібно задати права

sudo chmod 700 /etc/firewall.sh

А щоб він сам запускався при завантаженні, потрібно вписати в / etc / rc.local

/etc/firewall.sh
chown www-data / var / lib / users
chmod 600 / var / lib / users

Задати дозволу для apache додаванням в / etc / sudoers рядків

www-data ALL = (ALL: ALL) NOPASSWD: / var / lib / users

Те ж саме для файлу / var / lib / user1. У нього пишеться поточний mac (хоча безпеки не писати його в файл, а відразу доручити Апач виконувати "sudo iptables -I internet 1 -t mangle -m mac -mac-source $ mac -j RETURN"). Тим самим маркований пакет покине ланцюжок "interenet".

Туди ж додати рядок (щоб апач зміг визначити mac відвідувача):

www-data ALL = (ALL: ALL) NOPASSWD: / usr / sbin / arp

Wi-fi в кафе, авторизація по смс своїми руками і майже безкоштовно, блог Чередова івана

Шейпінг трафіку реалізований за допомогою htb.

Комп крім маршрутизатора ще виконує роль принт-сервера. Також за розкладом перевантажує точки доступу.

// функція виконання команд на мікротіке (підключаємося, використовуючи ключ)

function ssh_exec ($ ip, $ command)
$ Connection = ssh2_connect ($ ip, 22);
if (ssh2_auth_pubkey_file ($ connection, 'www-data', '/var/www/.ssh/id_rsa.pub', '/var/www/.ssh/id_rsa'))
$ Stream = ssh2_exec ($ connection, $ command);
stream_set_blocking ($ stream, true);
$ Stream_out = ssh2_fetch_stream ($ stream, SSH2_STREAM_STDIO);
return stream_get_contents ($ stream_out);
fclose ($ stream);
> else
die ( 'Public Key Authentication Failed');
>>

// дізнаємося мак з таблиці ARP

$ String = '/ ip firewall mangle add chain = prerouting src-mac-address = "'. $ Mac. '" In-interface = BRIDGE protocol = tcp action = jump jump-target = registry place-before = 0';
ssh_exec ($ router, $ string);

// відправляємо смс з 3G-модема, встромлений в мікротік

$ String = '/ tool sms send usb3 channel = 3 +7'. $ Tel. ' message = "Kog Wi-Fi: '. $ code.'" ';
ssh_exec ($ router, $ string);

// додаємо в мікротік правило перестрибувати маркування пакетів для даного Mac'а

$ String = '/ ip firewall mangle add chain = prerouting src-mac-address = "'. $ Mac. '" In-interface = BRIDGE protocol = tcp action = jump jump-target = registry place-before = 0';
ssh_exec ($ router, $ string);

Ось власне і все.

будь ласка, оцініть сторінку, я намагався :)