Где-то можно найти инструкцию по xhttp для дебилов?

Всем привет.

В контексте начавшихся блокировок Reality (которым я, впрочем, уже много лет не пользуюсь) решил попробовать ещё раз озаботиться попыткой настроить xhttp в панели 3xui.

И, как и в прошлые разы, не могу найти нигде ни одного поста в духе “тыкни сюда и сюда, а здесь введи свой домен” — везде только ссылки на документацию, описание принципов работы каждой опции и каждого поля, какие-то обсуждения что и где поменять, потому что текущий конфиг не работает (соседний тред).

В общем вопрос по сабжу.

А еще, как мне кажется что все сообщество домохозяек типа меня было бы очень благодарно, если бы кто-то написал доступно такую инструкцию и ее было бы легко найти — от аренды впс до настройки cloudlfare и самого xray с xhttp. Ведь рисков как будто минимум — если про reality писали из каждого утюга на протяжении многих лет, а до блокировки добрались только сейчас — то xhttp, если я правильно понимаю (хоть в нем и может быть зашит reality) даже при условии доступности и гласности годика 3 ещё поживет.

Спасибо!)

Перед тем как лишний раз паниковать - сделайте ряд простых проверок.

  1. Убедитесь, что у вас нормально настроена серверная часть(нет дурацких ошибок, навроде маскировки под дефолтный яху или под тачку, прячущуюся за CF.
  2. Убедитесь, что сервер, под который вы маскируетесь, в моменты плохой работы VLESS нормально доступен с хоста VPS(может там ночные работы и сайт погашен)
  3. Убедитесь, что живительный ребут был произведён как на стороне сервера, так и клиента и это не привело к улучшению ситуации
    Ну и т.п. Очень часто бывает так, что проблемы с VLESS никак не связаны с блокировками. Я несколько раз сталкивался с тем, что в мажорных стабильных релизах ломалась часть функционала ядра xray, и потом приходилось долго разгадывать, почему не работает то, что работало.

А так, если уже есть настроенное reality подключение - проще всего к нему ляпнуть xhttp фоллбэк. Если на примере той же 3x-ui, то

  1. Создаём новый инбаунд. В transport выбираем xhttp, в listen пишем какой-нибудь сокет (@что-то) либо хост:порт. Всё остальное можно оставить по умолчанию
  2. В ранее созданном инбаунде прописываем фоллбэком тот сокет, который слушает свежесозданный xhttp инбаунд
  3. Добавляем в новый инбаунд клиентов так, чтобы id совпадали со старыми, уже существующими в reality инбаунде клиентами
    Всё, с этого момента оно должно работать и подключаться. В конфиге клиента соотв. просто меняем tcp на xhttp, прописываем path как / и очищаем flow.
    Впрочем, толку от этого не очень много, т.к. если я правильно понял, xhttp через одно подключение не решает проблему tls in tls. Но может я понял неверно.

XHTTP не панацея. К тому же у ряда CDN на мобильном интернете стоит блок 16кб. У меня например CF не работает ни на МТС ни на Билайне. И это в мск и области. Чего уж говорить про регионы, где фильтруют намного жёстче. Соответственно и XHTTP на мобилке не работает. А с РФ CDN’ами там другие проблемы, или фильтруют или они дорогие.

Настройка у него не самая простая, к тому же охватывает сразу несколько тем, Нужно уметь (и самое главное понимать), что и зачем конкретно вы делаете на Nginx/Caddy/Apache/etc, на самом CDN и на Xray. Это большой гемор, за совсем небольшой выхлоп и низкий шанс работы на мобилках при этом.

А если без CDN, тогда куда более целесообразней и проще будет настроить любой другой транспорт. Или же можно вообще перейти на Sing-Box и поднять Hysteria2. Настраивается элементарно и отлично работает на мобильном интернете.

hysteria2 очень плохо работает на моб инете, у меня скорость 1мбит (в одном потоке, это если не указывать никакие параметры), можно указать 5мбит в конфиге и тогда будет 5мбит, но не всегда сигнал позволяет такую скорость, и тогда опять же оно начинает работать плохо. xhttp (без cdn и т.п., только xray) или vless+tls+grpc гораздо лучше работает.

Возможно. Допускаю, что в регионах всё сложнее. Касательно мск и области очень хорошо работает hy2, даже сам удивился. Ограничения скорости на клиенте не выставлял, только на сервере. При скорости интернета 30-40 мегабит LTE, через hy2 примерно 30-35, что не сильно плохо. Клиент v2rayNG.

дело не в блокировках, это такой congestion control у hysteria, по тестам с netem он даже близко не стоит с kernel bbr, минимальный jitter вызывает падение скорости. уж каким образом у тебя выдает полную скорость я не знаю, возможно идеальная связь с базовой станцией

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

есть и другие варианты происходящего, не исключающие друг друга. а) реальные проблемы у хостера (хотя он отнекивается). б) душение популярных хостеров. в) блок (возможно, вызванный багом на стороне тспу) множественных соединений. г) блок по совокупности факторов (ip хостинга, порт, sni, фингерпринт). д) блок влеса (пока что самый маловероятный сценарий).

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

Спасибо! Заранее прошу прощения, если вопросы ниже тупые. Чуток изменю вашу нумерацию, надеюсь будет понятно какой вопрос к чему относится.

1.1. Что есть тачка? Сам я вообще сейчас использую просто tls + fallback на свой сайт. Пробовал, к слову, включать проксирование на CF - почему-то к серверу после этого хрен подключишься, так что по дефолту он у меня только домен резолвит и не отсвечивает. (P.S. Да, я вижу ниже коммент, что xhttp видимо не подружится с CF, но надо с чего-то начинать)

1.3. Это - да. У меня после любого ребута сервера почему-то приходится пару раз перезапускать xray в панели, причем такая проблема с клиента только у меня самого, у знакомых все норм.

2.2. Тут не понял. Ранее созданный инбаунд - это Reality с транспортом TCP? Разве fallback работает не при несоблюдении некого условия, для выдачи заглушки условному PKH? Ну или для каких-то еще перебросок протоколов в случае несоответствия. Не понял в данном случае логику. Зачем нужен первый уровень до fallback и что на нем?

Спасибо!

Про 16кб - это случаем не та же история, почему у меня tls+fallback не работают, если я оставляю проксирование CF включенным?

По поводу CDN, nginx и т.д. - вот да, в этом-то и проблема) Сам инбаунд как будто бы можно так или иначе методом тыка было бы завести.

некоторые хостеры решили этим воспользоваться

а в чем смысл? положить 90% юзеров xray, чтобы не отравляли им адреса или зачем?

Включите проксирование на CF и откройте свой сайт через мобильный интернет. Если сайт не откроется - значит XHTTP через CDN 100% работать не будет. Только без CDN. А если без CDN, тогда придётся выключить XTLS-Vision, а если выключить Vision, тогда будет TLS-inside-TLS.

Я не знаю, триггерятся ли коробки ркн на опсосах на TLS-inside-TLS и проверять не хочу, как по мне лучше всего просто обычный TCP+TLS с Vision со своим сайтом без reality. Плюсом ещё будет необязательное использование TLS1.3, который даже если и забанят, то 1.2 будет работать. Чтобы банили TLS1.2 я не слышал пока.

XHTTP хорош там, где цензорам не плевать на сопутствующий ущерб и они не будут банить все CDN’ы. Но это не про нашу страну к сожалению.

Блок 16кб можно ещё тут проверить https://hyperion-cs.github.io/dpi-checkers/ru/tcp-16-20/

не будет.

ЗЫ а почему хистериа2 вообще работает еще? она же на quic, а он мало где вообще работает у нас. нет? А если использовать обфускацию,то получаем ту же проблему ,что с шэдоусоксом- для цензора это выглядит как непонятное нечто и соотв блокировку по протоколам не переживет.

Без понятия. QUIC отлично работает и на мобильном и на домашнем интернете. Во всяком случае в мск и области. Как обстоят дела в регионах - не знаю. Знаю, что блочат там куда агрессивнее, возможно там и не работает. У меня чистый QUIC UDP/443 без обфускатора. На домашнем интернете на нём вообще всё просто летает у меня, на мобильном похуже и раз на раз не приходится, но в целом тоже хорошо. Как выше писали 1мб у меня лично ни разу не было.

на ютубе по запросу xhttp среди первых же 3 результатов есть ровно то, что вас интересует

Возвращаясь к теме нынешних блокировок, есть ли в этом такой уж смысл? Ведь XHTTP разрабатывался для работы с CDN, а они в наших реалиях не то что бы актуальны…

Насколько я понял (просьба поправить, сам я в новичок в таких делах, как и многие тут), нужно смотреть в сторону:

  1. Понижения TLS с 1.3 до 1.2 (но тут возникает проблема в лице TLS-in-TLS из-за отключения Reality, который зависит от TLS 1.3);
  2. Снижению количества подключений / запросов (?) (тут по идее мультиплексирование должно помочь, но оно не со всем работает или же распределению потоков трафика in / out на разные VPS);
  3. Отключению SNI и / или uTLS (…опять же вопрос насчёт возможного повышения вероятности демаскировки сервера, с его дальнейшей блокировкой?)

Случайно наткнулся на вот такое решение.

Как я понял из описания, это 3xui напичканная всем чем можно + Nginx + HTML шаблоны. Ставится одним скриптом. После установки сразу генерит несколько разных комбинаций. Умеет XHTTP через CDN и без него и ещё много чего. Может кому-то будет полезно. Экспериментируйте.

нет, нет и еще раз нет.

XHTTP не обязательно использовать с CDN, он и без них прекрасно работает и имеет ряд преимуществ.
а стоит ли его использовать в каждой конкретной ситуации для каждой конкретной цели - это уже тема индивидуальная.

Reality (который зависит от TLS 1.3) не имеет никакого отношения к обходу проблемы TLS-in-TLS. Для борьбы TLS-in-TLS существует Vision.

А вот мультиплексирование как раз не работает с Vision (не Reality). Но мультиплексирование само по себе затрудняет детектирование tls-in-tls. А если нужно распределение трафика in-out - то это как раз к XHTTP.

А вот тут не угадать, возможны очень разные варианты. В какую сторону пойдет РКН - мы пока не знаем.

Комрады привет! У меня связка Xray+Marzban. Как добавить xhttp, gprc? Пока не нашёл гайда именно под это, Сейчас нормально работает стандартный TCP+reality. Есть домен, заходя на который попадаю в панель Марзбан. Веб-сервер Caddy. Мне всё это помогали за ручку настроить. Почти год работает ок, но в свете новостей с блоком vless, хочу предусмотрительно настроить запасные варианты.

Гляньте плиз где тут ошибки: в инбаундах, в Caddy или еще где. Куда копать? Насколько я понимаю, соединяться с VPS по любому порту, кроме 443 это палево, поэтому по совету чатжпт прописали в Caddy маршрутизацию 443 порта на внутренние порты под каждый инбаунд соответственно. Чёт мне кажется тут проблема, но я профан и не знаю как ее решить. А чатжпт считает что все ок, отступы и синтаксис тоже проверяли.

