Обновить

Bleeding-edge обход блокировок с полной маскировкой: настраиваем сервер и клиент XRay с XTLS-Reality быстро и просто

Уровень сложности Простой
Время на прочтение 8 мин
Количество просмотров 212K

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

В серии предыдущих статей я описывал, почему повсеместно используемые VPN- и прокси-протоколы такие как Wireguard и L2TP очень уязвимы к выявлению и могут быть легко заблокированы цензорами при желании, обозревал существующие гораздо более надежные протоколы обхода блокировок, клиенты для них, а также описывал настройку сервера для всего этого.

Но кое о чем мы не поговорили. Во второй статье я вскользь упомянул самую передовую и недетектируемую технологию обхода блокировок под названием XTLS-Reality, и пришло время рассказать о ней поподробнее, а именно - как настроить клиент и сервер для нее.

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

Нейрокартинка для отвлечения внимания
Нейрокартинка для отвлечения внимания

XTLS-Reality

Коротко про XTLS-Reality. Это самое новое изобретение от авторов XRay. Про XRay (и его прородителя V2Ray, он же V2Fly) я рассказывал в предыдущей статье. XTLS-Reality поддерживается в последних релизах XRay, Sing-box и многих клиентах.

Он предназначен для защиты от выявления методом active probing. В отличие от старых протоколов (Shadowsocks, VMess, VLESS, и транспорта XTLS-Vision), определение “свой/чужой” здесь происходит еще на этапе TLS-хендшейка в момент чтения ClientHello. Если клиент опознан как “свой”, сервер работает как прокси, а если нет - вжух! - и TLS подключение передается на какой-нибудь другой абсолютно реальный хост с TLS (например, google.com или gosuslugi.ru), и таким образом клиент (или цензор, желающий методом active probing проверить, а что же прячется на том конце) получит настоящий TLS-сертификат от google.com или gosuslugi.ru и настоящие данные с этого сервера. Полное соответствие. Механизм определения "свой/чужой" во многом схож с механизмом работы Cloak, и позволяет достоверно определить подлинность клиента, но вместе с тем не вызывает подозрения у цензоров и устойчив к replay-атакам - со стороны систем анализа трафика это выглядит как подключение к настоящему популярному сайту, сервер отдает настоящий TLS-сертификат этого сайта, и вообще все (включая TLS fingerprint сервера) выглядит до предела аутентично и не вызывает подозрений. Еще XTLS-Reality может оказаться вариантом для обхода суровых корпоративных прокси с Man-in-the-Middle, которые перешифровывают весь трафик из сети своим сертификатом (нередко подобные прокси имеют список исключений для ресурсов с HSTS и certificate pinning, либо для экономии ресурсов, и подобрав правильный домен можно пролезть во внешнюю сеть без расшифровки трафика). Бонусом еще XTLS-Reality обычно используется в паре с XTLS-Vision, то есть мы имеем очень достоверно выглядящие паттерны трафика из-за отсутствия двойного шифрования TLS-in-TLS (и заодно еще очень высокую производительность, у меня между хостами в Москве и в центральной Европе XRay легко выдает >100 мегабит).

Единственный минус подобного решения - в отличие от более старых протоколов (VLESS без XTLS) нет возможности работать через websocket-транспорт, и, соответственно, через CDN типа Cloudflare. Upd: такая возможность есть если использовать многоуровневую схему с SNI-proxy (типа haproxy) или второй IP-адрес - см. Особенности проксирования через CDN/Websocket/gRPC для обхода блокировок

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

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

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

Можно установить 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
xray.service
[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

    и т.д.

Сервер выбрали, настало время редактировать конфиг. Если вы ставили 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:

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

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

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

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

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

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

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

  1. Settings -> Clash Core -> Выбрать Meta

  2. Сохранить конфиг в какой-нибудь локальный файл:

clash-reality.yml
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

  1. Profiles -> New - Type : Local -> выбрать ваш файл и кликнуть по нему в окне Clash

  2. Proxies -> выбрать ваш новый прокси на вкладке Global -> кликнуть по полю справа чтобы протестировать подключение, должно появиться значение пинга

  3. Settings -> System proxy: вкл - после этого трафик всей системы пойдет через прокси. Можно использовать и TUN, но для этого надо запускать Clash Verge от рута.

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

скриншоты

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

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

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

  2. Обязательно используйте uTLS на клиентах, выставляя правильный TLS fingerprint (например, Chrome).
    Если при использовании XTLS вы почему-то не можете подключиться, в логах сервера видна ошибка типа "failed to use xtls-rprx-vision, found outer tls version 771", попробуйте сменить версию uTLS. У меня, например, при выборе "android" клиент не подключается, а при выборе "chrome" все окей.

  3. Для увеличения производительности можно настроить на сервере Bottleneck Bandwidth и Round-trip propagation time (BBR) congestion control algorithm:
    echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
    echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
    sysctl -p

  4. Чтобы проверить, что маскировка работает как надо, добавьте IP-адрес вашего сервера и домен, под который вы маскируетесь, в hosts-файл (на Linux это /etc/hosts, на Windows это c:\windows\system32\drivers\etc\hosts), например, "38.25.63.10 www.microsoft.com", и после этого попробуйте зайти на этот адрес браузером - должна открыться настоящая страница этого домена с настоящим TLS-сертификатом:

    Другой вариант: использовать CURL.
    curl -v --resolve www.microsoft.com:443:151.101.65.69 https://www.microsoft.com 
    (вместо 151.101.xx.xx должен быть IP вашего сервера)

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

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

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

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

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

Закрепленные Закреплённые комментарии

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

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

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

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

После этого весь трафик до .ru-доменов и российских IP-адресов будет идти напрямую.

Если нужно заблокировать полностью - то в первом окне вместо Direct вставить в Block, а в JSON-коде исправить direct на block.

# sysctl net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = reno cubic hybla vegas yeah

странно, нет bbr.

arch, ядро lts 6.1

необходимо добавить и ребутнуться

echo "tcp_bbr" > /etc/modules-load.d/modules.conf

Пример настройки того же самого для sing-box сервера
{
  "inbounds": [
    {
      "type": "shadowsocks",
      "listen": "::",
      "listen_port": 23,
      "network": "tcp",
      "method": "2022-blake3-aes-128-gcm",
      "password": "aaaaaaaaaaaaaaaabbbbbbbbbbbbbbbb"
    },
    {
      "type": "vless",
      "tag": "vless-in",
      "listen": "::",
      "listen_port": 443,
      "users": [
        {
          "name": "test",
          "uuid": "4c3fe585-ac09-41df-b284-70d3fbe18884",
          "flow": "xtls-rprx-vision"
        }
      ],
      "tls": {
        "enabled": true,
        "server_name": "www.microsoft.com",
        "reality": {
          "enabled": true,
          "handshake": {
            "server": "www.microsoft.com",
            "server_port": 443
           },
           "private_key": "GOTPj_klK7_j_IvjxiCtyBL80RYotYSOdBBBSfFOMH4",
           "short_id": [
              "aabbccdd"
           ],
           "max_time_difference": "1m"
        }
      }
    }
  ],
  "outbounds": [
    {
        "type": "direct",
        "tag": "direct"
    },
    {
        "type": "block",
        "tag": "block"
    }
  ]
}

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

пример конфига клиента (полный)
{
  "dns": {
    "rules": [
      {
        "domain": [],
        "domain_keyword": [],
        "domain_regex": [],
        "domain_suffix": [],
        "geosite": [],
        "server": "dns-direct"
      }
    ],
    "servers": [
      {
        "address": "https://8.8.8.8/dns-query",
        "address_resolver": "dns-local",
        "detour": "proxy",
        "strategy": "",
        "tag": "dns-remote"
      },
      {
        "address": "underlying://0.0.0.0",
        "address_resolver": "dns-local",
        "detour": "direct",
        "strategy": "",
        "tag": "dns-direct"
      },
      {
        "address": "underlying://0.0.0.0",
        "detour": "direct",
        "tag": "dns-local"
      }
    ]
  },
  "inbounds": [
    {
      "domain_strategy": "prefer_ipv4",
      "listen": "127.0.0.1",
      "listen_port": 2080,
      "sniff": true,
      "sniff_override_destination": false,
      "tag": "mixed-in",
      "type": "mixed"
    }
  ],
  "log": {
    "level": "info"
  },
  "outbounds": [
    {
      "domain_strategy": "prefer_ipv4",
      "flow": "xtls-rprx-vision",
      "packet_encoding": "xudp",
      "server": "YOUR_SERVER_GOES_HERE",
      "server_port": 443,
      "tag": "proxy",
      "tls": {
        "enabled": true,
        "reality": {
          "enabled": true,
          "public_key": "YOUR_PUBLIC_KEY",
          "short_id": "YOUR_SHORTID"
        },
        "server_name": "www.microsoft.com",
        "utls": {
          "enabled": true,
          "fingerprint": "chrome"
        }
      },
      "type": "vless",
      "uuid": "YOUR_UUID"
    },
    {
      "tag": "direct",
      "type": "direct"
    },
    {
      "tag": "bypass",
      "type": "direct"
    },
    {
      "tag": "block",
      "type": "block"
    },
    {
      "tag": "dns-out",
      "type": "dns"
    }
  ],
  "route": {
    "auto_detect_interface": true,
    "final": "proxy",
    "geoip": {
      "path": "/opt/nekoray/geoip.db"
    },
    "geosite": {
      "path": "/opt/nekoray/geosite.db"
    },
    "rules": [
      {
        "outbound": "dns-out",
        "protocol": "dns"
      }
    ]
  }
}

На всякий случай, может кому-то другому пригодиться в будущем:

Если используется VPN-режим, при этом в клиенте не включен IPv6 (на сервере - не важно), и при этом IPv6 предоставляется провайдером - есть вероятность, что трафик до IPv4-ресурсов будет идти через прокси, а до IPv6-ресурсов - напрямую.
Это не проблема конкретно V2Ray/Xray/SS, это будет для любых прокси/VPN, работающих через TUN. Решение: включить IPv6 в клиенте (даже если сервер не поддерживает), либо отключить IPv6 на сетевом устройстве (LAN или WiFi).

Но с включенным IPv6 в TUN-режиме есть другая проблема, уже более специфичная. Nekobox (возможно другие клиенты тоже, не проверял) в качестве "внутреннего" IPv6 адреса использует адрес из такого зарезервированного диапазона (ULA), где они должны генерироваться рандомно, и вероятность совпадения двух рандомных адресов ничтожна. То есть такой адрес должен быть уникальным, но в Nekobox он наоборот захардкожен один для всех случаев, и в итоге некоторые сервисы, которые могут каким-то образом получать и анализировать локальные адреса клиентов (например, Google с его телеметрией в Chrome и в Android), считают всех клиентов с таким внутренним адресом... одним и тем же клиентом, после чего матчат их то ли с геолокацией, то ли с другими внутренними адресами, то ли и с тем и с тем, и в итоге в ряде случаев все пользователи Nekobox (и возможно других клиентов) для Гугла выглядят как юзеры откуда-то из Ирана, Китая или Азербайджана, вплоть до того, что со временем Гугл начинает считать публичный адрес прокси-сервера тоже иранским/китайским/etc, и это приводит к довольно забавным эффектам.
Варианты решения: не использовать TUN-режим (он же VPN mode), либо в правилах маршрутизации клиента или сервера запретить доступ до Google по IPv6, либо пропатчить клиент чтобы он использовал какой-нибудь другой внутренний адрес.

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

У вас там в curl ссылочка небезопасная. Нужна вот эта.

Справедливо.

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

Ссылку в статье поправил.

Большое спасибо за статью!

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

Мне в этом плане https://github.com/WeeJeWel/wg-easy нравится, — докер контейнер поднял, опционально лейблы для траефика прописал и всё — удобно создаёшь конфигурации в минималистичном WebUI в пару кликов. Благодаря докеру машина чистенькая, кучи команд не делаешь, всё работает сразу без головняка. Из UI cразу доступен QR код, чтобы быстро на мобильных устройствах настроить соединение или передать (родителям/жене/девушке).

И вот мечтаю, чтобы подобное удобство было б доступно и для описываемых Вами в цикле статей bleeding-edge способов обходов блокировок. В идеальном мире ещё в контейнере (этом же или соседнем, в который DNS запросы бы ходили) можно резку рекламы + кеш днс. Надеюсь, комьюнити к этому ещё придёт, что простота установки и поддержки должна быть по возможности в приоритете.

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

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

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

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

Hiddfy - хоть бы предупредили что он на вязи, а то я воткнул и привет, как на инглишь перейти хз... Еще и черт дернул его к wg на сервак подсадить, буду щас вычленять(

Зы вроде перешел на инглишь, он оказывается ругался на домен по умолчанию.... Мда чувствую это будет весело.

Теперь есть инструкция по установке панели 3X-UI: https://habr.com/ru/articles/735536/

Ого, в превеликой степени благодарен, про каждый репозиторий впервые слышу, кажется добавились кандидаты на поиграться!

Marzban

предлагает трив арианта установки

какой рекомендуете и почему?

Спасибо

Если нужна полная маскировка, то первый или на крайний случай второй вариант, и порт обязательно 443 (мы маскируемся под HTTPS)

Marzban у меня сам не завелся. Юзеры, которые он создает, автоматически не добавляются в секцию clients в конфиге. Вручную добавить тоже не работает, что-то не так с uuid, которые он делает для юзеров. Если вручную сгенерить uuid через Xray и добавить в конфиг в Marzban, то тогда начинает работать.

Теперь есть инструкция по установке панели 3X-UI: https://habr.com/ru/articles/735536/

За Caddy такую конструкцию не спрятать?

Такую - нет. Вариант с Caddy был описан в предыдущей статье, но здесь он не сработает - XTLS (оба, что Vision, что Reality) используют Заки на уровне TLS, и поэтому TLS-прдклбчение должно терминироваться именно в XRay, а не в Caddy.

Единственное, для чего тут сработает Caddy (или какой-нибудь HAProxy) - если надо на одном сервере держать и прокси, и какой-нибудь веб-сайт, то модно разруливать клиентов по SNI, передавая входящие подключения с SNI веб-сайта на веб-сервер (тот же Caddy или Nginx), а все остальное (включая наш фейковый microsoft.com) на XRay. Но насколько такая конструкция демаскирует прокси - вопрос открытый :)

с точки зрения защиты от обнаружения пробниками - можете пяснить, обращаемся к вася_пупкин.ком и получаем сертифкат от гуггла - разве это не раскрывает систему?

Неа. Присмотритесь внимательнее к настройкам клиентов, там есть поле SNI, и в нем указывается тот же фейковый домен популярного сайта (в примере - microsoft.com). То есть со стороны это выглядит как подключение к microsoft.com, цензоры хотят проверить, так ли это, подключаются к этому адресу с этим SNI сами - а там действительно сертификат и контент настоящего microsoft.com.

Домен вася_пупкин.ком уже не нужен, он нигде не фигурирует

Но ведь в DNS microsoft.com не будет биться с IP нашего сервера. Подозрительно

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

Мне кажется надо выбирать сервис к которому постоянное подключение и скачивание оправданно. Например нетфликс или YouTube. Желательно вообще выбрать что-то что не только на скачивание а в обе стороны работает.

А то как-то подозрительно что один из юзеров ходит только на сайты в России и… Microsoft.

Это вечная борьба меча и щита. Пока этого достаточно, когда будет недостаточно, будут работать с тем что будет.

не только на скачивание а в обе стороны работает.

Википедия жеж.

(А для больших объёмов — Викисклад)

Не подскажите, в секции

Hidden text
realitySettings": {
			"show": false,
			"dest": "www.microsoft.com:443",
			"xver": 0,
			"serverNames": [
				"www.microsoft.com"
			],

serverNames и dest одинаковые записи должны иметь? В статье упоминается только о serverNames.

А клиент под MacOS подскажите?
Указанный Nekobox не имеет поддержки мака (

Имеет и работает, я им сам пользуюсь на маке - но последняя версия доступная под мак там 2.12, она не поддерживает Reality :(

Wings X тоже имеет десктопную версию, но я ее не тестировал, можно попробовать.

Можете ткнуть носом?
На гитхабе в релизах только под линух, и вин, в ридми macOS вычернут
Wings X требует макось старше 13 и не хочет на старой моей системе запускаться (

Последняя версия под мак у них 2.12, но как я сказал выше, она не умеет Reality.

Автор пишет, что свежие версии под мак по-прежнему можно собрать руками.

Ещё вариант - Clash.Verge, но там формат конфигурации совсем другой, надо адаптировать.

сделал конфиг как по ссылке выше, но не нравится ему, ругается
2023-04-26 15:33:06 INFO — [clash]: FTL [Config] parse config failed error=proxy 0: unsupport proxy type: vless
2023-04-26 15:33:06 INFO — clash core terminated

Там надо поменять тип ядра с Clash Premium на Clash Meta, в первом шаге об этом написано (возможно ещё придется перезапустить, но у меня и так сработало).

Добавил пример конфига Clash Verge и краткое описание настройки.

Нашел ещё один клиент: V2Box

Он основан на XRay 1.8 и поддерживает Reality, на старых системах работает (проверил на 12.6). Один недостаток - нельзя настраивать маршруты, только туннелировать весь трафик сразу (хотя можно попробовать подсунуть конфиг целиком, может прокатит).

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

Потом, если его заблокируют, заниматься этим будет сложнее.

Я, например, в качестве личного использую IKEv2 поднятый скриптом… Но на всякий случай ведь можно поднять рядом и такой, «резервный» канал, мало ли что будет дальше, или куда придётся временно поехать, один раз я так обломался с wireguard

P.S. Эх, хотелось бы целостную инструкцию по IKEv2+eap-tls+radius, ради статических ip внутри тоннеля… Но целостной так и не нашел

Поработав в своё время с IPSEC (и на цисках и в юниксах - привет, StrongSwan) я бы от него держался нафиг подальше.

Wireguard простой как тапок, быстрый и работает надёжно. А шансов на дыру в реализации гораздо меньше - код WG в десятки раз короче всей богодельни IPSEC.

Плюс я не уверен что при блокировке IKE портов (500/4500) его вообще возможно куда-либо перевесить в стандартных клиентах, WG же пофиг через какой порт работать.

Резервным можно держать какой-нибудь OpenVPN в Transparent TLS режиме, например.

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

Привет из 7 августа 2023)

Ну да, я как раз два дня назад поднял на своём VPN ещё и v2ray вдобавок к wireguard после того как друзья в РФ пожаловались что с некоторых мобильных и не только провайдеров WG перестал подниматься...

Есть какая-то более подробная инфа почему и как блокируют?

dpi по рукопожатиям

А чем сейчас можно обфусцировать Wireguard, чтобы работало и на смартфонах и на Win? Сервер на Linux.

Интересно, что у автора статьи отрицательный рейтинг при отсутствии отрицательных комментариев и приличной карме. Как так?

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

А где такую базу брать? В клиентах там все для Китая. По крайней мере я не нашел. Пробовал в nekobox в поля маршрутизации вставлять по всякому - не работает. По конкретному IP правила срабатывают. А домен .ru так и не смог заблокировать. А очень бы хотелось - я то могу и сам контролировать куда и как ходить - а вот с супругой будут проблемы. Ей бы надо как нить "железно" ограничить .ru )

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

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

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

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

После этого весь трафик до .ru-доменов и российских IP-адресов будет идти напрямую.

Если нужно заблокировать полностью - то в первом окне вместо Direct вставить в Block, а в JSON-коде исправить direct на block.

Спасибо! (вечером попробую .. * извиняюсь - забыл упомянуть что я именно nekobox для win имел ввиду )).

А вот такой вопрос про развитие технологии: я только на днях настроил сервер по Вашей предыдущей статье) .. Я так понимаю что можно просто переделать там конфиг и создать в клиенте новое подключение? А nginx "просто останется" ненужным? ( я не использую SS или WS ) . То есть все предыдущие варианты как бы обесценились? Или оставить vision как запасной вариант.. ? Хотя в чем там "запас"? - наверное смысла в предыдущих вариантах уже нет? Вот если я хочу иметь пару или тройку серверов на всякий случай - тогда на одном вот этот последний вариант с reality , на втором Naive уже есть (стОит на него надеяться?) а на третий? - сделать дубликат новой с reality или оставить как раз предыдущий с vision ? Что бы вы посоветовали?

