Как я сделал приложение для обхода Discord и YouTube на macOS (и Windows тоже)
TL;DR: Написал open-source десктопное приложение UnblockPro на Electron, которое в один клик обходит DPI-блокировки Discord, YouTube и других сервисов. Работает на macOS и Windows. Без VPN, без серверов, без абонентки. Код на GitHub — by-sonic/unblock-pro.
Зачем вообще это было нужно
С осени 2024 года ситуация с доступом к Discord и YouTube в России стала, мягко говоря, непростой. VPN — вариант, но:
- Платные сервисы стоят денег и сливают скорость
- Бесплатные — сливают данные
- Не все работают стабильно
- Настраивать VPN для каждого устройства — боль
А ведь провайдеры блокируют не на уровне IP (тогда бы было совсем плохо), а на уровне DPI — Deep Packet Inspection. Это значит, что они анализируют сетевые пакеты и, увидев обращение к discord.com или youtube.com, дропают соединение. И обойти это можно локально, без всяких серверов — нужно лишь правильно модифицировать пакеты, чтобы DPI-система их «не узнала».
Существует замечательный проект zapret от bol-van, который именно это и делает. Но есть нюанс — это консольный инструмент с кучей параметров и ключей. Для техничных людей — отлично. Для остальных — порог входа слишком высок. А ещё...
Маководы в пролёте
Это была главная боль. Почти все существующие GUI-решения для обхода DPI работают только на Windows. Если вы на маке — вам предлагали либо ковыряться в терминале с tpws, либо... купить VPN. А маководов среди IT-шников и креативщиков — огромный процент. И им тоже нужен Discord для работы и общения.
Я решил это исправить.
Что получилось
UnblockPro — десктопное приложение, которое:
- Работает в один клик. Буквально. Нажал «Подключить» — Discord и YouTube заработали.
- Само подбирает стратегию обхода. Не нужно знать, какой у вас провайдер и какой DPI он использует. Приложение перебирает 15+ стратегий и находит рабочую.
- Работает на macOS. Intel, Apple Silicon (M1/M2/M3/M4) — без разницы. Это, пожалуй, единственное GUI-приложение для обхода DPI на маке.
- Работает на Windows. Полноценная поддержка с NSIS-установщиком и портативной версией.
- Не VPN. Не гонит трафик через сторонние серверы. Всё происходит локально. Скорость не падает. Пинг не растёт.
- Open-source. Весь код открыт. Никакой телеметрии, никаких закладок.
GitHub: github.com/by-sonic/unblock-proСкачать: Releases
Как это работает под капотом
macOS: tpws + системный SOCKS-прокси
На маке используется tpws из проекта zapret. Это локальный SOCKS5-прокси, который модифицирует проходящие через него TCP-пакеты.
Схема работы:
Браузер → Системный SOCKS-прокси (127.0.0.1:1080) → tpws → Интернет ↓ Модификация пакетов: • split-pos (разбиение) • disorder (нарушение порядка) • hostcase (изменение регистра) • tlsrec, oob, methodeol...
Приложение автоматически:
- Запускает tpws с нужными параметрами
- Настраивает системный SOCKS-прокси через networksetup
- Проверяет соединение реальным запросом к Discord/YouTube
- Если не работает — пробует следующую стратегию
- При отключении или крахе — сбрасывает прокси-настройки
Windows: winws + WinDivert
На винде подход другой. winws.exe работает на уровне сетевого драйвера через WinDivert и перехватывает пакеты «на лету», без прокси:
Браузер → Сетевой стек Windows → WinDivert перехватывает пакеты ↓ winws модифицирует пакеты: • dpi-desync=multisplit • dpi-desync=fake,fakedsplit • dpi-desync-fooling=ts,badseq → Пакеты уходят в сеть
Не нужен прокси, не нужна настройка системы. Но нужны права администратора — WinDivert работает на уровне ядра.
15 стратегий для macOS, 9 для Windows
Это, наверное, самая важная часть. Разные провайдеры используют разное оборудование DPI. Что работает у Ростелекома — может не работать у МТС. А у дочерних провайдеров — вообще своя специфика.
Стратегии основаны на анализе Flowseal/zapret-discord-youtube (22k+ звёзд) и собственном тестировании. Вот примеры для macOS:
Категория
Стратегия
Что делает
Базовые
split+disorder
Разбивает пакет + нарушает порядок фрагментов
TLS-aware
tlsrec+split+disorder
Учитывает TLS-записи при разбиении
Host manipulation
methodeol+split
Добавляет EOL в HTTP-метод
OOB
oob+split+disorder
Использует out-of-band данные
Комбинированные
combined-v2
oob + methodeol + split + disorder + hostdot
Минимальные
split-only
Только разбиение (last resort)
На Windows стратегии другие — там используются multisplit, fake, fakedsplit, multidisorder с различными параметрами seqovl, fooling и repeats.
Приложение перебирает их автоматически. Обычно рабочая стратегия находится за 10–30 секунд.
Технические детали, которые пришлось решить
Проблема 1: Бинарники zapret
Приложению нужен tpws (macOS) или winws.exe (Windows). Тащить их в комплекте — плохая идея: zapret обновляется, бинарники устаревают.
Решение: при первом запуске приложение скачивает последний релиз zapret с GitHub API
Скачивание с прогресс-баром, распаковка, проверка — всё автоматически.
Проблема 2: cygwin1.dll на Windows
winws.exe собран с зависимостью от Cygwin. Просто скопировать exe — недостаточно. Нужны cygwin1.dll, cygstdc++-6.dll и другие библиотеки.
Решение: копируем все файлы из директории winws.exe, а не только захардкоженный список
Проблема 3: Проверка работоспособности стратегии
Недостаточно просто запустить tpws — нужно убедиться, что стратегия реально работает. Я сделал многоступенчатую проверку:
- Запуск tpws с таймаутом
- TCP-проверка: слушает ли порт 1080
- Настройка системного прокси
- Реальный curl-запрос через SOCKS к discord.com
- Если не ответил — пробуем youtube.com и google.com
- Retry на первый эндпоинт
Только после успешной проверки стратегия считается рабочей.
Проблема 4: Очистка при крахе
Если приложение упадёт и не сбросит системный прокси — у пользователя перестанет работать интернет. Это неприемлемо.
Решение: тройная страховка:
- before-quit — сбрасываем при нормальном выходе
- При старте приложения — сбрасываем (на случай предыдущего краша)
- process.on('exit') — последний рубеж
Проблема 5: macOS Gatekeeper
Apple блокирует неподписанные приложения. Developer ID сертификат стоит $99/год — для бесплатного open-source проекта это не вариант.
Решение: чёткая инструкция в README и при установке:
xattr -cr /Applications/UnblockPro.appОбъяснить с
Одна команда — и Gatekeeper отступает. Код полностью открыт — пользователь может убедиться, что внутри ничего подозрительного.
Проблема 6: Автообновление
Если пользователь уже установил v1.0 — как ему доставить обновлённые стратегии? Не заставлять же каждый раз скачивать заново.
Решение: интеграция electron-updater. При запуске приложение проверяет GitHub Releases на новую версию, скачивает в фоне и предлагает перезапуститься:
Пользователь видит ненавязчивый баннер и сам решает, когда обновиться.
Стек
Что
Зачем
Electron
Кроссплатформенность macOS + Windows из одной кодовой базы
zapret
Движок обхода DPI (tpws, winws)
electron-updater
OTA-обновления через GitHub Releases
electron-builder
Сборка .app/.zip для macOS и .exe для Windows
GitHub Actions
CI/CD — автоматический билд при новом теге
sudo-prompt
Запрос прав администратора (Windows — WinDivert, macOS — networksetup)
Цифры
- 15 стратегий обхода для macOS
- 9 стратегий для Windows
- 0 внешних серверов — всё работает локально
- ~10 сек среднее время подбора рабочей стратегии
- 0₽ — полностью бесплатно и open-source
Как попробовать
macOS
- Скачайте ZIP из Releases
- Распакуйте, перетащите в «Программы»
- В терминале: xattr -cr /Applications/UnblockPro.app
- Запустите и нажмите «Подключить»
Windows
- Скачайте установщик из Releases
- Запустите
- Нажмите «Подключить»
Что дальше
- Поддержка Linux (уже есть в планах — tpws нативно работает на Linux)
- Whitelist/blacklist доменов — обходить DPI только для нужных сайтов
- Статистика — сколько трафика прошло, какая стратегия работает
- Кастомные стратегии — для продвинутых пользователей
Вместо заключения
Я считаю, что доступ к коммуникационным инструментам — это базовая потребность. Discord для многих — это рабочий чат, голосовые созвоны, комьюнити. YouTube — это образование, документация, туториалы.
Проект полностью open-source. Если вам пригодился — поставьте звезду на GitHub. Если нашли баг или хотите помочь — PR приветствуются.
GitHub: github.com/by-sonic/unblock-pro
by sonic