Как проверить, насколько жёстко VPS-хостер блокирует WARP? И ещё про AWG и FinalMask

Прошу прощения, я к вам с новой порцией чайницких вопросов )

Ситуация такая – у меня есть российский VPS, который я использую в прокси-цепочке из двух узлов (второй за границей). На нём стоит 3X-UI, который, помимо прочего, заворачивает рунет-трафик на выход через WARP (настроено средствами панели 3X-UI).

Всё это работало какое-то время назад, а потом, после очередного переноса сервера на другой хостинг, ранее созданный в панели 3X-UI аутбаунд WARP перестал соединяться с сетью, новый тоже не создавался (панель показывала ошибки TLS Handshake). По подсказкам ИИ я вручную добавил в конфигурацию аутбаунда WARP блок параметров noise – я нигде не нашёл описания, но ИИ утверждал, что это новая функция создания шумов (или простейшей обфускации) то ли Xray, то ли WG, в общем, подобрав определённым образом параметры этого самого noise, удалось запустить WARP, который ещё какое-то время поработал.

Но недавно, после ещё двух переездов сервера на разные хостинги (я всё надеюсь подобрать баланс между ценой и качеством), обнаружилось, что WARP не работает уже вообще никак – не помог ни noise, ни параметры обфускации AWG2.0, которые ИИ мне посоветовал добавить наобум, хоть и скептически отнёсся к перспективе их поддержки ядром Xray ) Так же мы с ним пробовали настроить FinalMask, который разработчики Xray рекомендуют использовать каждый раз, когда их просят добавить поддержку AWG2.0 в ядро. Тоже так ничего в итоге и не добившись.

Вопросы:

  1. Насколько я понимаю, российские VPS-хостеры борются с использованием сетей Cloudflare, и в частности с WARP, как только могут. Причём, то ли разные хостеры борются с разной интенсивностью, то ли все постепенно наращивают интенсивность, в общем, хорошо бы уметь каким-то образом определять, насколько жёстко блокирует WARP конкретный хостер. И, поскольку я в сетевых технологиях мало понимаю, то прошу помочь с методикой – как проверить, ограничивает ли хостер (или ТСПУ) объём трафика, разрушает ли какие-нибудь пакеты, или тупо блокирует все сети Cloudflare по диапазону?

  2. Если полная блокировка диапазона, то, понятно, ловить нечего, нужно снова менять хостера и надеяться, что у нового это не так (опять же, имея под рукой методику проверки). А вот если это более тонкая цензура, то как её обойти более хитрыми средствами, чем не работающий noise? У меня была мысль поднять какой-нибудь AWG-клиент, который умеет создавать туннель с серверами Cloudflare с помощью обфускации AWG2.0 и поднимать локальный прокси (с которыми я научился связывать 3X-UI, когда WARP нужно было запускать как отдельное клиентское приложение), но я таких клиентов не нашёл ни сам, ни с помощью ИИ. Подскажите, пожалуйста, есть ли такие? Или я вообще не в ту сторону копаю? Тогда подскажите направление )

  3. FinalMask в Xray – я походил по описаниям и обсуждениям на их официальном сайте и понял, что это вроде как тоже некий механизм конечной обфускации, который может (по крайней мере, частично) работать в одностороннем порядке, без дополнительной настройки сервера (т.е. в моём случае Cloudflare), но я не нашёл никаких понятных для чайников примеров или чего-то ещё, что можно было бы попробовать применить. ИИ мне что-то напредлагал, но ничего не заработало. Здесь я тоже не нашёл ничего понятного. Подскажите, как можно его использовать в моём случае, если это вообще имеет смысл.

российские VPS-хостеры борются с использованием сетей Cloudflar

Нет, этим занимается ТСПУ.

разные хостеры борются с разной интенсивностью

Разные ТСПУ и разные конфигурации.

как проверить, ограничивает ли хостер (или ТСПУ) объём трафика, разрушает ли какие-нибудь пакеты, или тупо блокирует все сети Cloudflare по диапазону?

Можно проверить руками, собрав бамп трафика. Каких-то публичных чекеров по проверке доступности WARP я не видел.