Учитывая тормознутость и тупость нашего РКН, я думаю, что даже XTLS-Vision на ближайшее время будет более чем достаточно.

Но если хочется быть готовым вообще ко всему и есть интерес - можно, например, на IPv4 адреса хостера поднять XTLS-Reality (в случае с Reality невозможно делать фоллбэки на другие протоколы), а на IPv6-адресе (или на другом IPv4, если есть) - VLESS over Websockets или gRPC, и ограничить к нему доступ только с CDN (Cloudflare или GCore) - пользоваться сервером с XTLS-Reality, а если он по какой-то причине вдруг попадет под бан, будет возможность подключиться через CDN. А в качестве третьего варанта можно попробовать Shadowsocks-2022 и обычный SSH - я встречал упоминания что во время массовых протестов в Беларуси местами резали полностью даже HTTPS, но "неопознанный трафик" (SS) и SSH продолжали работать.

Попробовал поднять по вашему совету так: Reality на ipv4, а Vless-WS через ipv6 только

Почему-то при добавлении строки "listen": "127.0.0.1" перед портом (чтобы слушал только на ipv4) в inbound Reality, перестаёт проходить трафик , хотя Xray нормально запускается без ошибок

Очевидно, что пытаюсь разделить слушание 443 порта на ipv4 для Reality и ipv6 для nginx

Уже разобрались, ага.

Для других, кто столкнется с таким же вопросом:

"listen": "127.0.0.1" — будет слушать только локальные подключения, надо 0.0.0.0 для IPv4 или [::] для IPv6. Хотя где-то встречал упоминание, что Xray трактует 0.0.0.0 по-своему и слушает все рано сразу и v4 и v6, возможно проблема была в этом. Но в любом случае, вариант с явным указанием адресов серверач на которых надо слушать, должен сработать.

А домен .рф в этом окне можно указать? Поймёт?

К меня не сработало, нужно преобразовать такие домены по стандарту в латиницу (xn-...) любым punycode-конвертером, тогда все ок.

Насчёт .ru-доменов. Разве не работает domain:ru в стандартном окне настроек Nekobox?

В новых версиях, кажется, работает.

В старых версиях не работало, поэтому был нужен костыль такой.

В новых версиях Nekobox костыль уже не работает) Но работает domain:ru

PS: Большое спасибо за серию статей!

про VPN есть ещё один интересный момент. Обычно все смотрят, как бы прикрыть трафик от условного РКН.
Но при этом я пару раз сталкивался с тем, что сервис к которому я подключался, отвергал подключение под предлогом "вы используете VPN".

Если бы в завершение цикла раскрыли тему "маскируем сервер" — я был бы вам очень благодарен.

Так они определяют это просто по принадлежности IP клиента к базе IP ДЦ\VPN.
Если к форуму любителей колли ломится какой-нибудь OVH — ну тут же понятно, что это не apt ошибся IP в поисках пакета, а какой-то клиент ломится через прокси\VPN.
Тут вы ничего не сделаете, только искать чистый "резидентный" IP как конечную точку.

Ха :)

На самом деле, классических способов выявить VPN не так много, самые известные:

1) разница между часовыми поясами у клиента в браузере и в локации IP-адреса с которого он подключается (например, в браузере московский часовой пояс, а сервер в Лондоне и там пояс другой) - обойти элементарно;

2) выявление по MTU - ненадежно, актуально для OpenVPN/L2TP/Wireguard/SSTP, для XRay и подобных прокси не актуально, т.к. они работают на другом уровне;

3) сканирование IP клиента на предмет открытых стандартных портов (например, 443) - можно обойти цепочкой из двух серверов с туннелем между ними;

Но правда в том, что никакие сервисы со всем этим вообще не заморачиваются и этими методами не пользуются, а делают гораздо проще - блоки IP-адресов имеют свойство типа "residential", "hosting" и т.д. А еще они обычно принадлежат какой-нибудь AS (автономной сети). У хостеров и облачных провайдеров IP-адреса обычно совсем не типа residential, и их AS нередко тоже выдает саму компанию. Поэтому в данном случае сервер не замаскировать никак.

В теории можно найти сервер с IP-адресом из блока по ошибке отмеченного в базах как residential или принадлежащем какой-нибудь мутной AS'ке - мне достался такой адрес от одного российского хостера (он вообще в некоторых базах определяется как британский, но всякие вредные отечественные сервисы типа сбермаркета и кинопоиска его принимают за российский не-vpn), но нет никаких гарантий, что оно просуществует так долго и что такие же адреса достанутся другим.

Интересно, заработает ли XTLS через прозрачный прокси (squid + mitm через установленный сертификат в системе). Все предыдущие варианты как правило используют websocket и не работают, т.к. отфильтровываются squid'ом и режимом http1.1 only. Не спрашивайте что за злой гений такое придумал, но имею такой интернет на одном из объектов.

that's what i'm talking about; THAT'S how we get things done!

Ещё двух забыли, и ещё одна есть на подходе, надо придумать новую статью :)

... например о том как делать цепочки из двух прокси серверов ;)

Да там вообще невелика наука (у промежуточного сервера будет inbound как у сервера, а outbound как у клиента), на отдельную статью не тянет.

... эхх.. (( дело а том что "невелика наука" только для того кто в этом хорошо разбирается) А им и про серверы статьи не нужны я думаю - сами все установят. А вот тем кто делает по вашим статьям - для тех как раз наука велика... Я пытался гуглить - но доступных инструкций не нашел. То есть на первом сервере надо установить всё как в вашей статье . Только в конфиге надо (где то как то указать адрес второго сервера?) Тут мало того что надо хорошо понимать где и что указать - да еще соблюсти пунктуацию и все скобочки правильно расставить - ума не приложу.. А дальше? На втором сервере что? Надо тоже установить Xray? А что в конфиге? Где брать данные для входного конфига? ( и соответственного для выходного "как в клиенте"? ) ... тут короче еще какая "наука" .. Может все таки опишите поподробнее?

Не совсем так.

У каждого сервера (да и у клиента) в конфиге указываются inbounds (как он будет принимать подключения) и outbounds (как подключения будут уходить в интернет).

В случае с двумя серверами, inbounds у них могут быть вообще одинаковыми, но у промежуточного сервера outbound должен указывать на второй сервер.

Возьмем пример с Shadowsocks, он проще:

На втором (выходном) сервере все очень просто, как в статье:

конфиг второго сервера
{
  "log": {
    "loglevel": "info"
  },
  "routing": {
    "rules": [],
    "domainStrategy": "AsIs"
  },
  "inbounds": [
    {
      "port": 23,
      "tag": "incoming",
      "protocol": "shadowsocks",
      "settings": {
        "method": "2022-blake3-aes-128-gcm",
        "password": "aaaaaaaaaaaaaaaabbbbbbbbbbbbbbbb",
        "network": "tcp,udp"
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",
      "tag": "direct"
    },
    {
      "protocol": "blackhole",
      "tag": "block"
    }
  ]
}

На первом (промежуточном) сервере inbound будет точно такой же (но можно назначить другой порт и другой ключ клиента, будет лучше), а outbound должен указывать на второй сервер:

конфиг первого (промежуточного) сервера
{
    "log": {
        "loglevel": "info"
    },
    "inbounds": [
      {
        "port": 23,
        "tag": "incoming",
        "protocol": "shadowsocks",
        "settings": {
          "method": "aes-128-gcm",
          "password": "aaaaaaaaaaaaaaaabbbbbbbbbbbbbbbb",
          "network": "tcp,udp"
        }
      }
    ],
    "outbounds": [
        {
            "protocol": "freedom",
            "tag": "direct"
        },
        {
            "protocol": "blackhole",
            "tag": "block"
        },
        {
          "protocol": "shadowsocks",
          "tag": "nextserver",
          "settings": {
            "servers": [
              {
                "address": "YourSecondServerIPAddress",
                "port": 23,
                "method": "2022-blake3-aes-128-gcm",
                "password": "aaaaaaaaaaaaaaaabbbbbbbbbbbbbbbb"
              }
            ]
          }
        }
    ],
    "routing": {
        "rules": [
            {
                "inboundTag": [
                    "incoming"
                ],
                "outboundTag": "nextserver",
                "type": "field"
            }
        ],
        "domainStrategy": "AsIs"
    }
}

и там же указано правило роутинга, что все подключения, приходящие из "incoming" нужно передавать на "nextserver".

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

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

routing rules
   "routing": {
        "rules": [
            {
                "type": "field",
                "domain": [
                    "regexp:^([\\w\\-\\.]+\\.)ru$" ],
                "outboundTag": "freedom"
            },
            {
                "type": "field",
                "ip": [
                    "geoip:ru"
                ],
                "outboundTag": "freedom"
             },
             {
                 "type": "field"
                 "inboundTag": [
                     "incoming"
                 ],
                 "outboundTag": "nextserver"
            }
        ],
        "domainStrategy": "AsIs"
    }

Вместо Shadowsocks можно использовать VLESS/XTLS - тогда inbounds будет в точности как описанный в статье, а outbounds можно взять из примеров, там почти все то же самое. Можно иметь VLESS/XTLS только на первом сервере, а на второй подключаться через Shadowsocks - будет чуть быстрее.

А чтобы не ошибаться со скобочками и запятыми, можно использовать любой онлайновый JSON-валидатор - он и все ошибки подсветит где надо, и няглядно выровнять код по скобочкам может.

Спасибо огромное! Просто Огромное! Благодаря вашему обьяснению с примерами конфигов - которые можно сравнить и понять что куда относится и где какой синтаксис - я вроде с этим разобрался. Настроил последовательно два сервера VLESS -> SS. Заодно добавил на другой сервер с Naive "до кучи" еще и SS ( в качестве тренировки)))) И отдельное спасибо за совет с он лайн - валидатором.

