<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Vadim (Unlimited VPN)</title>
    <description>The latest articles on DEV Community by Vadim (Unlimited VPN) (@vadim_unlimited).</description>
    <link>https://dev.to/vadim_unlimited</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4203514%2F7c26032d-32aa-48f3-92df-e391a88565c8.png</url>
      <title>DEV Community: Vadim (Unlimited VPN)</title>
      <link>https://dev.to/vadim_unlimited</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vadim_unlimited"/>
    <language>en</language>
    <item>
      <title>Как устроен обмен ключами в Reality: x25519, shortId и зачем серверу «чужой» сертификат</title>
      <dc:creator>Vadim (Unlimited VPN)</dc:creator>
      <pubDate>Sat, 24 Oct 2026 14:23:20 +0000</pubDate>
      <link>https://dev.to/vadim_unlimited/kak-ustroien-obmien-kliuchami-v-reality-x25519-shortid-i-zachiem-siervieru-siertifikat-jdn</link>
      <guid>https://dev.to/vadim_unlimited/kak-ustroien-obmien-kliuchami-v-reality-x25519-shortid-i-zachiem-siervieru-siertifikat-jdn</guid>
      <description>&lt;p&gt;&lt;strong&gt;#реклама. Я Вадим, разработчик сервиса Unlimited VPN, и в конце статьи расскажу о нём.&lt;/strong&gt; Основная часть — концептуальный разбор протокола REALITY по открытой документации и исходникам проекта Xray-core. Это не описание внутренней кухни нашего сервиса, а объяснение того, как механизм задуман авторами.&lt;/p&gt;

&lt;h2&gt;
  
  
  Проблема, которую решает Reality
&lt;/h2&gt;

&lt;p&gt;Классический VLESS поверх TLS требует собственного домена и настоящего сертификата. Сторонний наблюдатель видит рукопожатие с малоизвестным сайтом, и если зайти на этот адрес браузером, часто обнаруживается заглушка. Такой сервер легко отличить от обычного веб-ресурса.&lt;/p&gt;

&lt;p&gt;Reality подходит с другой стороны: сервер не притворяется сайтом, он буквально перенаправляет «посторонних» на настоящий популярный сайт. Для внешнего проверяющего соединение выглядит как обращение к реальному ресурсу с его подлинным сертификатом.&lt;/p&gt;

&lt;h2&gt;
  
  
  Что такое x25519 и откуда берутся ключи
&lt;/h2&gt;

&lt;p&gt;x25519 — функция согласования ключей Диффи — Хеллмана на эллиптической кривой Curve25519. У каждой стороны есть закрытый ключ и вычисленный из него открытый. Если клиент знает открытый ключ сервера, а сервер — открытый ключ клиента, обе стороны независимо вычисляют один и тот же общий секрет, ни разу не передав его по сети.&lt;/p&gt;

&lt;p&gt;В Xray пара ключей сервера генерируется командой &lt;code&gt;xray x25519&lt;/code&gt;. Закрытый ключ остаётся в конфигурации сервера, открытый (в клиентах он часто называется &lt;code&gt;publicKey&lt;/code&gt; или &lt;code&gt;pbk&lt;/code&gt;) попадает в ссылку подключения. Важно понимать: открытый ключ не секретен, но без него клиент не сможет доказать серверу, что он «свой».&lt;/p&gt;

&lt;h2&gt;
  
  
  Как клиент подаёт сигнал внутри обычного TLS
&lt;/h2&gt;

&lt;p&gt;Рукопожатие TLS 1.3 начинается с сообщения ClientHello. В нём уже есть поле key_share с эфемерным открытым ключом x25519 — так устроен сам TLS, это не изобретение Reality. Клиент Reality использует этот же эфемерный ключ и открытый ключ сервера, чтобы вычислить общий секрет.&lt;/p&gt;

&lt;p&gt;Дальше, согласно описанию в репозитории, из этого секрета выводится ключ, которым шифруется небольшой фрагмент данных, помещаемый в поле session_id ClientHello. Туда входят версия клиента, отметка времени и shortId. Для постороннего глаза session_id — просто 32 случайных байта, как и в любом другом браузерном рукопожатии.&lt;/p&gt;

