Обновить

Обход блокировок: настройка сервера XRay для Shadowsocks-2022 и VLESS с XTLS-Vision, Websockets и фейковым веб-сайтом

Уровень сложностиСредний
Время на прочтение14 мин
Количество просмотров248K

Статья опубликована под лицензией Creative Commons BY-NC-SA.

Предыдущие статьи серии:

«Современные технологии обхода блокировок: V2Ray, XRay, XTLS, Hysteria и все‑все‑все»

«Программы‑клиенты для протоколов недетектируемого обхода блокировок сайтов: V2Ray/XRay, Clash, Sing‑Box, и другие»

С протоколами разобрались, с клиентами разобрались, теперь наконец‑то настало время рассказать о том, как же настроить свой личный прокси‑сервер с современными протоколами для обхода блокировок. Мы будем настраивать сервер на базе XRay (который является форком известного V2Ray, и еще я немного упомяну Sing‑Box) с протоколами Shadowsocks-2022 и VLESS с транспортом XTLS‑Vision и фейковым веб‑сайтом для защиты от выявления. И в качестве запасного варианта на том же сервере мы настроим fallback на VLESS+Websockets, чтобы была возможность работать через CDN типа Cloudflare, если вдруг IP-адрес вашего сервера попадет под блокировку. В конце я приведу настройки десктопных и мобильных клиентов для подключения ко всему этому.

Поехали.

Настройку буду описывать под Debian или Ubuntu Linux. Если у вас на VPS стоит другой дистрибутив, то там будет примерно все то же самое, хотя некоторые команды и названия пакетов могут отличаться.

Итак, допустим у нас уже есть VPS с Debian или Ubuntu в какой-нибудь заморской юрисдикции, у него есть IP-адрес, на нем настроен SSH и вообще все пока что неплохо. И еще у вас должен быть какой-нибудь домен, не обязательно платный (хотя сейчас по акциям можно зарегистрировать домен в какой-нибудь не очень популярной зоне всего за доллар-два в год), подойдет даже DynDNS. Если чего-то из вышеописанного у вас нет, советую ознакомиться этой и этой статьей, там в начале описывается базовая установка и настройка VPS с Linux и регистрация бесплатного домена через DynDNS. Ну а мы идем дальше.

Первый вариант настройки я приведу для "пустого сервера" - это если на вашем сервере нет никаких других сервисов (но потом можно будет добавить еще и веб-сайт, да). Во второй половине статьи я расскажу, как настроить XRay когда у вас на машине уже крутится веб-сервер и вы не хотите лишний раз трогать его конфигурацию. Третий вариант будет с Docker для самых маленьких.

Вариант первый, полный, подробный

Разработчики XRay подготовили скрипт, который автоматически скачивает XRay под используемую систему и создает systemd-юнит (спасибо @alegz81 что напомнил): https://github.com/XTLS/Xray-install

Устанавливается одной длинной командой

$ bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install

Единственное различие от описанного в статье при конфигурации будет в том, что конфиги XRay будут лежать не в /opt/xray, а в /usr/local/etc/xray/.

Либо же можем установить все ручками.

Идем вот сюда: https://github.com/XTLS/Xray-core/releases и скачиваем самый свежий билд XRay-core:

$ wget https://github.com/XTLS/Xray-core/releases/download/v1.8.0/Xray-linux-64.zip

Cоздаем директорию, распаковываем и делаем файл исполняемым (он поставляется в .zip-архиве, поэтому разрешения при упаковке-распаковке теряются):

$ mkdir /opt/xray
$ unzip ./Xray-linux-64.zip -d /opt/xray
$ chmod +x /opt/xray/xray

Далее создадим systemd-юнит и вставим туда следущий текст (я использую nano, вы, понятное дело, можете использовать vi и вообще все что угодно):

$ nano /usr/lib/systemd/system/xray.service
[Unit]
Description=XRay

[Service]
Type=simple
Restart=on-failure
RestartSec=30
WorkingDirectory=/opt/xray
ExecStart=/opt/xray/xray run -c /opt/xray/config.json

[Install]
WantedBy=multi-user.target
$ systemctl daemon-reload
$ systemctl enable xray

Обратите внимание - в данном случае xray запустится от пользователя root. Это не очень хорошо в плане безопасности, я сделал это так в примере для упрощения мануала, но по-хорошему нужно создать для xray отдельного пользователя, запускать его от него, не забыть выставить ему права для чтения на директории и файлы от certbot/letsencrypt (об этом чуть дальше), и чтобы была возможность повесить сервер на порт 443 или другие <1000, выставить специальную опцию на бинарник/процесс.

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

Нам будут нужны TLS-сертификаты.

Устанавливаем certbot и запрашиваем сертификат для нашего домена (например, example.com):

$ apt install certbot
$ certbot certonly --standalone --preferred-challenges http -d example.com

Если вам нужно иметь два домена или домен и поддомен (например, один будет доступен напрямую, другой через CDN), то можно указать ещё один аргумент -d в этой команде и у вас будет сертификат сразу для двух доменов. А ещё оно поддерживает wildcards.

Certbot спросит ваш емайл на всякий случай, спросит согласны ли вы с правилами, запросит сертификат от LetsEncrypt, положит его в папочку /etc/letsencrypt и создаст правило, чтобы он обновлялся каждые 3 месяца. При каждом обновлении сертификата нужно перезапускать XRay-сервер, давайте попросим certbot делать это автоматически:

$ nano /etc/letsencrypt/renewal/example.com.conf

и там в конец добавим строку

renew_hook = systemctl reload xray

Теперь переходим к самому интересному. Создаем и редактируем конфиг:

$ nano /opt/xray/config.json # или в /usr/local/etc/xray/ в случае использования скрипта
{
"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": "7957c33c-d9ca-11ed-afa1-0242ac120002",
"email": "user1@myserver",
"flow": "xtls-rprx-vision"
}
],
"decryption": "none",
"fallbacks": [
{
"path": "/myverysecretpath",
"dest": "@vless-ws"
},
{
"dest": "8080"
}
]
},
"streamSettings": {
"network": "tcp",
"security": "tls",
"tlsSettings": {
"alpn": [
"http/1.1",
"h2"
],
"certificates": [
{
"certificateFile": "/etc/letsencrypt/live/example.com/fullchain.pem",
"keyFile": "/etc/letsencrypt/live/example.com/privkey.pem"
}
]
}
},
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls"
]
}
},
{
"listen": "@vless-ws",
"protocol": "vless",
"tag": "vless_ws",
"settings": {
"clients": [
{
"id": "7957c33c-d9ca-11ed-afa1-0242ac120002",
"email": "user2@myserver"
}
],
"decryption": "none"
},
"streamSettings": {
"network": "ws",
"security": "none",
"wsSettings": {
"path": "/myverysecretpath"
}
}
}
],
"outbounds": [
{
"protocol": "freedom",
"tag": "direct"
},
{
"protocol": "blackhole",
"tag": "block"
}
]
}

