?Всем привет! В последнее время меня никак не оставит равнодушным тема с блокировками. Поэтому я решил написать эту небольшую статью про VPN в современных реалиях России. Статья в себя включает:

  1. Общее понимание проблемы и методы её решения.

  2. Теоретический минимум для понимания и реализации VPN.

  3. Как реализовать VPN, опираясь на мой пример.

С чего всё началось?

Два месяца назад я решил больше не платить за VPN и сделать свой. Решил использовать я связку VLESS + REALITY + в качестве транспорта TCP, а также использовал цепочку из двух серверов.

Если у вас уже есть пара VPS, где работают ваши веб-сервисы (как у меня мессенджер и хаб), то всё равно купите другие, чтобы не рисковать своими рабочими VPS.

Был очень рад, что всё получилось. Думал, что такая связка просто никогда не даст сбой, но вскоре всё поменялось...

Первая атака РКН на мой VPN

Две недели назад, спустя полтора месяца бесперебойной работы, мой VPN умер. Я принялся исправлять ситуацию и искать причину такого поведения. Проверил не упали ли сервера, но нет, все в рабочем состоянии.

Потом решил, что проблема в первом VPS. Попытался подключиться напрямую к европейскому серверу, всё к удивлению даже заработало, но только на 10 секунд от силы.

Далее я попытался локализовать проблему, клиентское приложение показывало проблему при TLS рукопожатии. Уже стало легче, хотя бы не по IP заблокировали. Зашёл в свою панель управления и действительно вижу, что появляется активное соединение, но через пару секунд кто-то его закрывает (кидают RST по всей видимости).

Тут я уже не понимал, каким образом они научились обнаруживать мою связку.

Проблема либо в том, что они научились как-то расшифровывать мой вложенный пакет с реальными данными и вытаскивать SNI, так как SNI благодаря REALITY для РКН снаружи выглядит как к какому-то легитимному сайту (который вы выбираете сами).

Либо проблема в том, что я в качестве транспорта использую TCP. Так как аномально то, что я вроде обращаюсь к сайту, но TCP соединение не разрывается после каждого HTTP/HTTPS запроса.

А может даже в совсем другом. Например, нужно обновить сертификат сайта, который используется в REALITY. Поменять отпечаток или ключи. В общем и целом, понять проблему и прийти к решению было не так просто.

Мой ответ на атаку РКН

Я решил большинство из этих проблем разом, перейдя на XHTTP и изменив ресурс, чей сертификат мы используем.

Механизм XHTTP разбивает и упаковывает наши данные в стандартный HTTP запросы. Таким образом у нас теперь не висит долгое TCP соединение (в котором не структурированно передаются данные), а короткое, которое максимально похоже на работу с веб-сайтами.

Мой ответ РКН своей новой связкой VLESS + REALITY + XHTTP дал свои плоды и VPN снова работает, но я уверен, что это не конец. Поэтому буду ждать новых атак от РКН.

Что такое VPN и как он работает?

Начну с того, что есть понятие просто Private Network — это, например, когда компания для своих двух офисов физически прокладывает кабель или покупает его у провайдера в своё монопольное пользование.

Это позволяет создать единую локальную сеть между устройствами и обезопасить от сниффинга трафика извне (только если физически кто-то не вскопает его и что-то нашаманит).

Но вскоре для экономии и удобства придумали VPN (Virtual Private Network). В VPN используется общий глобальный интернет для передачи нашего трафика, а слово Private подразумевает использование шифрования для сокрытия трафика от чужих лиц.

А для реализации общей виртуальной локальной сети пакет с виртуальными локальными ip-адресами инкапсулируется в пакет с реальными ip-адресами. Виртуальный ip-адрес вы получаете при подключении к серверу VPN вместе с виртуальными сетевым интерфейсом.

На данный момент мёртвыми считаются следующие протоколы VPN: OpenVPN, WireGuard, L2TP, IPsec и другие. Их очень легко обнаруживают по заголовкам, портам (DPI) и разрывают соединение.

На 2026 год одним из золотых стандартов для реализации VPN является связка из протокола VLESS, механизма REALITY и механизма, который используется в качестве транспорта XHTTP. REALITY и XHHTP обеспечивают маскировку трафика под HTTPS обращение к сайту.

Протокол VLESS

