VLESS Fragment: обход DPI и настройка фрагментации для стабильного VPN

Разбираем технологию VLESS Fragment: как она помогает обходить DPI, какие клиенты поддерживают фрагментацию, как настроить и какие есть ограничения.

Что такое VLESS Fragment и зачем он нужен

VLESS Fragment — это функция, доступная в ряде VPN-клиентов, которая позволяет разбивать TLS-рукопожатие на мелкие фрагменты. Это помогает обходить системы глубокого анализа пакетов (DPI), которые блокируют или ограничивают доступ к определённым доменам, особенно к тем, что используются для проксирования.

Когда вы подключаетесь к VPN-серверу, использующему TLS (например, VLESS + TLS), клиент и сервер выполняют рукопожатие. DPI-системы могут анализировать первые пакеты этого рукопожатия и, если видят признаки прокси-трафика, блокировать соединение. Fragment разбивает эти пакеты на более мелкие части, что затрудняет DPI их идентификацию.

Эта функция особенно актуальна для доменов, которые часто блокируются, например, *.workers.dev (Cloudflare Workers) или других доменов, используемых для обхода блокировок. Без Fragment доступ к таким узлам может быть невозможен, даже если сам VPN-протокол работает корректно.

Как работает фрагментация TLS-рукопожатия

Технически фрагментация TLS-рукопожатия реализуется на уровне клиента. Когда клиент отправляет TLS ClientHello, он может быть разделён на несколько TCP-сегментов. DPI-системы, которые ожидают увидеть полный ClientHello в одном пакете, могут не распознать его как TLS-рукопожатие и пропустить.

Важно понимать, что фрагментация не нарушает целостность TLS-соединения: сервер собирает фрагменты и обрабатывает их как обычное рукопожатие. Это достигается за счёт того, что TCP гарантирует доставку всех сегментов в правильном порядке.

Некоторые реализации позволяют настраивать размер фрагментов и задержку между ними. Например, можно указать, что пакеты должны быть размером 1-2 байта, что делает их похожими на обычный TCP-трафик. Это может быть полезно для обхода более сложных DPI-систем, которые анализируют не только первые пакеты, но и паттерны трафика.

Клиенты с поддержкой Fragment

Не все VPN-клиенты поддерживают Fragment. На момент написания статьи, поддержка есть в следующих приложениях:

  • Android: v2rayNG, Nekobox, Karing, v2box
  • Windows: v2rayN, Hiddify, Karing
  • iOS: Karing, Hiddify Proxy & VPN, Shadowrocket, Streisand, v2box
  • Роутеры: PassWall, SSR-Plus, HomeProxy (для OpenWrt)

Клиенты без поддержки Fragment (например, некоторые версии Clash) могут иметь ограничения при подключении к узлам на заблокированных доменах. В таких случаях рекомендуется использовать клиенты из списка выше или настраивать альтернативные домены.

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

Настройка Fragment в популярных клиентах

Настройка Fragment обычно сводится к включению опции и указанию параметров фрагментации. Рассмотрим на примере v2rayN (Windows) и v2rayNG (Android).

В v2rayN при редактировании профиля VLESS найдите раздел «Stream Settings» или «Транспорт». Там будет поле «Fragment» или «Фрагментация». Включите его и укажите параметры, например, размер фрагмента (обычно 1-2 байта) и задержку (например, 10-20 мс).

В v2rayNG настройки аналогичны: при создании или редактировании профиля перейдите в раздел «Транспорт» и найдите опцию Fragment. Включите её и настройте параметры.

В Hiddify и Karing фрагментация обычно включается в настройках подключения, часто автоматически, если сервер поддерживает эту функцию. Однако рекомендуется проверять настройки вручную.

Если вы используете подписку, убедитесь, что в конфигурации сервера указаны параметры fragment. Некоторые серверы могут передавать их в ссылке подключения.

Проблемы с Trojan и особенности Clash

Некоторые протоколы имеют особенности, которые могут вызывать проблемы при использовании Fragment. Например, протокол Trojan в некоторых клиентах принудительно использует TLS, что может конфликтовать с фрагментацией.

В Clash (и его производных) подписки обычно не включают узлы trojan+ws (без TLS), только trojan+ws+tls. Это означает, что если у вас проблемы с TLS-блокировкой, Clash может быть не лучшим выбором. Рекомендуется использовать клиенты, которые поддерживают Fragment, или настраивать узлы с VLESS.

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

DNS-over-VLESS: защита DNS-запросов через Xray

Помимо фрагментации, для повышения безопасности и обхода блокировок можно направить DNS-трафик через прокси Xray. Этот метод называется DNS-over-VLESS. Он позволяет шифровать DNS-запросы и скрывать их от DPI.