На что обратить внимание. В inbounds мы задаем правила обработки входящих подключений - первым идет Shadowsocks-2022 на 23 порту (можете использовать любой другой порт, само собой). О том, что эта версия протокола именно 2022 говорит method "2022-blake3-aes-128-gcm". Ключ - любой в шестнадцатеричной форме, его длина зависит от типа шифра, в примере 128-битный шифр, если используете 256-битный, то ключ, соответственно, должен быть в два раза длиннее.

Дальше идет VLESS через TLS, стандартный порт 443. В секции "clients" задаются пользователи-клиенты, в примере он только один. ID клиента можно сгенерировать любым онлайновым UUID-генератором. Также для юзера задается опция "flow" со значением "xtls-rprx-vision", означающая что этот пользователь будет подключаться с использованием XTLS-Vision. В настройках "streamSettings" вы можете увидеть пути к сертификатам, которые мы запросили у LetsEncrypt, в пути должен быть файл соответствующий вашему домену. В "fallbacks" задаются правила о том, что делать, если юзер был не опознан, либо подключение производится не через чистый VLESS-протокол: если мы видим HTTP-запрос с URI /myverysecretpath, то передаем подключение на обработчик vless-ws, для всего остального - на порт 8080, где у нас будет висеть веб-сервер с фейковым (или даже настоящим) веб-сайтом.

И наконец, третим идет вариант VLESS через Websocket, на том же 443 порту. Таким образом, например, можно подключаться к серверу не напрямую, а через CDN, что поможет если ваш сервер вдруг заблокировали цензоры или если вы подключаетесь через строгий корпоративный прокси. Настройка его почти аналогична предыдущему пункту, UUID пользователя там указан тот же самый, единственные различие - нет опции "xtls-rprx-vision", потому что через CDN она работать не будет, и есть секция "wsSettings", где указан тот же секретный путь на сервере /myverysecretpath что и в fallbacks.
См. также: Особенности проксирования через CDN/Websocket/gRPC для обхода блокировок

В комментариях к предыдущей статье упоминали, что websocket-транспорт не всегда работает надежно и эффективно, а еще при очень больших объемах передаваемого трафика Cloudflare может обидиться и начать просить перейти на платный тариф. Поэтому вместо websocket некоторые советуют использовать gRPC-транспорт. Я пробовал, и у меня не получилось нормально настроить fallback на gRPC. В комментарии к статье хабраюзер @s7eepz приложил пример настройки fallback'а на gRPC через Nginx - но важный момент, Nginx должен быть собран с gRPC-модулем. В Debian/Ubuntu и в официальных репозиториях от разработчиков он собран без него.

И как вы могли заметить, в конфиге упомянут порт 8080 для fallback. На нем у нас должен слушать веб-сервер с сайтом для маскировки. Самый просто вариант это сделать - поставить позади него nginx:

$ apt install nginx
$ nano /etc/nginx/sites-enabled/default
$ systemctl restart nginx

Где /etc/nginx/sites-enabled/default в самом простом случае будет представлять собой что-то типа такого:

server {
        listen 127.0.0.1:8080 default_server;
        listen [::1]:8080 default_server;

        root /var/www/html;
        index index.html index.htm index.nginx-debian.html;

        server_name _;

        location / {
                try_files $uri $uri/ =404;
        }
}

(главное изменение по сравнению с дефолтной конфигурацией - сервер слушает не на всех адресах, а только на localhost, и не на 80, а на 8080 порту).

После этого при попытке подключиться к вашему IP-адресу обычным браузером (то, что могут автоматически делать цензоры, пытаясь выявить прокси-сервера), отвечать будет Nginx, отдавая страницы лежащие в /var/www/html. По умолчанию там лежит заглушка, можно закинуть туда какие-нибудь странички и видео с котятками.

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

location / {
                auth_basic "Administrator’s Area";
                auth_basic_user_file /etc/htpasswd;
        }

Сам файл /etc/htpasswd может вообще даже не существовать - нам не нужно проверять правильность пароля, мы будем отклонять все подряд, делая вид что пароль не подошел. Nginx все равно запустится даже без этого файла.

В браузере это будет выглядеть вот так
В браузере это будет выглядеть вот так

Третий вариант - переадресовывать подключения на какой-нибудь другой сайт. XRay не умеет перекидывать подключения на внешние сервера, только на локальные, поэтому тут нам опять поможет Nginx:

server {
    listen 127.0.0.1:8080 default_server;
    listen [::1]:8080 default_server;

    server_name _;

    location / {
         proxy_pass http://lib.ru;
    }
}

В результате при попытке открытия адреса прокси браузером загрузится зеркало lib.ru - замените его на какой-нибудь другой сайт. Использовать для этого какие-либо популярные или навороченный сайты явно не стоит, а вот какую-нибудь богом забытую хомпагу эпохи Web 1.0 или безымянную webftp-файлосвалку - уже можно. А чтобы некоторые тупые боты или пауки поисковых систем не нагнали вам трафика, можно добавить опции ratelimit-модуля в Nginx и ограничить скорость передачи данных с "переадресованного" сайта, например, до 1 мегабита.

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

$ systemctl restart xray

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

$ journalctl -u xray

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

Я буду показывать на примере Nekoray/Nekobox, но абсолютно то же самое можно сделать и в другом клиенте, настройки будут одинаковые. Скачиваем Nekoray, выбираем в настройках core Sing-box (и Nekoray волшебным образом становится Nekobox).

Идем в server -> new profile, и далее заполняем поля следующим образом.

Для прямого VLESS + XTLS-Vision:

Для VLESS-over-Websockets:

Для Shadowsocks:

Выбираем нужное подключение в списке на главном окне, кликаем правой кнопкой мыши -> Current Select -> URL test, и видим в логе и в окошке, что пинг успешен:

Все. Теперь достаточно нажать сверху галочку System proxy или VPN mode, и вы попадаете в интернет через ваш новый прокси.

Чтобы настроить в других клиентах или на других устройствах (например, на смартфоне, или поделиться сервером с друзьями), кликаем на сервер правой кнопкой мыши, выбираем Share -> QR code and Link, и получаем ссылку, которую можно отправить кому-нибудь например через Telegram и QR-код, который можно отсканировать камерой во многих клиентах:

Соответственно, потом на мобильном устройстве в Nekobox, или в v2rayNG, или в Wings X, или в любом другом клиенте, нажимаем что-то типа "Add server" -> "Scan QR" - и все, новый сервер у вас в списке, можно подключаться.

Важно: некоторые клиенты при добавлении сервера по ссылке или QR теряют настройку uTLS, поэтому перепроверяйте все ли на месте после добавления нового сервера.

Лайфхак #1: а еще можно упороться и добавить в Nekobox еще и SSH в качестве подключения, пример конфигурации есть вот здесь (сначала надо будет подключиться родным системным ssh-клиентом, сгенерить клиентский ssh-ключи и сделать ssh-copy-id, в Windows это тоже работает).

Лайфхак #2: Чтобы не забывать ставить uTLS fingerprint для каждого подключения отдельно, его можно задать дефолтное значение в общих настройках Nekobox:

Вариант второй, полуготовый