&lt;p&gt;Сервер, получив ClientHello, повторяет вычисление со своей стороны своим закрытым ключом. Если расшифровка удалась, время укладывается в допустимое окно, а shortId есть в списке разрешённых — значит, пришёл легитимный клиент.&lt;/p&gt;

&lt;h2&gt;
  
  
  Зачем нужен shortId
&lt;/h2&gt;

&lt;p&gt;shortId — короткая шестнадцатеричная строка, которую администратор задаёт в конфиге сервера (список &lt;code&gt;shortIds&lt;/code&gt;). По сути это дополнительный идентификатор: можно выдать разным группам клиентов разные значения и при необходимости отключать их по отдельности, не меняя пару ключей. Пустая строка тоже допустима, но тогда эта дополнительная граница исчезает. Если в ссылке опечатка в &lt;code&gt;sid&lt;/code&gt;, сервер просто не признает клиента — один из типичных случаев, когда «всё настроено, но не работает».&lt;/p&gt;

&lt;h2&gt;
  
  
  «Чужой» сертификат: роль dest и serverNames
&lt;/h2&gt;

&lt;p&gt;Самая необычная часть Reality — параметры &lt;code&gt;dest&lt;/code&gt; и &lt;code&gt;serverNames&lt;/code&gt;. В &lt;code&gt;dest&lt;/code&gt; указывается адрес реального стороннего сайта с поддержкой TLS 1.3 и HTTP/2, а в &lt;code&gt;serverNames&lt;/code&gt; — допустимые имена (SNI), которые клиент может указать.&lt;/p&gt;

&lt;p&gt;Если ClientHello не прошёл проверку, сервер не рвёт соединение и не показывает ошибку. Он прозрачно проксирует трафик на &lt;code&gt;dest&lt;/code&gt;, и проверяющий получает настоящий сертификат настоящего сайта. Никакой заглушки, никакого самоподписанного сертификата — именно поэтому активное зондирование мало что даёт.&lt;/p&gt;

&lt;p&gt;Если же клиент опознан, сервер завершает рукопожатие сам. Документация описывает это так: сервер выдаёт «временный» сертификат, подпись которого клиент проверяет с помощью того же общего секрета. Это защищает клиента от подмены посредником: человек посередине не знает закрытого ключа сервера и не сможет корректно подписать ответ.&lt;/p&gt;

&lt;h2&gt;
  
  
  Отпечаток клиента: параметр fingerprint
&lt;/h2&gt;

&lt;p&gt;Ещё одна деталь — &lt;code&gt;fingerprint&lt;/code&gt; (fp), например &lt;code&gt;chrome&lt;/code&gt; или &lt;code&gt;firefox&lt;/code&gt;. Клиент Xray использует библиотеку uTLS, чтобы ClientHello по набору расширений и их порядку был похож на ClientHello популярного браузера. Иначе сам факт нестандартного рукопожатия выдавал бы Go-приложение.&lt;/p&gt;

&lt;h2&gt;
  
  
  Что из этого следует на практике
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Ошибка в &lt;code&gt;pbk&lt;/code&gt; или &lt;code&gt;sid&lt;/code&gt; выглядит как «нет соединения», хотя сервер жив.&lt;/li&gt;
&lt;li&gt;Неправильные системные часы ломают проверку отметки времени.&lt;/li&gt;
&lt;li&gt;SNI в ссылке должен совпадать с одним из &lt;code&gt;serverNames&lt;/code&gt; на сервере.&lt;/li&gt;
&lt;li&gt;Выбор &lt;code&gt;dest&lt;/code&gt; — ответственность администратора: сайт должен поддерживать TLS 1.3 и быть доступен с сервера.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Именно поэтому большинство клиентов принимают готовую ссылку &lt;code&gt;vless://&lt;/code&gt; или подписку: все эти параметры приходят одним пакетом и вручную ничего вбивать не нужно.&lt;/p&gt;

&lt;h2&gt;
  
  
  О сервисе (реклама)
&lt;/h2&gt;

&lt;p&gt;Unlimited VPN — мой проект, работающий на VLESS Reality. Серверы расположены в Чехии. Подключение через приложения Happ или v2RayTun на iOS, Android, Windows, macOS и Android TV. Есть пробный период на 3 дня без привязки карты.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Бот: &lt;a href="https://t.me/Vpn_UnlimitedBot" rel="noopener noreferrer"&gt;https://t.me/Vpn_UnlimitedBot&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Канал: &lt;a href="https://t.me/UnlimitedVPN_rus" rel="noopener noreferrer"&gt;https://t.me/UnlimitedVPN_rus&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Поддержка: @UnlimitedVPN_Jorge&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>vpn</category>
      <category>security</category>
      <category>networking</category>
      <category>xray</category>
    </item>
    <item>
      <title>Отладка VLESS-подключения глазами разработчика: время, DNS, SNI и чтение логов клиента</title>
      <dc:creator>Vadim (Unlimited VPN)</dc:creator>
      <pubDate>Sat, 24 Oct 2026 02:45:08 +0000</pubDate>
      <link>https://dev.to/vadim_unlimited/otladka-vless-podkliuchieniia-ghlazami-razrabotchika-vriemia-dns-sni-i-chtieniie-loghov-kliienta-3o7a</link>
      <guid>https://dev.to/vadim_unlimited/otladka-vless-podkliuchieniia-ghlazami-razrabotchika-vriemia-dns-sni-i-chtieniie-loghov-kliienta-3o7a</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;#реклама.&lt;/strong&gt; Я разработчик сервиса Unlimited VPN, и в конце статьи будет рассказ о нём. Но основная часть — практическая методика, которая пригодится с любым VLESS-сервером, включая ваш собственный.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Когда пользователь пишет «VPN не работает», за этой фразой может скрываться десяток разных причин. Ниже — порядок, в котором я сам разбираю такие случаи. Он рассчитан на тех, кто не боится заглянуть в настройки клиента и прочитать пару строк лога.&lt;/p&gt;

&lt;h2&gt;
  
  
  Шаг 0. Разделите проблему на слои
&lt;/h2&gt;

&lt;p&gt;Прежде чем что-то менять, полезно понять, на каком уровне сломалось:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Сеть до сервера&lt;/strong&gt; — доходят ли пакеты до адреса и порта вообще.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Рукопожатие&lt;/strong&gt; — устанавливается ли защищённое соединение.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Проксирование&lt;/strong&gt; — уходит ли трафик приложений через туннель.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Резолвинг имён&lt;/strong&gt; — правильно ли разрешаются домены уже внутри туннеля.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Симптомы на каждом уровне разные, и путать их — главный источник потерянного времени.&lt;/p&gt;

&lt;h2&gt;
  
  
  Шаг 1. Проверьте системное время
&lt;/h2&gt;

&lt;p&gt;Звучит банально, но это одна из самых частых причин отказа рукопожатия. Протоколы с криптографической аутентификацией чувствительны к расхождению часов между клиентом и сервером. Если на телефоне или ноутбуке время выставлено вручную и «уехало», соединение может молча обрываться.&lt;/p&gt;

&lt;p&gt;Что делать: включите автоматическую синхронизацию времени и часового пояса в настройках ОС и переподключитесь. На Android TV-приставках это особенно актуально: после отключения питания часы на некоторых моделях сбрасываются.&lt;/p&gt;

&lt;h2&gt;
  
  
  Шаг 2. Посмотрите, что говорит клиент
&lt;/h2&gt;

&lt;p&gt;Happ и v2RayTun — графические оболочки над ядром, которое пишет журнал событий. Найдите в приложении раздел с логами и включите более подробный уровень, если он есть. Дальше ищите характерные фразы:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;timeout / i/o timeout&lt;/strong&gt; — пакеты не доходят до сервера или ответ не возвращается. Это слой 1: сеть, файрвол, фильтрация у провайдера.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;connection reset / EOF&lt;/strong&gt; сразу после начала соединения — рукопожатие отклонено. Чаще всего это слой 2: неверные параметры конфигурации, устаревший ключ или проблема со временем.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;failed to resolve / no such host&lt;/strong&gt; — слой 4, проблема с DNS.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Не нужно разбираться во всём журнале целиком: обычно достаточно найти первую ошибку после нажатия «Подключить».&lt;/p&gt;

&lt;h2&gt;
  
  
  Шаг 3. Сверьте конфигурацию
&lt;/h2&gt;

&lt;p&gt;Конфигурация VLESS Reality содержит несколько полей, которые должны точно совпадать с серверной стороной: адрес, порт, идентификатор пользователя, публичный ключ, short ID и SNI — имя сайта, под который маскируется рукопожатие. Одна опечатка в любом из них — и соединение не поднимется.&lt;/p&gt;

&lt;p&gt;Поэтому я настоятельно советую не переписывать параметры вручную. Импортируйте конфигурацию целиком: из буфера обмена, по QR-коду или по ссылке-подписке. Если ключ долго лежал в заметках или мессенджере, проверьте, не обрезался ли он при копировании — длинные строки иногда переносятся с потерей символов.&lt;/p&gt;

&lt;h2&gt;
  
  
  Шаг 4. Сравните разные сети
&lt;/h2&gt;

&lt;p&gt;Отличный диагностический приём — попробовать одну и ту же конфигурацию через Wi-Fi и через мобильный интернет. Если в одной сети всё работает, а в другой нет, проблема почти наверняка не в клиенте и не в сервере, а в том, что делает конкретный провайдер с трафиком. Это сразу сужает поиск.&lt;/p&gt;

&lt;p&gt;Аналогично с устройствами: если на ноутбуке подключение есть, а на телефоне в той же сети нет — ищите разницу в настройках приложения или системы, а не в сервере.&lt;/p&gt;

&lt;h2&gt;
  
  
  Шаг 5. DNS внутри туннеля
&lt;/h2&gt;

&lt;p&gt;Бывает, что индикатор показывает «подключено», IP-адрес на проверочном сайте уже сменился, а часть сайтов всё равно не открывается. Часто виновата схема резолвинга: запросы к DNS идут мимо туннеля или в сервер, который отвечает некорректно для нужных доменов.&lt;/p&gt;

&lt;p&gt;Проверьте в настройках клиента, какой DNS используется и проксируются ли запросы к нему. Для теста можно временно указать один из крупных публичных резолверов и сравнить поведение.&lt;/p&gt;

&lt;h2&gt;
  
  
  Шаг 6. Режим маршрутизации
&lt;/h2&gt;

&lt;p&gt;У клиентов обычно есть правила: какой трафик отправлять в туннель, а какой напрямую. Если вы когда-то экспериментировали с правилами, нужный домен мог оказаться в «прямом» списке. Сбросьте маршрутизацию к режиму «весь трафик через прокси» и проверьте снова — если заработало, значит, дело в правилах.&lt;/p&gt;

&lt;h2&gt;
  
  
  Что прислать в поддержку
&lt;/h2&gt;

&lt;p&gt;Если самостоятельно не разобрались, сэкономьте время и себе, и тем, кто будет помогать. Хорошее обращение содержит:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;устройство и ОС;&lt;/li&gt;
&lt;li&gt;название и версию клиента;&lt;/li&gt;
&lt;li&gt;тип сети (Wi-Fi или мобильная) и пробовали ли другую;&lt;/li&gt;
&lt;li&gt;первую ошибку из лога;&lt;/li&gt;
&lt;li&gt;что уже проверили из списка выше.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Никогда не отправляйте свой ключ в публичные чаты: по нему любой сможет подключиться от вашего имени.&lt;/p&gt;

&lt;h2&gt;
  
  
  Об Unlimited VPN
&lt;/h2&gt;

&lt;p&gt;Теперь обещанная часть про наш проект. Unlimited VPN работает на протоколе VLESS Reality, серверы находятся в Чехии. Подключение — через приложения Happ или v2RayTun на iOS, Android, Windows, macOS и Android TV. Конфигурацию выдаёт Telegram-бот, а новым пользователям доступен пробный период на 3 дня без привязки карты.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Бот: &lt;a href="https://t.me/Vpn_UnlimitedBot" rel="noopener noreferrer"&gt;https://t.me/Vpn_UnlimitedBot&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Канал с новостями: &lt;a href="https://t.me/UnlimitedVPN_rus" rel="noopener noreferrer"&gt;https://t.me/UnlimitedVPN_rus&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Поддержка: @UnlimitedVPN_Jorge — описанный выше чек-лист отлично подходит и для обращения к нам.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Если у вас есть свои приёмы отладки VLESS-соединений, делитесь в комментариях — дополню статью.&lt;/p&gt;

</description>
      <category>vpn</category>
      <category>networking</category>
      <category>debugging</category>
      <category>security</category>
    </item>
    <item>
      <title>Почему обычные VPN-протоколы блокируют, а Reality — нет: разбор DPI для разработчиков</title>
      <dc:creator>Vadim (Unlimited VPN)</dc:creator>
      <pubDate>Sat, 24 Oct 2026 01:04:21 +0000</pubDate>
      <link>https://dev.to/vadim_unlimited/pochiemu-obychnyie-vpn-protokoly-blokiruiut-a-reality-niet-razbor-dpi-dlia-razrabotchikov-501l</link>
      <guid>https://dev.to/vadim_unlimited/pochiemu-obychnyie-vpn-protokoly-blokiruiut-a-reality-niet-razbor-dpi-dlia-razrabotchikov-501l</guid>
      <description>&lt;p&gt;&lt;em&gt;Я Вадим, разработчик Unlimited VPN; это реклама.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Если вы когда-нибудь поднимали OpenVPN или WireGuard на своём сервере, то, скорее всего, видели, как туннель, прекрасно работавший вчера, сегодня перестаёт соединяться. Причина обычно не в сервере и не в клиенте, а в системах глубокого анализа трафика (DPI). Разберём, что именно они видят и почему VLESS Reality устроен так, чтобы этого не показывать.&lt;/p&gt;

&lt;h2&gt;
  
  
  Что видит DPI
&lt;/h2&gt;

&lt;p&gt;DPI не обязан расшифровывать трафик, чтобы его классифицировать. Ему достаточно метаданных и характерных паттернов:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Сигнатуры рукопожатия.&lt;/strong&gt; У OpenVPN узнаваемый формат первых пакетов, у WireGuard — фиксированные размеры и типы сообщений handshake. Это легко ловится правилами.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Порты и протоколы.&lt;/strong&gt; UDP на нестандартном порту с постоянным потоком данных выглядит подозрительно сам по себе.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Статистика.&lt;/strong&gt; Размеры пакетов, интервалы, энтропия payload. Полностью случайный поток без признаков известного протокола тоже является признаком.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Активное зондирование.&lt;/strong&gt; Система может сама подключиться к подозрительному IP и посмотреть, как сервер отвечает на «неправильные» запросы.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Именно последний пункт долго был ахиллесовой пятой многих обфусцированных решений: снаружи трафик похож на TLS, но если постучаться на сервер напрямую, он отвечает не как обычный веб-сервер.&lt;/p&gt;

&lt;h2&gt;
  
  
  Идея Reality
&lt;/h2&gt;

&lt;p&gt;Reality — это механизм транспорта в экосистеме Xray, который обычно используют вместе с протоколом VLESS. Ключевая мысль: не придумывать свою маскировку, а максимально честно выглядеть как TLS 1.3-соединение к реальному популярному сайту.&lt;/p&gt;

&lt;p&gt;Упрощённо это работает так:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Клиент отправляет TLS ClientHello с SNI реального стороннего домена и отпечатком, похожим на настоящий браузер (через uTLS).&lt;/li&gt;
&lt;li&gt;В рукопожатие встроены данные, по которым сервер с помощью заранее известного ключа понимает, что это «свой» клиент.&lt;/li&gt;
&lt;li&gt;Если клиент свой — устанавливается туннель.&lt;/li&gt;
&lt;li&gt;Если нет (например, это активный зонд) — сервер проксирует соединение на настоящий целевой сайт, и проверяющий видит его реальный сертификат и реальный ответ.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;В итоге наблюдатель видит обычное TLS-соединение, а при попытке проверить сервер получает поведение легитимного сайта. Не нужно покупать домен и выпускать собственный сертификат, что убирает ещё один источник демаскировки.&lt;/p&gt;

&lt;h2&gt;
  
  
  Почему это сложнее блокировать
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Нет уникальной сигнатуры рукопожатия: оно повторяет браузерный TLS.&lt;/li&gt;
&lt;li&gt;Активное зондирование не даёт однозначного результата.&lt;/li&gt;
&lt;li&gt;Блокировать по SNI значит ломать доступ к реальному популярному сайту.&lt;/li&gt;
&lt;li&gt;Трафик идёт по TCP/443, как обычный HTTPS.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Важно не переоценивать: «невозможно заблокировать» — неправильная формулировка. Остаются блокировки по IP, ограничения по объёму или скорости, эвристики на уровне поведения. Reality поднимает планку, но не делает её бесконечной. Поэтому для сервиса важно уметь быстро менять адреса и выдавать пользователям новые конфигурации.&lt;/p&gt;