VLESS (Very Lightweight Encryption Security Stream) — это протокол, разработанный проектом V2Ray на замену VMess. Он в отличии от предшественника не имеет встроенного шифрования. Для шифрования мы будем использовать REALITY.

Если соотносить его с моделью OSI, он работает на стыке сеансового (5) и представительского (6) уровней. Он имеет минимальный дополнительный заголовок со служебной информацией, который отправляется сразу после установления TLS соединения в зашифрованном виде:

[Version: 1 байт] = 0x00

[UUID: 16 байт] = идентификатор клиента

[AddInfo Length: 1 байт] = длина дополнительной информации

[AddInfo: переменная] = опциональные метаданные

[Command: 1 байт] = 0x00 для TCP, 0x01 для UDP

[Port: 2 байта] = порт назначения

[AddrType: 1 байт] = 0x01 IPv4, 0x02 домен, 0x03 IPv6

[Address: переменная] = адрес назначения

Наш VPN сервер проверяет UUID, если такой есть, то установится соединение по протоколу vless поверх TCP, а если нет или вообще кто-то даже не отправил такие заголовки, то выдаём сертификат сайта, который настроили, за это отвечает REALITY.

Структура пакета выше, это только для первого пакета после TLS. Далее просто данные без заголовков VLESS.

Разберёмся с механизмом REALITY

REALITY — это специализированная технология (механизм) обфускации TLS-сессий, работающая на представительском уровне. Она модернизирует TLS 1.3, воруя сертификат и перенаправляя весь нелегитимный трафик на сайт, с которого украден сертификат.

При отправке Client hello мы отправляем пакет с SNI нашего сайта. В ответ получаем сертификат публичный этого сайта и публичный ключ REALITY, сверяем с тем, что в конфигурации нашего впн на клиенте заложено. Далее уже генерируем симметричный общий ключ с сервером и отправляем первый пакет VLESS  с uuid.

Обфускация с XHTTP

Проблема в том, что даже при шифровании DPI анализируют поведение трафика (тайминги, размеры пакетов и структуру потока). Обычный TCP-транспорт уже хорошо детектируется. Чтобы этого избежать можно использовать XHTTP (Extensible HTTP) — транспортный протокол (но он работает на прикладном уровне модели OSI), который выступает подложкой для VLESS.

XHTTP дробит VPN-трафик и упаковывает его в стандартные HTTP/2 или HTTP/3 запросы. Он имитирует естественные задержки веб-серфинга и подстраивает заголовки так, чтобы поведение трафика идеально совпадало с архитектурой выбранного вами сайта в REALITY. Конечно за это придётся платить немного большими задержками.

Теперь рассмотрим один из самых простых способов, как реализовать свой VPN на примере моей связки VLESS + REALITY + XHTTP

Настраиваем VPN-сервер

Скачиваем на VPS или на иное устройство, которое будет использоваться в качестве VPN-сервера панель управления 3X-UI, чтобы иметь удобный доступ через браузер. Также нужно установить само ядро XRay и создать две службы-демона systemd для запуска панели управления и самого ядра XRay, которое будет слушать порт и заниматься маршрутизацией трафика, как указано в конфигурации, которую создала панель.

Всё это делается одной командой:

bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)

Заодно вы там поменяете пароль и логин, получите секретный ключ и выберите порт для панели. Там же рекомендую не ставить SSL сертификат для простоты.

Естественно ставить скрипты из интернета – не очень. Автор что-то поменяет и привет что-то вредоносное, но этот репозиторий достаточно популярен и с открытым сходным кодом.

Как альтернатива можно делать и через конфиг вручную в консоли, но всё равно надо откуда-то скачать ядро XRay (например, с того же гитхаба или через docker pull), которое может быть тоже с бэкдором.

Пару моментов в процессе установки:

Тут выбираем SQLite, для VPN не на продажу пойдет
Тут выбираем SQLite, для VPN не на продажу пойдет
Здесь выбираем порт, по которому будет доступна панель 3X-UI
Здесь выбираем порт, по которому будет доступна панель 3X-UI
Здесь проще выбрать четвёртый пункт
Здесь проще выбрать четвёртый пункт
После установки получаем всю нужную информацию

Далее заходим в панель через браузер по URL:

http://IP_server:port/secret_key

Для входа вводим логин и пароль, который указали при установке. Далее перейдите в раздел подключения, нажмите на создать подключение, выберите протокол vless и порт, который будет слушать ядро XRay.

