Reality решает задачу, с которой не справляется обычный TLS: сделать так, чтобы соединение со стороны было неотличимо от обращения к настоящему популярному сайту — и при этом не требовать ни своего домена, ни выпущенного сертификата.
Сервер с самоподписанным сертификатом виден сразу: наблюдателю достаточно посмотреть на сертификат в ответе. Сервер с настоящим сертификатом выглядит лучше, но выдаёт себя иначе — по домену, который никто, кроме вас, не посещает, по возрасту домена, по отсутствию нормального сайта за ним.
Отдельная проблема — активное зондирование: наблюдатель сам подключается к подозрительному адресу и смотрит на реакцию. Обычный прокси на неправильный запрос отвечает не так, как отвечал бы веб-сервер, и этим себя обнаруживает.
Reality не выпускает собственный сертификат. Вместо этого сервер при рукопожатии
выступает посредником: он обращается к настоящему стороннему сайту, указанному
в параметре dest, и отдаёт клиенту его подлинный сертификат
и его подлинные параметры TLS.
Со стороны это выглядит как обычное обращение к, скажем, крупному CDN или сайту известной компании: настоящий домен, настоящий сертификат, настоящая цепочка доверия. Проверить сертификат недостаточно, потому что он не поддельный — он чужой и настоящий.
Клиент, знающий публичный ключ, вставляет в рукопожатие короткую метку, которую сервер распознаёт и переключает соединение на туннель. Клиент без ключа получает ровно то, что получил бы от настоящего сайта, — именно поэтому активное зондирование ничего не даёт.
| Параметр | Что задаёт |
|---|---|
dest |
Настоящий сайт, чьё TLS-рукопожатие заимствуется. Должен поддерживать TLS 1.3 и HTTP/2, быть доступен с сервера и не быть заблокирован в стране пользователя. |
serverNames |
Допустимые значения SNI. Клиент обязан прислать одно из них, иначе соединение уйдёт на настоящий сайт. |
privateKey / publicKey |
Пара ключей X25519. Приватный хранится на сервере, публичный (pbk) попадает в ссылку подписки. |
shortIds |
Короткие метки, по которым сервер отличает своих клиентов. В ссылке — параметр sid. |
fingerprint |
Отпечаток TLS-клиента (chrome, firefox, safari). Задаёт порядок расширений в рукопожатии, чтобы оно совпадало с браузерным. |
Reality наследует репутацию сайта, под который маскируется. Отсюда практические требования:
dest — самая частая причина, по которой Reality работает,
но соединение всё равно ведёт себя подозрительно: сайт-донор недоступен
из страны клиента, и картина не сходится.
Reality почти всегда используют вместе с flow=xtls-rprx-vision
и транспортом raw. Reality отвечает за то, как выглядит начало соединения,
Vision — за то, чтобы дальше не тратить ресурсы на повторное шифрование
уже зашифрованного трафика. Вместе это даёт наименьшую задержку из доступных
сочетаний. Подробнее — в разборе VLESS.
Reality маскирует соединение, но не скрывает объём трафика и его временной рисунок. Он не защищает от компрометации самого сервера и не отменяет того, что владелец сервера технически видит источник соединений. Это инструмент маскировки транспорта, а не анонимности.
Как устроен VLESS · Сравнение транспортов · Клиенты и импорт подписки