Вот конфиг Марзбана.(одновременно вставить “как есть” и спрятать в спойлер как я понял нельзя на форуме. Поэтому так.

{
  "log": {
    "loglevel": "warning"
  },
  "routing": {
    "rules": [
      {
        "ip": [
          "geoip:private"
        ],
        "outboundTag": "BLOCK",
        "type": "field"
      },
      {
        "type": "field",
        "outboundTag": "WARP",
        "domain": [
          "geosite:spotify"
        ]
      }
    ]
  },
  "inbounds": [
    {
      "tag": "VLESS + TCP + REALITY",
      "listen": "0.0.0.0",
      "port": 443,
      "protocol": "vless",
      "settings": {
        "clients": [],
        "decryption": "none"
      },
      "streamSettings": {
        "network": "tcp",
        "tcpSettings": {},
        "security": "reality",
        "realitySettings": {
          "show": false,
          "dest": "127.0.0.1:20000",
          "xver": 0,
          "serverNames": [
            "мой домен рабочий"
          ],
          "privateKey": "****",
          "publicKey": "*****",
          "shortIds": [
            "******"
          ]
        }
      },
      "sniffing": {
        "enabled": true,
        "routeOnly": true,
        "destOverride": [
          "http",
          "tls"
        ]
      }
    },
    {
      "tag": "VLESS XHTTP REALITY",
      "listen": "0.0.0.0",
      "port": 1443,
      "protocol": "vless",
      "settings": {
        "clients": [],
        "decryption": "none"
      },
      "streamSettings": {
        "network": "xhttp",
        "xhttpSettings": {
          "mode": "auto"
        },
        "security": "reality",
        "realitySettings": {
          "show": false,
          "dest": "127.0.0.1:20000",
          "xver": 0,
          "serverNames": [
            "мой домен"
          ],
          "privateKey": "***",
          "SpiderX": "/",
          "shortIds": [
            "****"
          ]
        }
      },
      "sniffing": {
        "enabled": true,
        "destOverride": [
          "http",
          "tls",
          "quic"
        ]
      }
    },
    {
      "tag": "VLESS GRPC REALITY",
      "listen": "0.0.0.0",
      "port": 2443,
      "protocol": "vless",
      "settings": {
        "clients": [],
        "decryption": "none"
      },
      "streamSettings": {
        "network": "grpc",
        "grpcSettings": {
          "serviceName": "grpc-service"
        },
        "security": "reality",
        "realitySettings": {
          "show": false,
          "dest": "127.0.0.1:20000",
          "xver": 0,
          "serverNames": [
            "мой домен"
          ],
          "privateKey": "***",
          "SpiderX": "/grpc",
          "shortIds": [
            "*****"
          ]
        }
      },
      "sniffing": {
        "enabled": true,
        "destOverride": [
          "http",
          "tls",
          "quic"
        ]
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",
      "tag": "DIRECT",
      "settings": {
        "domainStrategy": "ForceIPv4"
      }
    },
    {
      "protocol": "blackhole",
      "tag": "BLOCK"
    },
    {
      "tag": "WARP",
      "protocol": "socks",
      "settings": {
        "servers": [
          {
            "address": "127.0.0.1",
            "port": 30000,
            "users": []
          }
        ]
      }
    }
  ]
}

Вот конфиг Caddy

{
        https_port 20000
        default_bind 127.0.0.1
        servers {
                listener_wrappers {
                        proxy_protocol {
                                allow 127.0.0.1/32
                        }
                        tls
                }
        }
        auto_https disable_redirects
}
922025.xyz {
        @marzban expression path('/marzban/*') || path('/subscription/*') || path('/api/*') || path('/docs/*')
        handle @marzban {
                reverse_proxy 127.0.0.1:8000
        }

        @reality_tcp {
                protocol tls
        }
        reverse_proxy @reality_tcp localhost:443

        @reality_xhttp {
                path /xhttp*
        }
        reverse_proxy @reality_xhttp localhost:1443 {
                header_up Host {host}
                header_up X-Real-IP {remote_host}
        }

        @reality_grpc {
                protocol grpc
                path /grpc*
        }
        reverse_proxy @reality_grpc localhost:2443 {
                header_up grpc-timeout 30s
                header_up grpc-encoding gzip
        }
        }

        root * /var/www/caddy
        file_server
        redir /index.html /
        log {
                output file /var/lib/caddy/access.log {
                        roll_size 100mb
                        roll_keep 5
                }
        }
}

https://ip_мой_vps {
        tls internal
        respond * 204
}

:80 {
        bind 0.0.0.0
        respond * 204
}

http://мой домен, http://мой домен {
        bind 0.0.0.0
        redir https://мой домен{uri} permanent
}

https://мой домен{
        redir https://мой домен/var/www/caddy{uri} permanent
}

После всех этих движений перезагружал Докер с Марзом, и Caddy. Далее в Марзе создал два новых тестовых юзера, для который оставил только по одной галке инбаунда с xhttp, и отдельно grpc. Типо вот так:

Пробую в разынех клиентах добавлять эти подписки по очереди. И ни один не работает. Пробовал: Prizrak-Box, Clash-verge-rev, V2RayN, Neboray. Сам я обычно пользуюсь только первыми двумя. Клиенты подписку добавляют и в названиях прокси видно “xhttp”, “grpc”. Включаю хоть Тюн, хоть Систем Прокси - не работает инет вообще. В логах ошибки соединения и таймацты пишет. До сервера пинг не показывает.
При этом всем старая подписка с TCP-Reality работает нормально. Версии Xray v25.3.31, Marzban 0.8.4, то есть все последнее и эти траснпорты полностью должны поддерживать.

Куда копать, что не так?

да вроде нормально, еще никогда проблем с этим небыло

Если вы хотите подключаться только на 443 порт, то оно в таком виде у вас вообще работать не может и не будет. У вас и основной inbound на 443 порту, и второстепенные (на 1443 и 2443) используют Reality. Caddy через себя Reality не пропустит. Я даже больше скажу, соединения, приходящие от Caddy обратно в XRay уже будут без TLS, поэтому там не только Reality не должно быть, но и вообще TLS.