javascript

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

  • вторник, 10 февраля 2026 г. в 00:00:05
https://habr.com/ru/articles/994412/

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. Весь код открыт. Никакой телеметрии, никаких закладок.

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:

// Динамически получаем URL последнего релиза
const response = await fetch(
  'https://api.github.com/repos/bol-van/zapret/releases/latest'
);
const release = await response.json();
const zipAsset = release.assets.find(a => a.name.match(/^zapret-.*\.zip$/));

Скачивание с прогресс-баром, распаковка, проверка — всё автоматически.

Проблема 2: cygwin1.dll на Windows

winws.exe собран с зависимостью от Cygwin. Просто скопировать exe — недостаточно. Нужны cygwin1.dll, cygstdc++-6.dll и другие библиотеки.

Решение: копируем все файлы из директории winws.exe, а не только захардкоженный список:

const dirFiles = fs.readdirSync(winwsDir);
for (const file of dirFiles) {
  if (file === 'winws.exe') continue;
  fs.copyFileSync(
    path.join(winwsDir, file),
    path.join(platformDir, file)
  );
}

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

autoUpdater.on('update-downloaded', (info) => {
  // Показываем баннер: "Обновление v1.2.0 готово — Перезапустить"
  sendUpdateStatus('downloaded', info.version);
});

Пользователь видит ненавязчивый баннер и сам решает, когда обновиться.


Стек

Что

Зачем

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 приветствуются.

GitHub: github.com/by-sonic/unblock-pro

by sonic


Теги: discord, youtube, dpi, bypass, zapret, electron, macos, open-source, обход блокировок