А теперь представим, что у вас на VPS уже установлен веб-сервер с каким-нибудь сайтом, уже настроены TLS-сертификаты, и все остальное, и нужно просто аккуратно добавить прокси, желательно не ломая конфиг сервера.

Вариант раз: заиметь еще один поддомен, и разруливать TLS-подключения еще на этапе хэндшейка по SNI с помощью, например, HAProxy или ssl_preread модуля в Nginx. Тогда настройка XRay будет полностью аналогична описанному в предыдущем пункте, разве что только надо будет перевесить его с 443 на другой порт.

Вариант два: TLS-сессия будет терминироваться веб-сервером, и в случае обращения к определенному URL он будет передавать подключение на прокси. Этот вариант проще, единственное ограничение - никакого XTLS (ни Vision, ни Reality) уже не получится, и производительность будет немного ниже.

Итак, допустим, у вас настроен Nginx (или любой другой веб-сервер с каким-нибудь сайтом). Нужно средствами веб-сервера настроить переадресацию обращений к определенному урлу на прокси. Варианта два - использовать websockets (и надо не забыть передать специфичные для них хедеры), или использовать gRPC (если ваш сервер умеет его проксировать). В Nginx это будет выглядеть примерно так, для веб-сокетов:

location /myverysecretpath {
         proxy_pass http://127.0.0.1:8888;
         proxy_http_version 1.1;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection "Upgrade";
         proxy_set_header Host $host;
       }

А конфиг XRay будет таким:

{
"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"
}
},
{
"listen": "localhost",
"port": 8888,
"protocol": "vless",
"tag": "vless_ws",
"settings": {
"clients": [
{
"id": "7957c33c-d9ca-11ed-afa1-0242ac120002",
"email": "user1@myserver"
}
],
"decryption": "none"
},
"streamSettings": {
"network": "ws",
"security": "none",
"wsSettings": {
"path": "/myverysecretpath"
}
}
}
],
"outbounds": [
{
"protocol": "freedom",
"tag": "direct"
},
{
"protocol": "blackhole",
"tag": "block"
}
]
}

Как видно, почти то же самое, что и в предыдущем варианте, только нет inbound для "прямого" TLS-подключения, и вообще нет ничего про TLS - сервер слушает 8888 порт и сразу обрабатывает его как веб-сокет. /myverysecretpath, понятное дело, должен совпадать в конфиге веб-сервера и в конфиге прокси.

Настройки клиентов для этого варианта будут полностью аналогичны настройкам клиентов для Shadowsocks и VLESS+Websocket из прошлого пункта.

Вариант с gRPC по примеру из официальной репы с примерами у меня так и не заработал (чует мое сердце, там есть какой-то подвох с TLS и с переадресацией на него) - так что если у кого-то есть рабочие конфиги для XRay и Nginx с gRPC, делитесь в комментариях.

Вариант третий для самых ленивых (Websockets-only)

$ apt install docker.io docker-compose
$ mkdir /etc/xray/
$ nano /etc/xray/config.json
$ nano /etc/xray/Caddyfile
$ nano docker-compose.yml
/etc/xray/config.json:
{
"log": {
"loglevel": "info"
},
"routing": {
"domainStrategy": "AsIs",
"rules": [
{
"type": "field",
"ip": [
"geoip:private"
],
"outboundTag": "block"
}
]
},
"inbounds": [
{
"listen": "0.0.0.0",
"port": 5000,
"tag": "vless_ws",
"protocol": "vless",
"settings": {
"clients": [
{
"id": "7957c33c-d9ca-11ed-afa1-0242ac120002",
"email": "test@test.com"
}
],
"decryption": "none"
},
"streamSettings": {
"network": "ws",
"security": "none"
}
}
],
"outbounds": [
{
"protocol": "freedom",
"tag": "direct"
},
{
"protocol": "blackhole",
"tag": "block"
}
]
}

/etc/xray/Caddyfile
example.com {
handle_path /myverysecretpath {
reverse_proxy http://xray:5000
}
reverse_proxy lib.ru:80 {
}
}

или, если не нужна переадресация, а хватит просто 401 Unauthrized:

example.com {
  handle_path /myverysecretpath {
        reverse_proxy http://xray:5000
  }
  basicauth / {
        bob JDJhJDE0JElab2ZPM25zdU40bE5SSURlTHd3OHVBeVJvYTlMN3dMOEFMdFVCRzNYS1l5ODl6TlVyQllH
  }
}

docker-compose.yml
version: '2'

volumes:
caddy_data:
caddy_config:

services:
xray:
image: teddysun/xray
volumes:
- /etc/xray:/etc/xray
ports:
- 23:23

caddy:
image: caddy
volumes:
- caddy_data:/data
- caddy_config:/config
- /etc/xray/Caddyfile:/etc/caddy/Caddyfile
depends_on:
- xray
links:
- xray:xray

ports:
- 443:443
- 80:80

$ docker-compose up -d

Тут в качестве веб-сервера используется Caddy, он же сам запрашивает и обновляет TLS-сертификаты (certbot не нужен). IPv6 не будет, но все остальное в принципе работает - опять же, только WS, и никакого XTLS. Lazydocker вам в помощь.

Нюансы и мудрости

На сегодняшний день связка VLESS+XTLS-Vision является самой проверенной и устойчивой к блокировкам. Однако нужно иметь в виду еще пару вещей:

  1. Обязательно используйте uTLS на клиентах, выставляя правильный TLS fingerprint. Клиенты, которые не умеют в uTLS лучше не использовать;

  2. Обязательно поднимите фейковый веб-сайт или настройте fallback-переадресацию на какой-нибудь левый адрес;

  3. С uTLS связан интересный баг: если при использовании XTLS-Vision вы почему-то не можете подключиться, в логах сервера видна ошибка типа "failed to use xtls-rprx-vision, found outer tls version 771", попробуйте сменить версию uTLS. У меня, например, при выборе "android" клиент не подключается, а при выборе "chrome" все окей;

  4. С XTLS лучше, чем без него;

  5. Во время отладки конфигурации в случае проблем с TLS может помочь опция "allowInsecure" на клиенте;

  6. Очень рекомендуется настраивать на клиентах правила маршрутизации, чтобы трафик до .ru-доменов и хостов с российскими IP шел напрямую, а не через прокси (в клиентах для такого поставляется GeoIP база данных).

    GeoIP из Nekobox (да и других клиентов) знает российские диапазоны, а вот GeoSite - уже нет, увы.

    В итоге у меня работает вот такая настройка, GeoIP активируется стандартным образом в Nekobox:

    правила по суффиксам Nekobox не умеет, но их умеет sing-box в его основе, поэтому жмем "Custom" и прописываем

    вот такое
    {
    "rules": [
    {
    "domain_suffix": [
    ".ru"
    ],
    "outbound": "direct"
    }
    ]
    }


    После этого весь трафик до .ru-доменов и российских IP-адресов будет идти напрямую.
    Если нужно заблокировать полностью - то в первом окне вместо Direct вставить в Block, а в JSON-коде исправить direct на block.


    Ещё можно иметь два сервера (low-end сервер в РФ можно арендовать рублей так за 60), и приняв подключение передавать его на следущий сервер, указав в outboundTag не freedom и не block, а тег соответствующего outbound'а (XRay может работать сразу и как сервер, и как клиент, не забываем).

  7. При проксировании на Nginx или любой другой сервер, так же хорошей практикой считается проксировать HTTP/1.1 и HTTP/2 отдельно.
    В конфиге Nginx для этого нужно что-то типа такого:

    listen 127.0.0.1:8888;
    listen 127.0.0.1:8889 http2;

А в конфиге XRay:

"fallbacks": [
                    {
                        "dest": "8888"
                    },
                    {
                        "alpn": "h2",
                        "dest": "8889"
                    }
		]

А что там с CDN?

Пока что известно две CDN, которые позволяют на бесплатных аккаунтах работать с подобным: Cloudflare позволяет проксировать Websocket и gRPC, GCore позволяет проксировать Websocket (насчет gRPC не знаю, не проверял). Про Cloudflare говорят, что при проксировании очень больших объемов через вебсокеты они могут попросить перейти на платный тариф, про gRPC такого не написано.

Для работы через CDN нужен будет уже полноценный домен (не DynDNS), который можно делегировать на NS CDN-сети и управлять им там. Дальше нужно включить проксирование для конкретного домена:

Лайфхак: если у вас дешевый IPv6-only сервер, вы можете указать для него только AAAA-запись (IPv6), и Cloudflare все равно позволит вам подключаться к нему по IPv4 через свою сеть. Смекалочка.

Ну и не забыть отдельно включить в настройках проксирование WS и gRPC:

Подробнее: Особенности проксирования через CDN/Websocket/gRPC для обхода блокировок

А что с XTLS-Reality?

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

А что с Sing-box?

Sing-box - активно развивающийся и тоже многообещающий клиент и сервер, и он может использоваться вместо XRay, поскольку тоже поддерживает Shadowsocks-2022, VLESS, Trojan, XTLS-Vision и XTLS-Reality, а еще умеет работать с Hysteria, Naiveproxy, и всякое другое.

Официальный сайт
Github
Документация по настройке
Разработчики реорганизуют репу, поэтому переход по ссылкам в документации может выдавать 404 ошибку — без паники, смотрим название файла, и находим правильный путь в гите по названию, дальше никаких проблем.
Как и XRay, Sing‑box умеет делать fallback'и, только здесь в секции «listen» оно называется «detour», и значением этого параметра должен быть «tag» другого inbound'а.
Сайт со скриптами автоустановки и примерами конфигураций

А можно проще, и чтобы все и сразу?

Для Xray и сотоварищей существует много разных user-friendly серверных морд с простой установкой.

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

Ещё есть LiberteaHiddify (про него сказано что он умеет Reality), и разные форки X-UI, где обещают все то же самое.

Но тестировать и сравнивать их у меня пока времени и терпения нет :)

На этом всё. Удачи вам в нелегком деле настройки всего этого дела, и да прибудет с вами сила.

Следущая статья серии:
«Bleeding-edge обход блокировок: настраиваем сервер и клиент XRay с XTLS-Reality быстро и просто»

Предыдущие статьи серии:

«Современные технологии обхода блокировок: V2Ray, XRay, XTLS, Hysteria и все‑все‑все»

«Программы‑клиенты для протоколов недетектируемого обхода блокировок сайтов: V2Ray/XRay, Clash, Sing‑Box, и другие»

Если вы хотите сказать спасибо автору — сделайте пожертвование в один из благотворительных фондов: "Подари жизнь", "Дом с маяком", "Антон тут рядом".

Теги:
Хабы:
Всего голосов 37: ↑35 и ↓2+42
Комментарии107
+107
Закрыть

Редакторский дайджест

Присылаем лучшие статьи раз в месяц

Комментарии 107

ЗакрепленныеЗакреплённые комментарии
  "inbounds": [
    {
      "listen": "/dev/shm/Xray-VLESS-gRPC.socket,0666",
      "protocol": "vless",
      "settings": {
        "clients": [
          {
            "id": "123"
          }
	],
	"decryption": "none"
      },
      "streamSettings": {
        "network": "grpc",
        "grpcSettings": {
          "serviceName": "1234"
      	}
      }
    },
  {
       "listen": "0.0.0.0",
       "port": 443,
       "protocol": "vless",
       "settings": {
    	   "clients": [
        	{
                "id": "123",
                "flow": "xtls-rprx-vision"
                 }
            ],
		"decryption": "none",
		"fallbacks": [
                    {
                        "dest": "8001",
                        "xver": 1
                    },
                    {
                        "alpn": "h2",
                        "dest": "8002",
                        "xver": 1
                    }
		]
	},
	  "streamSettings": {
                "network": "tcp",
                "security": "tls",
                "tlsSettings": {
                    "rejectUnknownSni": true,
                    "minVersion": "1.2",
                    "certificates": [
                        {
                            "ocspStapling": 3600,
                            "certificateFile": "/etc/letsencrypt/live/domain/fullchain.pem",
                            "keyFile": "/etc/letsencrypt/live/domain/privkey.pem"
                        }
                    ]
                }
            },
            "sniffing": {
                "enabled": true,
                "destOverride": [
                    "http",
                    "tls"
                ]
            }
	}
],

grpc плюс vision. nginx слушает только 80/8001/8002 порт, с 443 идет проброс с xray на nginx, если клиент не опознан. grpc работает через 443 с таким конфигом.

nginx.conf из ключевого

http
{
map $http_upgrade $connection_upgrade {
        default upgrade;
        ""      close;
    }

map $proxy_protocol_addr $proxy_forwarded_elem {
        ~^[0-9.]+$        "for=$proxy_protocol_addr";
        ~^[0-9A-Fa-f:.]+$ "for=\"[$proxy_protocol_addr]\"";
        default           "for=unknown";
    }

map $http_forwarded $proxy_add_forwarded {
        "~^(,[ \\t]*)*([!#$%&'*+.^_`|~0-9A-Za-z-]+=([!#$%&'*+.^_`|~0-9A-Za-z-]+|\"([\\t \\x21\\x23-\\x5B\\x5D-\\x7E\\x80-\\xFF]|\\\\[\\t \\x21-\\x7E\\x80-\\xFF])*\"))?(;([!#$%&'*+.^_`|~0-9A-Za-z-]+=([!#$%&'*+.^_`|~0-9A-Za-z-]+|\"([\\t \\x21\\x23-\\x5B\\x5D-\\x7E\\x80-\\xFF]|\\\\[\\t \\x21-\\x7E\\x80-\\xFF])*\"))?)*([ \\t]*,([ \\t]*([!#$%&'*+.^_`|~0-9A-Za-z-]+=([!#$%&'*+.^_`|~0-9A-Za-z-]+|\"([\\t \\x21\\x23-\\x5B\\x5D-\\x7E\\x80-\\xFF]|\\\\[\\t \\x21-\\x7E\\x80-\\xFF])*\"))?(;([!#$%&'*+.^_`|~0-9A-Za-z-]+=([!#$%&'*+.^_`|~0-9A-Za-z-]+|\"([\\t \\x21\\x23-\\x5B\\x5D-\\x7E\\x80-\\xFF]|\\\\[\\t \\x21-\\x7E\\x80-\\xFF])*\"))?)*)?)*$" "$http_forwarded, $proxy_forwarded_elem";
        default "$proxy_forwarded_elem";
    }

server {
    listen 80;
    return 301 https://$host$request_uri;
     server_tokens off;
}

server {
    listen 127.0.0.1:8001 proxy_protocol;
    listen 127.0.0.1:8002 http2 proxy_protocol;
    set_real_ip_from 127.0.0.1;
location / {
    sub_filter                         $proxy_host $host;
    sub_filter_once                    off;
    proxy_pass                         https://thisis.com;
    proxy_set_header Host              $proxy_host;
    proxy_http_version                 1.1;
    proxy_cache_bypass                 $http_upgrade;
    proxy_ssl_server_name              on;
    proxy_set_header Upgrade           $http_upgrade;
    proxy_set_header Connection        $connection_upgrade;
    proxy_set_header X-Real-IP         $proxy_protocol_addr;
    proxy_set_header Forwarded         $proxy_add_forwarded;
    proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host  $host;
    proxy_set_header X-Forwarded-Port  $server_port;
    proxy_connect_timeout              60s;
    proxy_send_timeout                 60s;
    proxy_read_timeout                 60s;
    }

location /1234 {
    if ($content_type !~ "application/grpc") {
    return 404;
    }
    client_max_body_size 0;
    client_body_buffer_size 512k;
    grpc_set_header X-Real-IP $remote_addr;
    client_body_timeout 52w;
    grpc_read_timeout 52w;
    grpc_pass unix:/dev/shm/Xray-VLESS-gRPC.socket;
    }
}
}

НЛО прилетело и опубликовало эту надпись здесь

Xray имеет скрипт для установки который скачает последнюю версию и создаст юниты systemd. Почему не использовали его?

https://github.com/XTLS/Xray-install

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

Большое спасибо за цикл статей.

особенная благодарность за  Nekoray/Nekobox . Я когда изучал вопрос этот как-то проглядел это чудо)

Статья интересная, так почитать что что-то там придумали. Но классический ShadowSocket избыточен на данный с chacha20. Китайцы ходят вроде на ура и без проблем. А на тему заглушек актуально наверное для тех кто предоставляет это как сервис. А когда ты и твои друзья условно пользуются одним сервером – вряд ли будут ползать искать

Сейчас у меня две виртуалки, одна в РФ и там нет роскомнадзора, другая в США для нетфликса и прочих сервисов которые наши айпи забанили. Заплатил сразу за год, обе обошлись мне в 2800 в сумме. 230 рублей/мес это не такие уж большие деньги за комфорт.

Поставил Shadowsocks одной командой, сделал sub для shadowrocket. Туда указал два сервера, и определил с помощь config какие ресурсы куда должны ходить. 4 месяца – идеально. Макбук и iphone ходит в зависимости от адреса через нужную проксю. Но большая часть в Direct.

НЛО прилетело и опубликовало эту надпись здесь

При этом в инстаграмме китайцы продают классический ss пока что. Все таки повторюсь, классно что технологии есть, развиваются. Но пока они слишком избыточны.

а как эти новые технологии по скорости доступа, насколько все плохо или хорошо. Потому что классический ovpn рвет даже первую итерацию SS как тузик грелку. На сайтах в целом разницы не видишь, зато видно как проседает скорость при скачивании к примеру больших файлов с сайтов. Например тот же самый ютуб если запроксировать, заметно становится сразу на 4к роликах он прям туго начинает кэшировать

НЛО прилетело и опубликовало эту надпись здесь

Спасибо за ваш труд, вон оказывается сколько всяких интересных технологий существует, не TORом и VPNом единым, даже GUI красивый и функциональный сделали и не один)

хз что там по dyndns, но как написано в етой статье есть ещё какой-то сервис freemyip для тех кто ни хочет регесрировать домемные имена

НЛО прилетело и опубликовало эту надпись здесь

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

НЛО прилетело и опубликовало эту надпись здесь

sbs себе заказывал пару дней назад за bitcoin, но не уверен, что стоит давать ссылку на регистратора.

Freenom через год попросил платить за домен. Есть еще no-ip.com. Третий уровень дают. Раз в месяц надо тыкнуть, что пользуешься.

По freenom - ты не успел тыкнуть на «продлить», там что-то около двух недель до окончания срока «аренды» нужно нажать, не успеешь - какое-то время домен вернуть можно только за деньги. Потом он возвращался в общий пул. Заранее продлить или сразу на больше чем на год - он не давал. А сейчас вообще ругается на технические неполадки

Для истории оставлю тут скрипт https://github.com/mkorthof/freenom-script

У меня так пачка доменов уже пару лет обновляется

низкий поклон. Пока все работает через sshuttle думаешь, что сойдет итак. А тут видимо надо готовиться уже заранее. Сам пробовал начинать смотреть и изучать, но информация настолько разрозненна, что бросал на пол пути даже SoftEther.

Интересно мнение опытных людей насколько подозрительно выглядит sshuttle работающий через websocket соединение. В теории это просто https сессия, но возможно по паттернам траффика можно заподозрить что-то неладное?

НЛО прилетело и опубликовало эту надпись здесь

Вот клиент, которым пользуюсь лично я: https://github.com/vi/websocat. Можно вас попросить рассказать или дать линку на документацию как я могу проверить TLS fingerprint?

НЛО прилетело и опубликовало эту надпись здесь

Все понятно, спасибо!

Cloak тоже на Go написан... у него fingerprint на go-похожий не будет ли?

НЛО прилетело и опубликовало эту надпись здесь
  "inbounds": [
    {
      "listen": "/dev/shm/Xray-VLESS-gRPC.socket,0666",
      "protocol": "vless",
      "settings": {
        "clients": [
          {
            "id": "123"
          }
	],
	"decryption": "none"
      },
      "streamSettings": {
        "network": "grpc",
        "grpcSettings": {
          "serviceName": "1234"
      	}
      }
    },
  {
       "listen": "0.0.0.0",
       "port": 443,
       "protocol": "vless",
       "settings": {
    	   "clients": [
        	{
                "id": "123",
                "flow": "xtls-rprx-vision"
                 }
            ],
		"decryption": "none",
		"fallbacks": [
                    {
                        "dest": "8001",
                        "xver": 1
                    },
                    {
                        "alpn": "h2",
                        "dest": "8002",
                        "xver": 1
                    }
		]
	},
	  "streamSettings": {
                "network": "tcp",
                "security": "tls",
                "tlsSettings": {
                    "rejectUnknownSni": true,
                    "minVersion": "1.2",
                    "certificates": [
                        {
                            "ocspStapling": 3600,
                            "certificateFile": "/etc/letsencrypt/live/domain/fullchain.pem",
                            "keyFile": "/etc/letsencrypt/live/domain/privkey.pem"
                        }
                    ]
                }
            },
            "sniffing": {
                "enabled": true,
                "destOverride": [
                    "http",
                    "tls"
                ]
            }
	}
],

grpc плюс vision. nginx слушает только 80/8001/8002 порт, с 443 идет проброс с xray на nginx, если клиент не опознан. grpc работает через 443 с таким конфигом.

nginx.conf из ключевого

http
{
map $http_upgrade $connection_upgrade {
        default upgrade;
        ""      close;
    }

map $proxy_protocol_addr $proxy_forwarded_elem {
        ~^[0-9.]+$        "for=$proxy_protocol_addr";
        ~^[0-9A-Fa-f:.]+$ "for=\"[$proxy_protocol_addr]\"";
        default           "for=unknown";
    }

map $http_forwarded $proxy_add_forwarded {
        "~^(,[ \\t]*)*([!#$%&'*+.^_`|~0-9A-Za-z-]+=([!#$%&'*+.^_`|~0-9A-Za-z-]+|\"([\\t \\x21\\x23-\\x5B\\x5D-\\x7E\\x80-\\xFF]|\\\\[\\t \\x21-\\x7E\\x80-\\xFF])*\"))?(;([!#$%&'*+.^_`|~0-9A-Za-z-]+=([!#$%&'*+.^_`|~0-9A-Za-z-]+|\"([\\t \\x21\\x23-\\x5B\\x5D-\\x7E\\x80-\\xFF]|\\\\[\\t \\x21-\\x7E\\x80-\\xFF])*\"))?)*([ \\t]*,([ \\t]*([!#$%&'*+.^_`|~0-9A-Za-z-]+=([!#$%&'*+.^_`|~0-9A-Za-z-]+|\"([\\t \\x21\\x23-\\x5B\\x5D-\\x7E\\x80-\\xFF]|\\\\[\\t \\x21-\\x7E\\x80-\\xFF])*\"))?(;([!#$%&'*+.^_`|~0-9A-Za-z-]+=([!#$%&'*+.^_`|~0-9A-Za-z-]+|\"([\\t \\x21\\x23-\\x5B\\x5D-\\x7E\\x80-\\xFF]|\\\\[\\t \\x21-\\x7E\\x80-\\xFF])*\"))?)*)?)*$" "$http_forwarded, $proxy_forwarded_elem";
        default "$proxy_forwarded_elem";
    }

server {
    listen 80;
    return 301 https://$host$request_uri;
     server_tokens off;
}

server {
    listen 127.0.0.1:8001 proxy_protocol;
    listen 127.0.0.1:8002 http2 proxy_protocol;
    set_real_ip_from 127.0.0.1;
location / {
    sub_filter                         $proxy_host $host;
    sub_filter_once                    off;
    proxy_pass                         https://thisis.com;
    proxy_set_header Host              $proxy_host;
    proxy_http_version                 1.1;
    proxy_cache_bypass                 $http_upgrade;
    proxy_ssl_server_name              on;
    proxy_set_header Upgrade           $http_upgrade;
    proxy_set_header Connection        $connection_upgrade;
    proxy_set_header X-Real-IP         $proxy_protocol_addr;
    proxy_set_header Forwarded         $proxy_add_forwarded;
    proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host  $host;
    proxy_set_header X-Forwarded-Port  $server_port;
    proxy_connect_timeout              60s;
    proxy_send_timeout                 60s;
    proxy_read_timeout                 60s;
    }

location /1234 {
    if ($content_type !~ "application/grpc") {
    return 404;
    }
    client_max_body_size 0;
    client_body_buffer_size 512k;
    grpc_set_header X-Real-IP $remote_addr;
    client_body_timeout 52w;
    grpc_read_timeout 52w;
    grpc_pass unix:/dev/shm/Xray-VLESS-gRPC.socket;
    }
}
}

НЛО прилетело и опубликовало эту надпись здесь

То есть я правильно понял, XRay ждет VLESS+XTLS, если нет - то передает запрос на Nginx, а уже Nginx смотрит, что там URL для gRPC и передает обратно на XRay? Запутанно, но должно сработать наверное.

по логике так. работает

Или это для случая, когда TLS ALPN указан как http/1.1

мне кажется именно для этого, http1, http2 детектить.

НЛО прилетело и опубликовало эту надпись здесь

не получилось только kcp настроить, либо shadowrocket что-то не так умеет

	{
            "protocol": "vless",
            "port": 443,
            "settings": {
                "decryption":"none",
                "clients": [
                    {"id": "123"}
                ]
            },
            "streamSettings": {
                "network": "kcp",
                "mtu": 1360,
                "uplinkCapacity":90,
                "downlinkCapacity":90,
                "congestion":false,
                "header":{
                    "type":"dtls"
                },
                "kcpSettings": {
                    "seed": ""
                }
            }
        },

в логе xray

[Info] transport/internet/kcp: discarding invalid payload

НЛО прилетело и опубликовало эту надпись здесь

Точно. Без указания header в shadowrocket работает. С любым совпадающим header не работает. Видимо не поддерживается обсфукация в shadowrocket.

Криво (используется host-network потому что иначе не работает IPv6, а с ней оно слушает 48800 порт не только на localhost, а в открытую, ибо через 127.0.0.1 не работает - знающие люди, подскажите, как пофиксить)

Caddy запускаем во внешней сетке, скажем reverse-proxy. Ее естественно перед этим создаем

docker network create reverse-proxy
services:
  caddy:
    container_name: caddy
    image: caddy:latest
    restart: unless-stopped
    networks:
      - reverse-proxy
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - $PWD/Caddyfile:/etc/caddy/Caddyfile
      - ./data:/data
      - ./config:/config
networks:
  reverse-proxy:
    external: true

В этой же сетке запускаем контейнер xray.

version: '3'
services:
  xray:
    image: teddysun/xray
    container_name: xray
    volumes:
      - .:/etc/xray
    networks:
      - reverse-proxy

networks:
  reverse-proxy:
    external: true

В Caddyfile тогда будет

example.com {
  handle_path /myverysecretpath {
    reverse_proxy xray:48800      
  }
}

К слову можно у себя запускать прокси тоже в докере

config.json

{
    "log": {
        "loglevel": "warning"
    },
    "inbounds": [
        {
            "port": 10800,
            "listen": "0.0.0.0",
            "protocol": "socks",
            "settings": {
                "udp": true
            }
        }
    ],
    "outbounds": [
        {
            "protocol": "vless",
            "settings": {
                "vnext": [
                    {
                        "address": "example.com", 
                        "port": 443,
                        "users": [
                            {
                                "id": "UUID",
                                "encryption": "none"
                            }
                        ]
                    }
                ]
            },
            "streamSettings": {
                "network": "ws",
                "security": "tls",
                "tlsSettings": {
                    "serverName": "example.com" 
                },
                "wsSettings": {
                    "path": "/myverysecretpath" 
                }
            }
        }
    ]
}

docker-compose.yml

version: '3'
services:
  xray-client:
    image: teddysun/xray
    container_name: xray-client
    ports:
      - "10800:10800"
    volumes:
      - .:/etc/xray

НЛО прилетело и опубликовало эту надпись здесь

Я ipv6 не использую. Поэтому такой вариант работает.

