xHTTP + Reality + Steal Oneself. Возможно ли?

Что-ж, дошли руки до steal oneself. Если с TCP транспортом проблем не возникло и оно спокойно висит на 443 порту, то при попытке поднять xHTTP на 8443 порту с таргетом 127.0.0.1:5630 и своим SNI – тишина, и ничего не идет. Если же воткнуть сторонний SNI и Target, то все работает как обычно. Может я что-то забыл вписать в Nginx, или просто неправильно настроил?

Собственно, сам Nginx конфиг.

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80;
        listen       [::]:80;
        server_name  redacted;
        root         /usr/share/nginx/html;

        include /etc/nginx/default.d/*.conf;

        error_page 404 /404.html;
	 location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }


    server {
        listen       127.0.0.1:5630 ssl http2;
 #      listen       [::1]:5630 ssl http2;
        server_name  redacted;
        root         /usr/share/nginx/html;

        ssl_certificate "redacted";
        ssl_certificate_key "redacted";
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers PROFILE=SYSTEM;
        ssl_prefer_server_ciphers on;

        include /etc/nginx/default.d/*.conf;

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

}

Есть ли вариант дать Nginx слушать на еще одном порту, и уже его использовать в таргете xHTTP?

У xhttp нет фолбэка, клиент лезет на сайт ваш, а nginx уже решает - показать сайт или перекинуть на xray. Где-то видел xhttp и reality на одном сервере, там разделение было по домену, типа qq.example.com - reality, bb.exmaple.com - xhttp. Ставьте nginx спереди, xray за ним

Случаем не это? Почитал, и там xHTTP без Reality, используется параметр Security с TLS. Хотелось бы именно Reality. Или xHTTP с параметром Security работает исключительно с TLS (опять же, при условии что мы используем steal oneself)?

А зачем вам reality, если маскируетесь под себя же?

Нет, на гитхабе видел. В моем понимании reality нужна только если воруешь чужой домен.

Собственно я сам не проверял, что будет, если поставить “security”: “reality” в конфиге сервера. Но как будто это не нужно. Те примеры, что я находил с Xhttp reality, были steal others. Те, что были steal oneself - там не было вообще на стороне сервера параметров реалити, да и зачем они, если вы шифруетесь своими сертификатами, а не private/public key как в реалити?

Достаточно много кто говорит о том, что Reality хорошо маскирует трафик, чем TLS. Собственно, отсюда и причина. Если это не так, и лучше выбрать TLS – буду признателен.

Поэтому я и спросил зачем он вам) Посмотрите в теме про тестирование xhttp конфиги. В вашем я вообще не увидел как передается трафик от nginx до xray.

Брал отсюда конфиг Nginx за основу.

ну у вас по факту будет шифрование как на обычном сайте, nginx же будет впереди стоять. Зачем вам что-то там маскировать да и что именно вы хотите маскировать? Все данные внутри https будет, их никто не увидит

https://github.com/XTLS/Xray-examples/tree/main/VLESS-XHTTP3-Nginx тут посмотрите

там есть L7 роутинг

    # Обработка запроса к /panelpath/
    location /panelpath/ {
        proxy_pass http://127.0.0.1:18443;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

Проверьте есть ли что-то похожее у вас. Как будто бы нет.

UPD. Тут про панель, но суть та же. Nginx должен знать куда проксировать трафик до xray

Да, нету. Тогда посмотрю еще что можно сделать. Либо же просто поставлю TLS, как посоветовали.

да, на стороне клиента security = tls и обязательно укажите fingerprint, чтобы не спались стек go.

"streamSettings": {
    "network": "xhttp",
    "security": "tls",
    "tlsSettings": {
        "serverName": "ваш домен",
        "fingerprint": "chrome"
    },
}

Xray-examples/VLESS-XHTTP-REALITY/steal_oneself at main · chika0801/Xray-examples · GitHub, посмотрите данный конфиг, должно сработать

Позвольте вклиниться в актуальную и для меня проблему. Нахожусь в поиске инструкции как настроить подобное, и попался вот такой скрипт.

Автором заявляется, что один из созданных inbound будет:

vless XHTTP reality EXTRA на 443 порту.

Но я смотрю и как будто нет там selfsteal… Товарищи, подскажите, верный ли там конфиг xray и nginx для selfsteal с xHTTP и Reality ?

Не существует какого-то единственно верного конфига на все случаи жизни. Читайте форум, вникайте, закидывайте непонятное в ИИ. Берите конфиги из соседних тем, пробуйте. Учитывая условия, никто сейчас в открытую не будет писать подробных инструкций как за 5 минут сделать хорошо. Увы. А тот скрипт… Ну хз хз. Зависит от уровня вашего доверия к автору. Вообще запускать левые скрипты в своем окружении - моветон.

смотри конфиги в этой теме там все есть и даже больше чем нужно как по мне

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

Люди слабо понимают, о чем говорят. Единственная разница между Reality и простым TLS:

  1. то что Reality позволяет маскироваться под чужой домен, но у вас steal-from-yourself и вам это не надо
  2. то что Reality обеспечивает правильный и валидный фингерпринт сервера, но если у вас XHTTP/gRPC вы можете добиться ровно того же самого, поставив XRay за реальным веб-сервером типа Nginx или Caddy

сайт-оболко под который я маскировался в Reality - заблокировал мой сервер в Амстердаме, всё работало с середины января. Оказывается и так бывает
curl: (7) Failed to connect to w***.com port 443 after 6 ms: Couldn't connect to server
Ну и в браузере с впн от туда будет сразу w***.com неожиданно разорвал соединение

С других мест работает и с другого сервера работает мт-прото с фейком на это же немецкое облако.

Просто в тот момент думал, что очень подозрительно будет если я подниму сайт-визитку, а там 400 гигабайт в месяц гноиться