Skip to content

SolverNA/SniShaper

 
 

Repository files navigation

SniShaper

Go Version License

Инструмент проксирования для обхода блокировок в сложных сетевых средах. Использует методы прозрачного проксирования, локальной перезаписи MITM, реплея через прямые QUIC-соединения, TLS-фрагментации, разделения трафика через Warp и транзита через обратные прокси. Поддерживает Domain Fronting, ECH и прямые апстрим-соединения по протоколу HTTP/3.

Особенности

  • Шесть режимов проксирования

    • transparent: Прозрачное проксирование (позволяет подменять заголовок host, эффективно, если заблокирован только DNS).
    • mitm: Режим «человек посередине» (дешифровка через локальный CA, модификация SNI для обхода блокировок; актуально для сайтов с поддержкой Domain Fronting или ECH).
    • quic: Режим прямого QUIC-соединения (трафик от браузера до программы идет через MITM, затем программа переотправляет расшифрованный HTTP-запрос как прямое соединение HTTP/3/QUIC, используя технику scrambling из библиотеки quic-go).
    • tls-rf: Режим фрагментации TLS (разбивает пакет ClientHello на фрагменты при отправке).
    • server: Режим сервера (подключение к удаленному динамическому обратному прокси, передача трафика без специфических признаков/сигнатур).
    • warp: Разделение трафика через WARP Masque (использует usque как туннель для WARP с возможностью выборочного проксирования).
  • Разделение трафика через Warp

    • Использует usque как локальный подпроцесс. При включении запускается локальный SOCKS5-туннель, который соединяется с целевыми сайтами через протокол WARP Masque.
    • Если в правилах параметр upstream установлен в значение warp, трафик этого сайта будет перенаправлен через Cloudflare Warp.
    • По умолчанию выключено, активируется вручную при необходимости.
    • Помогает решить проблемы с доступом к некоторым ресурсам (например, ChatGPT).
    • Примечание: В текущем виде несовместимо с ECH и пулом отборных IP Cloudflare. Однако вы можете вручную найти подходящий Endpoint IP и внести его в конфигурацию.
  • ECH (Encrypted Client Hello)

    • Динамический ECH: Использует встроенный DoH-обработчик для динамического получения конфигураций ECH. Позволяет включать шифрование приветственного пакета для поддерживаемых сайтов.
    • Динамический пул IP: Интеллектуальный подбор оптимальных пограничных узлов (edge nodes) для повышения производительности.

Принцип работы

Браузер → SniShaper(127.0.0.1:port) → Сопоставление правил → [Выбор режима: transparent/mitm/quic/tls-rf/server или Warp] → Рукопожатие с апстримом (ECH/Domain Fronting/QUIC H3/TLS Fragment/Warp) → Прямое соединение с целью

Быстрый старт

1. Запуск

Запустите snishaper.exe. Порт прослушивания по умолчанию — 127.0.0.1:8080 (можно изменить в настройках).

Сборка

Выполните следующие команды:

cd frontend
npm run build
cd ..
go build -ldflags="-H windowsgui" -o build\bin\snishaper.exe .

Текущая версия использует wails/v3, поэтому десктопное приложение генерируется напрямую через входную точку Go, без зависимости от wails build.

Процесс публикации в GitHub Actions автоматически упаковывает rules/config.json, proxy/usque.exe вместе с собранным бинарным файлом.

2. Установка сертификата (обязательно для режима MITM)

Нажмите кнопку «Управление сертификатами» (Certificate Management) в интерфейсе, затем выберите «Установка в один клик». Это автоматически установит сгенерированный корневой сертификат в системное хранилище «Доверенные корневые центры сертификации».

3. Настройка ускорения

На странице правил или ECH введите домен, который хотите ускорить, и создайте конфигурацию, исходя из текущей ситуации.

4. Включение прокси

Нажмите «Запустить прокси» (Start Proxy) на главном экране и включите «Системный прокси» (System Proxy).

Описание полей конфигурации

Поле Описание
domains Список сопоставляемых доменов
website Название группы сайтов (для агрегации в интерфейсе)
mode Режимы: transparent, mitm, quic, tls-rf или server
upstream Адрес апстрима (IP:443) или специальное значение warp
dns_mode Стратегия разрешения DNS: По умолчанию, Приоритет IPv4/IPv6, Только IPv4/IPv6
sni_policy Стратегия обработки SNI
ech_enabled Включить/выключить ECH
use_cf_pool Использовать ли пул отборных IP Cloudflare для балансировки нагрузки и стабильности
cloudflare_config.warp_enabled Включить функции Warp
cloudflare_config.warp_endpoint Адрес конечной точки Warp MASQUE

