Кофейни, требующие вводить номер телефона для доступа к Wi-Fi, мягко
говоря, не вызывают симпатии. На Android такие сети обычно работают “из
коробки”, а вот в Linux всё немного сложнее. Чтобы подключиться к
открытой сети через wpa_supplicant, понадобится cледующий
конфиг
/etc/wpa_supplicant/wpa_supplicant-wlp0s20f3.conf:
network={
ssid="CoffeeShop"
key_mgmt=NONE
}
У меня установлен атрибут immutable на
/etc/resolv.conf, чтобы dhcpcd (и любые другие
службы) не подменял мои DNS-серверы своими. При установленном флаге файл
нельзя редактировать, перемещать, удалять, переименовывать и вообще
как-либо изменять. Перед подключением к кофейной сети этот флаг нужно
временно снять, чтобы кофейный роутер смог прописать свои DNS-серверы,
перехватить запрос к любому HTTP-сайту и выполнить редирект на страницу
аутентификации:
chattr -i /etc/resolv.conf
Запускаем сервис:
systemctl start wpa_supplicant@wlp0s20f3.service
После этого в браузере переходим по адресу
http://neverssl.com/. На самом сайте ничего нет — он
используется только для выполнения незащищённого HTTP-запроса, который
должен быть перехвачен и перенаправлен на страницу аутентификации. После
успешной аутентификации можно снова включить wireguard,
вернуть свой /etc/resolv.conf и при необходимости
установить атрибут immutable.
Переподключение
Всё работало отлично, но в какой-то момент мне понадобилось переподключиться к сети:
systemctl restart wpa_supplicant@wlp0s20f3.service
После этого кофейный интернет перестал работать. Похоже, что это баг в самой системе аутентификации: повторные попытки логина не проходили, и меня постоянно выбрасывало обратно на стартовую страницу. Мне было лень разбираться, почему так происходит и что именно нужно поправить, поэтому я просто сменил MAC-адрес:
macchanger -r wlp0s20f3
Вывод получился примерно такой:
Current MAC: 00:1a:2b:3c:4d:5e (Intel Corporation)
Permanent MAC: 00:1a:2b:3c:4d:5e (Intel Corporation)
New MAC: 02:12:34:56:78:9a (random)
После этого я просто переподключился — интернет снова заработал. Главное — не забыть сохранить старый MAC-адрес, иначе домашний роутер может не пустить, и придётся перенастраивать фильтры/WHITELIST. Чтобы вернуть исходный MAC-адрес:
ip link set wlp0s20f3 address $oldmac
Вот так нехитро приходится взаимодействовать с публичным Wi-Fi, если сидишь на Linux.