Как я настроил туннелирование TCP-прокси через HiveMQ с помощью ESP32 за 3$, чтобы обойти блокировки.

Это мой личный проект: он не идеален, но работает. Вы можете подробнее ознакомиться с ним по ссылке: GitHub - hack-tramp/ESP-MQTTunnel: ESP32 MQTT TCP proxy. Text-only works v well, images/video a bit slow (avoid many connections at once) · GitHub

Рабочий прототип (PoC), превращающий ESP32 в аппаратный прокси-сервер стоимостью 3 доллара, который передает трафик через MQTT. Поскольку устройство инициирует исходящее соединение с брокером, можно обходить цензуру без открытия портов или наличия публичного IP-адреса.


Принцип работы

ESP32 выступает в роли конечной точки TCP-соединения. Python-скрипт работает как локальный прокси-сервер на ноутбуке. MQTT служит лишь каналом связи между ними. Alt ​​text Проверено на: Windows 10 (Firefox / Python 3) ↔ ESP32-S3 Dev Module ↔ HiveMQ Cloud (бесплатный тариф)

:warning: MQTT-брокер должен быть доступен из той страны, где находится ноутбук.


Подтвержденная работоспособность

  • :white_check_mark: YouTube
  • :white_check_mark: Gmail
  • :white_check_mark: Twitter / X
  • :white_check_mark: Новостные сайты
  • :white_check_mark: Reddit

Известные проблемы

  • :cross_mark: Instagram зависает

Принцип работы

  1. ESP32 подключается к Wi-Fi и подписывается на MQTT-топик req.
  2. Python-скрипт запускает локальный HTTP-прокси на ноутбуке (например, 127.0.0.1:8080).
  3. Firefox настраивается на использование этого локального прокси.
  4. Когда Firefox запрашивает сайт, Python-прокси:
  • Разбирает строку CONNECT host:port.
  • Публикует сообщение open через MQTT.
  • Передает «сырые» байты TLS в виде сообщений data.
  1. ESP32 получает эти сообщения, открывает реальный TCP-сокет к целевому хосту и пересылает байты.
  2. Ответы от реального сервера возвращаются через 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) — это легковесный протокол обмена сообщениями с открытым стандартом, разработанный для устройств с ограниченными ресурсами и работы в ненадежных сетях)

  1. Браузер на ноутбуке пытается получить доступ к заблокированному сайту и отправляет запрос локальному Python-прокси, который пересылает его на MQTT-сервер.

  2. ESP32 считывает байты с MQTT-сервера и пересылает их на заблокированный сайт, который обычно недоступен из точки A.

  3. ESP32 получает ответ от сайта и отправляет его на MQTT-сервер.

  4. Ноутбук в точке 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)

повышения скорости рекомендуется использовать блокировщик контента

это же не я придумал, это ваши собственные слова.

Сейчас эпоха мамкиных вайбкодеров, смирись)

Я биру устонавливаю zapret и трачу 0 доларов :thinking: