VLESS + WebSocket + TLS (через Nginx) — классическая схема под домен/сертификат, дружит с прокси/ CDN. Простая поддержка. Подходит «почти везде».
VLESS + REALITY (TCP, Vision/uTLS) — современная схема без своего TLS-серта; «маскируется» под настоящий SNI/сайт, минимизирует фингерпринты. Требует правильной генерации ключей и параметров.
Marzban — удобная веб-панель (Docker) для управления Xray-пользователями/тарифами/нодами, со скриптом «быстрой установки». Есть отдельный агент Marzban Node для рабочих нод.
VLESS + WS + TLS (Nginx) — стабильный «классический» вариант
Ниже конфигурация на домен vless.example.net. Замените этот домен в одном месте командой (покажу), остальное — автогенерация.
1) База: обновления, UFW, нужные пакеты
sudo apt update && sudo apt -y upgradesudo apt install -y nginx certbot python3-certbot-nginx curl jqsudo ufw default deny incomingsudo ufw default allow outgoingsudo ufw allow 22/tcp comment 'SSH'sudo ufw allow 80,443/tcp comment 'HTTP/HTTPS'sudo ufw enable
2) Установка Xray-core (официальный инсталлер)
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install
Скрипт ставит бинарник xray, юнит systemd и данные GeoIP/GeoSite. (Этот способ установки прямо рекомендуют и в доках Marzban как «Manual». )
3) Генерация параметров и конфиг Xray (WS+TLS)
# доменDOMAIN=vless.example.net
# UUID для клиентаUUID=$(xray uuid)
# создаём конфиг Xray под WebSocket на 127.0.0.1:10000sudo tee /usr/local/etc/xray/config.json >/dev/null <<'JSON'{"log": { "access": "/var/log/xray/access.log", "error": "/var/log/xray/error.log", "loglevel": "warning" },"inbounds": [{"tag": "vless-ws","listen": "127.0.0.1","port": 10000,"protocol": "vless","settings": {"clients": [ { "id": "REPLACE_UUID", "email": "default@local" } ],"decryption": "none"},"streamSettings": {"network": "ws","wsSettings": { "path": "/ws-vless" }}}],"outbounds": [{ "protocol": "freedom" }]}JSON
# подставим ваш UUIDsudo sed -i "s/REPLACE_UUID/$UUID/" /usr/local/etc/xray/config.json
sudo systemctl enable --now xraysudo systemctl status xray --no-pager
Nginx + Let’s Encrypt
# минимальный сайт на ваш доменsudo tee /etc/nginx/sites-available/vless >/dev/null <<NGINXserver {listen 80;server_name vless.example.net;root /var/www/html;location /ws-vless {proxy_http_version 1.1;proxy_set_header Upgrade \$http_upgrade;proxy_set_header Connection "upgrade";proxy_set_header Host \$host;proxy_pass http://127.0.0.1:10000;}}NGINXsudo ln -s /etc/nginx/sites-available/vless /etc/nginx/sites-enabled/vlesssudo nginx -t && sudo systemctl reload nginx
# выпуск сертификата и автоконфиг HTTPSsudo certbot --nginx -d vless.example.net --agree-tos -m [email protected] -n --redirect
5) Клиент: готовая ссылка VLESS
echo "vless://[email protected]:443?encryption=none&security=tls&type=ws&path=%2Fws-vless#VLESS-WS-TLS"
6) Проверка и логи
curl -I https://vless.example.net/ # должен отдать 200/301sudo tail -f /var/log/xray/error.log /var/log/xray/access.log
VLESS + REALITY (Vision/uTLS) — современный «невидимый» вариант
REALITY не требует вашего TLS-серта; сервер «выглядит» как реальный SNI (напр., www.cloudflare.com). Алгоритм/параметры — строго по докам: генерим X25519-ключи и короткий ShortID. (Подробные объяснения и примеры конфигов REALITY — в Xray-examples/XTLS docs.  )
1) Генерируем ключи и UUID
KEYS=$(xray x25519)PRIV=$(echo "$KEYS" | awk '/Private key/{print $3}')PUB=$(echo "$KEYS" | awk '/Public key/{print $3}')UUID=$(xray uuid)SHORTID=$(tr -dc 'a-f0-9' </dev/urandom | head -c 16)
echo "PRIVATE=$PRIV"echo "PUBLIC=$PUB"echo "UUID=$UUID"echo "SHORTID=$SHORTID"
2) Конфиг Xray (VLESS+REALITY на 443/TCP)
sudo tee /usr/local/etc/xray/config.json >/dev/null <<JSON{"log": { "access": "/var/log/xray/access.log", "error": "/var/log/xray/error.log", "loglevel": "warning" },"inbounds": [{"tag": "vless-reality","port": 443,"listen": "0.0.0.0","protocol": "vless","settings": {"clients": [ { "id": "REPLACE_UUID", "flow": "xtls-rprx-vision" } ],"decryption": "none"},"streamSettings": {"network": "tcp","security": "reality","realitySettings": {"show": false,"dest": "www.cloudflare.com:443","serverNames": [ "www.cloudflare.com" ],"privateKey": "REPLACE_PRIVATE","shortIds": [ "REPLACE_SHORTID" ]}}}],"outbounds": [{ "protocol": "freedom" }]}JSON
sudo sed -i "s/REPLACE_UUID/$UUID/" /usr/local/etc/xray/config.jsonsudo sed -i "s/REPLACE_PRIVATE/$PRIV/" /usr/local/etc/xray/config.jsonsudo sed -i "s/REPLACE_SHORTID/$SHORTID/" /usr/local/etc/xray/config.json
sudo systemctl restart xray && sudo systemctl status xray --no-pager
3) Клиентская ссылка VLESS (REALITY)
echo "vless://[email protected]:443?encryption=none&flow=xtls-rprx-vision&security=reality&sni=www.cloudflare.com&fp=chrome&pbk=$PUB&sid=$SHORTID&type=tcp#VLESS-REALITY"
Примечание: dest/serverNames берутся из реально существующего домена с TLS (в примере Cloudflare). Правила и пояснения — в документации и примерах REALITY.