
SOCKS5-прокси, туннелируемый через объектное хранилище Cloudflare R2, с агентами на Python и C++ без зависимостей, ретранслирующими TCP-трафик через зашифрованные объекты R2 для скрытого доступа.
SOCKS5-прокси, туннелируемый через бакеты Cloudflare R2.
[Client App] ◄─SOCKS5─► [Proxy] ◄─── R2 Bucket ───► [Agent] ◄─TCP─► [Target]
Прокси запускает локальный SOCKS5-сервер на машине оператора. Каждый запрос CONNECT сериализуется в бинарные пакеты и сохраняется как объекты R2. Агент опрашивает тот же бакет из целевой сети, забирает запросы на подключение, устанавливает реальные TCP-соединения и ретранслирует данные обратно через R2.
| Компонент | Язык | Файл | Описание |
|---|---|---|---|
| Proxy | Python | r2socks.py | SOCKS5-сервер (сторона оператора) |
| Agent | Python | r2socks.py | Ретранслятор на целевой стороне (режим агента) |
| Agent | C++ | r2agent.cpp | Автономный Windows-агент, без зависимостей |
C++-агент протокольно совместим с Python-прокси. Он использует только нативные Windows API (WinHTTP, bcrypt, Winsock2) — внешние библиотеки не требуются.
dash.cloudflare.com/<ACCOUNT_ID>/r2/...pip install boto3
python r2socks.py proxy -b my-bucket -a <account_id> \
--access-key <R2_ACCESS_KEY> --secret-key <R2_SECRET_KEY>
Прокси генерирует ID канала и выводит команду для запуска агента.
Python-агент:
python r2socks.py agent -b my-bucket -a <account_id> -c <channel_id> \
--access-key <R2_ACCESS_KEY> --secret-key <R2_SECRET_KEY>
C++-агент (Windows):
.\r2agent.exe -b my-bucket -a <account_id> -c <channel_id> -k <access_key> -s <secret_key>
python r2socks.py proxy [options]
Required:
-b, --bucket BUCKET R2 bucket name
-a, --account-id ID Cloudflare account ID
Optional:
-c, --channel ID Channel ID (auto-generated if omitted)
-l, --listen ADDR Listen address (default: 127.0.0.1:1080)
--access-key KEY R2 API token Access Key ID
--secret-key KEY R2 API token Secret Access Key
--socks-user USER Enable SOCKS5 user/pass authentication
--socks-pass PASS SOCKS5 password
-p, --password PWD AES-256-GCM encryption password
-v, --verbose Debug logging
Python:
python r2socks.py agent [options]
Required:
-b, --bucket BUCKET R2 bucket name
-a, --account-id ID Cloudflare account ID
-c, --channel ID Channel ID (from proxy output)
C++ (Windows):
r2agent.exe [options]
Required:
-b, --bucket BUCKET R2 bucket name
-a, --account-id ID Cloudflare account ID
-c, --channel ID Channel ID (from proxy output)
Credentials (flags override env vars):
-k, --access-key KEY R2 API token Access Key ID
-s, --secret-key KEY R2 API token Secret Access Key
Optional:
-v, --verbose Debug logging
Удалите все объекты R2 из канала по завершении:
python r2socks.py clean -b my-bucket -a <account_id> -c <channel_id>
Бинарный формат пакетов, общий для прокси и агента:
┌──────────┬────────────────────┬────────────┬──────────────────┐
│ CMD (1B) │ ConnectionID (16B) │ Len (4B BE)│ Payload (var) │
└──────────┴────────────────────┴────────────┴──────────────────┘
Несколько пакетов объединяются в один объект R2 (до 4 МБ) для сокращения количества вызовов API. Объекты именуются с использованием микросекундных меток времени для упорядочивания и удаляются после обработки.
Опциональное шифрование AES-256-GCM для всех полезных нагрузок R2:
pip install cryptography
# Both sides must use the same password
python r2socks.py proxy -b bucket -a account_id -p "my-secret-password"
python r2socks.py agent -b bucket -a account_id -c channel -p "my-secret-password"
Ключ выводится с использованием PBKDF2-SHA256 с 600 000 итераций.
Из Visual Studio Developer Command Prompt:
cl /std:c++17 /EHsc /O2 r2agent.cpp /link ws2_32.lib winhttp.lib bcrypt.lib
И прокси, и агент используют адаптивные интервалы ожидания:
Это балансирует отзывчивость и объём вызовов API. Статистика логируется каждые 30 секунд с отображением активных соединений, переданных объектов и перемещённых байтов.
SignatureDoesNotMatchw32tm /resync /force (Windows) или sudo ntpdate pool.ntp.org (Linux)RequestTimeTooSkewedw32tm /resync /force
AccessDeniedПрокси (Python):
boto3 (обязательно)cryptography (опционально, для шифрования)Агент (C++):
| Команда | Код | Направление | Полезная нагрузка |
|---|
| NEW | 0x01 | Proxy→Agent | ATYP + Address + Port |
| ACK | 0x02 | Agent→Proxy | 1 byte status (0=success) |
| DATA | 0x03 | Bidirectional | Raw TCP data (up to 1MB) |
| CLOSE | 0x04 | Bidirectional | Empty |
| PING | 0x05 | Bidirectional | Empty |