Для настройки DNS-over-VLESS необходимо:

  1. Убедиться, что у вас настроен и работает Xray с VLESS + XTLS Reality.
  2. Добавить в конфигурацию Xray входящее подключение (inbound) с протоколом dokodemo-door, поддерживающим UDP (например, TProxy).
  3. В исходящих подключениях (outbounds) добавить секцию DNS-протокола и указать параметр domainStrategy: "ForceIP" для VLESS и freedom.
  4. Создать файл dns.json с указанием публичного DNS-сервера (например, 8.8.8.8).
  5. В routing.json добавить правила, которые перенаправляют DNS-запросы через прокси.

Важно: эта схема работает только при прямом подключении к серверу. Если вы используете CDN (например, Cloudflare), DNS-over-VLESS не будет работать, так как CDN не может пробросить localhost сервера.

Настройка DNS-over-VLESS: пример конфигурации

Приведём пример конфигурации для DNS-over-VLESS. Предполагается, что у вас уже есть рабочий Xray с VLESS + Reality.

inbounds.json (добавьте в конфигурацию):

{
  "inbounds": [
    {
      "port": 1181,
      "protocol": "dokodemo-door",
      "settings": {
        "network": "tcp,udp",
        "followRedirect": true
      },
      "sniffing": {
        "enabled": true,
        "routeOnly": true,
        "destOverride": ["http", "tls"]
      },
      "streamSettings": {
        "sockopt": {
          "tproxy": "tproxy"
        }
      },
      "tag": "tproxy"
    }
  ]
}

outbounds.json (добавьте секции):

{
  "outbounds": [
    {
      "protocol": "vless",
      "settings": {
        "address": "ваш_сервер",
        "port": 443,
        "id": "ваш_uuid",
        "encryption": "none",
        "flow": "xtls-rprx-vision"
      },
      "streamSettings": {
        "network": "tcp",
        "security": "reality",
        "realitySettings": {
          "serverName": "ваш_домен",
          "publicKey": "ваш_public_key",
          "shortId": "ваш_short_id",
          "spiderX": "/"
        },
        "sockopt": {
          "domainStrategy": "ForceIP"
        }
      },
      "tag": "proxy"
    },
    {
      "protocol": "freedom",
      "streamSettings": {
        "sockopt": {
          "domainStrategy": "ForceIP"
        }
      },
      "tag": "direct"
    },
    {
      "protocol": "dns",
      "tag": "dns-out"
    }
  ]
}

dns.json:

{
  "dns": {
    "tag": "dns-in",
    "servers": ["8.8.8.8"],
    "queryStrategy": "UseIP"
  }
}

routing.json (добавьте правила в начало):

{
  "routing": {
    "rules": [
      {
        "inboundTag": ["dns-in"],
        "outboundTag": "proxy"
      },
      {
        "port": 53,
        "outboundTag": "dns-out"
      },
      {
        "domain": ["browserleaks", "ip.me"],
        "outboundTag": "proxy"
      },
      {
        "network": "tcp,udp",
        "outboundTag": "direct"
      }
    ]
  }
}

После настройки перезапустите Xray и проверьте, что DNS-запросы проходят через прокси (например, на сайте browserleaks.com).

Ограничения и особенности DNS-over-VLESS

Метод DNS-over-VLESS имеет ряд ограничений, которые важно учитывать:

  • Не работает через CDN: как уже упоминалось, при проксировании через Cloudflare или Fastly схема не работает, так как CDN не может пробросить localhost сервера. Однако, если в dns.json добавить hosts с IP вашего VPS, то может работать и через CDN.
  • Требуется TProxy: для перехвата DNS-трафика необходимо использовать TProxy, что может быть сложно настроить на некоторых роутерах.
  • Не все клиенты поддерживают: настройка DNS-over-VLESS требует ручного редактирования конфигурационных файлов Xray, что не поддерживается в большинстве мобильных приложений.
  • Рекомендуется для опытных пользователей: метод требует понимания сетевых протоколов и может привести к неработоспособности сети при неправильной настройке.

Также стоит отметить, что при использовании DNS-over-VLESS все DNS-запросы, включая те, что идут на локальный резолвер (127.0.0.53), будут перенаправляться через прокси. Это может замедлить работу сети, но повышает конфиденциальность.

Базовые шаги по настройке VPS для VLESS

Для полноценной работы VLESS с Fragment и DNS-over-VLESS необходимо правильно настроить сервер. Рассмотрим базовые шаги, которые помогут избежать проблем.

  1. Аренда VPS: выберите сервер в стране с наименьшей цензурой, желательно ближе к вам. Для небольших нагрузок достаточно 1-2$ в месяц, но обратите внимание на лимит трафика и объём RAM (рекомендуется от 1 ГБ).
  2. Базовая настройка: смените пароль root, обновите пакеты (apt update && apt upgrade -y), создайте нового пользователя с правами sudo, измените порт SSH (например, на 5667) и запретите вход root.
  3. Установка Fail2ban: настройте автоматическую блокировку IP после нескольких неудачных попыток входа.
  4. Настройка Firewall (UFW): разрешите порты 80, 443, а также порт SSH. Включите firewall и проверьте, что доступ не потерян.
  5. Установка Xray: используйте официальный скрипт установки или скрипты из проверенных репозиториев. Убедитесь, что конфигурация VLESS Reality настроена корректно.
  6. Настройка домена: используйте бесплатный домен (например, от FreeDNS) или купите собственный. Привяжите его к IP сервера.

После выполнения этих шагов вы сможете подключиться к серверу через VLESS и использовать Fragment для обхода DPI.

Устранение неполадок и проверка работоспособности

Если Fragment не работает, проверьте следующее:

  • Включена ли фрагментация в клиенте: убедитесь, что опция Fragment включена и параметры заданы корректно.
  • Поддерживает ли клиент Fragment: если нет, попробуйте другой клиент из списка поддерживаемых.
  • Правильно ли настроен сервер: проверьте, что сервер использует TLS и не блокируется DPI.
  • Попробуйте изменить размер фрагмента: иногда DPI может распознавать слишком маленькие или слишком большие фрагменты.
  • Проверьте соединение с заблокированным доменом: если узел на *.workers.dev не работает, попробуйте использовать другой домен или включить Fragment.

Для проверки работоспособности можно использовать сайты типа whoer.net или 2ip.ru. Если IP-адрес изменился на IP вашего сервера, значит VPN работает. Также проверьте доступ к заблокированным сайтам.

Если возникают проблемы с DNS-over-VLESS, убедитесь, что вы используете TProxy и что в конфигурации нет правил, блокирующих geoip:private. Также проверьте, что DNS-запросы действительно идут через прокси, используя browserleaks.com.

Вопросы и ответы

Что такое VLESS Fragment и как он помогает обходить блокировки?

VLESS Fragment — это функция, которая разбивает TLS-рукопожатие на мелкие фрагменты, чтобы обойти системы глубокого анализа пакетов (DPI). DPI часто блокирует соединения, если видит признаки прокси-трафика в первых пакетах. Фрагментация делает эти пакеты похожими на обычный TCP-трафик, что позволяет устанавливать соединение с заблокированными доменами, например *.workers.dev.

Какие клиенты поддерживают VLESS Fragment?

Поддержка Fragment есть в следующих клиентах: v2rayNG, Nekobox, Karing, v2box (Android); v2rayN, Hiddify, Karing (Windows); Karing, Hiddify Proxy & VPN, Shadowrocket, Streisand, v2box (iOS); PassWall, SSR-Plus, HomeProxy (роутеры). Клиенты без поддержки, например Clash, могут иметь ограничения при подключении к узлам на заблокированных доменах.

Как настроить Fragment в v2rayN или v2rayNG?

В v2rayN при редактировании профиля VLESS найдите раздел «Stream Settings» или «Транспорт», включите опцию Fragment и задайте параметры (размер фрагмента 1-2 байта, задержка 10-20 мс). В v2rayNG аналогично: в настройках профиля перейдите в раздел «Транспорт» и включите Fragment. Убедитесь, что функция включена, так как по умолчанию она может быть отключена.

Почему DNS-over-VLESS не работает через CDN?

DNS-over-VLESS работает через TProxy и обращается к локальному DNS-резолверу на сервере. При использовании CDN (например, Cloudflare) трафик идёт через промежуточный сервер CDN, и localhost сервера недоступен. Однако, если в dns.json добавить hosts с IP вашего VPS, схема может заработать и через CDN, но это не гарантируется.

Какие есть ограничения у DNS-over-VLESS?

Основные ограничения: не работает через CDN без дополнительных настроек, требует TProxy для перехвата DNS-трафика, не поддерживается в большинстве мобильных приложений (требуется ручное редактирование конфигов Xray), и рекомендуется только для опытных пользователей. Также все DNS-запросы будут идти через прокси, что может замедлить работу сети.

Как проверить, что DNS-запросы идут через прокси?

После настройки DNS-over-VLESS зайдите на сайт browserleaks.com или ip.me. Если DNS-запросы идут через прокси, сайт покажет DNS-сервер, расположенный в стране вашего VPS. Также можно проверить, что IP-адрес изменился на IP сервера.

Что делать, если Fragment не работает?

Проверьте, включена ли фрагментация в клиенте, поддерживает ли клиент Fragment, правильно ли настроен сервер. Попробуйте изменить размер фрагмента или задержку. Если узел на заблокированном домене не работает, попробуйте использовать другой домен или включите Fragment. Также проверьте, не отключает ли клиент Fragment автоматически при нестабильном соединении.