Настраиваем сервер и клиент XRay с XTLS-Reality без x-ui. Только разметка! Только хардкор! Не паникуем! Это проще чем вам кажется.

x-ui это панель к самому ядру xray. Так вот разработчики ядра xray просят не использовать панели 3x-ui, x-ui и тд. т.к. они не безопасны и имеют кучу дыр.

Коротко про XTLS-Reality

XTLS-Reality - это передовая технология обхода блокировок, которая маскируется под обычный TLS-трафик, делая его практически неотличимым от подключения к легитимным сайтам, например, Google. При обнаружении "неизвестного" клиента, сервер перенаправляет соединение на реальный сайт, выдавая его сертификат и данные. Это обеспечивает высокую степень защиты от активного зондирования и блокировок. XTLS-Reality обеспечивает высокую производительность и обычно используется с XTLS-Vision для создания реалистичных паттернов трафика. Главный недостаток - отсутствие поддержки websocket и, следовательно, CDN типа Cloudflare.

Установка сервера XRay

А теперь настало время все это настроить. Дано: VPS на Linux (Debian или Ubuntu, на других дистрибутивах плюс-минус то же самое) с IPv4 или IPv6-адресом.

Можно установить XRay руками:

wget https://github.com/XTLS/Xray-core/releases/download/v1.8.1/Xray-linux-64.zip mkdir /opt/xray unzip ./Xray-linux-64.zip -d /opt/xray chmod +x /opt/xray/xray nano /usr/lib/systemd/system/xray.service systemctl enable xray
[Unit] Description=Xray Service Documentation=https://github.com/xtls After=network.target nss-lookup.target [Service] User=nobody CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE NoNewPrivileges=true ExecStart=/opt/xray/xray run -config /opt/xray/config.json Restart=on-failure RestartPreventExitStatus=23 LimitNPROC=10000 LimitNOFILE=1000000 [Install] WantedBy=multi-user.target

А можно установить скриптом от разработчиков (почему-то по умолчанию он ставит старую версию 1.7.5, которая не поддерживает Reality, поэтому нужно явно указать более свежую):

bash -c "$(curl -L https://raw.githubusercontent.com/XTLS/Xray-install/046d9aa2432b3a6241d73c3684ef4e512974b594/install-release.sh)" @ install --version 1.8.1

Скрипт установит XRay и создаст для него systemd-юнит.

Настройка сервера XRay

Для настройки нам понадобится ряд параметров. Часть из них нам может сгенерировать сам XRay:

/usr/local/bin/xray uuid # /opt/xray/xray если устанавливали вручную /usr/local/bin/xray x25519 # /opt/xray/xray если устанавливали вручную

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

Еще один параметр, который нужен - short ID, он представляет собой просто шестнадцатиричное число (символы 0-9, a-g) длиной до 8 байт (16 символов) - можно набрать любую абракадабру типа "aabbccdd" или запустить

openssl rand -hex 8

А вот дальше начинается самое интересное. Нам нужно найти сайт, под который мы будем маскироваться.

Требования довольно простые:

это должен быть иностранный сервер (вне РФ), не забаненный по домену Роскомнадзором, поддерживающий подключения по TLSv1.3 и HTTP/2, имеющий заглавную страницу, которая не переадресовывает на какой-нибудь другой домен. Если совсем упарываться, то неплохо было бы если бы IP-адрес был из диапазона того же облачного хостера, что и у вас, и чтобы сервер поддерживал Online Certificate Status Protocol (OCSP). Если вы не знаете, что вся эта фигня значит - не заморачивайтесь, выбирайте что-нибудь простое, например

  • www.samsung.com:443
  • www.googletagmanager.com:443
  • www.asus.com:443
  • www.amd.com:443
  • www.cisco.com:443
  • www.microsoft.com:443
  • dl.google.com:443
  • www.linksys.com:443
  • www.nvidia.com:443и т.д.

Лучше всего выбирать что-нибудь из сети того же хостера, каким пользуетесь вы.Для этого есть специальный инструмент: https://github.com/XTLS/RealiTLScanner

Скачиваете его под Windows/Linux со страницы Releases, или собираете сами (go build).

Далее, запускаете как-то так:

./RealiTLScanner -addr IP_вашего_VPS -showFail

и ждете.

Сканер будет перебирать IP-адреса из той же подсети, что и ваш сервер, и пытаться к ним подключиться по TLS. Если он что-то найдет - вы это увидите. Пример (я сканирую рандомный IPшник):