В разных версиях названия могут немного отличаться, как и интерфейс в целом
В разных версиях названия могут немного отличаться, как и интерфейс в целом

Учитывайте, что если вы выберете порт 443 или 80, то больше никакое приложение на них поднять не сможете, но именно они меньше всего обнаруживаются.

Нажмите на вкладку (в некоторых версиях это отдельный раздел, куда надо перейти после настройки VPN) Клиент и сгенерируйте ID и Subscription, в email можете писать, что хотите. Вкладку с шифрованием и аутентификацией не трогаем, у нас этим занимается VLESS и REALITY.

Далее выбираем транспорт XHTTP, в качестве пути пишете, что угодно, например, /video. Во вкладке Безопасность выбираем REALITY, отпечаток выбираете на свой вкус.

Во вкладке Target и SNI пишем ресурс, чей сертификат будем использовать. Только в Target ещё дописываем порт (google.com:443).

Генерируем ShortIDs — второй секретный ключ, который нужен для аутентификации клиента для REALITY, чтобы отличать своих клиентов. Этот ShortIDs встраивается в поле Random, которое используется для создания общего симметричного ключа, при отправке ClientHello.

Также генерируем приватный и публичный ключи REALITY. Чтобы клиент убедился, что общается с нужным сервером. Приватным ключом север подписывает сертификат и отсылает нам после TLS рукопожатия в зашифрованном виде.

Нажимаем создать, далее 3 точки и нажимаем экспорт ссылок, сохраняем ссылку и переходим к настройке промежуточного сервера, если у вас он есть, но можно и без него.

Настраиваем проксирование порта на промежуточном сервере

Можно прописать iptables, но я покажу способ с использованием Gost.

Скачиваем бинарник:

wget https://github.com/go-gost/gost/releases/download/v3.2.6/gost_3.2.6_linux_amd64.tar.gz

tar -xvzf gost_3.2.6_linux_amd64.tar.gz

chmod +x gost

Теперь запускаем проброс на на VPN-сервер:

sudo ./gost -L tcp://:port_этого_сервера/ip_vpn:port_vpn

Проверяем работу, если всё ок, то останавливаем текущий процесс и создаём файл конфигурации:

sudo nano /etc/systemd/system/gost.servise

Туда вставить это, только свои ip и порты:

[Unit]
Description=Gost Proxy Relay
After=network.target

[Service]
Type=simple
User=root
ExecStart=/gost -L tcp://:443/7.56.6.59:443 -L udp://:443/7.56.6.59:443
Restart=always

[Install]
WantedBy=multi-user.target

Перезапускаем службу:

sudo systemctl restart gost
sudo systemctl status gost

На этом заканчиваем работу с промежуточным узлом и переходим к настройке на стороне клиента.

Настраиваем доступ к VPN у клиента на устройстве

Скачивайте любой VPN-клиент, например, HAPP или V2Raytune и вставляете туда ссылку начинающуюся с vless://, которую получили в панели 3X-UI.

Заходим в настройки новой конфигурации и меняем IP VPN-сервера на IP нашего промежуточного узла. Также рекомендую настроить маршрутизацию, чтобы трафик приложений, которым VPN не нужен им не пользовались. Включите SOCKS5 авторизацию, чтобы другие приложения не обнаружили туннель.

На этом всё, надеюсь было всё понятно. Отвечу на все ваши вопросы в комментариях.

