Stealth Tunnel — это простое, но мощное Proxy-решение, созданное для обеспечения приватности и обхода блокировок. Его ключевая особенность — маскировка трафика под обычный HTTPS (TLS), что делает его крайне сложным для обнаружения и блокировки системами глубокого анализа пакетов (DPI).
Проект использует современную асинхронную архитектуру на Python (asyncio) для высокой производительности и минимального потребления ресурсов.
- ✅ Маскировка под TLS (HTTPS): Весь трафик упаковывается в стандартный TLS 1.3, неотличимый для провайдера от посещения обычного сайта.
- ✅ Стойкое шифрование: Используется двойной слой защиты: внешний TLS и внутренний слой с аутентифицированным шифрованием
ChaCha20-Poly1305. - ✅ Защита от DPI: Применение поддельного SNI и случайного паддинга пакетов делает поведенческий анализ трафика практически невозможным.
- ✅ Активная защита от атак: Встроенный механизм Fail2Ban автоматически блокирует IP-адреса атакующих, которые пытаются сканировать сервер или подобрать ключ.
- ✅ Мультиплексирование: Поддержка множества одновременных TCP-соединений через один VPN-туннель.
- ✅ Кроссплатформенность: Работает на любой ОС, где есть Python 3 (Linux, Windows, macOS).
- ✅ Авто-переподключение: Клиент автоматически восстанавливает соединение в случае обрыва.
- ✅ Простота настройки: Всего один файл конфигурации
config.json.
Система состоит из двух частей: сервера и клиента.
- Клиент запускает на вашем компьютере локальный SOCKS5-прокси.
- Вы настраиваете ваши приложения (браузер, Telegram и т.д.) на использование этого прокси.
- Когда приложение отправляет запрос, VPN-клиент перехватывает его, шифрует собственным протоколом и отправляет на VPN-сервер внутри защищенного TLS-соединения.
- Сервер принимает трафик, расшифровывает его и перенаправляет в интернет к целевому ресурсу.
- Ответ от ресурса проходит тот же путь в обратном порядке.
[Ваши приложения] <--> [SOCKS5 прокси] <--> [VPN Клиент] <== (Интернет) ==> [VPN Сервер] <--> [Целевой сайт]
(localhost) (localhost) (Зашифрованный туннель)
Убедитесь, что на вашем сервере (VDS/VPS на Linux) и клиенте установлены:
- Python 3.8+
pipдля установки библиотек- На сервере:
openssl(для генерации сертификата) иiptables(для защиты).
Клонируйте репозиторий и на сервере, и на клиенте установите необходимую крипто-библиотеку:
git clone https://github.com/cat228608/ChaCha20-Proxy.git
cd ChaCha20-Proxy
pip install pycryptodomeВсе следующие действия выполняются на вашем удаленном сервере.
Этот ключ является основой всей криптографии. Он должен быть уникальным и храниться в строжайшем секрете.
python3 key_generator.pyЭта команда создаст файл secret.key.
От передачи ключа зависит безопасность вашего трафика!
Чтобы маскироваться под HTTPS, нам нужен SSL-сертификат. Мы сгенерируем самоподписанный сертификат, который будет выглядеть как легитимный.
💡 Совет: В поле
CN(Common Name) укажите домен, под который вы маскируетесь (например, тот, что указан вfake_sni_hostnameв конфиге).
Выполните команду:
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
-keyout key.pem -out cert.pem \
-subj "/C=US/ST=California/L=San Francisco/O=Cloudflare, Inc./CN=www.cloudflare.com"Эта команда создаст два файла: cert.pem (публичный сертификат) и key.pem (приватный ключ).
Отредактируйте файл config.json на сервере. Для сервера важны только последние два параметра:
{
"server_ip": "1.2.3.4",
"server_port": 443,
"local_proxy_host": "127.0.0.1",
"local_proxy_port": 1080,
"fake_sni_hostname": "sun6-21.userapi.com",
"secret_key_file": "secret.key",
"cert_file": "cert.pem",
"key_file": "key.pem"
}Теперь переходим к настройке вашего локального компьютера (клиента).
⚠️ ВАЖНО: Это самый ответственный шаг. Вам нужно безопасно скопировать файлsecret.keyс сервера на клиентский компьютер. Используйтеscp,sftpили просто скопируйте его содержимое через защищенный SSH-туннель. Никогда не передавайте ключ по открытым каналам!Поместите файл
secret.keyв ту же папку, где лежитvpn_client.py.
Отредактируйте файл config.json на клиенте. Здесь нужно указать реальные данные вашего сервера.
{
"server_ip": "108.165.164.12", // <-- IP-адрес вашего сервера
"server_port": 443, // <-- Порт, который слушает сервер (443 - стандартный для HTTPS)
"local_proxy_host": "127.0.0.1", // <-- Оставить как есть
"local_proxy_port": 1080, // <-- Порт SOCKS5 прокси на вашем ПК
"fake_sni_hostname": "sun6-21.userapi.com", // <-- Домен, под который маскируемся. Должен совпадать на клиенте и сервере!
"secret_key_file": "secret.key", // <-- Путь к вашему секретному ключу
"cert_file": "cert.pem", // Эти файлы клиенту не нужны но в конфиге их оставтье
"key_file": "key.pem" //
}
⚠️ Запускайте сервер с правамиsudo, так как ему нужен доступ кiptablesдля блокировки атакующих.
sudo python3 vpn_server.pyВы должны увидеть в логах, что сервер запущен.
python3 vpn_client.pyВы увидите сообщение о запуске SOCKS5-прокси и попытке подключения к серверу.
После успешного запуска клиента, весь трафик можно направлять через него.
Адрес прокси: 127.0.0.1
Порт: 1080 (или тот, что указан в local_proxy_port)
Тип: SOCKS5
Пример для Firefox:
Настройки➝Основные➝Параметры сети➝Настроить...- Выберите
Ручная настройка прокси. - В поле SOCKS-узел введите
127.0.0.1, порт1080. - Установите галочку
SOCKS5. - Обязательно установите галочку
Проксировать DNS при использовании SOCKS v5. - Сохраните настройки.
Теперь весь трафик Firefox будет идти через ваш VPN. Аналогично настраиваются и другие программы (Telegram, системные настройки сети и т.д.).
- Ключ
secret.key— это ваш мастер-ключ. Любой, у кого он есть, сможет подключиться к вашему VPN и расшифровать трафик. Храните его надежно. - Fail2Ban: Сервер отслеживает попытки подключения с неверным ключом. После 10 неудачных попыток IP-адрес атакующего будет навсегда заблокирован на уровне файрвола (
iptables). - Самоподписанный сертификат: Поскольку сертификат не является доверенным, клиент игнорирует его проверку. Это безопасно, так как аутентификация происходит за счет вашего секретного ключа.