89.116.243.206:443 TLS handshake failed: EOF 89.116.243.207:443 TLS handshake failed: EOF 89.116.243.208:443 ----- Found TLS v1.3 ALPN CN=caprover.com,O=CapRover.com,L=Vancouver,ST=British Columbia,C=CA,1.2.840.113549.1.9.1=#0c11696e666f40636170726f7665722e636f6d 89.116.243.209:443 TLS handshake failed: EOF 89.116.243.210:443 ----- Found TLS v1.3 ALPN CN=patentpath.io 89.116.243.211:443 ----- Found TLS v1.3 ALPN CN=vps3.gecon.pl 89.116.243.212:443 TLS handshake failed: EOF 89.116.243.213:443 TLS handshake failed: EOF 89.116.243.214:443 TLS handshake failed: EOF 89.116.243.215:443 TLS handshake failed: read tcp 192.168.136.132:55142->89.116.243.215:443: i/o timeout 89.116.243.216:443 ----- Found TLS v1.3 ALPN CN=localhost,OU=none,O=none,L=Sometown,ST=Someprovince,C=US,1.2.840.113549.1.9.1=#0c137765626d6173746572406c6f63616c686f7374 89.116.243.217:443 TLS handshake failed: EOF 89.116.243.218:443 TLS handshake failed: EOF 89.116.243.219:443 TLS handshake failed: EOF 89.116.243.220:443 TLS handshake failed: EOF 89.116.243.221:443 TLS handshake failed: EOF 89.116.243.222:443 ----- Found TLS v1.3 ALPN 89.116.243.223:443 ----- Found TLS v1.3 ALPN CN=milapanel.milahosting.com 89.116.243.224:443 ----- Found TLS v1.3 ALPN CN=vps-us.workx.dev 89.116.243.225:443 ----- Found TLS v1.3 ALPN CN=www.google.com 89.116.243.226:443 ----- Found TLS v1.3 ALPN CN=www.bookifynow.com 89.116.243.227:443 ----- Found TLS v1.3 ALPN CN=next.tasosvl.cc 89.116.243.228:443 TLS handshake failed: EOF 89.116.243.229:443 ----- Found TLS v1.3 ALPN CN=alpaca-dreams.com 89.116.243.230:443 TLS handshake failed: EOF

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

Сервер выбрали, настало время редактировать конфиг. Если вы ставили XRay вручную то он будет лежать в /opt/xray/config.json, если скриптом - то в /usr/local/etc/xray/config.json.

Приводим его к следующему виду:

{ "log": { "loglevel": "info" }, "routing": { "rules": [], "domainStrategy": "AsIs" }, "inbounds": [ { "port": 23, "tag": "ss", "protocol": "shadowsocks", "settings": { "method": "2022-blake3-aes-128-gcm", "password": "aaaaaaaaaaaaaaaabbbbbbbbbbbbbbbb", "network": "tcp,udp" } }, { "port": 443, "protocol": "vless", "tag": "vless_tls", "settings": { "clients": [ { "id": "4c3fe585-ac09-41df-b284-70d3fbe18884", "email": "user1@myserver", "flow": "xtls-rprx-vision" } ], "decryption": "none" }, "streamSettings": { "network": "tcp", "security": "reality", "realitySettings": { "show": false, "dest": "www.microsoft.com:443", "xver": 0, "serverNames": [ "www.microsoft.com" ], "privateKey": "GOTPj_klK7_j_IvjxiCtyBL80RYotYSOdBBBSfFOMH4", "minClientVer": "", "maxClientVer": "", "maxTimeDiff": 0, "shortIds": [ "aabbccdd" ] } }, "sniffing": { "enabled": true, "destOverride": [ "http", "tls" ] } } ], "outbounds": [ { "protocol": "freedom", "tag": "direct" }, { "protocol": "blackhole", "tag": "block" } ] }

На что обратить внимание: в "serverNames" указан домен, под сервер которого вы маскируетесь (в данном случае www.microsoft.com), "id" в секции "clients" - это тот самый UUID, что мы сгенерировали выше. "privateKey" и первый элемент в массиве "shortIds" - это приватный ключ и short ID, что мы тоже сгенерировали выше. Публичный ключ не теряйте, он будет нужен на клиенте.

В этом конфиге так же на 23 порту настроен Shadowsocks-2022, на всякий случай, вдруг пригодится. Если не надо, или хочется полной маскировки - можно удалить этот элемент из "inbounds".

Перезапускаем еще раз xray:

$ systemctl restart xray

Проверяем что все нормально запустилось:

$ journalctl -u xray

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

Настройка клиентов

Сначала Nekobox на десктопе (Windows, Linux, и есть неофициальные билды под MacOS).

Если вы раньше им не пользовались, нужно переключить его на использование движка sing-box, Preferences -> Basic Settings -> Core:

Настраиваем сервер и клиент XRay с XTLS-Reality без x-ui. Только разметка! Только хардкор! Не паникуем! Это проще чем вам кажется.

Идем в Server -> New profile и заполняем все вот так:

Настраиваем сервер и клиент XRay с XTLS-Reality без x-ui. Только разметка! Только хардкор! Не паникуем! Это проще чем вам кажется.

Address - IP-адрес вашего сервера, UUID - соответственно, UUID, SNI должен соответствовать домену, под который вы маскируетесь (один из списка "serverNames" из конфига сервера), uTLS - я выбираю Chrome (это маскировка клиента под обычный браузер), Reality Pbk - публичный ключ (не приватный, а второй, публичный), Reality Sid - shortId из конфига выше.

