VPN·HUB·CRACK Эталонные схемы размещения: один порт на всё, fallback и реальный IP · VPN HUB CRACK
Все статьи
Remnawave PRO Remnawave

Эталонные схемы размещения: один порт на всё, fallback и реальный IP

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

Эталонные схемы размещения

Когда протоколов на ноде становится больше одного, появляется вопрос: как разложить их по портам. От ответа зависит, насколько нода похожа на обычный сервер при сканировании, доходит ли до вас реальный IP клиента и переживёт ли всё это обновление сертификата.

Ниже три схемы, которые реально используют, с честным сравнением. Материал сверен с открытой библиотекой эталонных конфигов integrated-examples и адаптирован под РФ: там ориентир на Китай, у нас другой DPI и другие доноры.

📖 Незнакомые слова есть в Словаре терминов.

Три схемы: чем платите за удобство

Порт на протокол SNI-разделение Fallback-цепочка
Как выглядит снаружи 443, 2443, 2096, 8443… только 443 только 443
Сканирование портов 🔴 видно «лишние» порты 🟢 один порт, как у сайта 🟢 один порт
Скорость 🟢 без посредника 🟡 +1 переход (незаметно) 🟢 без посредника
Пинг 🟢 базовый 🟢 +0.1–0.3 мс на разбор SNI 🟢 базовый
Реальный IP клиента 🟢 виден 🟡 нужен PROXY protocol 🟡 нужен PROXY protocol
Сложность 🟢 просто 🔴 нужен фронт (Caddy/Nginx) 🟡 средняя, только Xray
Сколько протоколов сколько угодно сколько угодно ограничено логикой ALPN/пути
UDP (Hysteria) отдельный порт 🟢 тоже 443 (см. ниже) ❌ не умеет

Вывод коротко. Если нода одна и протоколов два, берите порт на протокол, не усложняйте. Если хотите, чтобы при сканировании нода выглядела как обычный веб-сервер, берите SNI-разделение. Fallback-цепочка нужна там, где фронт ставить нельзя, а маскировка под сайт обязательна.

Схема 1. Порт на протокол и главная ловушка

Самое простое: Reality на 443, XHTTP на 2096, Hysteria на 2053. Работает, ставится за минуту.

Ловушка в том, что лишние порты видно. Обычный сайт не слушает 2096 и 2443. Массовые сканеры это собирают, и нода получает «профиль» непохожий на веб-сервер.

Вторая ловушка бывает неожиданной: порт может быть закрыт файрволом, и протокол просто не работает, хотя в панели всё зелёное. Проверять надо снаружи, а не по ss -lntp на самой ноде:

терминал

# с ДРУГОГО сервера, а не с самой ноды
for p in 443 2096 2443; do
  timeout 5 bash -c "echo > /dev/tcp/ВАШ_IP/$p" 2>/dev/null \
    && echo "$p открыт" || echo "$p ЗАКРЫТ"
done

Схема 2. SNI-разделение: всё на 443

Фронт (Caddy или Nginx) слушает 443, смотрит SNI (имя домена в начале TLS-рукопожатия) и раздаёт соединения по назначению. Сам сайт, Reality, XHTTP, Trojan живут за ним на локальных портах, наружу не торчат.

Ключевая деталь: инбаунды должны слушать только localhost, иначе смысл теряется.

nginx.conf

stream {
    map $ssl_preread_server_name $upstream {
        lab.example.com      reality;     # ваш Reality
        cdn.example.com      xhttp;       # туннель под CDN
        site.example.com     website;     # обычный сайт
    }
    upstream reality { server 127.0.0.1:2443; }
    upstream xhttp   { server 127.0.0.1:2096; }
    upstream website { server 127.0.0.1:8080; }

    server {
        listen 443;
        ssl_preread on;          # читаем SNI, не расшифровывая
        proxy_protocol on;       # передаём реальный IP дальше
        proxy_pass $upstream;
    }
}

Со стороны Xray нужно разрешить приём этого заголовка, иначе вместо адреса клиента в логах будет 127.0.0.1:

inbound

"streamSettings": {
  "network": "raw",
  "security": "reality",
  "rawSettings": {
    "acceptProxyProtocol": true
  }
}

Схема 3. Fallback: Xray сам решает, куда отдать

Xray слушает 443, и если соединение не наше (не тот UUID, не тот пароль), он молча передаёт его дальше: на сайт или другой протокол. Снаружи это неотличимо от обычного веб-сервера: активное зондирование получает настоящую страницу.

inbound

"settings": {
  "clients": [{ "id": "ВАШ_UUID", "flow": "xtls-rprx-vision" }],
  "decryption": "none",
  "fallbacks": [
    { "dest": 2023 },                        // чужой трафик → XHTTP-инбаунд
    { "alpn": "h2", "dest": 8082, "xver": 1 },  // HTTP/2 → сайт
    { "dest": 8081, "xver": 1 }                 // остальное → сайт
  ]
}

xver: 1 это тот самый PROXY protocol: сайт-заглушка увидит реальный IP посетителя, а не локалхост. Мелочь, которая делает логи сайта правдоподобными.

Hysteria и сайт на одном UDP 443

Про это почти не пишут, а приём полезный. Hysteria обычно вешают на отдельный UDP-порт, и он торчит наружу как единственный UDP, что само по себе примета. Между тем QUIC тоже передаёт SNI, а значит UDP 443 можно делить между Hysteria и HTTP/3-сайтом.

Умеет это Caddy с модулем caddy-l4 (в стандартной сборке его нет, нужна сборка через xcaddy):

терминал

# проверить, есть ли модуль в вашей сборке
caddy list-modules | grep -c layer4     # 0 = нет, нужна пересборка

go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest
xcaddy build --with github.com/mholt/caddy-l4

caddy.json

"udpsni": {
  "listen": ["udp/:443"],
  "routes": [
    {
      "match": [{ "quic": { "sni": ["hy.example.com"] } }],
      "handle": [{ "handler": "proxy",
                   "upstreams": [{ "dial": ["udp/127.0.0.1:3443"] }] }]
    },
    {
      "handle": [{ "handler": "proxy",
                   "upstreams": [{ "dial": ["udp/127.0.0.1:8443"] }] }]
    }
  ]
}

Результат: снаружи открыт TCP 443 и UDP 443, ровно как у обычного сайта с HTTP/3. Отдельного «странного» порта нет.

Четыре грабли, которые ломают ноду не сразу

1. Hysteria не перечитывает сертификат. Она не следит за файлом: сертификат обновился, а Hysteria продолжает отдавать старый, и через 90 дней клиенты получают ошибку TLS. Лечится перезапуском после обновления: плагином caddy-events-exec, параметром reloadcmd в acme.sh или просто по расписанию.

2. Больше пяти доменов на один ACME-аккаунт: проблемы с продлением. Разводите домены между Let's Encrypt и ZeroSSL, если их много.

3. На VPS без AES-NI шифрование упирается в процессор. Помогает явный выбор ChaCha20 вместо AES, заметно на дешёвых тарифах:

tlsSettings

"cipherSuites": "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256:TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256",
"minVersion": "1.2"

4. В Xray 26 транспорт tcp называется raw. Оба варианта валидны для ядра, но сторонние генераторы подписок могут не понимать raw: инбаунд при этом работает, а из подписки молча пропадает. Если протокол поднялся на ноде, но не появился у клиента, первым делом проверьте это имя.

Что из этого брать в свою инфраструктуру

  • Одна нода, два протокола → порт на протокол, не усложняйте.
  • Хотите, чтобы нода выглядела веб-сервером → SNI-разделение плюс acceptProxyProtocol.
  • Ставите Hysteria → сразу решите вопрос перезапуска при обновлении сертификата, иначе вернётесь к этому через три месяца.
  • Есть свой сайт на ноде → включайте xver, чтобы в логах был реальный IP клиента.

Дальше: готовые профили всех протоколов ищите в статье Профили подключений, а маскировку под свой сайт смотрите в Self-steal с nginx.