Пресеты для обхода цензуры

Что делают фрагментация TLS, TLS tricks, uTLS, мультиплексирование, ECH и TLS spoof, когда они помогают и каковы их издержки.

Некоторые сети блокируют или замедляют прокси, анализируя начало каждого зашифрованного соединения. Эти параметры меняют то, как выглядит это начало. Предустановленные настройки (Preset Settings), разделы Настройки маскировки TLS (TLS Camouflage Settings) и Доп. настройки (Advanced Settings) редактора профиля, а также вариант Custom у мультиплексирования доступны только в расширенном режиме (см. Простой и расширенный режим).

Пресеты и настройки профиля

Глобальные значения по умолчанию находятся в Настройки (Settings) → Предустановленные настройки. В редакторе профиля у фрагментации TLS, TLS Tricks, мультиплексирования и TLS Spoof есть варианты По умолчанию (Keep Default) — следовать значению Вкл. по умолчанию (Default On) в пресете, его используют новые профили, — Вкл. (On) и Выкл. (Off). Поэтому Вкл. по умолчанию действует только на профили, у которых оставлен вариант По умолчанию.

Пресеты действуют только на профили, работающие на sing-box, кроме Fingerprint по умолчанию (Default Fingerprint) из uTLS, который действует на оба ядра, и пресетов мультиплексирования Xray, которые используют профили VLESS (Xray). См. sing-box или Xray.

Меняйте по одному параметру за раз

Каждый параметр противодействует одному методу блокировки. Ни один из них не помогает везде, и каждый может сломать профиль, который до этого работал.

  1. Включите один параметр в одном профиле, который не работает или работает медленно.
  2. Запустите тест задержки и откройте несколько сайтов. Если ничего не улучшилось, верните параметру значение По умолчанию и попробуйте следующий.
  3. Если параметр помогает большинству ваших профилей, включите для него Вкл. по умолчанию в Предустановленные настройки.

Фрагментация TLS

Цензор часто читает имя сервера (SNI) в первом сообщении TLS-соединения — ClientHello. Фрагментация TLS разбивает это сообщение, чтобы простой фильтр не смог прочитать имя из одного пакета. Она помогает только против таких простых фильтров.

Задайте Фрагментация (Fragment) в редакторе профиля в разделе Настройки маскировки TLS. Сначала попробуйте Включить фрагментацию записи TLS (Enable TLS Record Fragment) рядом с ним: этот параметр мягче и разбивает ClientHello не на пакеты, а на записи TLS.

Предустановленные настройки → TLS → Фрагментация TLS (TLS Fragment) → Реализация (Implementation) задаёт способ разбиения:

  • built-in (по умолчанию): sing-box разбивает ClientHello на TCP-пакеты. Fallback Delay в профиле, например 500ms, — пауза между частями, когда система не может её измерить.
  • custom: части случайного размера Размер (Size, байты, 10-100) с паузами Пауза (Sleep, миллисекунды, 2-5). Профили Naive поддерживают только эту реализацию.

Издержки: новые соединения устанавливаются медленнее, а custom отключает для профиля TCP Fast Open.

Фрагментировать подходящие соединения может и правило маршрутизации, например прямые соединения с сайтом, который фильтр блокирует по имени. См. tls_fragment в разделе Расширенные правила.

TLS tricks

TLS tricks записывает имя сервера вперемешку заглавными и строчными буквами, например ExAmPlE.com. Серверы не различают регистр, а фильтр, который ищет точное имя, может его пропустить. Задайте TLS Tricks в редакторе профиля в разделе Настройки маскировки TLS.

Издержки: почти никаких, но против фильтров, которые не учитывают регистр, он не помогает.

Отпечаток uTLS

uTLS делает ClientHello похожим на ClientHello распространённого браузера или системы, а не обычного прокси-клиента, которого легко распознать по отпечатку.

  • Для профиля: Fingerprint в редакторе профиля. Ссылки для обмена часто задают его через fp=.
  • Глобально: Предустановленные настройки → TLS → uTLS → Fingerprint по умолчанию — для профилей без собственного отпечатка. Пока поле пустое (по умолчанию), такие профили не используют uTLS на sing-box, используют random для REALITY на sing-box и chrome на Xray. Профили Hysteria, TUIC, Juicity и Naive не используют uTLS.
  • Варианты: chrome, firefox, edge, safari, 360, qq, ios, android, random, randomized и unsafe. unsafe отключает uTLS, даже если задан Fingerprint по умолчанию, и только тогда действует поле профиля Наборы шифров (Cipher Suites) — наборы шифров TLS 1.2 через двоеточие; оставьте его пустым, если этого не требует ваш сервер.

Издержки: небольшие. Если сервер перестал работать с одним отпечатком, попробуйте другой или очистите поле.

Мультиплексирование

Мультиплексирование (mux) передаёт много соединений внутри одного соединения с сервером, поэтому страницам нужно меньше рукопожатий, а наблюдатель видит меньше соединений. Сервер должен поддерживать mux с тем же протоколом, а если вы используете дополнение (padding), то и его.

Задайте Мультиплексирование (Multiplex) в редакторе профиля (у профилей VLESS (Xray) вместо Вкл. и Выкл. — Включено (Enabled) и Выключено (Disabled)). Custom → Configure даёт профилю собственную копию полей пресета; профили из ссылок или подписок с собственными настройками mux открываются с вариантом Custom. Мультиплексирование отключено для профилей VLESS с flow xtls-rprx-vision и обязательно для XDRIVE.

Пресеты sing-box (Предустановленные настройки → Мультиплексирование → Sing-box):

  • Protocol: smux, yamux или h2mux.
  • Mode: при Max Streams следующее соединение открывается, когда одно несёт столько потоков. При Max Connections соединений не больше этого числа, и новое открывается, только если наименее загруженное несёт Min Streams потоков.
  • Padding: добавляет к мультиплексированному трафику дополнение.
  • TCP Brutal: передаёт данные с фиксированными скоростями из полей Upload (Mb/s) и Download (Mb/s), даже при потере пакетов. Укажите обе. Нужна поддержка на сервере, и все потоки тогда идут через одно соединение.

Пресеты Xray (Предустановленные настройки → Мультиплексирование → Xray):

  • Concurrency: сколько потоков несёт одно соединение, прежде чем откроется следующее. 0 — значение Xray по умолчанию (8), -1 отправляет TCP в обход mux.
  • Max Connections: не больше стольких соединений, отдельно для TCP и XUDP. Пустое поле — без ограничения.
  • XUDP Concurrency: потоков UDP на соединение, в отдельных соединениях. 0 передаёт UDP через соединения TCP, -1 отправляет его в обход mux.
  • UDP/443, в основном QUIC: Reject (по умолчанию) заставляет браузеры вернуться к TCP, Allow пропускает его через mux, Skip отправляет в обход mux.

Издержки: всё, что идёт через одно соединение, зависает вместе. Множество параллельных соединений, например от торрент-клиента, может заставить Throne сильно нагружать процессор (#1090) — отключите мультиплексирование для такого профиля. Первый запрос через новое mux-соединение идёт дольше, поэтому при коротком тайм-ауте теста задержки рабочий профиль может быть отмечен как неработающий.

ECH

Encrypted Client Hello (ECH) шифрует имя сервера, чтобы наблюдатель не смог его прочитать. Работает, только если сервер его поддерживает, и включается в каждом профиле отдельно:

  1. Откройте профиль, нажмите Доп. настройки и отметьте Вкл. ECH (Enable ECH).
  2. Необязательно: вставьте ECH-конфигурацию сервера в ECH Config. Если там остаётся Не задано (Not Set), конфигурация ищется в DNS — для домена из ECH Query Name / Resolver или для имени сервера. Чтобы спросить определённый DNS-сервер вместо прямого DNS, добавьте его после +, например cloudflare-ech.com+https://1.1.1.1/dns-query.
  3. Нажмите OK в обоих окнах.

Профили Xray вместо этого используют ECH Config List в настройках TLS: ECH-конфигурацию в Base64 или домен и сервер DNS поверх HTTPS, например cloudflare-ech.com+https://8.8.8.8/dns-query. Ссылки для обмена передают ECH в ech=, см. ECH и закрепление сертификатов в ссылках.

Издержки: профиль не работает, если сервер не поддерживает ECH или конфигурацию не удаётся найти.

TLS spoof

Некоторые фильтры пропускают несколько разрешённых имён и блокируют остальные. TLS spoof отправляет поддельный ClientHello с разрешённым именем непосредственно перед настоящим. Поддельное сообщение намеренно некорректно, поэтому сервер его игнорирует, а фильтр пропускает соединение.

  • Пресеты (Предустановленные настройки → TLS → Подмена TLS (TLS Spoof)): Поддельный SNI (Spoof SNI) — разрешённое имя, Метод (Method) — способ сделать поддельное сообщение некорректным: wrong-sequence, wrong-checksum, wrong-ack, wrong-md5 или wrong-timestamp (пусто — значение ядра по умолчанию).
  • Для профиля: Доп. настройки → Подмена TLS, Поддельный SNI и Метод. Пустые поля берут значения из пресетов. Профиль с собственным Поддельный SNI выполняет подмену даже при варианте По умолчанию.
  • Для сайта: расширенное правило маршрутизации с tls_spoof и tls_spoof_method, см. Расширенные правила.

TLS spoof отправляет сырые пакеты, поэтому ядру нужны права, которые выдаются для режима TUN: права администратора в Windows (кроме Windows ARM64), root или CAP_NET_RAW и CAP_NET_ADMIN в Linux и root в macOS, где метод wrong-timestamp не работает.

Издержки: нужны повышенные права, а помогает он только против фильтров, которые пропускают некоторые имена.

Настройка HTTP/2 и QUIC

Предустановленные настройки → HTTP/2 & QUIC задаёт значения по умолчанию, такие как Idle Timeout, Keep Alive Period и Initial Packet Size, для профилей Hysteria, TUIC и MASQUE. Профиль переопределяет их в Доп. настройки → Параметры QUIC (QUIC Parameters). Оставляйте эти поля пустыми, то есть со значениями ядра, если документация вашего сервера не требует других.

Android

  • Те же пресеты находятся в Настройки (Settings) → Пресеты (Presets), а Вкл. по умолчанию там называется Включено по умолчанию (On by default). ECH задаётся в каждом профиле.
  • У Включить мультиплексор (Enable multiplexer) в редакторе профиля есть и вариант Пользовательский (Custom), который показывает поля мультиплексирования прямо под ним.
  • Правила маршрутизации могут фрагментировать подходящие соединения с помощью Фрагментация TLS (TLS fragment), Резервная задержка фрагментации TLS (TLS fragment fallback delay) и Фрагментация записей TLS (TLS record fragment).
  • TLS spoof недоступен.