6.4 KiB
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 соответствующий клиентскомуpbkrealitySettings.shortIds[]— должен содержать клиентскийsidrealitySettings.serverNames[]— должен содержать клиентскийsnirealitySettings.dest— куда сервер прокси handshake; не видно клиенту, но должно соответствоватьsni
Любое расхождение → handshake fail, клиент подключиться не сможет.
Ручная настройка клиента (если URL потерян)
v2rayN (Windows)
- Servers → Add → VLESS
- Address:
91.132.142.42, Port:443 - UUID: твой клиентский UUID
- Flow:
xtls-rprx-vision - Network:
tcp - Security:
reality - SNI:
www.googletagmanager.com - Fingerprint:
chrome - PublicKey:
pbkиз URL - 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.