VPN·HUB·CRACK Self-steal с nginx: Reality под вашим сайтом · VPN HUB CRACK
Все статьи
Remnawave PRO Remnawave

Self-steal с nginx: Reality под вашим сайтом

Обновлено 11 августа 2026 Проверено

Self-steal с nginx (максимальный стелс)

Обычный Reality «крадёт» рукопожатие у чужого сайта (target: google.com), но SNI чужого домена не резолвится в ваш IP: при глубоком анализе это рассинхрон. Self-steal решает: serverNames = ваш домен (A-запись на ноду), а target = ваш сайт-обманка на локальном сокете nginx. SNI, IP и контент согласованы → активное прозванивание попадает на настоящий сайт.

📖 Незнакомые слова? Все термины простыми словами объяснены в Словаре терминов.

В официальном шаблоне Remnawave это делается через unix-сокет (/dev/shm/nginx.sock) + PROXY-protocol (xver: 1).

🚀 Selfsteal можно включить кнопкой. MultiScript поднимает маскировку selfsteal автоматически, без ручной возни с nginx/Caddy. См. «О MultiScript».

Быстрый путь: скрипт-установщик сайта-обманки

Если не хотите собирать декой руками, есть готовый установщик от DigneZzZ (github.com/DigneZzZ/remnawave-scripts). Он сам поднимает self-steal сайт на Caddy (с набором из ~8 готовых шаблонов-страниц, сертификатом и маскировкой под Reality):

bash <(curl -Ls https://github.com/DigneZzZ/remnawave-scripts/raw/main/selfsteal.sh) @ install

Скрипт спросит домен, даст выбрать шаблон и поднимет сайт. Для сайта-обманки это удобно: объект одноразовый, секретов не хранит; если отработал криво, просто перезапустили. После установки в Config Profile укажите target/dest на адрес-порт, который покажет скрипт, а serverNames = ваш домен (логика та же, что в ручном варианте ниже, только вместо nginx используется Caddy).

⚠️ Этим же репозиторием НЕ ставьте панель и ноды. Там есть remnawave.sh (панель) и remnanode.sh (нода), но их лучше ставить вручную (официальный docker-compose, см. «Remnawave с нуля»). Почему:

  • Панель это всё ваше хозяйство (БД пользователей, JWT-секреты, привязки оплат). По отзывам сообщества, сторонний скрипт иногда отрабатывает криво; для одноразового декоя это пустяк (перезапустил), а для панели полусломанная установка = тяжёлая диагностика и риск повредить/потерять данные клиентов.
  • Надо знать, что и куда поставлено: где .env и секреты, какие порты, как бэкапить и обновлять. Ручная установка по офиц. докам даёт полный контроль; скрипт-обёртка это прячет и усложняет восстановление.
  • Версии и дефолты: сторонний скрипт может отставать от релизов Remnawave или менять дефолтные настройки/порты, и потом сложно сверяться с официальной документацией.
  • Supply-chain: запускать чужой скрипт рутом на хосте, где лежат ключи всех клиентов, это лишняя поверхность риска; для «коронной драгоценности» её минимизируют.

Итог: скриптом ставьте только сайт-обманку; панель и ноды разворачивайте руками.

Ниже разберём ручной вариант на nginx (если хотите всё контролировать или уже стоит nginx).

Шаг 1: сайт-обманка на nginx (unix-сокет)

apt update && apt -y install nginx
mkdir -p /var/www/decoy
echo '<!doctype html><title>Welcome</title><h1>It works</h1>' > /var/www/decoy/index.html

В конфиге /etc/nginx/sites-available/decoy nginx слушает unix-сокет с proxy_protocol:

server {
    listen unix:/dev/shm/nginx.sock ssl proxy_protocol;
    server_name your.domain;            # ← ваш домен
    ssl_certificate     /etc/letsencrypt/live/your.domain/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your.domain/privkey.pem;
    ssl_protocols TLSv1.3;
    set_real_ip_from unix:;             # реальный IP клиента из PROXY-protocol
    real_ip_header proxy_protocol;
    root /var/www/decoy;
    location / { try_files $uri /index.html; }
}

Сертификат для домена (Reality отдаёт клиенту именно его):

apt -y install certbot && certbot certonly --standalone -d your.domain
ln -s /etc/nginx/sites-available/decoy /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx

Сокет в /dev/shm (tmpfs): быстро и доступно и nginx, и ноде. Если нода в Docker, пробросьте сокет в контейнер (-v /dev/shm:/dev/shm) или используйте порт 127.0.0.1:8443 вместо сокета.

Шаг 2: inbound в Config Profile (официальный шаблон)

{
  "log": { "loglevel": "none" },
  "inbounds": [{
    "tag": "VLESS_SELFSTEAL",
    "port": 443, "protocol": "vless",
    "settings": { "clients": [], "decryption": "none" },
    "sniffing": { "enabled": true, "destOverride": ["http","tls","quic"] },
    "streamSettings": {
      "network": "raw",
      "security": "reality",
      "realitySettings": {
        "xver": 1,                                  // PROXY-protocol -> реальный IP в nginx
        "target": "/dev/shm/nginx.sock",            // ваш сайт-обманка
        "spiderX": "",
        "shortIds": [""],
        "privateKey": "PRIVATE_KEY",                // ← из генератора панели
        "serverNames": ["your.domain"]              // ← ваш домен
      }
    }
  }],
  "outbounds": [
    { "tag": "DIRECT", "protocol": "freedom" },
    { "tag": "BLOCK",  "protocol": "blackhole" }
  ],
  "routing": { "rules": [
    { "ip": ["geoip:private"], "outboundTag": "BLOCK" },
    { "protocol": ["bittorrent"], "outboundTag": "BLOCK" }
  ]}
}

Поменять: privateKey (генератор x25519 в панели), serverNames (ваш домен). clients: [] не трогать.

Шаг 3: Host в Remnawave (Advanced)

В Hosts → создать host: - Inbound = VLESS_SELFSTEAL - Address = ваш домен (A-запись на ноду), Port 443 - Security = reality - SNI = your.domain - Public Key = publicKey из той же пары - Short ID = как в конфиге (или пусто) - Fingerprint = firefox или qq

Полную привязку профиль→нода→host→сквад смотрите в статье «Все рабочие конфиги».

Проверка стелса

Откройте https://your.domain в браузере: должен открыться сайт-обманка (не ошибка). Значит и DPI при активном прозвоне увидит обычный сайт на вашем домене.

Сделайте сайт-обманку правдоподобным (не пустую страницу): лендинг, блог, что угодно «живое». Связано: «Все рабочие конфиги», «Заблокировали IP?».

Реальный IP клиента в логах сайта

Когда перед Xray стоит фронт (Nginx или Caddy) или работает fallback, сайт-заглушка видит соединения с 127.0.0.1: все посетители «изнутри». Для маскировки это плохо: логи настоящего сайта так не выглядят.

Лечится PROXY protocol: фронт передаёт адрес клиента дальше, Xray его принимает и пробрасывает на сайт.

inbound

"streamSettings": {
  "rawSettings": { "acceptProxyProtocol": true }
}

А в самом REALITY: "xver": 1, чтобы адрес доехал до сайта-донора. В Nginx на стороне фронта включается proxy_protocol on.

Подробнее про схемы с фронтом и fallback смотрите в статье Эталонные схемы размещения.