Комментарии (30)


  1. valera_efremov
    19.06.2026 15:54

    О чем статья? Тема пятикратно пережевано уже нейросетями во всех статьях.


    1. PXI Автор
      19.06.2026 15:54

      Я лично на Хабре не увидел подобного туториала (актуального) и решил опубликовать для таких как я


      1. 0Z0SK0
        19.06.2026 15:54

        Потому, что - 451


        1. Kenya-West
          19.06.2026 15:54

          И в данном случае это не "градус по Фаренгейту" :)


  1. bbasil
    19.06.2026 15:54

    Чем больше подобных статей, тем быстрее блочат.

    А про то о чем нет никаких статей - живёт себе и работает как часики )


    1. PXI Автор
      19.06.2026 15:54

      Да, я тоже долго думал стоит ли показывать на всеобщее обозрение. Но всё-таки надо не только себе, а и другим помочь. А если заблочат, то будет даже интереснее: как на этот раз обойдут блокировку


    1. PXI Автор
      19.06.2026 15:54

      А ещё заметил, когда искал информацию в Хабре, что некоторые статьи без VPN не открываются


      1. vikarti
        19.06.2026 15:54

        Там ж в сообщении об ошибке практически открытым текстом говорят что в территории дело.


  1. JBFW
    19.06.2026 15:54

    Во-первых, технология VPN - это вообще не про обход блокировок, это придумка отечественных запретителей.
    VPN - это про организацию частной сети поверх публичной. И в том числе возможно применение для обхода злонамеренных запретителей.

    Во-вторых, предложенный вариант страдает от нескольких недостатков по существу (но указывать на них не буду, потому что вот сотрудник РКН уже приготовился записывать)

    В третьих, сам по себе вариант так себе: вот зачем там нужна база данных, если это не публичный сервис с кучей аккаунтов, а для себя любимого?


    1. PXI Автор
      19.06.2026 15:54

      Извините конечно, но про то, что впн это частная сеть поверх публичного интернета я написал в статье и так.

      По второму нечего мне сказать, так как вы сами не назвали эти недостатки, чтобы их как-то парировать. Ну и я нигде не писал, что это лучшая связка. Я написал, что это быстро и возможно скоро мой VPN упадёт как и при предыдущей связке.

      Про базу данных. Я не писал, что это VPN только для себя любимого. Я написал лишь то, что при выборе SQLITE он не подходит под большие охваты и коммерческие цели (что показано на скриншоте).

      Поэтому выходит, что вы сами придумали недостатки моей статьи и сами на них ответили


      1. JBFW
        19.06.2026 15:54

        По второму нечего мне сказать, так как вы сами не назвали эти недостатки, чтобы их как-то парировать. Ну и я нигде не писал, что это лучшая связка. Я написал, что это быстро и возможно скоро мой VPN упадёт как и при предыдущей связке

        Потому и упадёт.

        Но пояснить не могу - к сожалению, сейчас это та тема, детальное обсуждение которой приводит только к более лучшим блокировкам.
        Могу только посоветовать обратиться к опыту китайских товарищей, у них есть хорошие конфигурации.


      1. Kenya-West
        19.06.2026 15:54

         не писал, что это VPN только для себя любимого

        По тексту статьи это и подразумевается. Потому что, зная минусы прямых ссылок:

        и вставляете туда ссылку начинающуюся с vless://

        — вы бы вряд ли советовали вставлять именно их. Для поддержки гибкости для этого придуманы подписки. Вдобавок не увидел в стате работу с доменом, TLS и self-steal SNI (кто-то ещё использует чужие домены для маскировки в REALITY?). Всё это подразумевает развертывание решения исключительно для себя.

        Вдобавок, решение годится разве что для уровня 2022 года (не считая нового xHTTP). С тех пор гонка щита и меча ушла далеко вперёд... Ковровые бомбардировки хостеров, 16-20, "сибирская блокировка", БС... Такие простые сетапы уже давно не актуальны на масштабе. Но для себя пойдёт! Если, конечно, заработает.


  1. Mupok
    19.06.2026 15:54

    Лучше бы написали как проанализировать проблему) Например как выяснили что соединение рвётся при рукопожатии)
    У меня например NAIVE по HTTPS иногда блокировался на 5 минут, а при смене на QUIC пока нормально


  1. bloomeatt
    19.06.2026 15:54

    Кому-то уже об этом писал, но повторюсь - поднимая панель на голом http сразу отправляйте логин и пароль на почту rsoc_in@rkn.gov.ru, сэкономите всем время.

    И простите за прямоту, но за реалити на google.com Вам должно быть стыдно. Только ленивый на хабре не оттоптался, почему это хреновая идея в 2к26


    1. PXI Автор
      19.06.2026 15:54

      Этот VPN только для показа, очевидно, что я не буду показывать свой SNI


      1. bloomeatt
        19.06.2026 15:54

        Без пояснений решительно непонятно, почему я не должен так делать. А потом появляется очредной "VLESS всЁ". Self-steal reality лично у меня работает с 2023 года без проблем. Раз в год +- меняешь хостера, потому что попадает под раздачу. Но это не вина протокола.


  1. Newm
    19.06.2026 15:54

    Автор только забыл упомянуть, что панель сама по себе глючная и если у вас вдруг никак не может система заработать, сносите панель и делайте без нее. С ИИ оно даже ставится проще чем с панелью, если на ИИ навесить часть создания конфига.

    У меня ушло больше 5 часов, чтобы понять, что панель прекрасно отображает в интерфейсе все параметры, только вот приваткей в конфиг почему то записать забывает. Это был стандартный глюк в марте. В мае, когда у меня возникла другая проблемка, у меня уже ИИ по собственной инициативе спросил, не стоит ли случайно у меня панелька, потому что в мае был другой какой-то стандартный глюк (не вникал).


    1. PXI Автор
      19.06.2026 15:54

      Спасибо за упоминание, но лично я за пару месяцев не встретил глюков


  1. leon_shtuet
    19.06.2026 15:54

    Включите SOCKS5 авторизацию, чтобы другие приложения не обнаружили туннель.

    А разверните поподробнее, о чем речь. Где подразумевается авторизация? Куда/где вводить ее Логин/Пароль? Заранее спасибо. Из-за поломанной кармы не могу спрашивать чаще, чем раз в сутки(дебилы бл@) Так что не обессудьте, если вопрос покажется странным и не кидайтесь тапочками, я не настоящий сварщик. Просто подробнее разжуйте, как построена цепочка. Я вообще не понимаю этот финт с двумя хопами(чем прямое обращение клиента за кордон к VPS с VPN отличается от прямого обращения за кордон промежуточного хопа-туннеля, с точки зрения блокираторов? И там и там зашифрованные пакеты со странным поведением и странными паттернами).


    1. PXI Автор
      19.06.2026 15:54

      Напишите мне в телеграмм, там сможете задать вопросы без лимитов. @pxi_ru


    1. PXI Автор
      19.06.2026 15:54

      В VPN-клиентах в настройках трафика или маршрутизации обычно есть возможность включить SOCKS5 авторизацию, логин и пароль вводятся там же или можно оставить то, что сгенерировало приложение.

      Про цепочки. Можно напрямую отправлять пакеты на VPN сервер, а он уже на нужные ресурс обращается (функция проксирования больше), но это считается слишком открыто и небезопасно.

      Для решения этой проблемы делают цепочки: сначала вы отправляете на VPS внутри вашей страны, а этот VPS отправляет зарубежному VPN серверу


      1. PXI Автор
        19.06.2026 15:54

        Это если максимальное упростить


  1. Rummzz
    19.06.2026 15:54

    Пишите подробней! Вас внимательно читают!


    1. PXI Автор
      19.06.2026 15:54

      И даже не знаю хорошо это или плохо


      1. SerJ_82
        19.06.2026 15:54

        Сохраните статью в Интернет-архив, ибо точно заблокируют.


  1. Sukesada
    19.06.2026 15:54

    Дописать еще клиент на фингерпринт яндекс браузера я в популярных клиентах не нашел яндекса


  1. Yurchicnice
    19.06.2026 15:54

    Чем читать статью, максимально поверхостную, советую тем, кому интересно просто почитать ntc


  1. Master_Yoda_810
    19.06.2026 15:54

    Да, режим лютует. Неделю назад мне IP сервера заблочили, а я его как назло покупал на год. Ну, месяца 4 отпахал. Теперь только как вспомогательный пойдет. Что характерно, в реестре заблокированных ресурсов его нет и никаких уведомлений о блокировке. Был IP адрес и нету его. Провайдер тоже ничем помочь не может.
    Поднял другой VPS - отлетел через неделю, но не до конца, пока пингуется. В общем два дня сижу пытаюсь подружить xHTTP и провайдера CDN (чтоб уж наверняка). Пока какая-то лажа выходит.
    Я думаю, вычисляют, в том числе, и по левым SNI. Не нужно быть гением, чтобы понять, что адрес, по которому вы что-то качаете 24/7 под видом обращений к microsoft.com и реальные адреса мелкомягких - это таки не одно и то же.

    Пока что зарегил сайт типа iloveputin.ru и пробую его подружить с xhttp напрямую, раз через CDN пока не вышло. Просто ходить к ноунейм айпишникам сейчас чревато.


    1. Semy
      19.06.2026 15:54

      Большинство CDN уже блокируется.


    1. Master_Yoda_810
      19.06.2026 15:54

      Надеюсь, не заблокируют
      Надеюсь, не заблокируют