Но возник вопрос : а почему необходимо избегать посещения через прокси зоны RU ? (кроме лишнего трафика и нагрузки - это несущественно). Какие риски это несет? ( я вот думаю - нужно ли взять дешевый vps в России для этого? )

а почему необходимо избегать посещения через прокси зоны RU ?

По закону Яровой у нас давно уже пишутся все метаданные интернет-активности (куда, когда, откуда были подключения, какие объемы данных передавались, и т.д.). В теории (но судя по тому, насколько часто встречается эти совет на китайских сайтах, у них это уже не в теории) возможно следующее: вы случайно (даже просто зайдя на какой-нибудь обычный сайт, который подгрушит скрипту или контент с другого сервера) через свой прокси делаете запрос на условный Яндекс/Мейл/ВК/Госуслуги. В логах метаданных видно: подключение от вас на какой-то внешний IP, и точно в тот же самый момент подключение с этого IP к сервису внутри страны (который, понятное дело, тоже подконтрольный), объемы переданных данных одинаковы (с учётом оверхеда протокола) - и после ряда таких совпадений можно однозначно сказать что на этом адресе работает прокси.

Либо ещё вариант: вы подключаетесь к сервису, сервис в ответ сканирует популярные порты IP-адреса с которого вы пришли, и видит там открытый 443 порт - тоже очень подозрительно, весьма вероятно что прокси, можно банииь. Поэтому варианта два: или делать цепочку из двух прокси-серверов или один сервер с двумя разными адресами (сопоставить будет многократно сложнее), или создавать правила чтобы трафик от клиента до местных сайтов шел напрямую, а на прокси-сервере для надёжности резался.

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

Даа.. получается что самое палево - это геолокация по соте или gps... тут наверное сложно маскировать.. А вот в цепочке двух прокси (даже если оба за бугром) - у последнего не будет ничего на 443 порту - ибо там уже выходной сервер маскировать не надо. Соответственно пробивка ничего не даст. Ну и в идею сравнивать ВСЕ входящие данные в страну (или на госуслуги) с исходящими частными миллионами адресов и квадратиллионами байт - задача пока не выполнимая. ( это возможно наверное в частных случаях - когда например есть какое то крамольное сообщение или угроза - тогда вот только один этот заход можно сравнить с исходящими - да и то наверное не со всеми -а с определенным кругом лиц подозреваемых). Короче - вся жесть в gps и сотовых...

! А вот как быть тогда с логами на российском промежуточном прокси? Там же будет видно откуда я зашел и куда пошел? То есть внутри хостера будет видна (и наверно заблокирована) попытка идти на забаненный роскомнадзором ресурс.?

А на Windows сервер XRay как поднять? :-[

Точно так же. XRay написан на Go и отлично работает под Винду, на гитхабе среди релизов есть .exe-шники. Конфиг тот же самый, только вместо systemd надо в автозагрузку пихать, или какую-нибудь утилиту чтобы запускать бинарь как системную службу.

Спасибо! Попробую... ))

Ребят у кого-нибудь получилось? Пытался и сайт Майкрософт и нвидиа и ничего не заработало, последняя команда на сервере вроде выполнилась без проблем, ничего не ругались, но в итоге через клиент подключиться не слог, а по предыдущей статье настроить смог и всё работола

Я всегда тестирую инструкции перед тем как публиковать статью, все работает :)

Тут методика такая же, как и при диагностике любых других сетевых сервисов.

  1. Сделать netstat -nlp и убедиться что сервер слушает на правильном порту и правильном адресе

  2. Как я писал в статье, прописать фейковый домен и ваш IP в hosts на десктопе и попробовать открыть браузером. Другой вариант - использовать CURL: curl -v --resolve www.microsoft.com:443:151.101.65.69 https://www.microsoft.com (вместо 151.101.xx.xx должен быть IP вашего сервера)

  3. Если тут все работает, то значит что-то не то с настройкой клиента. Стоит проверить настройки очень внимательно еще раз, а дальше можно поставить уровень логгирования XRay как debug вместо info/warning, перезапустить, попробовать подключиться клиентом и посмотреть логи.

Спору нет, гайд отличный но у меня пока не получается, будет время попробую твои советы, но кажется проблема не решиться, думал что-то на стороне vps

(Как же долго модерируются комментарии, майор из на листочек записывает что-ли...)

Сделал на втором VPS, прлучилось, спасибо! Есть ещё пару непонятных моментов: Если в NekoBox не поставить галочку впн или прокси то инет а не будет? Ну или пакеты не пойдут через наш сервер

  1. После последний команды в этом гайде сервак от сервака можно уже отключаться? Просто в предыдущем гайде показалось что нужно использовать screen чтобы процесс не убивался

Если в NekoBox не поставить галочку впн или прокси то инет а не будет? Ну или пакеты не пойдут через наш сервер

Да, тогда клиент будет запущкн, но трафик на прокси по умолчанию не пойдет (если только в какой-нибудь приложении вручную не задачють прокси как localhost:2080)

После последний команды в этом гайде сервак от сервака можно уже отключаться? Просто в предыдущем гайде показалось что нужно использовать screen чтобы процесс не убивался

В обоих гайдах Xray настраивается на запуск через systemd, то есть никакого screen'а не надо, systemd запускает Xray как фоновый процесс и сам перезвпустит его если он вдруг упал

Это понял, большое спасибо!

сделал, работает. но показалось что серфить стало чуть медленее чем ss2022. мб попробовать добавить опции в sysctl.

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

Для увеличения производительности можно настроить на сервере 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

как насчет более глубокого тюнинга?

net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.core.netdev_max_backlog = 10000
net.core.somaxconn = 4096
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_mem = 25600 51200 102400
net.ipv4.udp_mem = 25600 51200 102400
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.ipv4.tcp_mtu_probing = 1
net.ipv4.tcp_slow_start_after_idle=0

Интересно было бы почитать, какой конкретно эффект оказывают эти настройки и как к ним пришли.

А можете поподробнее рассказать про эти параметры и/или подскажите, что можно почитать про настройку bbr на серверах? Заранее спасибо!

# sysctl net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = reno cubic hybla vegas yeah

странно, нет bbr.

arch, ядро lts 6.1

необходимо добавить и ребутнуться

echo "tcp_bbr" > /etc/modules-load.d/modules.conf

Думаю, ребутиться не обязательно, достаточно будет сделать modprobe "tcp_bbr" и на всякий случай потом еще раз "sysctl -p"

да. можно так.

Если вот так пишит curl из командной то все верно? Просто не получилось через hosts чекнуть вроде написал туда мой ип адресс и майков, потом написал только мой ип адрес в браузер и ничего не вышло

Просто не получилось через hosts чекнуть вроде написал туда мой ип адресс и майков, потом написал только мой ип адрес в браузер и ничего не вышло

Наоборот, в браузере надо было написать www.microsoft.com :)

Если вот так пишит curl из командной то все верно?

Да, все верно

Спасибо огромное, я просто новичок еще в этом и рад что все верно вышло. Но почему у меня теперь гугл на китайском и еще проверки дает? Все время капчу кидает, это из-за того что я настроил без шедоусокс 2022? Я удалил его в json из inbouns для полной маскировки по вашему совету

Кстати, вы не знаете как уникальные ключи создавать, чтобы на одном устройстве работали, так сказать админка выданных ключей, не хотелось бы мне чтобы друг передавал другому мой ключ. Заранее спасибо

Через ПК работает, а через клиент V2ray не хочет, а вот прошлый гайд с бесплатным днс работает и на смартфоне, у меня два вопроса?

  1. Как использовать свой ДНС домен

  2. Почему не работает на мобильном?

Как использовать свой ДНС домен

Никак. Вся суть XTLS-Reality и вытекающих из нее достоинств заключается именно в использовании чужого домена

Почему не работает на мобильном?

Не знаю, я не телепат. У меня все работает. Тестировал и в V2rayNG, и в Nekobox, и в Shadowrocket - никаких проблем. Проверяйте внимательно настройки, попробуйте другой клиент.

Поправлюсь, опечатался - тестировал не в Shadowrocket, а в Wings X. Shadowrocket пока не умеет в Reality, хотя на конфиг из QR не ругается - может это ваш случай?

Повторюсь мы в другом гайде использовали сайт FreeDNS он вроде называется, а если вместо бесплатного арендовать домен .com у какого-нибудь хостера. При использовании FreeDNS чере зприложение v2ray всё работает. А в этом гайде я ссылаюсь на сайт нвидиа и не работает на смартфоне

Повторюсь, в предыдущем гайде описывалась настройка XTLS-Vision - для нее необходимо иметь свой домен (не важно, бесплатный или купленный). В этом гайде описывается настройка XTLS-Reality - ее нельзя (а точнее, бессмысленно) использовать со своим доменом.

Схема стопроцентно рабочая, ну пользуются уже многие люди, в том числе со смартфонов. Почему конкретно оно не работает у вас - сказать невозможно не видя конкретных конфигов сервера, логов сервера и настроек на смартфоне.

Если вы хотите использовать вариант из предыдущего гайда - он не так уж плох и довольно надежен. Вместо бесплатного домена с ним можно использовать платный купленный, настройки абсолютно те же самые (просто везде указываете этот свой новый домен, ну и само собой DNS-записи этого вашего домена должны указывать на IP вашего сервера).

Спрошу так: как мне настроить XTLS-Vision со воим доменом? Его тупо в конфигах указать или как?

Да, тупо в конфигах указать.

И DNS-записи этого вашего домена должны указывать на IP вашего сервера.

Если хочется иметь возможность работать через CDN - там чут сложнее, нужно чтобы домен обслуживался DNS-серверами Cloudflare (зависит от регистратора домена, у CF есть базовая инструкция как это сделать), включить у них в панели для этого домена или сабдомена проксирование вебсокетов, ну и использовать конфиг с websocket-транспортом. Но на постоянной основе использовать эту схему не рекомендую, только как запасную.

У меня к сожалению на смартфоне никак не получилось заставить работать, уже и в ручную вводил - всё равно ошибка. Это очень странно, настроил на ПК в NekoBox'e - Share - QR Cоde and link - не работает) Подожду может у кого тоже не заработает)

А что за приложение на смартфоне (название и версия)?

Андроид, v2rayNG v1.7.38

Эта версия очень старая, она основана на старой версии XRay и не поддерживает Reality. Поддержка Reality добавилась в 1.8.0, а последняя версия на сегодняшний день - 1.8.4

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

АХахаха прикол, это очень странно т.к. скачал приложение пару дней назад) Проверю, может обновление есть

ЗАРАБОТАЛО!!! Спасибо большое друг! Но это не очивидно было, я бы без тебя не разобрался бы, итак подытожу вдруг кто тоже сталкнётся!

На андроид вступаем в бета тест v2rayNG и получаем свещую версию которая поддерживает  Reality.

Но замечана проблема, с ПК в инсту не заходит, постоянно обновляет страницу после нажатия войти и всё, даже ошибок нет

Спасибо огромное, я просто новичок еще в этом и рад что все верно вышло. Но почему у меня теперь гугл на китайском и еще проверки дает? Все время капчу кидает, это из-за того что я настроил без шедоусокс 2022? Я удалил его в json из inbouns для полной маскировки по вашему совету

Товарищи вы не знаете как уникальные ключи создавать, чтобы на одном устройстве работали, так сказать админка выданных ключей, не хотелось бы мне чтобы друг передавал другому мой ключ. Заранее спасибо

Нет, от наличия или отсутствия Shadowsocks это не зависит.

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

PrivateKey и PublicKey у всех клиентов должны быть одинаковые, по-другому никак. ShortID и UUID можно сгенерить разные и добавит их в конфиг (чтобы, например, была возможность отобрать доступ у кого-то).

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

Благодарю! Значит мне создать новый конфиг в некобоксе как показано выше, но уже с другими uuid и shortid, а потом чтобы отобрать доступ у друга просто удалить конфиг? А с этого нового uuid могут сразу 2 чела заходить?

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

Новые UUID и ShortID надо в первую очередь добавлять в конфиг XRay, а потом соответственно в Некобокс у клиента. Если надо забрать доступ - тогда удалить из конфига XRay. С одним UUID одновременно могут сколько угодно народа сидеть, у меня по крайней мере получилось :)

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

Значит там где написано в конфиге "id": "4c3fe585-ac09-41df-b284-70d3fbe18884", нужно еще раз так нажав enter вторым добавить "id":цифры для друга закинуть в некобокс и сделать share?

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

Думаю не стоило мне удалять протокол носков2022

От наличия или отсутствия протокола SS такое зависить точно вообще никак не может.

А пок лиентам - там надо весь блок клиента продублировать, типа так:

"clients": [
          {
            "id": "4c3fe585-ac09-41df-b284-643ab001cd3e",
            "email": "user1@myserver",
            "flow": "xtls-rprx-vision"
          },
          {
            "id": "4c3fe585-ac09-41df-b284-70d3fbe18884",
            "email": "user2@myserver",
            "flow": "xtls-rprx-vision"
          }

        ],

С shortid точно также дублировать его блок вместе с приватным ключом где? А потом как нибудь можно в сервера глянуть чем друг с этим uuid занимается? то есть сколько скачал, качал ли торрент ну и посмотреть девайс?

Приватный ключ один на всех будете shortId новый просто добавить в массив, а можно тоже иметь один на всех - все рано без правильного VLESS UUID подключиться не получится.