Возможно стоит попробовать включить поддержу ipv6 в самом docker

https://docs.docker.com/config/daemon/ipv6/

Появился вопрос. А существует какой либо софт который умеет кроме выбора родительского прокси по правилам дополнительно делать смену порта?
Как пример:
при обращении на host.com:11465 использовать proxy1.com:1080 и коннектиться к host.com:465
а при обращении на host.com:12465 использовать proxy2.com:1080 и коннектиться к host.com:465


Понятное дело что все можно разрулить на стенке и использовать что-то типа https://github.com/ginuerzh/gost или socat. Но конфиг уж очень не портативный, перенос на другой комп — боль и печаль


Этот изврат нужен чтобы в одном почтовом клиенте использовать разные акки на одном домене но с разных ип адресов. Или может кто знает почтового клиента кто умеет различные прокси для различных акков использовать

НЛО прилетело и опубликовало эту надпись здесь

Спасибо, гляну

А есть примеры конфигов, а то документация больше для тех кто и так знает как настраивать этот комбайн :( Т.е. больше документация именно по api и опциям конфига, а не по тому, как это все применять

А можно такую же статью, но для максимальных чайников?) Для тех кто только outline ставил)))

А чем плох outline?

Не плох ничем, но всегда хочется чему то новому научится, тем более это же более надёжное решение...

он слишком прост, нет обсфукации. его уже детектят, хотя и vless вроде как тоже.

https://github.com/Jigsaw-Code/outline-ss-server/issues/124

ну и плюс outline-server ставит прометея, без которого можно обойтись.

https://www.opencve.io/cve?vendor=prometheus

Я правильно понимаю что если все сделать как в этом гайде то можно подключиться как по ss так и по vless?

Ещё не совсем понятен момент с CDN, если мне заблочат прямой доступ к моему vps то тогда что?

Подскажите, пожалуйста, как потраблшутить nekoray на windows? Как будто петля, или что-то не так с маршрутизацией, nekoray 80% cpu, в его логе льется куча строк каких-то подключений, интернет пропадает (делал по вашей инструкции и vless direct, и vless-ws). При этом этот же конфиг, расшаренный по куаркоду на андроид - работает, подключается, трафик всего телефона идет через xray-сервер.

У меня вопрос по маршрутизации.

Попытался поставить правила geosite:ru и geoip:ru как здесь указано. Но geosite:ru вообще не принимает xray, ссылаясь на отсутствие директивы ru (cn работает, проверил). Проверка по geoip не вылетает, но похоже не работает.

В документации на сайте проекта и в репозиториях ru директив не нашел, китайцы делают под себя и правила обновляют для cn доменов.

Фильтровать российские домены смог только через regexp:

"rules": [
            {
                "type": "field",
                "domain": [
                    "regexp:^([\\w\\-\\.]+\\.)ru$"
                ],
                "outboundTag": "direct"
            }
        ]

Так все хорошо и ru домены идут напрямую.

Проверка по geoip не вылетает, но похоже не работает.

А вы geoip:ru писали в блок "ip" или в блок "domain"? Я на всякий случай уточняю.
За регэксп спасибо.

В ip блок.

Аналогично, geosite:ru не заработал.

geoip:ru у меня корректно работает и на сервере и на клиенте. Попробуйте "outboundTag": "block", так нагляднее. Ну и, конечно, удостовериться, что целевой ip действительно российский.

Спасибо, поэкспериментировал, победил кажется.

Я сделал два прокси на разные домены, один на CDN, другой напрямую. Через балансер. Такая связка заработала только так, конфиг клиента:

        "rules": [
            {
                "type": "field",
                "ip": [
                    "geoip:private"
                ],
                "outboundTag": "direct"
            },
            {
                "type": "field",
                "ip": [
                    "geoip:ru"
                ],
                "outboundTag": "ru_ip"
            },
            {
                "type": "field",
                "domain": [
                    "regexp:^([\\w\\-\\.]+\\.)ru$"
                ],
                "outboundTag": "ru_address"
            },
            {
                "type": "field",
                "inboundTag": [
                    "inbound"
                ],
                "balancerTag": "balancer"
            }
        ],
        "balancers": [
            {
                "tag": "balancer",
                "selector": [
                    "proxy_1",
                    "proxy_2"
                ]
            }
        ]
  

Соответственно нужны freedom-теги ru_ip, ru_address и inbound тег "inbound"

Сначала клиент пропускает локальные ip, затем ru айпишники, потом адрес по регекспу.

Если ничего не совпадает направляет на балансер.

Если сервер один, можно часть с балансерами удалить.

НЛО прилетело и опубликовало эту надпись здесь

Я пользуюсь голым xray в docker в качестве клиента. У меня суффикс не заработал. В документации я такой настройки не нашел, подозреваю это некобокса обертка какая-то.

подскажите как надо прописать на сервере чтобы ru сайты на прямую открывались ?

НЛО прилетело и опубликовало эту надпись здесь

"regexp:.ru$"

"regexp:.рф$"

не работает?

Подскажите, пожалуйста, как проверить работает ли при использовании Reality ,что

"TLS подключение передается на какой-нибудь другой абсолютно реальный хост с TLS (например, google.com или gosuslugi.ru) "

А т не очень понятно, эта обфускация работает вообще или нет

НЛО прилетело и опубликовало эту надпись здесь

Ребят, мне очень не понятен пункт 6. Очень рекомендуется настраивать на клиентах правила маршрутизации ..... Мжно по подробней где это указать в клиентах и где/куда на сервере прописывать?

НЛО прилетело и опубликовало эту надпись здесь

Помогите с конфигом nginx для fallback-переадресации на левый адрес или запроса логина - пароля.

НЛО прилетело и опубликовало эту надпись здесь

На своем серваке задержка в разы выше, хотя на бесплатных серверах 140-250)

НЛО прилетело и опубликовало эту надпись здесь

Подскажите, пожалуйста, что я не так делаю? Все делал по инструкции ставил через bash. Ошибка появляется после команды journalctl -u xray. Выставлял права, но не помогает.
open /etc/letsencrypt/live/example.com/fullchain.pem: permission denied

НЛО прилетело и опубликовало эту надпись здесь

От пользователя root. Я каждой директории права выдал. Я уже и на debian пробовал, не получается.

НЛО прилетело и опубликовало эту надпись здесь

Если сам сайт cloudflare заблочен, то через cdn уже не получится выйти на заблоченный сервер и продолжать использовать впн? Есть страна такая как Туркмения где тонны подсеток в блоке и сам клаудфаер, для такой цензуры было бы удобно получить доступ к заблоченной впске

НЛО прилетело и опубликовало эту надпись здесь

Спасибо что отвечаете, вы реально про! Вроде проверили в тм заблочен клаудфаер, но gcore работает, значит можно за ним закрепить забаненный сервер и юзать его как ВПН? Действия все те же что и с клаудфаер прокси или там не такие настройки?

НЛО прилетело и опубликовало эту надпись здесь
Значит не поднять впн тогда через cdn?
Значит не поднять впн тогда через cdn?

