VLESS + TLS: базовый рабочий конфиг
Иногда нужен не стелс, а честный TLS на своём домене — под CDN или туда, где важна совместимость, а не маскировка под чужой сайт. Ниже — рабочий конфиг, выпуск сертификата и честный разговор о том, где этот вариант палится. Впиши домен и email в конструктор сверху, остальное копируй.
Зачем вообще честный TLS, если есть Reality
Скажу сразу, без иллюзий: как РФ-стелс это слабее Reality. Твой SNI виден в открытом виде, и его можно резать по списку доменов. Reality тут устойчивее, и если нода живёт под жёстким DPI — бери его.
Но у честного TLS есть своя ниша, ради которой я его держу. Он дружит с CDN — за Cloudflare и подобными фронтами нужен именно настоящий сертификат на твоём домене, донорский Reality туда не заедет. Он умеет fallback на реальный сайт: тот, кто ткнулся без правильного клиента, попадает на нормальную страницу, а не на пустоту. И он банально простой — ни ключей x25519, ни shortId, ни донора. Берут его ради совместимости, не ради маскировки.
Шаг 1 — выпускаем сертификат
Домен должен указывать A-записью на IP ноды. Порт 80 на время выпуска — свободен (HTTP-01 валидация Let's Encrypt стучится туда).
apt -y install certbot
certbot certonly --standalone -d your-domain.com -m admin@your-domain.com --agree-tos --non-interactiveСерт ляжет в /etc/letsencrypt/live/your-domain.com/ — там fullchain.pem и privkey.pem, они и пойдут в конфиг.
Грабли из практики: на РФ-хостинге HTTP-01 иногда таймаутит («Timeout after connect»). Это часто транзиент — просто повтори команду один-два раза, обычно со второго проходит. Если стабильно не идёт — проверь, что домен на «сером облаке» (DNS only, не под Cloudflare-прокси) и :80 открыт в файрволе, либо переходи на DNS-01 без 80-го порта.
Шаг 2 — конфиг-профиль целиком
Это полный профиль Xray для панели: log / inbounds / outbounds / routing. Вставляй целиком, значения подставит конструктор:
{
"log": { "loglevel": "none" },
"inbounds": [
{
"tag": "vless-tls",
"listen": "0.0.0.0",
"port": 443,
"protocol": "vless",
"settings": {
"clients": [],
"decryption": "none",
"fallbacks": [{ "dest": "8080" }]
},
"sniffing": { "enabled": true, "destOverride": ["http", "tls", "quic"] },
"streamSettings": {
"network": "raw",
"security": "tls",
"tlsSettings": {
"serverName": "your-domain.com",
"minVersion": "1.2",
"alpn": ["h2", "http/1.1"],
"certificates": [
{
"certificateFile": "/etc/letsencrypt/live/your-domain.com/fullchain.pem",
"keyFile": "/etc/letsencrypt/live/your-domain.com/privkey.pem"
}
]
}
}
}
],
"outbounds": [
{ "tag": "DIRECT", "protocol": "freedom" },
{ "tag": "BLOCK", "protocol": "blackhole" }
],
"routing": { "rules": [
{ "ip": ["geoip:private"], "outboundTag": "BLOCK" },
{ "domain": ["geosite:category-ads-all"], "outboundTag": "BLOCK" },
{ "protocol": ["bittorrent"], "outboundTag": "BLOCK" }
]}
}Разбор ключевого:
network: raw— это TCP (в новых сборках Xray транспорт называетсяraw, старое имяtcpтоже валидно).clients: []не трогай — панель сама наполнит пользователей из сквадов.fallbacks → dest 8080— весь «левый» трафик без правильного клиента уйдёт на реальный сайт или nginx, слушающий:8080. Ткнёшься браузером — увидишь нормальную страницу, а не «что-то на 443». Держи там правдоподобный сайт.alpn: ["h2", "http/1.1"]— согласуй с тем, что отдаёт CDN, если ставишь за фронтом.- routing режет приватные сети, рекламу и торренты — последнее обязательно, иначе прилетит abuse от хостера.
Шаг 3 — параметры на Host
Сам конфиг клиентов не содержит — их даёт панель. Параметры подключения задаются на хосте:
Address : your-domain.com
Port : 443
SNI / Host : your-domain.com
ALPN : h2, http/1.1
flow : (пусто)
fingerprint : firefoxОбрати внимание: flow пустой. Vision — это фишка Reality-TCP, тут его нет. И fingerprint ставь firefox, а не chrome — chrome палевный и местами роняет ноду.
Грабли, о которых лучше знать заранее
- SNI виден. Твой домен светится в ClientHello открытым текстом. Под жёстким РФ-DPI его могут резать по списку. Начали резать — уходи на Reality/Selfsteal, это ровно та проблема, которую Reality решает.
- Серт живёт 90 дней. Поставь
certbot renewв cron и обязательно перезапускай ноду после обновления — иначе Xray продолжит отдавать старый серт из памяти, и клиенты отвалятся молча. - За CDN чаще берут не это. Честный TLS ложится за CDN, но для фронтинга обычно удобнее XHTTP — он спроектирован под HTTP-транспорт и капризные CDN. Об этом — в статьях про XHTTP.
Механику того, почему открытый SNI — это уязвимость, и как Reality её обходит, я разбирал в теории про Reality. Тут — рабочий минимум для случая, когда нужен именно честный TLS.
Следующий гайд XHTTP-транспорт: когда и зачем → ↗ Не понравилась статья или что-то непонятно? Напишите мне — помогу или поправлю. @notrealvpn →