Глянуть чем занимается - сложно. В XRay есть модуль статистики, если его активировать в конфиге и делать к нему запросы по API, то о покажет, сколько какой юзер накачал данных. Модно добавлять разные rules в завистмости от доменов (например, добавить правило для интерксающих сайтов) или протоколов (он умеет определять BitTorrent), направить эти правила на разные теги (у которых outbound будет тоже freedom) и трафик по ним тоже будет виден в статистике.

Ну или добавить уровень логгирования до info или debug, и парсить логи, он будет логгировать запросы от какого юзера ходят и куда - но там зависит от клиента, в ряде случаев будут видны прямо домены, а в ряде только уже отрезолвенные IP-адреса.

Что-то не завелось. Пишет

proxy/vless/encoding: invalid request version

хотя версии и xray и nekoray последние

Что-то не так с настройками значит.

Не могу понять, что не так. Все как в статье сделал

А вот взял и просто скопипастил ваш конфиг из статьи и тут же заработало

А когда вручную забивал, ругается на версию.

Что ж буду разбираться, где ошибся. Спасибо :)

Вот тут есть пример.

Спасибо за цикл ваших статей, однозначно буду наблюдать дальше. Такой вопрос: я могу, следуя инструкции из прошлой вашей статьи, прикрутить в этот конфиг vmess с фларой на всякий случай? Сайт имеется, и даже уже есть в cf, раньше пользовался ss+v2ray+cf, и надо ли nginx трогать для этого?

Проблема XTLS-Reality в том, что он не уживается на одном порту ни с чем кроме себя - там сама идея такая, что ещё на этапе установления подключения идёт определение свой-чужой, и если вдруг чужой, то без вопросов редирект на чужой домен - полная маскировка.

Поэтому просто так выкрутить вебсокеты с фларой не получится, но модно сделать такое:

  • повесить Xray с Reality слушать на IPv4, а Xray с вебсокетами для CDN заставить слушать на IPv6 (флара умеет проксировать IPv4-to-IPv6, потому клиенты могут быть даже IPv4)

  • к списку serverNames добавить свой домен, в качестве dest указать localhost:8443, а на 8443 порту локально поднять какой-нибудь SNI-прокси, который подключения с SNI вашего домена вернёт обратно на другой порт Xray (где он уже будет слушать вебсокеты для CDN), а все остальное отправлять на условный www.microsoft.com:443 - я так не пробовал, но в теории должно сработать, хотя схема довольно громоздкая.

Большое спасибо за развернутый ответ.

Есть ещё вопрос по geoip и правилам. В интернете вообще по этой теме одни китайские иероглифы, я немного не понял. Допустим у меня есть ПК и Андроид, на ПК стоит v2rayn, на Андроиде nekobox. Если я выставлю правила geoip, но при этом добавлю ру сайт в проксирование, то что будет главенствующим? Такой вопрос возник, потому что не понял, в каком режиме могут работать правила? На ПК у меня просто локалхост и порт слушает, а через proxifier выставляю нужные приложения, а в браузере через расширение соединяюсь, на Андроиде за неимением рута режим впн и там выбираю нужные приложение. Будут ли в таких режимах работать эти правила или нужно что-то вроде tun выставлять и гнать весь траффик через прокси, отсекая только ru geoip. И если на ПК достаточно включать/выключать прокси на каких угодно сайтах, то на Андроиде в хроме весь траффик идёт через мой прокси (знаю, что есть firefox, но я к хрому привык и пользуюсь только им)

И видимо я что то не так выставил, у вас в инструкции в nekobox поля для суффиксов, а где это найти в v2rayn и nekobox на Андроиде? У меня получается только в таком формате задать:

geoip:ru

geoip:private, но 2ip показывает айпишник впски

Если я выставлю правила geoip, но при этом добавлю ру сайт в проксирование, то что будет главенствующим?

Хороший вопрос :) Скорее всего зависит от того, какое правило первым встретится в конфиге.У XRay еще есть опция domainStrategy с вариантами AsIs, IPIfNonMatch, IPOnDemand - в случае с IPIfNonMatch он снала будет проверять по домену и применять правило для этого домена, если такое нашлось, а если не нашлось, то резолвить его в IP-адрес и дальше применять правила для этого IP если есть.

но 2ip показывает айпишник впски

2ip.ru имеет домен в зоне .ru, но по факту хостится в какой-то другой стране, отсюда и такой результат.

v2rayn и nekobox на Андроиде

Для v2rayN у меня сработал вот такой конфиг:

скриншоты

и в Custom rules вписать вот такое:

возможно вариант с доменом может привести к ложным срабатываниям для адресов типа www.rust.org, тогда можно оставить только geoip, для большинства случаев этого будет достаточно.

На rutracker через такой прокси не заходит почему-то

У меня заходит.

У вас хост в россии или зарубежом?

за рубежом.

есть пара в России, с одного заходит, с другогой нет (там ростелекомовская заглушка)

Кто то знает как прикрутить блокировщик рекламы в сервер?

У Xrayв базе geosites есть список с рекламными доменами, модно создать rule для "geosite:category-ads" и отправлять подключения к ним в blackhole. Либо установить какой-нибудь классическиц фильтр рекламы типа PiHole и прописать его в конфиге Xray-сервера как outbound типа socks/http-proxy.

Установил себе на сервер PiHole - но не понятно как его подключить к Xray? Что именно надо написать в "outbound " ? Подскажите пожалуйста.. Очень хочется рекламу порезать)

Можно ли в NekoBox нормально настроить автозагрузку, а то он после ребута включается, но запускать подключение (профиль) всё равно нужно каждый раз вручную. При этом галочка System proxy остаётся включённой и получается что после включения компа нет интернета пока не включишь профиль.

Там в менюшке настроек (самая первая кнопка) есть галочка типа Remember last profile, тогда он будет при старте автоматически запускать то подключение которое использовалось последним.

Спасибо! Сделал по инструкции, все работает!

Заметил интересный момент:
При проверке на утечку ip-адреса через webRTC на андроиде (V2RayNG) показывает утечку ip-адреса 26.26.26.1:

Вижу что в исходниках этот адрес определен константой. Но для чего? При использовании того же хоста на десктопе (Nekobox Linux) и на iOS (Wings X) никаких утечек нет.

Есть подозрение, что это как-то связано с реализацией Full Cone NAT для UDP. Модно попробовать включить (или наоборот выключить, если включено) на клиенте encoding как "packet" или "xudp" (у меня первый не заработал, а второй норм) и посмотреть изменится ли что-нибудь. Только надо чтобы версия сервера Xray была свежая, в 1.8.1 они там какой-то связанный с этим баг исправили

Если на сервере поднят Outline и Wireguad, установка XTLS-Reality ничего не испортит?

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

Действительно, на работу никак не повлияло. Столкнулся со следующей ошибкой:

[Info] infra/conf/serial: Reading config: /usr/local/etc/xray/config.json
xray[1287]: Failed to start: main: failed to create server > proxy/shadowsocks_2022: create service > decode psk: illegal base64 data at input byte 2
systemd[1]: xray.service: Main process exited, code=exited, status=23/n/a
systemd[1]: xray.service: Failed with result 'exit-code'.
systemd[1]: Started Xray Service.

Гугление не принесло успехов.

Что-то не так с ключом шифрования для shadowsocks в конфиге (длина или некорректные символы).

Вот только что разобрался)) Все завелось и работает на ура. Спасибо за статью, последний вопрос - как все это чудо поддерживать в актуальном состоянии? Как обновлять новыми версиями?

Просто проверять периодически, не проявилась ли новая версия в releases на гитхабе, а когда появится, если ставили руками - то точно так же скачать и заменить файлы, если ставили скриптом - обновление производится той же командой

При подключении из NekoBox на Винде получаю ошибку - [[VLESS] VLESS] test error: Get "http://cp.cloudflare.com/": context deadline exceeded. Не подскажите, как пофиксить ?

Не удается установить подключение с прокси. Причина может быть в абсолютно чем угодно - неправильные настройки клиента неправильные настройки сервера, фаервол, etc.

Не "взлетало", пока пытался редактить VL конфиг в NekoBox-е. SS заработал сразу. Потом удалил и просто пересоздал заново VL конфиг и ... всё запустилось. Может, кому поможет....

И на роутер бы всё это дело запилить ещё для полного счастья...

https://habr.com/ru/articles/728696/ - вот тут я упоминал клиенты для openwrt, но сам не тестировал, поэтому детально подсказать не могу

Если сравнивать с Outline, то скорость намного выше, у меня почему-то были фризы 2-4 секунды (периодически) при переходе по ссылкам. С Xray все отлично работает, пинг правда так себе с США.

Вопрос про Shadowsocks2022 в конфиге - Если его оставить и не пользоваться, он влияет как-то на маскировку?

Нет, не влияет.

А если есть mitm (подмена сертификатов), то такой вариант безопасен? Сам трафик шифруется еще чем-то помимо tls?

В случае с XTLS-Vision (а он работает и для XTLS-Reality), то там трафик не шифруется даже TLS - если подключение к удаленному серверу идет через TLS1.3, то на прокси трафик передается между сокетами "как есть" без дополнительного шифрования и шифруются только хендшейки.

VLESS полагается на TLS, поэтому там нет дополнительного слоя шифрования. Можно использовать более старый VMess и поставить там тип шифрования отличный от none - тогда данные будут шифроваться еще раз.

Или другой вариант - очень часто корпоративный прокси с MitM делают исключение для некоторых доменов с certificate pinning и HSTS (например, того же *.microsoft.com) - тогда можно маскироваться именно под них.

А как у него логирование отключается? У меня за несколько дней syslog и daemon.log забили всё место на VPS. Понимаю, что в теории нужно настроить ротацию, но если оно стабильно работает, мне эти логи соединений в принципе не особо нужны. Да и на ПК лог-файл Nekobox многовато весит. А настройки не нашёл.

В самом начале конфига "loglevel": "info" заменить на более высокий уровень (например, error).

У Nekobox тоже настраивается Basic Settings -> Common -> LogLevel

И у демона (в xray.service) ещё нужно выставить в блоке [Service]

LogLevelMax=4

для уровня warning, например. Иначе каждое соединение будет в логе.

Поставил по вашей инструкции все. Подключился через nekobox, nekoray, все работает. Вот только скорость на скачку 30 мбит максимум, на отдачу 100. Потестил на самом серваке - там по 200 туда-обратно. Можете подсказать, из-за чего это может быть или это так и задумано?

У меня изи прокачивает 120-130 мегабит в обе стороны, тут кто-то выглядавал уже скриншоты спидтеста на 200+ мегабит/с.

Как вариант - попробовать потюнить TCP-стек системы, как в этом комментарии

Спасибо, помогло. Теперь почти по 100 туда-обратно на 100 мбитном канале

после включение bbr, еще веселей стало :)

Пример настройки того же самого для sing-box сервера
{
  "inbounds": [
    {
      "type": "shadowsocks",
      "listen": "::",
      "listen_port": 23,
      "network": "tcp",
      "method": "2022-blake3-aes-128-gcm",
      "password": "aaaaaaaaaaaaaaaabbbbbbbbbbbbbbbb"
    },
    {
      "type": "vless",
      "tag": "vless-in",
      "listen": "::",
      "listen_port": 443,
      "users": [
        {
          "name": "test",
          "uuid": "4c3fe585-ac09-41df-b284-70d3fbe18884",
          "flow": "xtls-rprx-vision"
        }
      ],
      "tls": {
        "enabled": true,
        "server_name": "www.microsoft.com",
        "reality": {
          "enabled": true,
          "handshake": {
            "server": "www.microsoft.com",
            "server_port": 443
           },
           "private_key": "GOTPj_klK7_j_IvjxiCtyBL80RYotYSOdBBBSfFOMH4",
           "short_id": [
              "aabbccdd"
           ],
           "max_time_difference": "1m"
        }
      }
    }
  ],
  "outbounds": [
    {
        "type": "direct",
        "tag": "direct"
    },
    {
        "type": "block",
        "tag": "block"
    }
  ]
}

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

пример конфига клиента (полный)
{
  "dns": {
    "rules": [
      {
        "domain": [],
        "domain_keyword": [],
        "domain_regex": [],
        "domain_suffix": [],
        "geosite": [],
        "server": "dns-direct"
      }
    ],
    "servers": [
      {
        "address": "https://8.8.8.8/dns-query",
        "address_resolver": "dns-local",
        "detour": "proxy",
        "strategy": "",
        "tag": "dns-remote"
      },
      {
        "address": "underlying://0.0.0.0",
        "address_resolver": "dns-local",
        "detour": "direct",
        "strategy": "",
        "tag": "dns-direct"
      },
      {
        "address": "underlying://0.0.0.0",
        "detour": "direct",
        "tag": "dns-local"
      }
    ]
  },
  "inbounds": [
    {
      "domain_strategy": "prefer_ipv4",
      "listen": "127.0.0.1",
      "listen_port": 2080,
      "sniff": true,
      "sniff_override_destination": false,
      "tag": "mixed-in",
      "type": "mixed"
    }
  ],
  "log": {
    "level": "info"
  },
  "outbounds": [
    {
      "domain_strategy": "prefer_ipv4",
      "flow": "xtls-rprx-vision",
      "packet_encoding": "xudp",
      "server": "YOUR_SERVER_GOES_HERE",
      "server_port": 443,
      "tag": "proxy",
      "tls": {
        "enabled": true,
        "reality": {
          "enabled": true,
          "public_key": "YOUR_PUBLIC_KEY",
          "short_id": "YOUR_SHORTID"
        },
        "server_name": "www.microsoft.com",
        "utls": {
          "enabled": true,
          "fingerprint": "chrome"
        }
      },
      "type": "vless",
      "uuid": "YOUR_UUID"
    },
    {
      "tag": "direct",
      "type": "direct"
    },
    {
      "tag": "bypass",
      "type": "direct"
    },
    {
      "tag": "block",
      "type": "block"
    },
    {
      "tag": "dns-out",
      "type": "dns"
    }
  ],
  "route": {
    "auto_detect_interface": true,
    "final": "proxy",
    "geoip": {
      "path": "/opt/nekoray/geoip.db"
    },
    "geosite": {
      "path": "/opt/nekoray/geosite.db"
    },
    "rules": [
      {
        "outbound": "dns-out",
        "protocol": "dns"
      }
    ]
  }
}

А чем отличается этот конфиг, от того что в статье? Кстати приложение для ios Wings X, пропало из магазина appstore. Не знаю с чем связанно, я успел скачать. Ваши настройки по geoip для этого приложения, очень помогли.

