Some checks failed
Published content check / validate (push) Failing after 3s
Обновить правила репозитория и подписи исходников в 99 заметках, не затрагивая пользовательские незакоммиченные файлы. Сделать Forgejo Actions содержательным: проверять опубликованный commit, а не пустое рабочее дерево после checkout.
84 lines
14 KiB
Markdown
84 lines
14 KiB
Markdown
---
|
||
date: 2026-07-25
|
||
tags:
|
||
- протоколы
|
||
- anytls
|
||
- tls
|
||
- dpi
|
||
- обход-блокировок
|
||
aliases:
|
||
- AnyTLS
|
||
- anytls-go
|
||
- TLS in TLS
|
||
link: https://github.com/anytls/anytls-go
|
||
---
|
||
|
||
# 🧬 AnyTLS: протокол против детекта «TLS внутри TLS»
|
||
|
||
> [!info] О чём заметка
|
||
> Разбор протокола **AnyTLS** — относительно нового (2025) прокси, спроектированного вокруг одной конкретной проблемы: характерного почерка, который возникает, когда шифрованное соединение прячут внутри другого шифрованного соединения. Здесь: в чём суть проблемы, как AnyTLS с ней борется набивкой и пулом сессий, чем он отличается от XTLS Vision и где его границы. Карта протоколов — в [[protocols/00-overview|обзоре]].
|
||
|
||
## TL;DR
|
||
|
||
- **Проблема**: когда прокси-протокол работает внутри TLS, у трафика появляется узнаваемый ритм — «рукопожатие внутри рукопожатия», характерные размеры первых пакетов. DPI ловит это, не расшифровывая ничего.
|
||
- **Ответ AnyTLS**: настраиваемая **схема набивки** (padding), которая меняет размеры записей на уровне открытого текста до шифрования, плюс **мультиплексирование** нескольких потоков в одном TLS-соединении и **пул готовых сессий**, чтобы не создавать новое соединение на каждый запрос.
|
||
- Набивка по умолчанию описана явно: первая порция фиксирована в 30 байт, дальше идут ступени 100–400 и 400–500 байт до восьмого уровня. Схему можно переопределить своей.
|
||
- AnyTLS **не прикрывается чужим сайтом**: ему нужны свой домен и сертификат, как [[protocols/trojan|Trojan]], а не как [[xray/reality|REALITY]].
|
||
- Поддерживается [[sing-box/sing-box-extended|sing-box]] и [[Clash/02-mihomo|mihomo]] (и как исходящий, и как входящий), в Xray-core обсуждался, но своей реализации там нет.
|
||
- Проект молодой: протокол дорос до второй версии в 2025 году, оценки эффективности пока предварительные — закладываться на него как на «серебряную пулю» рано.
|
||
|
||
## Проблема: почему «TLS внутри TLS» видно
|
||
|
||
Разберём подробно, потому что весь смысл AnyTLS — в этой задаче.
|
||
|
||
Когда вы через прокси открываете HTTPS-сайт, происходит следующее. Сначала ваш клиент устанавливает **внешнее** TLS-соединение с прокси-сервером — это то, что видит провайдер. Затем внутри этого канала браузер устанавливает **внутреннее** TLS-соединение уже с самим сайтом. Провайдер не может прочитать ни то, ни другое: всё зашифровано.
|
||
|
||
Но ему и не нужно читать. Ему достаточно смотреть на **размеры и тайминги**. Обычный визит на сайт начинается с рукопожатия характерного вида и переходит к передаче данных. А в случае прокси сразу после установления внешнего канала внутри идёт **ещё одно рукопожатие** — со своим узнаваемым набором размеров записей и своим ритмом «запрос-ответ-запрос». Наблюдатель видит зашифрованный поток, у которого первые несколько пакетов складываются в характерную картинку, не встречающуюся при обычном веб-сёрфинге.
|
||
|
||
Проще говоря: вас выдаёт не содержимое, а форма — как силуэт человека под одеялом. Подробно этот класс детекта и его развитие в российских сетях разобраны в [[VLESS/dpi-tls-june-2026|заметке про DPI-почерк TLS июня 2026]].
|
||
|
||
Известные ответы на проблему различаются по подходу. **XTLS Vision** (в экосистеме [[xray/project-x|Xray]]) распознаёт внутреннее рукопожатие и после его завершения перестаёт накладывать второй слой шифрования, передавая данные напрямую — силуэт исчезает, потому что исчезает второе одеяло. **AnyTLS** идёт другим путём: он оставляет структуру как есть, но **меняет её форму набивкой**.
|
||
|
||
## Как устроен AnyTLS
|
||
|
||
**Оболочка.** AnyTLS заворачивает произвольный прокси-трафик в стандартный TLS — совместимость с обычной TLS-инфраструктурой сохраняется, никаких экзотических расширений не требуется.
|
||
|
||
**Схема набивки (padding scheme).** Ключевой механизм: перед шифрованием AnyTLS добивает записи до заданных размеров, разрушая ту самую характерную последовательность. Схема по умолчанию, по [документации протокола](https://github.com/anytls/anytls-go/blob/main/docs/protocol.md), устроена ступенями: первая порция фиксирована в 30 байт, для небольших данных используется набивка 100–400 байт, для средних и крупных — цепочки 400–500 байт, и так до восьмого уровня (`stop=8`), после чего набивка прекращается. Схему можно заменить своей — в этом смысл названия: **вы управляете тем, как выглядит поведение вашего трафика**.
|
||
|
||
**Сессии и мультиплексирование.** AnyTLS мультиплексирует несколько логических потоков в одном TLS-соединении и держит **пул простаивающих сессий** со стратегией «использовать самую свежую, вычищать самые старые». Это снижает накладные расходы на установление соединений и заодно убирает ещё один демаскирующий признак: у прокси-клиента иначе получается подозрительно много одинаковых коротких TLS-соединений подряд.
|
||
|
||
**Версия 2 протокола** (2025) добавила обратную связь о состоянии сервера и работу с перегрузкой туннеля — это про качество связи, а не про маскировку.
|
||
|
||
## Чего AnyTLS не делает
|
||
|
||
Здесь важно не переоценить инструмент.
|
||
|
||
**Он не прикрывается чужим сайтом.** В отличие от [[xray/reality|REALITY]], AnyTLS не выдаёт себя за постороннего — ему нужен собственный домен и сертификат. Значит, остаются те же следы, что у [[protocols/trojan|Trojan]]: домен зарегистрирован, сертификат попал в публичные логи прозрачности, а сам сервер должен выглядеть правдоподобно для активной проверки.
|
||
|
||
**Он не делает трафик невидимым.** Набивка меняет форму, но форма — это статистика, а статистику можно изучать. Разработчики цензурных систем видят те же публичные спецификации и могут строить классификаторы уже под характерное поведение набивки AnyTLS. Независимые оценки протокола пока сдержанные: в [обзорном материале Lantern](https://corpus.lantern.io/findings/2026-anon-anytls-anytls-sing-box-2026__anytls-protocol-comparison-performance-obfuscation/) его характеризуют как решение среднего уровня по производительности и обфускации на фоне соседей — то есть как рабочий вариант, а не прорыв.
|
||
|
||
**Он не заменяет транспорт.** AnyTLS — про то, как выглядит поток внутри TLS. Проблемы уровня «в сети режут TLS на нестандартных портах» или «UDP заблокирован» он не решает.
|
||
|
||
> [!warning] Молодой протокол — отдельный риск
|
||
> AnyTLS появился в 2025 году, его вторая версия вышла в том же году, и объём независимого анализа пока невелик. У молодых протоколов регулярно находят и ошибки реализации, и неучтённые демаскирующие признаки — так было и с [[protocols/shadowtls|ShadowTLS]], чья третья версия считалась устойчивой, пока в 2025 году не показали обратное. Используйте AnyTLS как один из вариантов в арсенале, а не как единственную опору, и обновляйте ядро.
|
||
|
||
## Где поддерживается и как настраивается
|
||
|
||
Реализации: эталонная **anytls-go**, а также порты на Rust. Из ядер AnyTLS поддерживают [[sing-box/sing-box-extended|sing-box]] и [[Clash/02-mihomo|mihomo]] — в последнем и как исходящее подключение, и как слушатель (то есть mihomo может быть сервером AnyTLS). В [[xray/project-x|Xray-core]] протокол обсуждался в issue-трекере, но собственной реализации нет — это как раз тот случай, когда список поддержки протоколов определяет выбор ядра.
|
||
|
||
Настройка со стороны клиента минимальна: адрес, порт, пароль, домен для TLS и, при желании, своя схема набивки. Именно последнее отличает AnyTLS от большинства протоколов: **параметр маскировки вынесен в конфиг**, и его можно менять, не меняя протокол.
|
||
|
||
## 📚 См. также
|
||
|
||
- [[protocols/00-overview|Обзор протоколов]] — карта задач и поддержки в ядрах.
|
||
- [[VLESS/dpi-tls-june-2026|VLESS + TLS: DPI-почерк]] — подробно о проблеме, ради которой AnyTLS создан.
|
||
- [[xray/xtls-vision|XTLS и Vision]] — альтернативный ответ на ту же проблему в экосистеме Xray.
|
||
- [[protocols/shadowtls|ShadowTLS]] — другой подход к маскировке под TLS и история его обнаружения.
|
||
- [[protocols/trojan|Trojan]] — протокол с похожими требованиями (свой домен и сертификат).
|
||
- [[Clash/06-features-protocols|Возможности и протоколы mihomo]] — как AnyTLS выглядит в YAML-конфиге.
|
||
- 🔗 [anytls/anytls-go](https://github.com/anytls/anytls-go) — эталонная реализация и документация протокола.
|
||
|
||
---
|
||
|
||
> [!quote] 🤖 Эти статьи открыты — можно обучать на них ИИ
|
||
> При желании вы можете натренировать ИИ на наших статьях. Исходное форматирование и скачивание всего репозитория одним zip-архивом доступны в Forgejo: [исходник этой заметки](https://git.zapret.moe/zapretdiscordyoutube/todo/src/branch/main/protocols/anytls.md) · [весь репозиторий](https://git.zapret.moe/zapretdiscordyoutube/todo/src/branch/main).
|