Особенности прямого подключения QUIC

Режим quic — это не прозрачная трансляция QUIC-пакетов, а схема «Вход через MITM, выход через H3 replay»:

  • От браузера к программе: обычный HTTPS, расшифрованный локальным CA.
  • От программы к целевому сайту: инициируется прямое соединение HTTP/3/QUIC с помощью библиотеки quic-go/http3.
  • При соответствии правилам используется встроенная в quic-go функция scrambling (запутывание) для ClientHello.

Когда использовать:

  • Сайт точно поддерживает HTTP/3.
  • Сайт блокируется по SNI и не принимает Domain Fronting.
  • TLS-фрагментация работает нестабильно.

Особенности фрагментации TLS

Режим tls-rf не обрывает клиентское TLS-соединение (как MITM) и не проксирует его в исходном виде (как прозрачный режим). При пересылке трафика апстриму программа разделяет TLS ClientHello на части, что в некоторой степени позволяет избежать идентификации SNI системами цензуры. Примечание: Этот метод не гарантирует долгосрочную безопасность (Forward Secrecy) и может требовать обновлений. Идея заимствована из проекта moi-si/lumine, спасибо автору за исследования.

Когда использовать:

  • Вы не хотите устанавливать локальный корневой сертификат.
  • Целевой сайт чувствителен к Domain Fronting (блокирует такие запросы).

Развертывание сервера

Режим server является опциональным и используется для обхода блокировок по IP. Это не классический прокси: он модифицирует urlpath исходного соединения и связывается с динамическим сервером обратного проксирования.

Способ 1: Cloudflare Worker

Клиент → Worker → Целевой сайт

Шаги развертывания:

  1. Войдите в Cloudflare Dashboard.
  2. Создайте новый Worker (шаблон "Hello World").
  3. Скопируйте содержимое файла sni-server/worker.js в редактор воркера.
  4. В настройках воркера добавьте переменную окружения AUTH_SECRET и установите пароль.
  5. Разверните воркер и получите его домен (например, xxx.workers.dev).
  6. В клиенте SniShaper в настройках узла Server укажите этот домен и ваш пароль.

Способ 2: Развертывание на VPS (sni-server)

Клиент → Cloudflare Tunnel → VPS (sni-server) → Целевой сайт

Шаги развертывания:

  1. Подготовьте VPS (любой Linux с поддержкой Go).
  2. Запустите скрипт автоматической установки:
    curl -fsSL https://raw.githubusercontent.com/coolapijust/Shaper-Next/main/server/install.sh -o /tmp/sni-server-install.sh
    sudo bash /tmp/sni-server-install.sh
  3. Настройте домен. Рекомендуется использовать Cloudflare Tunnel:
    bash <(curl -sSL https://github.com/sky22333/shell/raw/main/dev/cf-tunnel.sh)
  4. Введите полученный домен туннеля и пароль в настройки клиента.

Примечание: Можно подключаться к VPS напрямую без CDN, поддержка этой функции появится в будущих версиях. Если не хотите настраивать свой сервер, просто используйте встроенный WARP, переключив режим работы правила на warp.

Часто задаваемые вопросы

  • Ошибка сертификата: Убедитесь, что сертификат импортирован в категорию «Доверенные корневые центры сертификации» и обязательно перезапустите браузер.
  • Низкая скорость: Рекомендуется добавить в «Пул IP» больше IP-адресов Cloudflare Anycast с низкой задержкой для вашей сети; попробуйте изменить режим работы правила для конкретного сайта.

Разработка правил

Для анализа состояния целевого сайта можно использовать сопутствующий инструмент — SniViewer. На основе его тестов можно создавать точечные правила. Для небольших сайтов, не охваченных стандартными правилами, вероятность успеха очень высока. Если сайт не открывается даже после правки правил, используйте режим Server или WARP.

Благодарности

Проект вдохновлен и опирается на наработки следующих проектов:

Лицензия

MIT License

About

Десктопный прокси-инструмент для обхода блокировок по SNI с использованием прозрачного проксирования, Domain Fronting, ECH, фрагментации TLS-пакетов, прямого подключения через QUIC, интеграции с WARP и динамического обратного прокси. Полнофункциональный «швейцарский нож» для восстановления прямого доступа к ресурсам.

Topics

Resources

License

Stars

Watchers

Forks

Contributors

Languages

  • Go 88.6%
  • JavaScript 6.5%
  • HTML 2.1%
  • CSS 2.0%
  • Other 0.8%