Попробовал использовать ваш конфиг для сервера и клиента. Сервер стартует отлично, а вот у клиента проблема:

(packet-tunnel) error: create service: create service: parse route options: parse dns rule[0]: missing conditions

Не подскажите в чем может быть проблема?

Что-то не так в вашем конфиге, в том месте где задаются настройки роутинга.

Подскажите, а что добавить, чтоб клиент NekoBox или v2rayNG для Windows смог через http прокси ходить?

Не совсем понятно, что имеется в виду. Нужно подключаться с помощью клиента к простому прокси? Или ходить до xray/ss/etc. через http прокси? Или что?

Второй вариант. Нужно пройти через корпоративный http прокси.

В NekoBox создать сначала прокси с типом "HTTP", прописать в него настройки корпоративного прокси. Потом создать прокси уже нормального типа (например VLESS, можно попробовать напрямую по TLS, можно попробовать c вебсокетами, можно даже попробовать без TLS, но с вебсокетами; еще вариант - VMess с HTTP-обфускацией). Потом создать новый сервер типа "Proxy chain", и в него добавить сначала корпоративный HTTP прокси, потом уже ваш нормальный.

Но вероятность успеха тут не гарантирована, зависит от того, что пропускает или не пропускает корпоративный сервер.

Помогите разобраться. Где мог налажать и как исправить?
По инструкции настроил. Работает.
Использовал протоколы XTLS-Reality / SS из инструкции.
Вчера получил бан ("Недоступно в вашей стране") от ИИ-чата Bing.
Получается геолокацию спалили.
Переключил на конфиг wireguard (находится на том же сервере, такой же ip адрес) - работает.
Попробовал другой носок (нашёл в открытом доступе) - работает.
На ПК и на смартфоне одинаковая картина - бан.

Настроил серверную(vps) и клиентскую(домашний сервер на beelink) части. Ошибок нет, вро все работает, но я не понимаю как мне подключиться к прокси? Помогите кто силен в этом, я вообще дуб-дубом в этих маршрутизациях. При наборе curl ifconfig.me, выдает адрес провайдера, а не vps

root@beelink:~# ip route
default via 192.168.1.1 dev enp1s0
192.168.1.0/24 dev enp1s0 proto kernel scope link src 192.168.1.4

root@beelink:~# netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:10123 0.0.0.0:* LISTEN 440/sshd: /usr/sbin
tcp 0 0 127.0.0.1:1080 0.0.0.0:* LISTEN 428/xray
tcp 0 0 127.0.0.1:1081 0.0.0.0:* LISTEN 428/xray
tcp6 0 0 :::10123 :::* LISTEN 440/sshd: /usr/sbin
udp 0 0 0.0.0.0:68 0.0.0.0:* 411/dhclient
udp 0 0 127.0.0.1:1081 0.0.0.0:* 428/xray

Может еще какая информация нужна?

Xray же не впн, а прокси. Можно было на домашнем сервере ничего не поднимать, а просто на клиентском ПК поставить оболочку с xray и подключаться сразу к впс.

Или повесьте на beelink порты tcp 1080/1081, udp 1081 на интерфейс, смотрящий в локальную сеть и тогда на ПК можно будет в браузере указать сокс прокси beelinklocalip:1080 или не в браузере, если поставите клиент xray с гуи.

Дошло до меня, спасибо. Только мне именно в beelink нужен прокси для некоторых сервисов. Получается, что мне нужно теперь , например через системный прокси в debian прописать 127.0.0.1:1080 и все через xray-client пойдет пойдет?

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

Ничего у меня не получается, хоть тресни. С настройками разных типов серверов никаких проблем, но вот то единственное, что мне необходимо, автор в качестве примера не указал-"Как на linux Debian без gui запустить это хозяйство" Я уже кучу всяких разных конфигов клиентов перепробовал, ни в какую. Пошел я wireguard лучше настрою))

  1. Настроить клиент xray или sing-box, как описано в статье.

  2. Протестировать, что он работает, например, curl http://2ip.ru должен показать ваш реальный IP, а curl -x "http://localhost:1080" http://2ip.ru (вместое 1080 - порт вашего прокси) должен уже показать IP-адрес вашего прокси-сервера.

Все - после этого уже все зависит от конкретных приложений, потому что прокси в каждой проге настраивается по-своему (где-то в конфигах, где-то опциях командной строки, какие-то умеют брать его из переменных окружения "http_proxy", "https_proxy", "socks_proxy").
Если какие-то проги с прокси совсем не дружат, или лень настраивать - можно использовать redsocks для прозрачного заворачивания их трафика на прокси.
Другой вариант - clash или sing-box в TUN-режиме, тогда оно будет работать в точности как VPN-клиент с tun-интерфейсом, но надо быть аккуратно с машрутами, можно по глупости петлю через локалхост устроить.

Пример клиентского конфига в TUN-режиме можете привести?

Подскажите если перенести работу xray на 444 порт например, оно будет корректно работать ? Просто на сервере крутится nginx и два сайта https порт занят. При переносе xray на 444, он работает и домен microsoft открывается если прописать для него публичный адрес сервера в host.

Нельзя переносить на 444 порт. Работать будет, но со стороны стороннего наблюдателя это очень подозрительно и множит на ноль всю идею Reality про маскировку под аутентичный сервер.

Если нужно чтобы работало вместе с Nginx - или разруливать по SNI (модулем ssl_preread, или отдельным haproxy), или или забить на Reality и поднять обычный VLESS+XTLS-Vision и поставить там Nginx fallback'ом, как описывалось в предыдущих статьях.

Простите за глупый вопрос. Я разрулил свои домены с помощью модуля ssl_preread, но только я не понимаю как интегрировать совместную работу с reality. Можете дать подсказку )

Эм... если разрулили, то и интегрировать ничего не надо.

При настроенном ssl_preread подключения с доменом вашего сайта уходят на nginx, а все остальные - на Xray. Xray настраивается прямо так как написано в статье.

Я настроил таким образом, такая конфигурация не демаскирует со стороны стороннего наблюдателя ?

config
map $ssl_preread_server_name $sni_name {
    www.microsoft.com        reality;
    torr.******.pp.ua      torr;
    adg.*****.pp.ua       adg;
    default                  reality;
}

upstream reality {
    server 127.0.0.1:8443;
}

upstream naive {
    server 127.0.0.1:7443;
}

upstream torr {
    server 127.0.0.1:1443;
}

upstream adg {
    server 127.0.0.1:4443;
}

server {
    listen          443 reuseport;
    proxy_pass      $sni_name;
    ssl_preread     on;
    proxy_protocol  on;
}


server {
    listen 443 udp;
    proxy_pass 127.0.0.1:443;
}

Мои домены работают корректно, только со стороны сервера http запрос на домен который указан в reality выполняется c ошибкам. Клиент прокси также работает.

resolver
Added www.microsoft.com:443:89.187.129.*** to DNS cache
* Hostname www.microsoft.com was found in DNS cache
*   Trying 89.187.129.***:443...
* Connected to www.microsoft.com (89.187.129.182) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.0 (OUT), TLS header, Certificate Status (22):
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.0 (OUT), TLS header, Unknown (21):
* TLSv1.3 (OUT), TLS alert, decode error (562):
* error:0A000126:SSL routines::unexpected eof while reading
* Closing connection 0
curl: (35) error:0A000126:SSL routines::unexpected eof while reading

Проблему с http запросом решил добавив в конфиг xray.

 "tcpSettings": {           
   "acceptProxyProtocol": true        
 },         
"sockopt": {           
  "acceptProxyProtocol": true  
},

Также со стороны клиента подключение к серверу по 443 порту происходит, значит все работает как надо )

Да, все правильно. У вас в конфиге nginx стоит proxy_protocol onчто означает ко всем проксируемым подключениям nginx будет добавлять специальный заголовк с ip-адресом клиента, и сервис, на который проксируется запрос, должен быть к этому готов.

спасибо, это то что мне было нужно!


а можно как то shadowsock так же разруливать?

Shadowsocks не использует TLS, поэтому и разруливать не надо, достаточно просто повесить его на другой порт.

Если настроить всё так, как сказано в этой статье, то сервисы вроде whoer обнаруживают ДНС-сервера российского провайдера, раздающиеся по DHCP. Как нужно настраивать DNS в рамках данной схемы, чтобы скрыть факт хождения на заблокированные ресурсы от провайдера, и при этом не выглядеть подозрительно?

Это зависит не от настроек сервера, а от клиенстких приложений.

При использовании system proxy mode некоторые тупые аппликухи сначала резолвят домены в IP (используя системный DNS, да), а уже потом идут на эти IP через прокси.

Решения два:

  1. Использовать DoH в браузерах вместо обычного DNS, благо он поддерживается уже почти везде;

  2. Использовать TUN-режим (его еще иногда называют VPN-mode) вместо system proxy - тогда на виртуальном интерфейсе выставится свой DNS-сервер (например 8.8.8.8 или 1.1.1.1) и все DNS-запросы будут уходить в туннель (то есть на прокси-сервер). Некоторые клиенты умеют даже ставить DNS в 127.0.0.1 и резолвить все приходящее на него через DoH.

@MiraclePtr, огромное спасибо за цикл статей!

Хотел бы поделиться ещё тем, как сделать так, чтобы соединение от VPS до сайтов ходило через сторонний VPN.

Hidden text

Таким образом иногда удаётся обходить ограничения самих сайтов, которые понимают, что ваш VPS из компании нежелательной страны, хоть и физически находится в другой стране. Например, у меня при прочих равных через VPS напрямую тикток показывает замороженный русский вариант, а через такую схему — рабочий западный.

Т.е. общая схема будет такая:

  1. От вас в стране с цензурой до заграничного VPS будет продолжать работать XRay с XTLS-Reality (или другой XRay вариант), чтобы скрывать сам факт обхода блокировок.

  2. От вашего заграничного VPS трафик будет идти к оплаченному серверу VPN какой-нибудь компании, предоставляющей такие услуги. Он будет идти через обычный OpenVPN шифруясь, но не маскируясь (считаем, что на той территории факт наличия VPN не пытаются вычислять и срубать), таким образом, мы скрываем статичный IP уже нашего VPS, плюс получаем возможность ходить через разные страны. Наш VPS относительно именно VPN будет выступать просто клиентом.

Я буду считать, что у вас настроен VPS по этой статье, но, в принципе, сойдёт любой работающий XRay-конфиг.

Идём на сайт вашего VPN провайдера, логинимся, получаем от них ovpn-файл. Обычно такие файлики дают скачивать, если мы выберем опцию в стиле, что хотим настроить VPN-клиент на роутере, либо на линуксе. Вот, чисто как пример.

Нам потребуется один файлик с одной локацией, через которую будем выходить. Логично взять ту же страну/город, в которой находится ваш VPS, чтобы меньше терять на пинге. Потом можно будет заморочиться с переключением на другие страны, если захотите. Скачиваем нужный ovpn-файл. Если скачали на свою машину, на VPS можно перекинуть по SSH (с винды см. Передача файлов с Windows на Linux Ubuntu по SSH).

Далее все инструкции на VPS.
Ставим OpenVPN:

apt update
apt install openvpn -y

Переименовываем ovpn-файл в client.conf и переносим его в папку /etc/openvpn/
Открываем полученный файл на редактирование:

nano /etc/openvpn/client.conf

Находим там строчку

auth-user-pass

и меняем её на

auth-user-pass /etc/openvpn/pass

Создаём файл

nano /etc/openvpn/pass

В нём записываем две строчки:

логин
пароль

Это те логин и пароль, с которыми вы подсоединяетесь к VPN. Защитим их уровнем доступа:

chmod 400 /etc/openvpn/pass

Дальше снова открываем на редактирование файл

nano /etc/openvpn/client.conf

и дописываем в нём в конце файла такие строчки:

# Писать максимум 50 повторяющихся сообщений в логи (чтобы их не засорять)
mute 50

# Не рулить маршрутизацией. ВПН захочет развернуться для всех соединений,
# но это совсем не то, что нам нужно, маршрутизацией мы будем рулить сами.
route-nopull

# Сохранять соединение и переподключаться, если оно прерывается
keepalive 10 60

# Скрипт, который будет выполняться для установленного соединения
# Там мы будем рулить маршрутизацией
up /etc/openvpn/custom.sh

Создаём теперь вышеупомянутый скрипт

nano /etc/openvpn/custom.sh

В нём:

#!/bin/sh
# Таблица 200 пойдёт через tun0 (т.е. через впн)
ip route add default dev tun0 table 200

# Удаляем и добавляем правило, что пакеты, маркированные
# числом 2, будут отброшены
ip rule delete fwmark 2 blackhole
ip rule add fwmark 2 blackhole

# Удаляем и добавляем правило, что пакеты, маркированные
# числом 2, будут отправлены в таблицу 200 (и пойдут через впн).
ip rule delete fwmark 2 table 200
ip rule add fwmark 2 table 200

# Применяем правила
ip route flush cache

Мы получим два правила, которые касаются пакетов, маркированных двойкой, при этом их порядок будет такой, что сначала пакет полетит на впн, а если не получится (впн будет выключен), то пакет не пойдёт никуда. Если отбрасывание не написать, то мы при отсутствии впн будем ходить напрямую с VPS.

Даём скрипту права на выполнение:

chmod +x /etc/openvpn/custom.sh

Теперь залезаем в конфиг xray:

nano /opt/xray/config.json

И у outbounds меняем freedom с такого:

{
	"protocol": "freedom",
	"tag": "direct"
},

на такой:

{
	"protocol": "freedom",
	"tag": "vpn",
	"streamSettings": {
		"sockopt": {
			"mark": 2
		}
	}
},

Т.е. все исходящие из xray пакеты, которые летят напрямую к сайтам (freedom), будут средствами XRay помечаться как 2, роутингом все пакеты с меткой 2 будут заворачиваться в таблицу 200, а она будет лететь через VPN.

Теперь осталось только запустить клиент OpenVPN как демона:

nano /etc/default/openvpn

Раскаменчиваем # у строчки

AUTOSTART="all"

Дальше регаем демона:

systemctl enable openvpn@client.service

Перегружаем демоны:

systemctl daemon-reload

Стартуем OpenVPN:

service openvpn@client start

И перегружаем xray:

systemctl restart xray

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

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

Ориентировался на эти инструкции:

UPD: у этого способа обнаружились такие проблемы:

  1. DNS leak — сервисы определения утечки детектят VPS. Пробовал всякое, но забороть так и не смог, если кто подскажет, буду благодарен.

  2. Проблемы на некоторых провайдерах (обнаружил, когда был в другом регионе), тогда как напрямую через VPS всё работает — увы, разбираться тогда было некогда, просто ходил напрямую.

  3. Почему-то пару раз не работал телеграм (ios) — уходил в бесконечное обновление каналов, тогда как напрямую через VPS работал. Возможно, что-то на стороне VPN или tg? Твиттер, например, работал при этом.

Вроде настроил, всё работает, но почему то chatGPT пишет что сервис не доступен в этой стране. Ещё инстаграм сбрасывает подключение (HTTP ERROR 429) или выдаёт заглушку на любую страницу "К сожалению, эта страница недоступна". Это единственные сайты где я столкнулся с таким поведением, не могу понять что с этим делать.

Ещё добавлю что до этого настраивал по прошлому гайду (Shadowsocks, VLESS, XTLS-Vision) и сидел на другом хостинге, была абсолютно та же ситуация.

Пока что никто о таком же не сообщал.

Как вариант - если используете proxy mode, то попробовать использовать VPN mode, или наоборот. Ещё вариант - если включен ipv6, то выключить, и наоборот, если выключен, то включить.

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

Начать можно с посещения

https://ipv6-test.com/

и

https://yandex.ru/internet/

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

Я на https://browserleaks.com/ip проверял - нигде ничего не торчит. IP адрес везде тот что на VPS, WebRTC отключил чтоб не палил, DNS leak test показывает только нидерландские сервера google и cloudflare. Всё что есть это строчка в информации о браузере "language: ru" сомневаюсь что блочат по ней.
Единственное, оказывается у меня нет ipv6 потому что хостинг даёт только ipv4. Не уверен что его там можно как то включить, но на обнаружение локации это никак влиять не должно.
Ещё зашел в логи xray на сервере, там подключение к instagram ничем не отличается от подключения к другому домену, ничего подозрительного.

На всякий случай, может кому-то другому пригодиться в будущем:

Если используется VPN-режим, при этом в клиенте не включен IPv6 (на сервере - не важно), и при этом IPv6 предоставляется провайдером - есть вероятность, что трафик до IPv4-ресурсов будет идти через прокси, а до IPv6-ресурсов - напрямую.
Это не проблема конкретно V2Ray/Xray/SS, это будет для любых прокси/VPN, работающих через TUN. Решение: включить IPv6 в клиенте (даже если сервер не поддерживает), либо отключить IPv6 на сетевом устройстве (LAN или WiFi).

Но с включенным IPv6 в TUN-режиме есть другая проблема, уже более специфичная. Nekobox (возможно другие клиенты тоже, не проверял) в качестве "внутреннего" IPv6 адреса использует адрес из такого зарезервированного диапазона (ULA), где они должны генерироваться рандомно, и вероятность совпадения двух рандомных адресов ничтожна. То есть такой адрес должен быть уникальным, но в Nekobox он наоборот захардкожен один для всех случаев, и в итоге некоторые сервисы, которые могут каким-то образом получать и анализировать локальные адреса клиентов (например, Google с его телеметрией в Chrome и в Android), считают всех клиентов с таким внутренним адресом... одним и тем же клиентом, после чего матчат их то ли с геолокацией, то ли с другими внутренними адресами, то ли и с тем и с тем, и в итоге в ряде случаев все пользователи Nekobox (и возможно других клиентов) для Гугла выглядят как юзеры откуда-то из Ирана, Китая или Азербайджана, вплоть до того, что со временем Гугл начинает считать публичный адрес прокси-сервера тоже иранским/китайским/etc, и это приводит к довольно забавным эффектам.
Варианты решения: не использовать TUN-режим (он же VPN mode), либо в правилах маршрутизации клиента или сервера запретить доступ до Google по IPv6, либо пропатчить клиент чтобы он использовал какой-нибудь другой внутренний адрес.

Мне тут @Marvy написал в личку и прояснил в чём дело. Проблема в хостинге. Я пока пробовал два - TimeWeb и LLhost, и если у первого очевидно российское происхождение, то второй активно делает вид что он из европы. Оба в бане у вышеупомянутых сайтов. Для проверки, по совету, поднимал на обоих WireGuard и столкнулся с теми же блокировками.

Такое встречается, да. У Аезы, например, адреса амстердамских серверов почти пол года, если не больше, всеми известными базами определялись как российские

chatgpt блокирует подключение с большинства датацентров, не важно какой хостер.

Upd: такая возможность есть если использовать многоуровневую схему с SNI-proxy (типа haproxy), при необходимости расскажу в комментариях.

Очень интересно, расскажите :)

Сейчас стоит версия 1.8.3 и со вчерашнего дня XTLS-Reality не работает. В логах Nekobox такое:

ERROR[0000] dns: exchange failed for EIFCFFFDFECACACACACACACACACACACA. IN NIMLOC: Post "https://8.8.8.8/dns-query": EOF

ERROR[0000] dns: exchange failed for dmd.metaservices.microsoft.com. IN A: Post "https://8.8.8.8/dns-query": EOF

ERROR[0001] dns: exchange failed for ipv4only.arpa. IN A: Post "https://8.8.8.8/dns-query": EOF

ERROR[0001] dns: exchange failed for example.org. IN A: Post "https://8.8.8.8/dns-query": EOF

ERROR[0001] dns: exchange failed for detectportal.firefox.com. IN A: Post "https://8.8.8.8/dns-query": EOF

ERROR[0001] dns: exchange failed for dmd.metaservices.microsoft.com. IN A: Post "https://8.8.8.8/dns-query": EOF

Так же не работает и на телефоне. Причем шадоусокс пашет, мистика какая-то.

Удалось решить данную проблему заменой сервера www.microsoft.com:443, на любой другой из списка.

MiraclePtr не в курсе что там с майкрософтом? :)

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

Спасибо, тоже microsoft стоял и отвалился

Microsoft отключала протокол TLS 1.3 на несколько дней на своем сайте в это время (причину не знаю, просто через TLS Checker проверил). Для работы XTLS-Reality требуется TLS 1.3 и HTTP/2, это и привело к неработоспособоности с www.microsoft.com. Пару недель уже как работает и с www.microsoft.com, кстати, TLS 1.3 включили в какой-то момент. Для простой проверки можно использовать RealiTLScanner.

Перестал работать. Поменял microsoft на другой - заработало. Зашел сюда спросить/сообщить - а тут уже написали. Интересно только что бы это значило - и не начнутся ли отваливаться другие сайты маскировки?

Да, было бы неплохо знать каким образом можно выяснить, что сайт поддерживает такой схематоз с сертификатами и насколько это надёжно..

Наверное я плохо усвоил материал, но как рулить разных килентов на разные выходы?

Пример:
Есть 2 клиента:
"inbounds": [

{
"settings": {

"clients": [
{
id:A,
},
{
id:B
}
],

Клиент А, хочет web browsing - вот ему второй прокси который выпустит его в общую сеть.
Клиент Б хочет пообщаться с сервисом висящем на локалхост:5050 сервера.

Прошу заметить, что вызывающий софт на клиенте ничего не знает про удаленный адрес. Т.е. мы хотим, к примеру, подключиться SSH через тунель и все что мы знаем это пара IP-PORT на локальной машине, где крутится клиент. Ок, inbounds я могу наплодить несколько и сделать отдельный для нужного мне подключения (т.е. у этой штуки будет свой уникальный ID, как бы второй клиент на той же удаленной от сервера машине).

Как их разрулить в конфигурации?

Сам спросил, сам и добавлю =)

"routing": {
"domainStrategy": "AsIs",
"rules": [
{
"type": "field",
"user": "user@myserver",
"ip": "8.8.8.8",
"outboundTag": "ssh"
},
{
"type": "field",
"user": "user@myserver",
"outboundTag": "proxy"
}
]
},

При таком кривом подходе, мы можем через наш SOCKS5 пойти на 8.8.8.8:22 и нас "сплюнет" на нужный outbound, который может быть простым freedom с перенаправлением на адрес по выбору (локалхост:порт).

Такой вариант рабочий, но мне не нравится. Возможно я вообще не туда копаю, а смотреть нужно в сторону tproxy?..

И там ошибка

  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
	"type": "field",
	"ip": [
	  "10.19.0.8/32"
	],
	"network": "tcp",
	"inboundTag": [],
        "outboundTag": "direct",
	"enabled": true
      }
    ]
  },

Вот в такой конструкции можно ловить запросы по конкретному IP. Добавьте туда "port" и получится нужная связка.

Другое дело, что если применять sockstun или его аналоги (tun2socks) то получаетя некая петля, когда пакеты не понимают куда им деваться (мы же шлем их на адрес интерфейса tunX и его же указываем в "ip" ). Как эту петлю побороть я не придумал, но это решается виртуальными адресами на любом другом интерфейсе. И все - вот нам VPN готов вообще без каких-либо канальных демонов. Т.е. это почти аналогично cloak, ток приходится применить еще одно средство проксирования.

З.Ы. И да, это дикий геморой с прописыванием адресов тут там и здесь ручками. Но увы, так как изначально решение не подразумевало классического "сетевого" транспорта, то приходится мучаться. Тема для крутого стартапа =)

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

На 07.08.2023 все версии ветки 1.8.x имеют статус pre-release.
Если скрипту при запуске передать параметр '--beta', то будет установлен последний pre-release.

Спасибо за инструкцию!

На DigitalOcean завелось без проблем, на Azure с теми же настройками ни в какую не коннектится, мб кто скажет, в какие настройки азура стоит смотреть? Не особо шарю во всём этом :(

В статье описано как подключить компьютер или телефон. У меня есть другое устройство: шлем виртуальной реальности Oculus. Раньше я его подключал через роутер со встроенным VPN. Сейчас этот VPN не работает.

Можно ли как-то настроить подключение через XTLS-Reality для произвольных устройств, без установки клиента на них?

1) Роутер с OpenVRT и XRay на нем

2) XRay на компе или планшете, включить "принимать запросы из локльной сети", указать его в качестык прокси в Oculus

Сам не пробовал, но как вариант вроде есть клиент для openwrt
https://github.com/yichya/luci-app-xray

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

Что-то по инструкции XRay даже не стартует:
Failed to start: app/proxyman/inbound: failed to listen TCP on 443 > transport/internet: failed to listen on addr

Спасибо за инструкцию. Вопросы:

  1. А условный цензор не вычислит легко подделку просто зная что какой-нибудь microsoft.com должен иметь другой адрес? Это же тривиально проверяется причем для любого сайта.

  2. Будет ли это работать в обратную сторону, т.е. канал в РФ и какие можно взять сайты для маскировки в РФ?

  3. Обязательно ли ставить сервис на 443 порт (подключения на него блокируются провайдером) и какие риски это несет: ведь маскировка тогда не сработает как предполагается?

А условный цензор не вычислит легко подделку просто зная что какой-нибудь microsoft.com должен иметь другой адрес? Это же тривиально проверяется причем для любого сайта.

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

Будет ли это работать в обратную сторону, т.е. канал в РФ и какие можно взять сайты для маскировки в РФ?

Будет. Нужно начать с того, блокируют ли VPN-протоколы в стране вашего пребывания. Если нет - то и заморачиваться не стоит, подойдет любой популярный VPN или даже SSH-туннель. Если да - то можно использовать XRay/XTLS. Для проверки подходящих сайтов для маскировки есть RealityScanner.

Обязательно ли ставить сервис на 443 порт (подключения на него блокируются провайдером) и какие риски это несет: ведь маскировка тогда не сработает как предполагается

Сервис должен быть именно на 443 порту как самый обычный популярный HTTPS-сайт, иначе ломается вся идея маскировки. Если нет возможности использовать 443 порт - используйте обычный Shadowsocks-2022, его можно повесить на любой порт.

Популярные высоконагруженные сайты обычно сидят не на одном адресе, а за CDN с десятком разных IP-адресов на домен.

Согласен, но все же есть некая недоговоренность. В адресах облачного провайдера, у которого хостятся подобные сайты, спрятаться можно, но что делать если адрес xray сервера стоит особняком и вообще выдан домашним провайдером? Все-таки очень подозрительно увидеть на таком адресе условный microsoft.

Нужно начать с того, блокируют ли VPN-протоколы в стране вашего пребывания.

В стране пребывания не блокируют, но блокируют в РФ. А нужен канал туда, во всю подсеть, на которой сидит openvpn. Да и некоторые сайты (банки, госуслуги, налоговая и т.д.) лучше открывать из РФ. Про возможность "завернуть" openvpn через shadowsocks как прокси в курсе, буду пробовать, спасибо.

Сервис должен быть именно на 443 порту

Вот с этим засада. И IP адрес у меня "домашний", а не облачный и порт заблокирован. Но все равно попробовать можно, главное чтобы связь была.

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

можно, но что делать если адрес xray сервера стоит особняком и вообще выдан домашним провайдером

Если он относится к residential адресам - тогда да, выглядит очень подозрительно. Но тут как раз лучше вообще не использовать HTTPS, а использовать Shadowsocks. Мне встречались упоминания, что где-то (вроде в Иране, но на сто процентов не уверен) цензоры как раз массово рубят все "неопознанные протоколы", но при этом не трогают подключения к residential-адресам.

В стране пребывания не блокируют, но блокируют в РФ

Пока еще не понятно, работают ли блокировки в обратную сторону. Весьма вероятно, что нет.

Про возможность "завернуть" openvpn через shadowsocks как прокси в курсе

Если нужно просто получать доступ к сайтам - то можно даже не заворачивать OpenVPN, а использовать SS "как есть", как простой прокси, так будет легковеснее.

Подскажите OpenVPN/Wireguard не только для обхода блокировок используется, но и для хождения в другую сеть, рабочую например. Есть ли возможность XRay для этого же использовать?

В принципе есть.

OpenVPN можно завернуть в Shadowsocks-2022 (он тоже поддерживается XRay).
То есть настраивается подключение между SS клиентом и сервером XRay, и в OpenVPN этот локальный клиент XRay прописывается как прокси - должно работать (в TCP-режиме точно, насчет UDP не уверен, но стоит попробовать).

Еще вариант - использовать Cloak, он по смыслу близок к XTLS-Reality и неплохо документирован. Настраиваете клиент и сервер Cloak, OpenVPN подключается на localhost, а Cloak передает подключение на сервер в замаскированном виде.

>насчет UDP не уверен

Не работает, увы.

