← К библиотеке
Протоколы Теория

Что такое Reality и почему он держит ноду живой

Reality — не «ещё один протокол в списке», а способ выглядеть как чужой большой сайт. Ниже — механика без магии: чем он отличается от обычного TLS, почему DPI на него не срабатывает и где у него слабое место. Команды и конфиг — в парной практике, тут только «понять».

Перейти к практике

Почему обычный TLS умирает первым

Я поднимал десятки нод и видел одну и ту же картину. Ставишь VLESS с честным TLS на своём домене — работает пару дней, потом DPI начинает его резать. Причина простая: в момент рукопожатия твой клиент отправляет TLS ClientHello, где открытым текстом лежит SNI — имя домена, к которому он подключается. Оно не шифруется. DPI читает это имя, видит незнакомый домен на непонятном сервере, где живёт «что-то на 443», и рвёт соединение. Даже если сертификат валидный от Let's Encrypt — сам факт «редкий SNI + свежий домен + одиночный IP» уже достаточен, чтобы попасть под подозрение и в список на резку.

Обфускация вроде WebSocket или простого маскирования заголовков тут не спасает: она прячет содержимое, но не меняет того, что снаружи всё равно виден необычный TLS-профиль на подозрительном хосте. DPI 2026 года смотрит не только на SNI, но и на то, кому этот IP принадлежит, резолвится ли SNI в этот IP, как отвечает сервер на активное прозванивание. Обычный TLS проваливает почти каждый из этих тестов.

Что делает Reality по-другому

Ключевая идея, ради которой всё и затевалось: Reality не поднимает свой TLS вообще. Он не генерирует свой сертификат, не светит свой домен, не создаёт узнаваемый профиль. Вместо этого он представляется чужим крупным сайтом-донором и переиспользует настоящий TLS-хендшейк этого донора.

Работает это так. Ты выбираешь донор — большой популярный ресурс с TLS 1.3, к которому DPI заведомо не придирается (условный www.microsoft.com). Клиент, подключаясь к твоей ноде, отправляет ClientHello с SNI донора. Нода перехватывает это рукопожатие. Дальше две ветки:

  • Если это настоящий клиент с правильным ключом — нода узнаёт его по криптографическому маркеру, встроенному в хендшейк, и начинает проксировать VPN-трафик.
  • Если это кто угодно другой (DPI, прозванивающий скрипт, случайный браузер) — нода молча проксирует его к настоящему донору. Тот отвечает своим реальным сертификатом, своей реальной страницей. Снаружи это неотличимо от честного визита на сайт донора.

То есть DPI, ткнув в твой сервер, видит валидный TLS 1.3 от microsoft.com, настоящий сертификат, настоящий ответ. Придраться не к чему. А VPN спрятан внутри того же соединения и виден только тому, у кого есть ключ.

Почему это ломает статистику DPI

DPI ловит VPN тремя способами: по рукопожатию/SNI, по поведению трафика, по IP. Reality закрывает первые два.

Рукопожатие. Снаружи это честный TLS 1.3 к реальному сайту. SNI — донорский, узнаваемый, «белый». Сертификат — настоящий, донорский. Активная проба попадает на реальный сайт. Статистического сигнала «это VPN» нет.

Поведение. Тут в игру вступает пара — режим Vision (xtls-rprx-vision). Обычный VLESS-в-TLS даёт двойное шифрование: внутренний TLS внутри внешнего. Это создаёт характерный паттерн длин пакетов, по которому обфусцированный трафик всё равно вычисляется статистикой. Vision убирает лишний слой и подмешивает паддинг, ломая эту сигнатуру. Механику Vision я разбираю отдельно — она достаточно важна, чтобы ей посвятить целую заметку.

Остаётся третий признак — IP. Reality его не трогает: если хостер спалился или подсеть отравили, никакая маскировка рукопожатия не поможет, лечится это ротацией IP или уходом за CDN. Но это отдельный слой обороны, не претензия к Reality.

Где у Reality слабое место

Честно, без прикрас: чужой донор — компромисс. Ты используешь serverNames = microsoft.com, но этот домен не резолвится в твой IP. При достаточно глубоком анализе DPI может заметить рассинхрон: «SNI говорит microsoft.com, а IP принадлежит какому-то дата-центру в непонятной стране». Для большинства сценариев этого мало, чтобы блокировать — ложных срабатываний было бы слишком много. Но под самым жёстким DPI это зацепка.

Решение — Selfsteal: вместо чужого донора нода маскируется под твой собственный сайт на том же IP. Тогда SNI, IP и контент согласованы: домен резолвится в ноду, на нём живёт настоящая страница, активная проба видит реальный сайт именно на этом адресе. Рассинхрона нет. Это самый стойкий вариант, и ему тоже посвящена отдельная пара статей.

Ещё пара граблей из практики, о которых стоит знать заранее: не бери один и тот же донор на все ноды — ротируй, иначе одна волна блокировок снимает всё разом. И не ставь клиентский fingerprint chrome — он палевный и на части сборок ядра нода вообще не стартует; бери firefox.

Что дальше

Механику ты понял: Reality прячет VPN внутри чужого честного TLS, закрывает рукопожатие и SNI, а поведение добивает Vision. Это фундамент, на котором в 2026 держатся почти все живые ноды под РФ-DPI. Как это собрать руками — сгенерировать ключи, вписать донор, проверить маскировку — в парной практике «VLESS + Reality: конфиг, который не палится». Там уже команды и рабочий конфиг.

Следующий гайд VLESS + Reality: конфиг, который не палится → Не понравилась статья или что-то непонятно? Напишите мне — помогу или поправлю. @notrealvpn →
Материал носит образовательный характер и посвящён инженерии сетевой инфраструктуры. Вы отвечаете за соблюдение законов своей юрисдикции.