&lt;h2&gt;
  
  
  Что это значит на практике
&lt;/h2&gt;

&lt;p&gt;Для разработчика вывод простой: если вы строите туннель для сетей с активной фильтрацией, маскировка под реальный TLS сейчас один из самых жизнеспособных подходов. Для конфигурации обычно нужны: UUID пользователя, публичный ключ сервера, shortId, целевой SNI и fingerprint. Всё это укладывается в одну ссылку &lt;code&gt;vless://&lt;/code&gt;, которую клиенты вроде Happ или v2RayTun умеют импортировать.&lt;/p&gt;

&lt;p&gt;На этих принципах мы и собрали свой сервис. Если хотите посмотреть, как это работает со стороны пользователя, ниже основные факты.&lt;/p&gt;

&lt;h2&gt;
  
  
  Об Unlimited VPN
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Протокол: VLESS Reality.&lt;/li&gt;
&lt;li&gt;Серверы: Чехия, новые страны в планах.&lt;/li&gt;
&lt;li&gt;Устройства: iOS, Android, Windows, macOS и Android TV через приложения Happ или v2RayTun.&lt;/li&gt;
&lt;li&gt;Пробный период: 3 дня бесплатно, без привязки карты.&lt;/li&gt;
&lt;li&gt;Бот: &lt;a href="https://t.me/Vpn_UnlimitedBot" rel="noopener noreferrer"&gt;https://t.me/Vpn_UnlimitedBot&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Канал: &lt;a href="https://t.me/UnlimitedVPN_rus" rel="noopener noreferrer"&gt;https://t.me/UnlimitedVPN_rus&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Поддержка: @UnlimitedVPN_Jorge&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>vpn</category>
      <category>networking</category>
      <category>security</category>
      <category>linux</category>
    </item>
    <item>
      <title>VLESS Reality простыми словами: как работает протокол и почему мы построили на нём свой VPN</title>
      <dc:creator>Vadim (Unlimited VPN)</dc:creator>
      <pubDate>Fri, 23 Oct 2026 23:10:19 +0000</pubDate>
      <link>https://dev.to/vadim_unlimited/vless-reality-prostymi-slovami-kak-rabotaiet-protokol-i-pochiemu-my-postroili-na-niom-svoi-vpn-27lp</link>
      <guid>https://dev.to/vadim_unlimited/vless-reality-prostymi-slovami-kak-rabotaiet-protokol-i-pochiemu-my-postroili-na-niom-svoi-vpn-27lp</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Я Вадим, разработчик Unlimited VPN; в конце статьи — рассказ о нашем сервисе (это реклама).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Классические VPN-протоколы хорошо шифруют трафик, но плохо прячут сам факт использования VPN. В сетях с DPI (глубокой инспекцией пакетов) это становится главной проблемой: соединение не расшифровывают, его просто узнают и обрывают. VLESS с транспортом Reality решает именно эту задачу. Ниже разберу, как он устроен, без маркетинга и выдуманных цифр.&lt;/p&gt;

&lt;h2&gt;
  
  
  Что такое VLESS и Xray
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Xray-core&lt;/strong&gt; — открытый прокси-движок, ответвившийся от V2Ray. Он поддерживает несколько протоколов (VMess, VLESS, Trojan, Shadowsocks) и разные транспорты (TCP, WebSocket, gRPC, XHTTP).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;VLESS&lt;/strong&gt; — лёгкий протокол передачи данных внутри Xray. Его особенности:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Нет собственного шифрования.&lt;/strong&gt; VLESS лишь идентифицирует клиента по UUID и передаёт данные. Шифрование обеспечивает внешний слой — TLS или Reality. Это убирает двойное шифрование, которое было у VMess.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Нет зависимости от точного времени&lt;/strong&gt;, в отличие от VMess, где рассинхрон часов ломал подключение.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Поддержка XTLS Vision (flow &lt;code&gt;xtls-rprx-vision&lt;/code&gt;).&lt;/strong&gt; Этот режим борется с характерной для прокси картиной «TLS внутри TLS»: когда внутренний трафик уже зашифрован TLS, Vision выравнивает (паддит) размеры первых пакетов, чтобы по ним было сложнее распознать туннель.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Сам по себе VLESS — просто «конверт». Вся маскировка — в транспорте поверх него.&lt;/p&gt;