@MiraclePtrоффтоп, конечно. Вы человек в этом разбирающийся. Посоветуйте, плиз, что почитать для человека-айтишника с познаниями в сетевых технологиях уровня "слышал про протоколы и настраивал роутеры"

По сетям в целом - Танненбаума :)

Конкретно про обход блокировок сложно что-то посоветовать, по тем же XRay/V2Ray/SS и т.д. документация очень куцая, нередко устаревшая, и обычно только на китайском. Но если еть интерес к теме, могу посоветовать форумы https://github.com/net4people/bbs/issues и https://ntc.party/

Спасибо!

@MiraclePtr возможно можешь подсказать как эту махину завести с Nginx, как реверс? Не сильно хочется, чтобы оно полностью оккупировало порт 443.

С этим сложно, есть несколько вариантов.

  1. Вариант первый, SNI-прокси. Например, перед Nginx и XRay поставить HAproxy либо настроить Nginx с ssl_preread-модулем, чтобы TLS-подключения на домен хостящегося сайта отправлялись на Nginx, а все остальное на XRay. Альтернативный вариант: на 443 порту висит XRay, а у него в настройках Reality в "dest" прописан 127.0.0.1 и порт на котором стоит SNI-прокси с той же конфигурацией.
    Главный недостаток: со стороны цензоров будет ну очень подозрительно, что на одном и том же IP-адресе висит сразу и какой-нибудь популярный сайт типа www.microsoft.com, и при этом туда же подключаются люди на какой-то другой сайт.

  2. Вариант второй: на IPv4-адрес вешаем XRay с XTLS-Reality, Nginx с сайтом вешаем слушать на IPv6-адрес, домен сайта направляем на Cloudflare с бесплатным тарифом. Cloudflare умеет проксировать IPv4-to-IPv6, работает без проблем. В итоге к XRay пользователи подключаются напрямую, а на сайт заходят через CDN, и никто и никогда не узнает, что по факту оба сервиса крутятся на одном сервере.

  3. Вариант третий, "укради сам у себя" - вместо использования маскировки под популярный домен типа microsoft.com, маскируемся под свой непопулярныйдомен своего сайта. То есть Nginx висит на каком-нибудь 8443 порту, на 443 висит Xray, и у него в настройках Reality стоит "dest: localhost:8443" и домен сайта, который отдает Nginx. Вполне рабочий вариант, позволяет использовать XTLS-Vision, и fingerprint сервера будет в точности как у Nginx.

  4. Вариант типа третьего, но по-другому: не использовать Reality вообще, а использовать простой VLESS-протокол, и в качестве fallback у него задать Nginx, слушающий на другом порту (я описывал эту схему здесь). Работать будет, но этот вариант хуже чем номер 3, потому что fingerprint сервера будет специфический для Go-приложений (не как у Nginx или Apache).

  5. Вариант последний: на порту 443 сидит Nginx, и у него в конфиге прописан отдельный location, который будет проксировать запросы с определенными URL по протоколам Websockets или gRPC на стоящий сзади XRay. Недостатки: не будет работать XTLS-Vision, ниже производительность.

Я бы нацелился на варианты 2 и 3, самые беспроблемные и надежные.

Спасибо тебе, потанцую с бубном :)

Вариант первый, SNI-прокси. Например, перед Nginx и XRay поставить HAproxy либо настроить Nginx с ssl_preread-модулем, чтобы TLS-подключения на домен хостящегося сайта отправлялись на Nginx, а все остальное на XRay.
Если кто-то настроит, поделитесь примером nginx.conf, а то ssl_preread я поднял, а вот достучаться с ним до xray так и не вышло.
Спасибо, слона-то и не заметил.

Я потанцевал с бубном и пока сделал вариант 3. Всё работает чётко - спасибо тебе :)

Вряд ли имеет значение, но на всякий случай спрошу: но почему все сайты в примерах написаны с www? В этом есть какой-то смысл, или без разницы?

UPD: и что такое ALPN: h2 в настройках сервера в Nekobox?

А есть x-ray который умеет роутить? Про всякие tun2socks знаю, но хотелось бы попроще. Думаю чем заменить туннели WG между своими роутерами внутри РФ и вне.

Что именно подразумевается под "Умеет роутить"? Создавать tun-интерфес? Sing-box умеет из коробки, Clash.Meta тоже.
Правда, "роутить" оно будет только в одну сторону - перенаправлять подключения с конкретной машины на удаленный прокси, в обратную сторону (например, с сервера достучаться до каких-то хостов на другой стороне), понятное дело, не получится.

Да, нормальный роутинг аля OpenVPN/Wireguard, tun/tap или что-то своё.

Хм, если обратный траффик не поддерживается - это печально. Я сейчас поверх WG гоняю OSPF и хотелось бы чтобы оно работало дальше...

Потому что это прокси, а не VPN - другие механизмы, другие требования.

Если нужен классический VPN - то советую переходить на какой-нибудь TLS-based-протокол, например SSTP или OpenConnect (там в последнем релизе еще завезли базовую защиту от active probing). Если и до них доберутся и начнут блочить, их можно легко завернуть в Shadowsocks или Cloak.

Ну, механизмы там примерно те же, через SOCKS можно же любой траффик гнать, другое дело что да, реализовано односторонне.

Спасибо, попробую эти.

В итоге пока попробовал пока Nebula - mesh-сеть от Slack, работает неплохо. Никакого TLS там, конечно, нет - обычный UDP на рандомном порту.

Посмотрим сколько оно проживёт под РКНом, может быть будет как неуловимый Джо - кому оно нафиг надо.

Подскажите, а как добавить второго пользователя в настройки сервера?

можно так и оставить на одном uuid, а можно сделать так:

"settings": {
"clients": [
{
"id": "xxx",
"email":"usr1@myserver.com",
"flow": "xtls-rprx-vision"
},
{
"id": "xxy",
"email":"usr2@myserver.com",
"flow": "xtls-rprx-vision"
},
{
"id": "xxz",
"email":"usr3@myserver.com",
"flow": "xtls-rprx-vision"
}
],

"decryption": "none" },

@MiraclePtr, спасибо за проделанную работу!
Настроил на сервере по инструкции, ошибок не наблюдаю, выдача journalctl -u xray:

Hidden text
Aug 08 22:19:15 vm414479 systemd[1]: Started Xray Service.
Aug 08 22:19:15 vm414479 xray[269382]: Xray 1.8.1 (Xray, Penetrates Everything.) Custom (go1.20.3 linux/amd64)
Aug 08 22:19:15 vm414479 xray[269382]: A unified platform for anti-censorship.
Aug 08 22:19:15 vm414479 xray[269382]: 2023/08/08 22:19:15 [Info] infra/conf/serial: Reading config: /opt/xray/config.json
Aug 08 22:19:15 vm414479 xray[269382]: 2023/08/08 22:19:15 [Info] transport/internet/tcp: listening TCP on 0.0.0.0:443
Aug 08 22:19:15 vm414479 xray[269382]: 2023/08/08 22:19:15 [Warning] core: Xray 1.8.1 started

Почему-то меня царапнула строчка "listening TCP on 0.0.0.0:443", но наверное так и надо :).


Стал настраивать клиенты - не работают. Но вопрос мой сейчас именно про сервер - как точно понять, что с ним все ОК, чтобы знать, что ковыряться надо на стороне клиента?

Netstat -nlp сделал. В выдаче только одна строка, касающаяся xray:

tcp6       0      0 :::443                  :::*                    LISTEN      269382/xray

А так и надо, что там ТОЛЬКО IPv6?

Спасибо

 "listening TCP on 0.0.0.0:443", но наверное так и надо :).

Ага. Тут где-то в комментариях уже обсуждали, что XRay немного по-своему толкует адрес "0.0.0.0.0" - у него это означает "не только IPv4, но и IPv6". Видимо, изначально поддержки IPv6 не было, а когда добавили, решили навернуть такой костыль чтобы быть совместимыми со старыми конфигами.

tcp6 0 0 :::443

Это нормально. В Linux слушание ":::443" (то есть всех адресов) означает так же, что оно слушает и IPv4, не только IPv6.

Но вопрос мой сейчас именно про сервер - как точно понять, что с ним все ОК, чтобы знать, что ковыряться надо на стороне клиента?

Если настроен XTLS-Reality или XTLS-Vision, то можно попробовать просто сходить браузером на IP-адрес сервера - браузер должен ругнуться на несоответствие сертификата, и в деталях сертификата показать домен фейкового сайта (который забит в настройках Reality, например www.microsoft.com).

Дальше, в конфиге XRay можно поднять уровень логгирования до info или лучше даже debug, перезапустить и смотреть логи. При заходе браузером в логах что-то должно быть, при попытке подключения клиентом тоже. Если браузером зайти получается и в логах что-то видно - то значит между клиентом и сервером есть связность, и дальше и из конкретных сообщений можно попробовать понять, что конкретно ему не нравится. В 99% случаев это будет какое-то несоответствие конфигурации между клиентом и сервером,,сам протокол сделан так, чтобы быть максимально недетектируемым, поэтому если серверу что-то не нравится (например, не совпал ключ пользователя, или еще что), то в ответ он не пришлет никаких ошибок чтобы не демаскировать себя, а будет молчать или рвать соединение - и остается только угадывать по логам.

На первом пункте чек-листа сразу остановился :)

просто сходить браузером на IP-адрес сервера - браузер должен ругнуться на несоответствие сертификата, и в деталях сертификата показать домен фейкового сайта

ERR_CONNECTION_ABORTED
и в подробностях - "Your connection to this site isn't secure. This site does not have a certificate."

Если что - сам сервер в порядке, на нем еще кое-что крутится и оно работает.

и в подробностях - "Your connection to this site isn't secure. This site does not have a certificate."

Тогда можно попробовать сделать то же самое с помощью curl с опцией -v и посмотреть более детально, какой сертификат оно выдает и что вообще происходит.

Лучше всего как в статье

curl -v --resolve www.microsoft.com:443:151.101.65.69 https://www.microsoft.com (вместо 151.101.xx.xx должен быть IP вашего сервера, вместо www.microsoft.com фейковый домен который прописан у вас в конфиге)

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

Тогда можно попробовать сделать то же самое с помощью curl

curl: no URL specified!

пробовал на двух разных фейковых доменах (asus и amd)

Что-то не так делаете, это ошибка говорит не о проблемах с сервером, а о том, что вы неправильно вводите команду

Вы совершенно правы, прошу прощения, не дописал в curl кусок команды.
Исправился. Вот выдача (IP своего сервера заменил на строку <MY_SERVER_IP>)