НЛО прилетело и опубликовало эту надпись здесь

У меня открывает эти ссылки в браузере хоть и с ошибкой 404, у них даже этого нет. Третий вариант с websockets only будет с cdn proxy работать без поднятия сайта?

Подскажите как правильно изменить порт для vless. Как только меняю стандартный 443 на любой другой открытый, фейковый сайт перестает открываться, в браузере ошибка - не удается получить доступ к сайту. Порты само собой открыты, никаких запретов на их использование нет. В журнале или через systemctl status ни xray ни nginx никаких ошибок не выдают.

НЛО прилетело и опубликовало эту надпись здесь

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

Error 503 Backend unavailable, connection timeout

Backend unavailable, connection timeout

Error 54113

Details: cache-fra-etou8220068-FRA 1682956545 3753448921

Varnish cache server

Подскажите почему такая ошибка выскакивает? все делал как написано в Marzban-examples Но какая то беда с сертификатом я так понимаю(

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

Подскажите, пожалуйста, что делаю не так. На двух компьютерах все настроил, все работает, на третьем - VLESS настроить получилось, а вот Shadowsoks при попытке сделать URL test выдает ошибку: "wsarecv: An existing connection was forcibly closed by the remote host." Что это может быть и как это пофиксить?

НЛО прилетело и опубликовало эту надпись здесь

Можно ли показать(в качестве примера), как должен выглядеть конфиг nginx для ssl_preread модуля ? А то я не силен в этом

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

"А теперь представим, что у вас на VPS уже установлен веб-сервер с каким-нибудь сайтом, уже настроены TLS-сертификаты, и все остальное, и нужно просто аккуратно добавить прокси, желательно не ломая конфиг сервера "

НЛО прилетело и опубликовало эту надпись здесь

У меня Gcore ns севера открываются в браузере хоть и с ошибкой 404 (но она красочная), у товарища в туркмении даже этого не видно, пишет как будто интернета нет. Думаю не судьба там настроить cdn прокси...

>О том, что эта версия протокола именно 2022 говорит method "2022-blake3-aes-128-gcm". Ключ - любой в шестнадцатеричной форме, его длина зависит от типа шифра, в примере 128-битный шифр, если используете 256-битный, то ключ, соответственно, должен быть в два раза длиннее.

Как минимум в свежих версиях sing-core/xray, ключ должен быть base64, a не hex.

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

есть веб сайт с nginx и сертификатом ! vision и реалити будут ли работать и какие настройки надо сделать ?

Можно вопрос про SNI?

У меня это поле сейчас не заполнено, и все работает. В каких случаях его можно/нужно использовать? Если его заполнить, то все сломается?

Просто подумалось, что вдруг его можно заполнить чем-то "известным", входящим в пакет "безлимитных мессенджеров". Вдруг получится у Туркишей добираться до своего прокси и интернетом пользоваться таким образом в рамках "Miles&Smiles Classic Members: Unlimited Messaging". Вряд ли по IP они это проверяют.

Или на мобильных тарифах бывают "безлимитные соцсети"....

НЛО прилетело и опубликовало эту надпись здесь

Ага, прояснилось. Спасибо!

А может кто-нибудь подсказать, как в json конфигурации кастомных маршрутов для NekoBox указать сайты, которые идут через proxy? Напрямую - это "outbound": "direct". А как через proxy? А то почему-то установка базовых маршрутов через квадратные поля не работает.

НЛО прилетело и опубликовало эту надпись здесь

правила по суффиксам Nekobox не умеет

В 3.26 уже умеет.

{
    "rules": [
        {
            "domain": [
                "regexp:.*\\.ru$"
            ],
            "outboundTag": "direct",
            "type": "field"
        },
        {
            "domain": [
                "regexp:.*\\.xn--p1ai$"
            ],
            "outboundTag": "direct",
            "type": "field"
        }
    ]
}

geoip:ru и geoip:private не взлетели

Подскажите плиз, что не нравится установеленному XRay-core на моем сервере? Вот его /usr/local/etc/xray/config.json:


{
    "log": {
        "loglevel": "warning"
    },
    "inbounds": [
        {
            "port": 443,
            "protocol": "vless",
            "settings": {
                "clients": [
                    {
                        "id": "66666666-CCCC-4444-8888-999999999999",
                        "flow": "xtls-rprx-vision",
                        "level": 0,
                        "email": "myname@mydomain.com"
                    }
                ],
                "decryption": "none",
                "fallbacks": [
                    {
                        "dest": 80
                    }
                ]
            },
            "streamSettings": {
                "network": "tcp",
                "security": "xtls",
                "xtlsSettings": {
                    "alpn": [
                        "http/1.1"
                    ],
                    "certificates": [
                        {
                            "certificateFile": "/etc/letsencrypt/live/gehxxxx.xxxx.xxx/fullchain.pem",
                            "keyFile": "/etc/letsencrypt/live/gehxxxx.xxxx.xxx/privkey.pem"
                        }
                    ]
                }
            }
        }
    ],
    "outbounds": [
        {
            "protocol": "freedom"
        }
    ]
}

А вот что в статусе:

root@ubuntu:~# systemctl status xray
× xray.service - Xray Service
Loaded: loaded (/etc/systemd/system/xray.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/xray.service.d
└─10-donot_touch_single_conf.conf
Active: failed (Result: exit-code) since Tue 2024-03-26 21:51:04 UTC; 4min 23s ago
Docs: https://github.com/xtls
Main PID: 662 (code=exited, status=23)
CPU: 19ms

Mar 26 21:51:03 ubuntu systemd[1]: Started Xray Service.
Mar 26 21:51:04 ubuntu xray[662]: Xray 1.8.9 (Xray, Penetrates Everything.) 37f8654 (go1.22.1 linux/amd64)
Mar 26 21:51:04 ubuntu xray[662]: A unified platform for anti-censorship.
Mar 26 21:51:04 ubuntu xray[662]: 2024/03/26 21:51:04 [Info] infra/conf/serial: Reading config: /usr/local/etc/xray/config.json
Mar 26 21:51:04 ubuntu xray[662]: Failed to start: main: failed to load config files: [/usr/local/etc/xray/config.json] > infra/conf: Please use VLESS flow "xtls-rprx-vision" with TLS or REALITY.
Mar 26 21:51:04 ubuntu systemd[1]: xray.service: Main process exited, code=exited, status=23/n/a
Mar 26 21:51:04 ubuntu systemd[1]: xray.service: Failed with result 'exit-code'.
root@ubuntu:~#

Что ему не нравится?

Значение параметра "security" должно быть "tls" а не "xtls". "xtls" надо было писать в старых версиях, а в современных просто "tls" (даже если вы на самом деле настраиваете XTLS). Посмотрите пример конфига из статьи внимательнее.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Читают сейчас

Истории

Топ-7 годноты из блогов компаний
Конкурс красоты кода
Как продвинуть машину времени?
Учим английский
Узнай свою еду лучше

Работа

Ближайшие события

24 – 25 октября
One Day Offer для AQA Engineer и Developers
Онлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
26 октября
ProIT Network Fest
Санкт-Петербург
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань