MITM прокси-сервер с подменой SNI для обхода сетевых ограничений (DPI).
Система использует метод Man-in-the-Middle для подмены SNI (Server Name Indication) в TLS-соединениях:
- Клиент подключается к прокси
- Прокси устанавливает TLS-соединение с клиентом (используя динамически сгенерированный сертификат)
- Прокси устанавливает TLS-соединение с сервером, подменяя SNI на разрешенный домен
- DPI видит разрешенный SNI и пропускает трафик
- Сервер обрабатывает запрос по заголовку Host (который остается оригинальным)
Скачайте готовый бинарник для вашей ОС из релизов:
- Windows:
youtube-dpi-bypass-windows-amd64.exe - Linux:
youtube-dpi-bypass-linux-amd64 - macOS (Intel):
youtube-dpi-bypass-macos-amd64 - macOS (Apple Silicon):
youtube-dpi-bypass-macos-arm64
# Запуск с настройками по умолчанию (127.0.0.1:8080, без пароля)
./youtube-dpi-bypass-rs
# Указать свой адрес и порт
./youtube-dpi-bypass-rs 0.0.0.0:8080
# С аутентификацией (логин:пароль)
./youtube-dpi-bypass-rs --auth user:password123
# Слушать на всех интерфейсах с паролем
./youtube-dpi-bypass-rs 0.0.0.0:3128 --auth admin:secret
# Режим отладки с выводом SAN при ошибках сертификата
./youtube-dpi-bypass-rs --verbose
# Полная конфигурация: адрес, пароль и verbose
./youtube-dpi-bypass-rs 0.0.0.0:8080 --auth user:pass --verbose
# Справка по всем опциям
./youtube-dpi-bypass-rs --helpФормат: youtube-dpi-bypass-rs [ОПЦИИ] [АДРЕС:ПОРТ]
Опции:
-a, --auth <user:password>- Включить аутентификацию прокси-v, --verbose- Режим отладки (показывает допустимые SAN при ошибках сертификата)-h, --help- Показать справку-V, --version- Показать версию
При первом запуске будут созданы:
mitm-ca.crt- корневой CA сертификат (нужно установить в систему!)mitm-ca.key- приватный ключ CAspoof.list- конфигурация маппинга доменов
cargo build --releaseИсполняемый файл будет в target/release/youtube-dpi-bypass-rs (или .exe на Windows)
КРИТИЧЕСКИ ВАЖНО: Вы должны установить mitm-ca.crt в доверенные корневые центры сертификации.
- Открыть
certmgr.msc - Доверенные корневые центры сертификации → Сертификаты
- Правая кнопка → Все задачи → Импорт
- Выбрать файл
mitm-ca.crt
sudo cp mitm-ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates- Открыть Keychain Access
- System → Certificates
- Импортировать
mitm-ca.crt - Правая кнопка на сертификате → Get Info → Trust → Always Trust
- Firefox: Settings → Privacy & Security → Certificates → View Certificates → Import
- Chrome: Settings → Security → Manage certificates
Настройте браузер на использование прокси:
- HTTP Proxy:
localhost:8080 - HTTPS Proxy:
localhost:8080
Если вы включили аутентификацию:
- Имя пользователя: первая часть до
:(например,user) - Пароль: вторая часть после
:(например,password123)
Firefox:
- Settings → Network Settings → Manual proxy configuration
- HTTP Proxy:
localhost, Port:8080 - Отметить "Also use this proxy for HTTPS"
- При первом подключении введите логин/пароль (если настроен)
Chrome/Edge:
- Используйте системные настройки прокси
- Или запустите с флагом:
--proxy-server="localhost:8080"
Windows (системные настройки):
- Settings → Network & Internet → Proxy
- Manual proxy setup → Address:
localhost:8080
Файл с маппингом доменов. Формат:
# Комментарии начинаются с #
origin_domain -> spoof_domain
# Примеры:
youtube.com -> www.google.com
googlevideo.com -> a.gvt1.com
ytimg.com -> edgestatic.com
Важно: Подставной домен должен быть в списке SAN (Subject Alternative Names) сертификата целевого сервера!
💡 Подсказка: Используйте флаг --verbose чтобы увидеть список допустимых SAN при ошибках - это поможет правильно настроить маппинг.
- Запустите прокси
- Настройте браузер на использование прокси
localhost:8080 - Откройте https://www.youtube.com
- В логах должна появиться запись:
🔌 youtube.com → www.google.com (SNI spoof) - Проверьте, что видео загружается
# Простой запуск для локального использования
./youtube-dpi-bypass-rs# Разрешить подключения с других устройств в сети
./youtube-dpi-bypass-rs 0.0.0.0:8080# Запуск с аутентификацией
./youtube-dpi-bypass-rs 0.0.0.0:8080 --auth myuser:mypassword123
# Надежный пароль для публичного доступа
./youtube-dpi-bypass-rs 0.0.0.0:3128 --auth admin:$(openssl rand -base64 16)# Настройка нестандартного порта
./youtube-dpi-bypass-rs 0.0.0.0:8888 --auth secure:p@ssw0rd!# Диагностика проблем с сертификатами
./youtube-dpi-bypass-rs --verbose
# Показывает при ошибках TLS handshake какие SAN присутствуют в сертификате:
# ❌ Handshake with youtube.com failed (SNI: www.google.com)
# Certificate SANs: DNS:www.google.com, DNS:*.google.com, DNS:google.com
# Полезно для настройки spoof.list - видно какие домены можно использовать
./youtube-dpi-bypass-rs --verbose --auth admin:test123Флаг --verbose (или -v) включает расширенный вывод информации при ошибках TLS handshake. Это особенно полезно для:
1. Диагностики проблем с сертификатами
./youtube-dpi-bypass-rs --verboseПри ошибке TLS handshake выводится список допустимых SAN (Subject Alternative Names) из сертификата сервера:
❌ Handshake with googlevideo.com failed (SNI: a.gvt1.com)
Certificate SANs: DNS:*.googlevideo.com, DNS:googlevideo.com, DNS:*.gvt1.com, DNS:a.gvt1.com
2. Настройки spoof.list
Используйте verbose режим чтобы узнать, какие домены можно использовать для подмены SNI:
- Запустите прокси с
--verbose - Попробуйте открыть заблокированный сайт
- Посмотрите в логах список SAN
- Выберите подходящий домен из списка для
spoof.list
Пример:
# В логах увидели:
# Certificate SANs: DNS:youtube.com, DNS:*.youtube.com, DNS:www.google.com, DNS:google.com
# Можно использовать в spoof.list:
youtube.com -> www.google.com
# или
youtube.com -> google.com
3. Проверка корректности маппинга
Если SNI spoof не работает, проверьте что подставной домен есть в списке SAN:
- ✅ Правильно:
youtube.com -> www.google.com(если www.google.com есть в SAN) - ❌ Неправильно:
youtube.com -> example.com(если example.com НЕТ в SAN)
Q: Безопасно ли использовать этот прокси?
A: Прокси использует самоподписанный сертификат. Устанавливайте mitm-ca.crt только на доверенных устройствах. Не делитесь этим сертификатом.
Q: Можно ли использовать без установки сертификата? A: Нет, браузер будет показывать ошибки сертификата. Установка CA обязательна.
Q: Какие домены нужно добавлять в spoof.list? A: Только те, которые блокируются. Для YouTube обычно достаточно youtube.com, googlevideo.com и ytimg.com.
Q: Работает ли это с мобильными приложениями? A: Да, если приложение использует системное хранилище сертификатов и поддерживает HTTP прокси.
Q: Зачем нужна аутентификация?
A: Если вы запускаете прокси на 0.0.0.0 (доступен из сети), пароль защитит от несанкционированного использования.
Q: Как узнать, какой домен использовать для подмены SNI?
A: Запустите прокси с флагом --verbose. При ошибках TLS будет показан список допустимых SAN из сертификата. Используйте любой домен из этого списка в spoof.list.
Q: Что делать если SNI spoof не работает? A:
- Запустите с
--verboseфлагом - Проверьте логи - подставной домен должен быть в списке SAN сертификата
- Попробуйте другой домен из списка SAN
- Убедитесь что CA сертификат установлен корректно
- Храните файл
mitm-ca.keyв безопасности - это приватный ключ вашего CA - Не устанавливайте чужие CA сертификаты в систему
- Используйте аутентификацию при открытии прокси в сеть
- Периодически меняйте пароли доступа к прокси
При создании тега (например, v1.0.0) автоматически собираются бинарники для:
- Windows (x64)
- Linux (x64)
- macOS Intel (x64)
- macOS Apple Silicon (ARM64)
Релизы доступны на странице Releases.
Автор изначальной идеи и реализации на Go: yoricya
Этот проект предназначен для образовательных целей и обхода цензуры. Используйте ответственно и в соответствии с законодательством вашей страны.