Hidden text
> curl -v --resolve www.amd.com:<MY_SERVER_IP> https://www.amd.com
* Added www.amd.com:443:<MY_SERVER_IP> to DNS cache
* Hostname www.amd.com was found in DNS cache
*   Trying <MY_SERVER_IP>:443...
* TCP_NODELAY set
* Connected to www.amd.com (<MY_SERVER_IP>) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: C=US; ST=CALIFORNIA; L=Santa Clara; O=Advanced Micro Devices, Inc.; CN=amd.com
*  start date: Feb 21 00:00:00 2023 GMT
*  expire date: Feb 20 23:59:59 2024 GMT
*  subjectAltName: host "www.amd.com" matched cert's "www.amd.com"
*  issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=GeoTrust RSA CA 2018
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x55bb739a12f0)
> GET / HTTP/2
> Host: www.amd.com
> user-agent: curl/7.68.0
> accept: */*
>
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* old SSL session ID is stale, removing
* Connection state changed (MAX_CONCURRENT_STREAMS == 100)!
< HTTP/2 403
< server: AkamaiGHost
< mime-version: 1.0
< content-type: text/html
< content-length: 260
< cache-control: max-age=900
< expires: Thu, 10 Aug 2023 15:30:47 GMT
< date: Thu, 10 Aug 2023 15:15:47 GMT
< set-cookie: pmuser_country=md; expires=Thu, 24-Aug-2023 15:15:47 GMT; path=/
< strict-transport-security: max-age=31536000
< content-security-policy: frame-ancestors 'self' https://amd.pathfactory.com *.reachcm.com reachcm.com
<
<HTML><HEAD>
<TITLE>Access Denied</TITLE>
</HEAD><BODY>
<H1>Access Denied</H1>

You don't have permission to access "http&#58;&#47;&#47;www&#46;amd&#46;com&#47;" on this server.<P>
Reference&#32;&#35;18&#46;6dac1002&#46;1691680547&#46;95b56b9
</BODY>
</HTML>
* Connection #0 to host www.amd.com left intact

Судя по выхлопу CURL, с сертификатом все в порядке.

Поставьте в Xray-сервере уровень логгирования debug и дальше надо изучать логи при попытке подключения.

Поставил.
В логах последняя запись "Xray started" и нет никаких знаков того, что к серверу пробует подключиться клиент.

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

[[38;5;226m2222084306[0m 5.3s] inbound/http[http]: process connection from 127.0.0.1:62760: dial tcp <MY_SERVER_IP>:443: i/o timeout

С nekoray ситуация аналогичная

Сам спросил - сам ответил. На сервере был на вход 443-й порт закрыт. Открыл - завелось.

почему-то по умолчанию он ставит старую версию 1.7.5

Потому что в релизах на гитхабе она помечена как стабильный релиз, а более новые - как пре-релизы.

MiraclePtr

FoXray на ios обновилась и все настройки (маршрутизации слетели), то есть сейчас не заходит в ru сегмент без впн. Тыкал и не смог настроить, сейчас надо Json делать. Не поделишься, если есть конечно.

Сам спросил, сам ответил :) у кого не получается маршрутизация в Foxray, вот конфиг:

{
"routing" : {
"rules" : [
{
"domain" : [
"geosite:private",
"geosite:CATEGORY-GOV-RU",
"geosite:YANDEX",
"geosite:MAILRU",
"geosite:YOUTUBE",
"regexp:.ru$"
],
"outboundTag" : "direct",
"type" : "field"
},
{
"ip" : [
"geoip:private",
"geoip:RU"
],
"outboundTag" : "direct",
"type" : "field"
}
]
}
}

я у себя ещё добавил
"regexp:.рф$"

А подскажите, плз, куда серверная часть XRay логи пишет? В /var/log у меня пусто...

он пишет либо в файл, указанный в конфиге (https://xtls.github.io/en/config/log.html#logobject)
либо в stdout/stderr, то есть если запускается из Docker, то надо смотреть docker logs =имя_контейнера=,
а если с помощью systemd, то systemctl status xray и journalctl -xe

Добрый день. Напишу сюда вопрос про Vision - поскольку под той статьей коменты уже закрыты.

... через три месяца возникла проблема - перестало работать) Не обновился сертификат. Попытка обновить вручную выдала ошибку что порт 80 занят - обновить невозможно. Нагуглил что это из за nginx и решение проблемы - временная остановка :

certbot certonly --standalone --pre-hook "service nginx stop" --post-hook "service nginx restart" -d exsample.com

Так ( вручную) обновилось. Вопрос: как это прописать для обновления автоматом? - это первое.

А второе - в статье написано что поле обновления надо перезапустить :

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

renew_hook = systemctl reload xray

" - но при вводе в терминал вручную ругается и не работает. Но работает " systemctl restart xray " - можно исправить reload на restart или тут что то другое?

@Tyrkin

Так ( вручную) обновилось. Вопрос: как это прописать для обновления автоматом? - это первое.

# systemctl status certbot-renew.timer  

certbot-renew.timer - Run Certbot twice daily

можно исправить reload на restart или тут что то другое

можно. reload перечитывает конфиг. restart делает килл и запуск процесса заново.

Подскажите пожалуйста, есть ли инструкция для настройки роутинга для FoXray? Имеется ввиду роутинг чтобы ходить до ru ресурсов без VPN. В nekobox всё делается легко, но для РФ он к сожалению недоступен на iOS

Посмотри выше ) я уже скидывал настройки.

Спасибо, помогло :)

Теперь они пришли и за мной.
PIA умер полностью, схема по Trickster VPN с этого сайта (потому что WG) умерла на мобильном интернете (МТС).

Сел, заморочился, сделал. Сначала была ошибка, будто что-то висело на 443 порту — а висел только xray. Пришлось прибить. Тогда все запустилось.
Юзаю Foxray на iOS и вопрос возник — там есть роутинг — то есть, указав RU, открываются при включенном VPN сайты на RU. Но, я так понимаю, в таком случае ни о какой маскировке речь и не идет? Я чот за пару лет прям без VPN allthetime чувствую себя будто голым...
Ранее я через Trickster VPN схему на extended-сервере добавлял исключения и направлял на сервак в России. А тут при таком роутинге ты как будто не под VPN? Или все же какая-то "маскировка" присутствует?

так-с, ну вроде разобрался, как добавить кастомный роутинг.
Но странно то, что можно указать домен, но не IP. Вроде в type указываю ip, но не дает ввести IP, требует URL

И да, я все же не совсем понял, как добавить второго пользователя? Ну, точнее, профиль.
Я так же генерирую UUID, ключи и ID? Но PrivateKey всегда будет одинаков при данной генерации? Или я что-то не понял?

Я так же генерирую UUID, ключи и ID? Но PrivateKey всегда будет одинаков при данной генерации? Или я что-то не понял?

меняются только UUID и shortID,
private key и public key для всех пользователей одинаковые

хммм, я поменял только UUID — работает...
Но это уже нюансы?

Да, нюансы. Не обязательно.

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

Извиняюсь за некропостинг, но нужна ли эта настройка, если включать VPN только на время захода на определённые сайты? Просто, по опыту, иногда на ru-домен без VPN тоже не зайти.
Вообще, я правильно понял, что эти правила маршрутизации нужны не для экономии трафика через сервер VPNa, а для того, чтобы цензурирующая организация не увидела, что к подконтрольным ей сайтам идёт трафик с подозрительного IP?

Маршрутизация нужна чтобы:
а) ходить на "местные" сайты напрямую, потому что нередко чисто-российские сайты недоступны снаружи (например, Госуслуги не открываются из многих иностранных AS'ок)
б) чтобы цензоры не могли сопоставить события "подключение от абонента к иностранному серверу в такой-то момент, передача такого объема данных с такими-то характеристиками" и "подключение к внутреннему серверу с иностранного адреса, передача в точно то же время точно такого же объема данных с такими же характеристикам", что позволяет сделать вывод, что на этом иностранном адресе работает прокси/VPN. Пока что такого у нас не делают, но китайские юзеры на эту тему давно уже заморачиваются, возможно у них такое применяется.

Ещё раз спасибо! VPN, настроенный по этой инструкции, работает, и даже удалось настроить маршрутизацю на десктопе.
Но остались две проблемы:

  1. Я не смог настроить маршрутизацию в NekoBox на Андроиде. Думаю, проблема не только у меня, так что, если бы вы объяснили, как это сделать, то объяснение можно было бы добавить в статью.

  2. Почему-то не работает переадресация IP на www.nvidia.com : при отключённом VPN браузер пишет "Не удаётся получить доступ к сайту xx.xx.xxx.xx не позволяет установить соединение", при включённом "Страница недоступна Сайт xx.xx.xxx.xx не отправил данных.". При этом при выключенном VPN и добавленной строке в hosts www.nvidia.com не открывается и при запросе по названию. Насколько это всё плохо, и что с этим можно сделать?
    Подробности:

Hidden text
c:\Windows\System32\drivers\etc\hosts 

xx.xx.xxx.xx www.nvidia.com
/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": "id",
            "email": "user1@myserver",
            "flow": "xtls-rprx-vision"
          }
        ],
        "decryption": "none"
      },
      "streamSettings": {
        "network": "tcp",
        "security": "reality",
		"realitySettings": {
			"show": false,
			"dest": "www.nvidia.com:443",
			"xver": 0,
			"serverNames": [
				"www.nvidia.com"
			],
			"privateKey": "privateKey",
			"minClientVer": "",
			"maxClientVer": "",
			"maxTimeDiff": 0,
			"shortIds": [
				"shortIds"
			]
		}
      },
      "sniffing": {
        "enabled": true,
        "destOverride": [
          "http",
          "tls"
        ]
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",
      "tag": "direct"
    },
    {
      "protocol": "blackhole",
      "tag": "block"
    }
  ]
}

При работе NekoBox постоянно жалуется на ошибки типа таких, но это, наверное, не связано:

ERROR[0501] dns: exchange failed for crl3.digicert.com. IN A: Post "https://8.8.8.8/dns-query": tls: failed to verify certificate: x509: certificate is valid for 8.8.8.8, 8.8.4.4, 2001:4860:4860::8888,

Думаю, проблема не только у меня, так что, если бы вы объяснили, как это сделать, то объяснение можно было бы добавить в статью.

Да вроде с этим там никаких особых нюансов не было. Расскажите, что именно пытаетесь настроить и что именно не работает.

при отключённом VPN браузер пишет "Не удаётся получить доступ к сайту xx.xx.xxx.xx не позволяет установить соединение", при включённом "Страница недоступна Сайт xx.xx.xxx.xx не отправил данных.". При этом при выключенном VPN и добавленной строке в hosts www.nvidia.com не открывается и при запросе по названию.

Эм... странно. Судя по этим ошибкам работать вообще ничего не должно, но вы говорите, что "VPN работает". Если есть системный антивирус или фаервол - стоит попробовать отключить и посмотреть поменяется ли что, и ещё сделать тест не браузером, а CURL'ом, потому что из сообщения браузера мало что понятно.

При работе NekoBox постоянно жалуется на ошибки типа таких

Похоже на протухшие системные сертификаты. Система - что-то типа семёрки без обновлений? Как вариант, в настройках Nekobox поменять DNS на такой же, но без https://, например на просто 8.8.8.8 или 1.1.1.1

Да вроде с этим там никаких особых нюансов не было. Расскажите, что именно пытаетесь настроить и что именно не работает.

Я просто не нашёл идентичных настроек в андроидной версии NekoBox, а разобраться по аналогии не смог, потому что не понимаю, что именно делаю. GeoIP:ru вбил, но этого явно мало.

Hidden text

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

По поводу DNS - да, старая "семёрка" (да, я знаю, что пора переходить на десятку. Руки не доходят). Попробовал убрать HTTPS, NekoBox ругается на неподдерживаемый протокл, и не включается.
Но, наверное, раз с https как-то работает, то и ладно.

В Nekobox достаточно всего пару правил (раздельных, не два условия в одном правиле!), одного для доменов, другого для group.

И не забыть проверить, что в настройках включен sniffing:

А что до проблемы с Reality - попробуйте протестировать через CURL да и просто стукнуться на 443 порт телнетом. Из браузерных сообщений ничего внятного определить невозможно.

В Nekobox достаточно всего пару правил (раздельных, не два условия в одном правиле!), одного для доменов, другого для group.

Работает, спасибо!

Вот выдача cURL. К сожалению, не знаю, что она должна выдавать в норме, но, кажется, что-то другое.

Hidden text
d:\Programs\curl-8.3.0_2-win64-mingw\bin>curl -v --resolve www.nvidia.com:443:my_ip https://www.nvida.com
* Added www.nvidia.com:443:my_IP to DNS cache
*   Trying 50.87.144.124:443...
* Connected to www.nvida.com (50.87.144.124) port 443
* ALPN: curl offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
*  CAfile: d:\Programs\curl-8.3.0_2-win64-mingw\bin\curl-ca-bundle.crt
*  CApath: none
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=*.hostgator.com
*  start date: Aug 30 00:00:00 2023 GMT
*  expire date: Sep 29 23:59:59 2024 GMT
*  subjectAltName does not match www.nvida.com
* SSL: no alternative certificate subject name matches target host name 'www.nvi
da.com'
* Closing connection
* TLSv1.3 (OUT), TLS alert, close notify (256):
curl: (60) SSL: no alternative certificate subject name matches target host name
 'www.nvida.com'
More details here: https://curl.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

www.nvida.com

не в этом проблема?

Хм, может, они и правда из России не открываются? Что-то мне это в голову не пришло.

Виноват, вчера вечером уже засыпал, написал с ошибкой.
Если написать правильно, то cURL не ругается, насколько я понял:

Hidden text
* Added www.nvidia.com:MyIP to DNS cache
* Hostname www.nvidia.com was found in DNS cache
*   Trying MyIP:443...
* Connected to www.nvidia.com (MyIP) port 443
* ALPN: curl offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
*  CAfile: d:\Programs\curl-8.3.0_2-win64-mingw\bin\curl-ca-bundle.crt
*  CApath: none
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN: server accepted h2
* Server certificate:
*  subject: C=US; ST=California; L=Santa Clara; O=NVIDIA Corporation; CN=it.nvid
ia.com
*  start date: Jan 25 00:00:00 2023 GMT
*  expire date: Jan 25 23:59:59 2024 GMT
*  subjectAltName: host "www.nvidia.com" matched cert's "*.nvidia.com"
*  issuer: C=US; O=DigiCert Inc; CN=DigiCert TLS RSA SHA256 2020 CA1
*  SSL certificate verify ok.
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://www.nvidia.com/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: www.nvidia.com]
* [HTTP/2] [1] [:path: /]
* [HTTP/2] [1] [user-agent: curl/8.3.0]
* [HTTP/2] [1] [accept: */*]
> GET / HTTP/2
> Host: www.nvidia.com
> User-Agent: curl/8.3.0
> Accept: */*
>
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* old SSL session ID is stale, removing
< HTTP/2 307
< server: AkamaiGHost
< content-length: 0
< location: https://www.nvidia.com/fi-fi/
< date: Sat, 30 Sep 2023 05:02:37 GMT
< last-modified: Sat, 30 Sep 2023 05:02:37 GMT
< akamai-cache-status: Redirect from child
<
* Connection #0 to host www.nvidia.com left intact

То есть, какая-то проблема с браузером/Windows.

@MiraclePtr, вопрос снят. Благодарю за советы. Совет про роутинг с телефона я бы даже в шапку поднял.
@andToxaтоже благодарю, за внимательность, :- ).

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

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

  1. Выбрать VPS хостинг

  2. Установить и настроить OpenVPN на сервере

  3. Установить и настроить XRay с XTLS-Reality

  4. Протестировать подключение и проверить скорость трафика

  5. Настроить оптимизацию трафика при необходимости

  6. Настроить клиенты

Добро пожаловать в мир опен-сорса - там кому надо, тот и делает :)

Ну как сказать, "не для гиков"... учитывая, что там даже нельзя настраивать подключения через UI, а только подсовывать ему JSON-файл с конфигурацией :)

Забавно, кстати, что порой это куда проще, чем разобраться, что в очередном UI чем является и как в этот JSON потом подставляется.

Система ругается на конфигурацию сервиса:

systemd[1]: [🡕] /etc/systemd/system/xray.service:7: Special user nobody configured, this is not safe!

Нужно с этим что-то делать?
И ещё. Я оставил на ночь систему ненастроенной, приведенная запись - первая в журнале xray. В то же время, в которое была сделана эта запись, на сервере было зафиксировано повышение активности. Что это было?

По поводу "что это было" - это было unattended-upgrades.

Нужно с этим что-то делать?

Фатального ничего нет,
но если очень хочется поправить, можно сделать это как советую в багзилле Debian:
в unit-файле (пусть к нему виден в вашем лог-сообщении) вместо User=nobody написать DynamicUser=yes, после чего перезапустить systemd (systemctl daemon-reload)

Спасибо, так и сделал.

Настроил, всё работает, но вылезла одна проблема: почему-то не отправляются файлы и картинки в Discord. Начинает грузить, и потом пишет upload fail. Что можно проверить?

Открыть в браузере Develoer Tools, вкладку Network, и посмотреть, какой именно запрос к какому хосту фейлится и с каким результатом, дальше будет понятно, в какую сторону копать.

Из разряда гадания на кофейной гуще - включить/выключить IPv6 в клиенте, попробовать TUN-режим вместо прокси-режима и наоборот, временно убрать правила маршрутизации если вдруг есть.

Браузер говорит:

Request Method:
PUT
Status Code:
403 Forbidden
Remote Address:
127.0.0.1:2080
Referrer Policy:
strict-origin-when-cross-origin

Когда пишешь текст то запрос идет на: https://discord.com/api/v9/channels/11502670452501/messages

А когда картинка: https://discord-attachments-uploads-prd.storage.googleapis.com/ca6463de-0f62-40b9-aa38-0ff92/image.png?upload_id=ABPtcPpGIiUTK

Видимо проблема где-то здесь...

А гугл нормально открывается?

Пока что совет тот же самый: включить/выключить IPv6 в клиенте, попробовать TUN-режим вместо прокси-режима и наоборот

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

Публикации

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

Истории

Идём на «Импульс Т1» по дороге из жёлтого кирпича
Как стать супергероем
Рейтинг IT-брендов работодателей 2023
Активность найма в 3 квартале 2023
Топ-7 годных статей из блогов компаний
Сколько тратят в IT: сеньор бэкендер
Перевернуть календарь и добавить событие

Работа