Рабочий прототип (PoC), превращающий ESP32 в аппаратный прокси-сервер стоимостью 3 доллара, который передает трафик через MQTT. Поскольку устройство инициирует исходящее соединение с брокером, можно обходить цензуру без открытия портов или наличия публичного IP-адреса.
Принцип работы
ESP32 выступает в роли конечной точки TCP-соединения. Python-скрипт работает как локальный прокси-сервер на ноутбуке. MQTT служит лишь каналом связи между ними. Проверено на: Windows 10 (Firefox / Python 3) ↔ ESP32-S3 Dev Module ↔ HiveMQ Cloud (бесплатный тариф)
MQTT-брокер должен быть доступен из той страны, где находится ноутбук.
Подтвержденная работоспособность
YouTube
Gmail
Twitter / X
Новостные сайты
Reddit
Известные проблемы
Instagram зависает
Принцип работы
ESP32 подключается к Wi-Fi и подписывается на MQTT-топик req.
Python-скрипт запускает локальный HTTP-прокси на ноутбуке (например, 127.0.0.1:8080).
Firefox настраивается на использование этого локального прокси.
Когда Firefox запрашивает сайт, Python-прокси:
Разбирает строку CONNECT host:port.
Публикует сообщение open через MQTT.
Передает «сырые» байты TLS в виде сообщений data.
ESP32 получает эти сообщения, открывает реальный TCP-сокет к целевому хосту и пересылает байты.
Ответы от реального сервера возвращаются через MQTT (топик res), принимаются Python-прокси и передаются обратно в Firefox.
Примечания
Весь трафик передается в «сыром» виде — без перехвата TLS и без расшифровки.
Это прототип (PoC), а не защищенный прокси-сервер. Возможны сбои или нестабильная работа при высокой параллельной нагрузке.
Ограничения
У ESP32 ограниченные ресурсы и отсутствует многопоточность, поэтому он не может обрабатывать слишком много одновременных соединений. Попытка загружать страницы в нескольких вкладках работать не будет.
Изображения и видео работают, но для экономии трафика (особенно на бесплатном аккаунте MQTT) и повышения скорости рекомендуется использовать блокировщик контента, например Block Image Reloaded для Firefox.
Что-то не совсем понял, как последнее звено этой цепочки избегает блокировок. ESP32 кто-то должен вывезти за границу сначала? )
Насчёт одновременных соединений… Возможно локальный прокси мог бы ставить их в очередь. Он, конечно, не видит, что там внутри стрима, но можно какую-то эвристику приделать, типа если столько-то мс не приходит новых пакетов, значит это соединение неактивно и можно аткивировать следующее из очереди.
Вот пример, демонстрирующий работу системы . Цель проекта — обход интернет-ограничений.
**Локация A:** Страна с жесткой интернет-цензурой или строгими ограничениями. Ноутбук с Windows 10, браузером Firefox и локальным прокси-сервером на Python.
**Локация B:** Свободный интернет без цензуры. Здесь подключен ESP32.
**Локация C:** MQTT-сервер — он должен быть доступен из точек A и B, но не обязательно должен находиться в зоне свободного интернета.
(определение: MQTT (Message Queuing Telemetry Transport) — это легковесный протокол обмена сообщениями с открытым стандартом, разработанный для устройств с ограниченными ресурсами и работы в ненадежных сетях)
Браузер на ноутбуке пытается получить доступ к заблокированному сайту и отправляет запрос локальному Python-прокси, который пересылает его на MQTT-сервер.
ESP32 считывает байты с MQTT-сервера и пересылает их на заблокированный сайт, который обычно недоступен из точки A.
ESP32 получает ответ от сайта и отправляет его на MQTT-сервер.
Ноутбук в точке A считывает ответ сайта с MQTT-сервера и (с помощью скрипта на Python) отображает его в браузере.
Т.е ваше решение подходит только для тех, у кого есть друзья за рубежом, готовые 24/7 держать ваше устройство подключенным к их интернету, и все это для того чтоб смотреть хтмл страницы с низкой скоростью и в одной вкладке.
Я делюсь тем, что создал сам; я здесь не для того, чтобы предоставлять вам быстрый и бесплатный VPN-сервис. Если вы не умеете вести себя вежливо, пожалуйста, держите свое мнение при себе.
Вы ничего не прочитали и не поняли из того, что я написал. Я говорил, что скорости достаточно для просмотра YouTube. И к чему вы вообще заговорили об HTML? Устройство способно обрабатывать PHP, HTML и всё остальное. Вы хоть что-нибудь понимаете в программировании?
еще как вариант - дополнительно сделать вариант локального proxy для второго esp32 - тогда решение будет более универсальным (вот тут что-то похожее для второго esp32 - https://github.com/bobozaur/std-esp32-proxy )
Так это вы начали с маркетанских заходов про 3 доллара (к чему это вообще? В английской версии на Гитхабе причем этого пассажа нет), вместо того чтоб честно указать что 99% пользователей даже этого форума ваше решение не подойдет, а теперь обижаетесь на критику. Что касается скорости,
images/video a bit slow (avoid many connections at once)
повышения скорости рекомендуется использовать блокировщик контента