Протоколы
REALITY — handshake-протокол маскировки VPN под HTTPS
Ядро технологии маскировки трафика, при которой VPN-сервер проксирует TLS-handshake на whitelisted чужой сайт и подменяет ответ — для DPI трафик неотличим от обычного HTTPS к крупному легитимному ресурсу.
Определение
REALITY — это handshake-протокол, разработанный командой Project X (xray-core) в 2023 году, который защищает VPN-серверы от детекции через подмену TLS-handshake: сервер прозрачно проксирует первоначальный handshake к whitelisted чужому домену (например, microsoft.com), а к легитимному клиенту с правильным секретом возвращает свой ответ. Это самостоятельный криптографический протокол, отдельный от VLESS, который можно (в теории) использовать с любым прокси-протоколом — но на практике сейчас используется почти исключительно в связке с VLESS + XTLS Vision.
REALITY заменил предыдущее решение «настоящий TLS + Let’s Encrypt сертификат + nginx fallback», которое страдало от cert-fingerprinting и нагрузки на nginx.
Как работает
REALITY эксплуатирует асимметрию между легитимным TLS-клиентом и VPN-клиентом: оба видят один ClientHello, но только VPN-клиент знает секрет и может авторизоваться. Алгоритм:
- Конфигурация сервера. Админ выбирает «target»-домен (whitelisted, на whitelist’е ТСПУ или GFW):
microsoft.com,apple.com,cloudflare.com,gateway.icloud.com. Указывает его какdestв xray-конфиге. Также генерирует пару X25519 ключей (public/private). - Клиентский ClientHello. Клиент шлёт TLS-handshake к VPN-серверу. В extension
key_shareон встраивает специальный X25519 public-key, который ДВОЙСТВЕННО валиден: с точки зрения TLS это нормальная ECDHE-нумера, с точки зрения REALITY это «marker» — сервер видит, что в нижних битах закодирован authentication-tag. - Серверная проверка. Сервер декодирует tag из key_share. Если tag валиден (выведен из server_private_key + client_short_id) — это VPN-клиент. Если нет — это случайный TLS-клиент или active probing.
- Branching:
- VPN-клиент. Сервер генерирует свой TLS-ответ (ServerHello + сертификат от target-домена, валидный потому что server заранее получил его реальную копию через handshake к microsoft.com). Подменяет ответ и переходит в XTLS Vision flow.
- Не-VPN-клиент / probe. Сервер прозрачно проксирует handshake на настоящий microsoft.com и возвращает реальный ответ Microsoft. Probe видит сертификат Microsoft и не понимает, что это VPN-сервер.
- Authentication. В REALITY нет паролей в trafic’е — handshake-секрет проверяется одним RTT через X25519-обмен.
Защита от MITM. Server подменяет сертификат для VPN-клиента. Чтобы это не выглядело как cert-spoofing, клиент НЕ проверяет цепочку — он проверяет только X25519-marker от сервера в ServerHello. Безопасность поддерживается за счёт того, что только сервер с private-key может правильно ответить.
Применение в России 2026
REALITY — текущий золотой стандарт обхода ТСПУ. Причины:
- Защита от active probing. ТСПУ не может проверить, VPN ли это, не зная private-key. При probe-запросе сервер показывает реальный сайт-цель.
- SNI = microsoft.com. SNI-блокировка ничего не даёт — Microsoft в whitelist всегда.
- JA3 = Chrome. uTLS на стороне клиента эмулирует JA3 настоящего Chrome.
- Без Let’s Encrypt. Не нужен реальный домен с сертификатом для VPS, что упрощает setup и убирает один OPSEC-leak (домен в Let’s Encrypt CT log публичен).
Что НЕ защищает:
- Statistical fingerprinting. Если ТСПУ видит, что 90% трафика к whitelist’у Microsoft идёт на ваш IP — это статистическая аномалия. Решение — использовать редкие whitelisted-домены, ротация.
- IP-block. Если ваш VPS IP попал в IP-blacklist (по другим причинам) — REALITY не поможет.
- TLS-in-TLS detection. REALITY покрывает только handshake. Без Vision пользовательский TLS-трафик внутри туннеля может детектироваться. Поэтому связка REALITY + Vision — обязательна.
Setup на стороне клиента. URL формат:
vless://uuid@server:443?security=reality&pbk=<public-key>&fp=chrome&sni=microsoft.com&sid=<short-id>&type=tcp&flow=xtls-rprx-vision
Юзеру: при выборе VPN провайдера для РФ ключевые маркеры качества — REALITY + Vision + ротация target-доменов + uTLS. Если в импорт-ссылке нет security=reality — VPN не выдержит ТСПУ.
Связанные термины
VLESS Reality — основной протокол, использующий REALITY. VLESS — базовый прокси-уровень. XTLS Vision — flow для зашифрованного inner-стрима. Active probing — атака, против которой REALITY проектировался. TLS 1.3 — основа handshake.
Источники
- GitHub: XTLS/REALITY — основной репозиторий с описанием протокола.
- Project X документация — REALITY — официальный гайд.
- GFW Report — REALITY analysis — независимые оценки устойчивости.