Особенности Captive Portal для Apple или “Опять у них все не так как у всех”

Приветствую читателей нашего программистского, собсна, журнала! Вещает, как обычно, Corvych.

История началась с того, что администрация Гостевого Дома “Вояж” в г. Геленджик заказала себе веб-сайт. Ничего, интересного, казалось бы, сделали сайт, запустили, круто.

На личном приёме у хозяйки разузнали про интернет и проблему воровства Wi-Fi соседним домом. В общем, история такая: в не сезон соседний дом скидывается, заселяет на ночь своего человечка, тот узнаёт пароль и говорит всем своим. Дошло даже до того, что ставят роутер в режим Wi-Fi моста! “Наглость!”, – подумали мы. Тем же вечером сидим, думаем, мол, чаво делать? Хозяйка – добрейшей души человек, а проблема понижает скорость интернета, что вызывает недовольство постояльцев и плохие отзывы.

Вспомнили, как работает Wi-Fi в крупных отелях. У них при подключении есть веб-страничка авторизации, например по SMS. А мы как раз установили ей Mesh Wi-Fi от Keenetic c поддержкой технологии Captive Portal. Пункт первый – чек!

Далее смотрим список поддерживаемых сервисов с авторизацией по “Ваучерам”, так как это похоже на то, что нам нужно. А нам нужно так: для получения доступа в Интернет, необходимо будет ввести номер комнаты и четырехзначный код, который выдаст хозяйка при заселении, а при выселении будет блокироваться доступ для устройств этой комнаты. То есть, по плану, интернет будет работать только в те дни, когда номер занят, а в остальные дни, доступ будет заблокирован. Подобные сервисы есть, но есть два минуса: 1. Сервис платный (от 800 рублей в месяц). 2. Неудобный интерфейс для хозяйки.

Встал вопрос о поднятии своего сервера авторизиции. Мы с этим успешно справились: подняли сервер RADIUS и сервер UAM. Тестируем!

По итогам тестирования, работают все компьютеры Windows и все устройства Android (тестовый стенд: Google Pixel 7 Pro, Honor 50, Honor 8X, Realme GT Master Edition, Poco M4 Pro 5G, Tecno POVA Neo 3, Realme 11 Pro+). Вы заметите, что в нашем тестовом стенде нет устройств Apple. Почему? Всё просто, мы не тратим столько денег на ненужные понты и платим только за надежные и функциональные рабочие инструменты. Без зазрения совести, мы работу сдали, хозяйка рада, соседей отцепили, все довольны! Ничего, как говорится, не предвещало беды…

Через неделю после установки заехали гости с устройствами от Apple. Пытаются установить коннект к Wi-Fi, и виснем на странице входа, м-да. Притом, на всех остальных системах после входа проходит секунда и устройство заходит! А тут, ни в какую! Вчера потратил свой вечер на изучение вопроса, в итоге нашел решение в каких-то дебрях StackOverflow.

Короче, секрет прост: надо Apple устройству подсунуть HTML страницу именно такого вида:

<html>
  <head>
    <title>Success</title>
  </head>
  <body>
    Success
  </body>
</html>

Прям копипаст отсюда в какой-нибудь файлик success.html! Потом пропишем правило перехода в UAM сервере daloRadius. Самое действенное решение оказалось редирект по PHP, так как по JS не работает, что странно. Я изменил в файлике hotspotlogin.php условие, у меня которое начинается с 226 строки:

if ($result == 1) {
  echo "
  <h1 style=\"text-align: center;\">$h1Loggedin</h1>";

  if ($reply) { 
      echo "<center> $reply </br></br></center>";
  }

  echo "
  <center>
    <a href=\"http://$uamip:$uamport/logoff\">Logout</a>
  </center>
</body>
</html>";
header("Location: https://example.com/success.html"); // Сюда пишем свой URL, где лежит HTML страница для авторизации Apple
}

Пробуем!

Ура! Теперь успешная авторизация Apple устройств в Captive сети.

Надеюсь, каптивщикам-самоделам моя статья может помочь. Всем спасибо!