Весь сегодняшний день я провел за попытками внедрения captive portal'а. Увы, все попытки успехом не увенчались, но для начала расскажу немного о том, что такое «captive portal». Кстати, перевода этого термина на русский мне так и не удалось отыскать. Итак, вы подключаетесь к открытой беспроводной сети в кафе или в аэропорту, но перед тем, как начать работу в Интернете, вам будет предложено нажать на кнопку согласия с правилами, ввести номер телефона для отправки одноразового пароля или же просто просмотреть рекламу. Это и есть «captive portal». Есть еще, конечно, версии с авторизацией, покупкой прав доступа при помощи кредитки и SMS, но это не наш вариант, мне нужно только согласие с правилами.
Для начала я прошил роутер, который обслуживает данную точку, прошивкой dd-wrt. В панели управления нашел целый список вариантов организации хотспота, меня это порадовало. Начал смотреть в Интернете. Первые два варианта отпали сразу, так как обеспечиваются исключительно на коммерческой основе. Второй вариант, что правда, предусматривает и бесплатную версию, но в бесплатной версии нет даже возможности цвет шрифта на странице поменять, смысла особого в такой кастрированной версии не вижу. Далее пошло более интересное дело: WifiDog и ChilliSpot. Первый вариант сначала показался мне слишком сложным, а второй — более простым. начал исследование с ChilliSpot. Реализация портала на роутере с треском провалилась — не хватило памяти. Установил на локальном сервере FreeRadius, попытался к нему подключиться. Тишина. Нет, при подключении к точке происходит перенаправление на какую-то страницу внутри роутера, однако страница эта отдает только пустой экран и не более того. Откатил роутер до состояния первозданного, после чего начал работать с WifiDog. Этому приложению сервер авторизации типа Radius'а не нужен, нужно только установить веб-интерфейс и указать к нему путь в настройках. Установил на все том же локальном сервере AuthPuppy (им, наверное, с названиями помогали специалисты «IKEA»). В Интернете писали, что эта штука требует наличия PgSQL, однако она без вопросов и на MySQL встала. Встала и села. На главной странице есть только ссылка на авторизацию в панели управления. Через нее установил плагин авторизации для посетителей. На главную так ничего и не вывелось. Указал путь к серверу в панели управления роутера. Все заработало, но слишком буквально. Доступ в Интернет я получил без какого-либо портала и авторизации.
Начало смеркаться. Прошивка dd-wrt, надо сказать, то еще извращение. Наверное, именно из-за нее куча народа боится неофициальных прошивок к роутерам. Указал настройки WAN — после перезагрузки роутер тупо перестал отвечать. Ни через веб-интерфейс, ни по telnet, ни даже на ping. Так мне его и не удалось вернуть к жизни, пришлось делать 30/30/30. Сделал, все восстановилось с установками по умолчанию. Настроил заново. В параметрах хотспота ошибся в одном из полей. OpenWRT в таком случае просто не запустит хотспотовского демона, dd-wrt же снова обрушилось и перестало отвечать на какие-либо запросы. Снова 30/30/30. Вообще, честно говоря, за все время работы с неофициальными прошивками TomatoUSB и OpenWRT мне ни разу не приходилось делать hard-reset. С dd-wrt это в порядке вещей. Я уже молчу о том, что огоньки LAN-портов не горят и в некоторых версиях WAN опознается как LAN4. WAN, кстати, мне так и не удалось поднять. Сначала все поработало-поработало, а потом внешний Интернет стал unreachable. Ах, да, забыл сказать: это произошло когда я уже забил на captive portal и после общего сброса решил просто настроить обыкновенную точку доступа. На недостижимость Интернета повлияло то ли имя точки доступа, то ли ее пароль. Кажется, dd-wrt завтра будет до свидания, а OpenWrt вернется на свое законное место. Стоит отметить, что перейти с Attitude Adjustment на Barrier Breaker тоже достаточно трудно, так как интерфейс стал существенно менее наглядным, но это уже не такая проблема, как hard-reset раз в полчаса.
На неделе я еще постараюсь попробовать Coova и NoCatSplash, но счастье достигнуто будет, скорее всего, когда я напишу свой вариант. Все-таки, чего нужно для captive portal'а? Зарегистрировать беспроводного пользователя без права доступа куда-либо кроме портала с фильтрацией по MAC-адресу, после чего показать страницу с кнопкой, по клику на которую на роутер через API отправится запрос на внесение MAC-адреса в белый список. Далее по cron'у ждем нужное количество времени и удаляем клиента. Вот и все сложности. За что тут можно сдирать сотни долларов (имею в виду коммерческие онлайн-сервисы) я ума не приложу, если за те же сто долларов можно нанять фрилансера, который напишет сервис раз и навсегда (до следующего изменения моды или до замены роутера).