REALITY — способ маскировки, из-за которого VPN-подключение со стороны выглядит как обычный визит на популярный сайт. Разберём, как это работает, без формул и без «военной криптографии».
Проблема, которую он решает
Заблокировать VPN можно двумя способами. Первый — знать адрес сервера и не пускать до него трафик; лечится сменой сервера. Второй сложнее: анализировать сам трафик и узнавать VPN по характерным признакам, не читая содержимого. Именно так перестают работать OpenVPN и WireGuard — их видно по форме, даже если адрес новый.
Логичный ответ — притвориться обычным HTTPS. Но и здесь есть засада: если сервер предъявляет собственный сертификат на никому не известный домен, это само по себе выглядит подозрительно. Так появлялись «палевные» VPN на самоподписанных сертификатах.
В чём идея REALITY
Сервер не выдумывает себе личность, а заимствует чужую. При подключении он проводит TLS-рукопожатие, подставляя имя и сертификат реального авторитетного сайта — того, к которому люди обращаются каждый день. Наблюдатель со стороны видит совершенно обычное соединение с обычным сайтом.
Ключевая деталь: подмена работает только для того, кто знает секрет. Клиент с правильным ключом получает туннель, а любой посторонний, решивший проверить сервер и постучаться на тот же адрес, получит ровно то, что ожидал увидеть — настоящий сайт. Проверка не выявляет ничего необычного, потому что необычного и не показывают.
Причём тут SNI
SNI — то самое поле в начале TLS-соединения, где клиент открытым текстом сообщает, к какому домену обращается. Оно не зашифровано и потому удобно для фильтрации: по нему блокируют, не разбирая остального. REALITY использует эту особенность в свою пользу — в SNI стоит имя заимствованного сайта, к которому у фильтра нет вопросов.
Что это даёт вам на практике
- Подключение переживает волны блокировок, от которых отваливаются OpenVPN и WireGuard.
- Отдельный сертификат и домен серверу не нужны — значит, нечему протухнуть и нечего продлевать.
- Отпечаток соединения у каждого пользователя свой, поэтому по нему нельзя опознать сервис целиком.
Чего REALITY не делает
Он не прячет сам факт подключения от вашего интернет-провайдера — тот видит, что вы обратились к некоторому адресу, просто не видит, что это VPN. И он не защищает от блокировки по IP: если адрес сервера попадёт в список, никакая маскировка не поможет. Поэтому маскировка работает в паре с запасом серверов, а не вместо него.
REALITY — не единственный способ
Та же задача решается и без заимствования чужой личности. Соединение можно вести по WebSocket поверх обычного TLS на 443-м порту — с настоящим сертификатом на собственный домен, — а на том же адресе держать работающий сайт. Тогда проверяющему отвечает не тишина и не подозрительная заглушка, а обычный веб-сервер, и подключение неотличимо от визита на этот сайт.
Как это устроено в Стриже
По умолчанию мы используем именно второй способ: WebSocket поверх TLS с сайтом на том же адресе. Но привязки к нему нет — способ подключения задаётся на нашей стороне, и мы меняем его централизованно. Если один транспорт перестанет работать, подписка отдаст другой; переустанавливать приложение и искать новые конфигурации вам не придётся. Именно возможность переключаться, а не конкретная технология, и определяет, переживёт ли сервис очередную волну.