&lt;h2&gt;
  
  
  Что делает Reality
&lt;/h2&gt;

&lt;p&gt;Чтобы обычный TLS-прокси выглядел как сайт, раньше нужно было купить домен, получить сертификат и поднять веб-сервер. У такой схемы есть слабые места:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Домен и IP можно внести в чёрный список.&lt;/li&gt;
&lt;li&gt;Цензор может сам подключиться к серверу (&lt;strong&gt;активное зондирование&lt;/strong&gt;) и увидеть, что за «сайтом» ничего нет или он ведёт себя странно.&lt;/li&gt;
&lt;li&gt;SNI (имя сайта в открытом виде в ClientHello) выдаёт, куда идёт подключение.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Reality&lt;/strong&gt; устроен иначе.&lt;/p&gt;

&lt;h3&gt;
  
  
  Чужое рукопожатие вместо своего сертификата
&lt;/h3&gt;

&lt;p&gt;Сервер Reality не имеет собственного сертификата. В конфигурации указывается реальный сторонний сайт (параметр &lt;code&gt;dest&lt;/code&gt;/&lt;code&gt;target&lt;/code&gt; и список &lt;code&gt;serverNames&lt;/code&gt;), который поддерживает TLS 1.3 — например, крупный сайт с HTTP/2.&lt;/p&gt;