работать в одностороннем порядке

finalmask требует обязательного соответствия настроек клиента и сервера. Как иначе сервер поймет, что это вы ему шум отправляете, а не полезные данные и vice-versa?

Я поставил wireproxy-awg на сервер и все нормально работает (cloudcore)

Я про это спросил у ИИ первым делом ) Вот что он ответил (я понимаю, что он не дурак приврать, но ведь разработчики Xray и правда советуют finalmask для Cloudflare, где сервер не настроить):

Спойлер

так почему же тогда разработчики Xray утверждают, что finalmask можно использовать именно для AWG (то есть, и для warp, на стороне которого никаких настроек обфускации не добавить)?

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

Когда в тикетах на GitHub авторы Xray отвечают: «Используйте FinalMask для имитации AmneziaWG (включая WARP)», они имеют в виду одну фундаментальную разницу между двумя режимами UDP-маскировки.

Дело в том, что внутри finalmask для UDP есть два принципиально разных режима работы, которые зависят от одного-единственного параметра — mode.

Режим №1: mode: "opaque" (Непрозрачный — то, о чем говорит документация)

Это тот самый режим, который описан в официальной доке XTLS. Он создан для связки «Клиент Xray ➔ Сервер Xray».
В этом режиме finalmask работает как полноценный прокси-протокол: он берет пакет, полностью зашифровывает его, дописывает в начало свой собственный уникальный префикс (заголовок) и отправляет.

Естественно, если отправить такой пакет на оригинальный сервер Cloudflare, тот увидит левый заголовок, не сможет его расшифровать и сбросит. Тут вы абсолютно правы — этот режим с WARP несовместим.

Режим №2: mode: "random" (Случайный мусор — то, что нужно для WARP!)

А вот этот режим был добавлен в Xray-core специально для того, чтобы имитировать поведение AmneziaWG/генераторов шума без изменения структуры оригинальных пакетов.

Когда вы выставляете "mode": "random", finalmask меняет свою логику кардинальным образом:

  1. Он ВТЕМНУЮ берет оригинальный пакет WireGuard, который сгенерировал аутбаунд Xray для Cloudflare.

  2. Он НЕ трогает его структуру, НЕ добавляет к нему никаких префиксов и заголовков. Пакет с данными летит в своем первозданном, ванильном виде.

  3. Но МЕЖДУ этими полезными пакетами FinalMask начинает хаотично генерировать и выстреливать в сторону Cloudflare абсолютно левые, мусорные UDP-пакеты случайного размера (size: "40-100") и с кастомными задержками (delay: "10-30").

И как это решает проблему с WARP?

  • Для ТСПУ (Цензора): Системы DPI анализируют поток во времени. Они видят не просто одиночный пакет WireGuard, а сплошной поток UDP-пакетов, которые постоянно меняют свой размер и летят со случайными интервалами. С точки зрения ТСПУ, этот трафик полностью теряет уникальный «почерк» WireGuard (тайминги хендшейков, фиксированные размеры стартовых пакетов). Для цензора это выглядит как хаотичный UDP-шум (например, онлайн-игра или поломанный стрим). Блокировка по паттерну не срабатывает.

  • Для Cloudflare WARP: На эндпоинт Cloudflare прилетает эта смесь. Полезные пакеты WireGuard сервер успешно расшифровывает и пускает в работу. А когда ему прилетают фейковые мусорные пакеты, сгенерированные FinalMask, Cloudflare сверяет их криптографическую подпись, видит, что это невалидный мусор, и просто молча их дропает (удаляет). Для него это выглядит как обычный сетевой джиттер или потеря пакетов в интернетах.

Про ТСПУ понял, спасибо, буду искать, что такое бамп трафика, как его делать и смотреть )

Это как раз туннель до Cloudlare + локальный прокси?

видимо, у меня он как аутбаунд в xray прописан и всё ворк

Зачем выводить с российского VPS трафик на WARP? WARP в России блокируют. Ходите на российские сайты напрямую через домашнего провайдера или через российский VPS. Для всего остального лучше сделать каскад: VPS в РФ → VPS за границей → WARP. В такой схеме WARP поможет защитить от обнаружения IP адрес VPS за границей и это снизит вероятность его блокировки.

Спасибо, тоже поизучаю

Согласен, что так правильнее, но моя ситуация осложняется тем, что я самый продвинутый чайник в семье и на работе, поэтому раздаю свой конфиг двум десяткам родственников и знакомых, за всеми клиентскими программами которых не уследишь ) А напрямую с российского VPS я не хочу выпускать трафик по тем же причинам, что и с иностранного – российский не так жалко если спалят, но всё же жалко

Ну так вот. Толку от вашего мусора, если вы явно орете ТСПУ что гоняете WG трафик?

То есть, в этой части ИИ всё же присочинил?

Нет, это зависит от конкретно используемых параметров в FinalMask. Аналог Jc, Jmin, Jmax и I1 от AWG можно реализовать и без поддержки со стороны сервера.

        "finalmask": {
          "udp": [
            {
              "type": "noise",
              "settings": {
                "noise": [
                  {
                    "type": "hex",
                    "packet": "c90000000101ee0000299ae5fdb4796491777900065589fc7d9a142e352296fc534dfe87cfa55b60f6f32566d08321fd7380ad",
                    "delay": "5-10"
                  },
                  {
                    "rand": "40-70",
                    "delay": "5-15"
                  },
                  {
                    "rand": "40-70",
                    "delay": "5-15"
                  },
                  {
                    "rand": "40-70",
                    "delay": "5-15"
                  },
                  {
                    "rand": "40-70",
                    "delay": "5-15"
                  }
                ]
              }
            }
          ]
        }

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

А куда нужно вставлять этот блок? Прямо в аутбаунд для WARP, или в какой-то другой части конфига?

Вот, например, приблизительный конфиг аутбаунда, куда именно добавлять блок finalmask, если в него?

{
  "protocol": "wireguard",
  "settings": {
    "mtu": 1280,
    "secretKey": "xxx",
    "address": [
      "172.16.0.2/32"
    ],
    "workers": 2,
    "domainStrategy": "ForceIPv4",
    "reserved": [
      243,
      9,
      20
    ],
    "peers": [
      {
        "publicKey": "xxx",
        "allowedIPs": [
          "0.0.0.0/0"
        ],
        "endpoint": "engage.cloudflareclient.com:2408",
        "keepAlive": 15
      }
    ],
    "noKernelTun": true
  },
  "tag": "WARP"
}

У меня сделано так: VPS: РФ => Германия => Молдова

Молдавский ip давно уже в блоке. Можно конечно было обойтись 2 серверами, но у меня молдавский уникален - гугл думает, что он российский и через него у меня ютуб без рекламы. А убрать немецкий не могу, т.к. молдавский с тарифом без возможности взять дополнительный ip и соответственно подключиться к нему с российского никак

Всё верно, однако, по моим представлениям, если нигде (ни в РФ, ни за границей) не выпускать трафик через прямой IP VPS, это тоже достаточно гигиенично ) Только вот пока у меня эта общая схема цифровой гигиены упёрлась в WARP, вот и хочется попробовать её починить, чтобы не возиться со всеми телефонами и компьютерами

Если везде Xray, можно попробовать настроить реверс-прокси – чтобы молдавский сам подключался к российскому, а тот потом через него гнал трафик. Или сейчас уже, если IP в блоке, то и с него подключения тоже блочат, не только на него?

В streamSettings аутбаунда, лучше прочитайте документацию, там всё понятно написано.

Но это просто пример был, не факт, что сработает.

Понял, спасибо за ещё одно направление для копания )

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

С российского VPS прямо на WARP, скорее всего, уже не получиться, т.к. сервера Cloudflare здесь под блокировкой и судя по сегодняшним новостям она будет только жёстче.

А попробуйте поменять на "endpoint": "162.159.192.1:500"

на "allowed_ips": ["0.0.0.0/0", "::/0"],

С помощью zapret/AWG/описанного выше аналога AWG с помощью FinalMask в Xray всё ещё можно.