Как я сделал приложение для обхода Discord и YouTube на macOS (и Windows тоже)

Как я сделал приложение для обхода 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 — десктопное приложение, которое:

  1. Работает в один клик. Буквально. Нажал «Подключить» — Discord и YouTube заработали.
  2. Само подбирает стратегию обхода. Не нужно знать, какой у вас провайдер и какой DPI он использует. Приложение перебирает 15+ стратегий и находит рабочую.
  3. Работает на macOS. Intel, Apple Silicon (M1/M2/M3/M4) — без разницы. Это, пожалуй, единственное GUI-приложение для обхода DPI на маке.
  4. Работает на Windows. Полноценная поддержка с NSIS-установщиком и портативной версией.
  5. Не VPN. Не гонит трафик через сторонние серверы. Всё происходит локально. Скорость не падает. Пинг не растёт.
  6. Open-source. Весь код открыт. Никакой телеметрии, никаких закладок.

Как это работает под капотом

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 — нужно убедиться, что стратегия реально работает. Я сделал многоступенчатую проверку:

  1. Запуск tpws с таймаутом
  2. TCP-проверка: слушает ли порт 1080
  3. Настройка системного прокси
  4. Реальный curl-запрос через SOCKS к discord.com
  5. Если не ответил — пробуем youtube.com и google.com
  6. 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

  1. Скачайте ZIP из Releases
  2. Распакуйте, перетащите в «Программы»
  3. В терминале: xattr -cr /Applications/UnblockPro.app
  4. Запустите и нажмите «Подключить»

Windows

  1. Скачайте установщик из Releases
  2. Запустите
  3. Нажмите «Подключить»

Что дальше

  • Поддержка Linux (уже есть в планах — tpws нативно работает на Linux)
  • Whitelist/blacklist доменов — обходить DPI только для нужных сайтов
  • Статистика — сколько трафика прошло, какая стратегия работает
  • Кастомные стратегии — для продвинутых пользователей

Вместо заключения

Я считаю, что доступ к коммуникационным инструментам — это базовая потребность. Discord для многих — это рабочий чат, голосовые созвоны, комьюнити. YouTube — это образование, документация, туториалы.

Проект полностью open-source. Если вам пригодился — поставьте звезду на GitHub. Если нашли баг или хотите помочь — PR приветствуются.

by sonic

1
1 комментарий