&lt;p&gt;Клиент отправляет ClientHello с SNI этого сайта. Со стороны сети подключение выглядит как обычный заход на этот популярный сайт. Отпечаток клиента подделывается под настоящий браузер с помощью uTLS (параметр &lt;code&gt;fingerprint&lt;/code&gt;, например &lt;code&gt;chrome&lt;/code&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  Как сервер отличает «своего»
&lt;/h3&gt;

&lt;p&gt;Внутри ClientHello клиент прячет данные для аутентификации, используя поле session ID и обмен ключами x25519 с публичным ключом сервера (&lt;code&gt;publicKey&lt;/code&gt;) и коротким идентификатором (&lt;code&gt;shortId&lt;/code&gt;).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Если это наш клиент&lt;/strong&gt;, сервер проверяет данные, завершает рукопожатие сам и дальше передаёт VLESS-трафик.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Если это кто угодно другой&lt;/strong&gt; — браузер, сканер, цензор, — сервер просто проксирует соединение на настоящий сайт. Тот, кто зондирует, получает подлинный сертификат и подлинную страницу.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Что это даёт
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Устойчивость к активному зондированию:&lt;/strong&gt; проверка сервера показывает реальный сайт с реальным сертификатом.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Устойчивость к блокировкам по SNI:&lt;/strong&gt; SNI указывает на легитимный популярный домен, блокировать который дорого для самого цензора.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Не нужен свой домен и сертификат:&lt;/strong&gt; нечего вносить в чёрный список по имени, нечего продлевать.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Ограничения (честно)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;IP сервера всё равно виден.&lt;/strong&gt; Если в сети блокируют целые подсети хостеров или «белые списки» IP, Reality не спасёт. Поэтому важно, чтобы выбранный сайт для маскировки был правдоподобным для этого IP (например, не выдавать сервер в небольшом дата-центре за CDN крупной компании, у которой известные диапазоны адресов).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Статистический анализ трафика&lt;/strong&gt; (объёмы, длительность, тайминги) теоретически остаётся возможным — Reality маскирует рукопожатие, а не поведение пользователя.&lt;/li&gt;
&lt;li&gt;Это не «невидимость», а значительное повышение стоимости обнаружения.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Сравнение по заметности
&lt;/h2&gt;

&lt;p&gt;Ниже — качественное сравнение именно по тому, насколько легко узнать протокол в сети. Скорость не сравниваю: она зависит от сервера, канала и реализации, а честных цифр для общей таблицы нет.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Протокол&lt;/th&gt;
&lt;th&gt;Как выглядит в сети&lt;/th&gt;
&lt;th&gt;Типичная уязвимость к блокировке&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OpenVPN&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Узнаваемые заголовки и рукопожатие, даже в режиме TCP/443&lt;/td&gt;
&lt;td&gt;Легко определяется сигнатурами DPI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;WireGuard&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;UDP с фиксированными типами и размерами сообщений рукопожатия&lt;/td&gt;
&lt;td&gt;Очень легко узнаётся по структуре пакетов; без обфускации блокируется точечно&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Shadowsocks&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Поток без структуры, «похожий на случайный шум»&lt;/td&gt;
&lt;td&gt;Энтропийный анализ и активное зондирование; исторически это использовалось для блокировок&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;VLESS + TLS (свой домен)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Обычный HTTPS&lt;/td&gt;
&lt;td&gt;Блокировка домена/IP, зондирование, признаки TLS-в-TLS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;VLESS + Reality&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;HTTPS к реальному популярному сайту&lt;/td&gt;
&lt;td&gt;Блокировка по IP/подсетям, статистический анализ&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;WireGuard и OpenVPN — отличные протоколы для своей задачи: защищённого туннеля в сети, где VPN не запрещают. Они просто не проектировались для маскировки.&lt;/p&gt;

&lt;h2&gt;
  
  
  Клиенты
&lt;/h2&gt;

&lt;p&gt;Конфигурация VLESS Reality обычно передаётся ссылкой вида &lt;code&gt;vless://...&lt;/code&gt; или подпиской. Поддерживают её:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Happ&lt;/strong&gt; — iOS, Android, Windows, macOS, Android TV;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;v2RayTun&lt;/strong&gt; — iOS, Android, Windows и др.;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;v2rayNG&lt;/strong&gt; — Android;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streisand, FoXray, Shadowrocket&lt;/strong&gt; — iOS;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nekoray / NekoBox, Hiddify, v2rayN&lt;/strong&gt; — десктоп и мобильные платформы.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Важно, чтобы клиент был основан на свежей версии Xray-core или sing-box с поддержкой Reality.&lt;/p&gt;

&lt;h2&gt;
  
  
  Типичная архитектура
&lt;/h2&gt;

&lt;p&gt;Типичная настройка Reality выглядит так:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Транспорт TCP + Reality + flow &lt;code&gt;xtls-rprx-vision&lt;/code&gt;.&lt;/strong&gt; Самая проверенная связка: меньше признаков TLS-в-TLS и минимум накладных расходов.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Сайт для маскировки подбирают под IP-сеть сервера.&lt;/strong&gt; Обычно выбирают ресурс с TLS 1.3 и HTTP/2, для которого трафик с такого адреса выглядит правдоподобно.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Отдельный UUID на каждого пользователя.&lt;/strong&gt; Так можно отключить одного клиента, не трогая остальных.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Несколько &lt;code&gt;shortId&lt;/code&gt;.&lt;/strong&gt; Позволяет менять идентификаторы без перевыпуска всех конфигураций.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Выдача через подписку.&lt;/strong&gt; Клиент сам обновляет конфигурацию, если параметры сервера меняются.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Итог
&lt;/h2&gt;

&lt;p&gt;VLESS — простой и быстрый «конверт» для данных, Reality — способ сделать так, чтобы этот конверт выглядел как обычное посещение популярного сайта, а любая проверка сервера показывала настоящий сайт. Это не абсолютная защита, но на сегодня одна из самых практичных схем для сетей с DPI.&lt;/p&gt;




&lt;h2&gt;
  
  
  О нашем сервисе
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Unlimited VPN&lt;/strong&gt; построен на VLESS Reality.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Серверы в Чехии.&lt;/li&gt;
&lt;li&gt;iOS, Android, Windows, macOS, Android TV — через Happ или v2RayTun.&lt;/li&gt;
&lt;li&gt;3 дня бесплатно, без привязки карты.&lt;/li&gt;
&lt;li&gt;Бот: &lt;a href="https://t.me/Vpn_UnlimitedBot" rel="noopener noreferrer"&gt;https://t.me/Vpn_UnlimitedBot&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Канал: &lt;a href="https://t.me/UnlimitedVPN_rus" rel="noopener noreferrer"&gt;https://t.me/UnlimitedVPN_rus&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Буду рад вопросам по настройке Reality в комментариях — отвечу и тем, кто поднимает свой сервер.&lt;/p&gt;

</description>
      <category>vpn</category>
      <category>networking</category>
      <category>security</category>
      <category>privacy</category>
    </item>
  </channel>
</rss>