Сохраняем, кликаем правой кнопкой мыши на новый сервер в списке, жмем Start, и проверяем подключение выбрав там же Current Select -> URL test.

Если все нормально, то галочками "VPN Mode" или "System proxy" можно завернуть трафик всех приложений на прокси.

Настройка v2rayN под Windows аналогична, набор параметров тот же, вот скриншот (не мой, из гугла):

Настраиваем сервер и клиент XRay с XTLS-Reality без x-ui. Только разметка! Только хардкор! Не паникуем! Это проще чем вам кажется.

Автор Nekobox перестал собирать версии под macOS, поэтому я рекомендую использовать Wings X / FoXray. Настройки точно такие же.

Если вдруг вам нравятся Clash-based клиенты (например, Clash Verge под Windows, Linux, MacOS или для мобильных устройств), то нужно использовать ядро Clash.Meta и специальный конфиг для Clash. В случае с Clash Verge можно сделать так:

  • Settings -> Clash Core -> Выбрать Meta
  • Сохранить конфиг в какой-нибудь локальный файл:
mode: global mixed-port: 7890 allow-lan: false log-level: info ipv6: true secret: '' external-controller: 127.0.0.1:9090 proxies: - name: vless-reality-vision type: vless server: xxx.xx.xx.xx # ваш IP port: 443 uuid: 4c3fe585-ac09-41df-b284-70d3fbe18884 # ваш UUID network: tcp tls: true udp: true flow: xtls-rprx-vision servername: www.microsoft.com # ваш фейковый домен reality-opts: public-key: kbITklNKTdfvB6e3xy97pTV7gjl3Z3irv246oRZ5Gnk # public key short-id: aabbccdd # short ID client-fingerprint: chrome
  • Profiles -> New - Type : Local -> выбрать ваш файл и кликнуть по нему в окне Clash
  • Proxies -> выбрать ваш новый прокси на вкладке Global -> кликнуть по полю справа чтобы протестировать подключение, должно появиться значение пинга
  • Settings -> System proxy: вкл - после этого трафик всей системы пойдет через прокси. Можно использовать и TUN, но для этого надо запускать Clash Verge от рута.

Далее, мобильные клиенты. Вариант раз: в Nekobox или в v2ray кликнуть правой кнопкой мыши на ваш сервер из списка, выбрать Share -> QR code или Link, и получить ссылку или QR-код, которые потом можно отсканировать/вставить в мобильные клиенты. Либо вбить все те же данные руками, вот как это выглядит в андроидовском v2rayNG (версия из Google Play еще не обновилась и не умеет работать с Reality, скачиваем APK с Гитхаба):

Под iOS я рекомендую использовать Shadowrocket (3$) или Wings X / FoXray (он бесплатный). Настройки подключения полностью аналогичны описанному выше.

Советы бывалых

  • Очень рекомендуется настраивать на клиентах правила маршрутизации, чтобы трафик до .ru-доменов и хостов с российскими IP шел напрямую, а не через прокси (в клиентах для такого поставляется GeoIP база данных).
  • Обязательно используйте uTLS на клиентах, выставляя правильный TLS fingerprint (например, Chrome).Если при использовании XTLS вы почему-то не можете подключиться, в логах сервера видна ошибка типа "failed to use xtls-rprx-vision, found outer tls version 771", попробуйте сменить версию uTLS. У меня, например, при выборе "android" клиент не подключается, а при выборе "chrome" все окей.
  • Для увеличения производительности можно настроить на сервере Bottleneck Bandwidth и Round-trip propagation time (BBR) congestion control algorithm:echo "net.core.default_qdisc=fq" >> /etc/sysctl.confecho "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.confsysctl -p
  • Чтобы проверить, что маскировка работает как надо, добавьте IP-адрес вашего сервера и домен, под который вы маскируетесь, в hosts-файл (на Linux это /etc/hosts, на Windows это c:\windows\system32\drivers\etc\hosts), например, "38.25.63.10 www.microsoft.com", и после этого попробуйте зайти на этот адрес браузером - должна открыться настоящая страница этого домена с настоящим TLS-сертификатом:
Настраиваем сервер и клиент XRay с XTLS-Reality без x-ui. Только разметка! Только хардкор! Не паникуем! Это проще чем вам кажется.

Другой вариант: использовать CURL

curl -v --resolve www.microsoft.com:443:151.101.65.69 https://www.microsoft.com

(вместо 151.101.xx.xx должен быть IP вашего сервера)

На этом все.

44
29 комментариев

Комментарий удалён модератором

Это с каких пор у 3x-ui код закрытый?

2

Если шо я без предъяв, просто интересно
ты переписал заболоченную статью с хабра? :)

С максимально возможным объяснением что и как.
Но возможно многие просто плюнут и поставят 3x-ui

2

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

RealityScanner запускается через командную строку, а не нажатием по exe-шнику

2

Комментарий удалён модератором