montana/Монтана-Протокол/Код/montana-vpn/docs/client-config.md

6.4 KiB
Raw Permalink Blame History

Client config — формат VLESS URL и параметры

Полная разборка строки vless://... которую install.sh выдаёт оператору, и как её настроить вручную если нужно.

Формат URL

vless://{UUID}@{HOST}:{PORT}?{params}#{label}

Реальный пример с обезличенными значениями:

vless://e6d355e2-2d79-4c96-a373-3b0e6b6f4b0d@91.132.142.42:443?encryption=none&flow=xtls-rprx-vision&security=reality&sni=www.googletagmanager.com&fp=chrome&pbk=AbCdEfGhIjKlMnOpQrStUvWxYz1234567890&sid=302805bc0c25e504&type=tcp#montana-vpn

Разбор полей:

Поле Значение Что делает
UUID e6d355e2-2d79-4c96-a373-3b0e6b6f4b0d Authentication-токен клиента. Совпадает с clients[].id в xray config
HOST 91.132.142.42 Public IP сервера (либо domain если есть)
PORT 443 TCP порт сервера
encryption=none none VLESS не имеет своей encryption — она в Reality (TLS 1.3)
flow=xtls-rprx-vision vision Optimization после handshake — без TLS-in-TLS overhead
security=reality reality TLS-stealing handshake (vs tls для обычного TLS, none для plain)
sni=www.googletagmanager.com dest SNI который клиент шлёт в TLS ClientHello — должен совпадать с dest сервера
fp=chrome chrome uTLS fingerprint — точная репликация Chrome 124 ClientHello
pbk=... publicKey Reality public key — клиент использует для derive shared secret
sid=302805bc0c25e504 shortId 8-байтовый идентификатор подключения. Серверу разрешено иметь несколько SID, клиент выбирает один
type=tcp tcp Transport-protocol (vs ws websocket, grpc)
label montana-vpn Локальное имя в клиенте (отображается, не передаётся серверу)

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

Сервер хранит:

  • clients[].id (UUID) — должен совпасть с UUID клиента
  • realitySettings.privateKey — sk соответствующий клиентскому pbk
  • realitySettings.shortIds[] — должен содержать клиентский sid
  • realitySettings.serverNames[] — должен содержать клиентский sni
  • realitySettings.dest — куда сервер прокси handshake; не видно клиенту, но должно соответствовать sni

Любое расхождение → handshake fail, клиент подключиться не сможет.

Ручная настройка клиента (если URL потерян)

v2rayN (Windows)

  1. Servers → Add → VLESS
  2. Address: 91.132.142.42, Port: 443
  3. UUID: твой клиентский UUID
  4. Flow: xtls-rprx-vision
  5. Network: tcp
  6. Security: reality
  7. SNI: www.googletagmanager.com
  8. Fingerprint: chrome
  9. PublicKey: pbk из URL
  10. ShortId: sid из URL

v2rayNG (Android)

Меню → Импорт из буфера → вставить VLESS URL. Готово.

Hiddify (cross-platform)

Импорт по ссылке либо QR-коду. Hiddify сам распарсит URL.

CLI xray (сервер-как-клиент / Linux)

/etc/xray/client-config.json:

{
  "log": { "loglevel": "warning" },
  "inbounds": [
    {
      "tag": "socks-in",
      "port": 1080,
      "listen": "127.0.0.1",
      "protocol": "socks",
      "settings": { "auth": "noauth", "udp": true }
    }
  ],
  "outbounds": [
    {
      "tag": "reality-out",
      "protocol": "vless",
      "settings": {
        "vnext": [{
          "address": "91.132.142.42",
          "port": 443,
          "users": [{
            "id": "e6d355e2-2d79-4c96-a373-3b0e6b6f4b0d",
            "encryption": "none",
            "flow": "xtls-rprx-vision"
          }]
        }]
      },
      "streamSettings": {
        "network": "tcp",
        "security": "reality",
        "realitySettings": {
          "show": false,
          "fingerprint": "chrome",
          "serverName": "www.googletagmanager.com",
          "publicKey": "AbCdEfGhIjKlMnOpQrStUvWxYz1234567890",
          "shortId": "302805bc0c25e504",
          "spiderX": ""
        }
      }
    }
  ]
}

Запустить:

xray run -config /etc/xray/client-config.json

Поднимет SOCKS5 прокси на 127.0.0.1:1080. Браузер / приложение конфигурировать на этот SOCKS5.

QR-код для мобильных

echo "vless://...полный URL..." | qrencode -t ANSIUTF8

(требует qrencode пакет: apt install qrencode)

Либо онлайн (опасно, URL утечёт): не рекомендуется.

Безопасность доставки конфига

VLESS URL содержит полный credential. Кто его получил → имеет доступ к VPN. Передавать только через:

  • Signal (E2E шифрование)
  • Threema (no-phone-number, E2E)
  • ProtonMail с PGP (если получатель имеет PGP ключ)
  • Локальная QR-передача (показ экрана при личной встрече)

Не использовать:

  • Telegram (есть unencrypted history с ключевыми словами)
  • WhatsApp (E2E но Meta-controlled, метаданные у Meta)
  • Email plaintext
  • SMS
  • Slack/Discord/любой коммерческий мессенджер с server-side history

Проверка работы

После настройки клиента и подключения:

# IP должен показать сервер VPN, не реальный IP клиента
curl https://api.ipify.org

# DNS должен идти через VPN (проверка leak)
curl https://1.1.1.1/cdn-cgi/trace

Если оба показывают сервер VPN — работает. Если curl ipify показывает VPN-IP, а DNS leak показывает домашнего провайдера — DNS leak, нужно править клиентский config.