Skip to content

Инбаунды и профили

Две сущности:

  • Профиль (inbound_profile) — переиспользуемое описание: протокол, транспорт, безопасность и их параметры. Не привязан к ноде.
  • Инбаунд (inbound) — привязка профиля к ноде: порт, тег, сертификат (для TLS), опционально цепочка. То, что реально слушает трафик.
flowchart LR
    subgraph Профили
        P1[VLESS TCP Reality]
        P2[VLESS XHTTP TLS]
    end
    subgraph Инбаунды
        I1["NL-1 : 443"]
        I2["DE-1 : 443"]
        I3["US-1 : 8443"]
    end
    P1 --> I1
    P1 --> I2
    P2 --> I3

Изменение профиля применяется ко всем его инбаундам: у всех затронутых нод инкрементируется ревизия, агенты получают новые снапшоты. Статусов pending/applied/error на инбаунде нет — фактическое состояние отражает пара desired_revision/applied_revision ноды (Ноды).

Поле Значения
protocol vless | vmess | trojan | shadowsocks
network tcp | ws | grpc | httpupgrade | xhttp
security none | tls | reality
settings Параметры транспорта и безопасности (типизированный JSON)

settings валидируется схемой, зависящей от тройки protocol/network/security, и хранится одним jsonb-полем: состав параметров различается между комбинациями, раскладывать их по колонкам бессмысленно. Форма — та же, что в gRPC-контракте, рендер в Xray JSON — прямое отображение.

Reality-keypair принадлежит профилю: публичный ключ — в settings, приватный — отдельным шифрованным полем профиля (Шифрование, схема). Один keypair на профиль, а не на инбаунд: клиентский конфиг для всех нод профиля одинаков с точностью до адреса.

Профиль нельзя удалить, пока существуют его инбаунды. Смена protocol у существующего профиля запрещена — креденшелы клиентов протокол-зависимы (Клиенты и подписки); вместо этого создаётся новый профиль.

Поле Назначение
node_id, profile_id Привязка
port Уникален в пределах ноды
tag Тег в Xray, генерируется (in-<профиль>-<порт>), уникален в пределах ноды
certificate_id Обязателен при security = tls, см. Сертификаты
chain_id Не null → весь трафик инбаунда уходит в цепочку, см. Мультихоп
enabled Выключенный инбаунд не рендерится и выпадает из подписок

Клиенты не привязываются к инбаундам напрямую — доступ определяется группами доступа (Клиенты и подписки). При рендере desired state в инбаунд попадают креденшелы всех активных подписок, чья группа доступа содержит этот инбаунд.

Из профиля + инбаунда backend собирает объект инбаунда Xray:

Источник Что даёт
Профиль protocol, streamSettings, sniffing
Инбаунд port, tag, пути к сертификату
Активные подписки группы settings.clients[] (email-тег = id подписки)
Флаги ноды / цепочка Правила маршрутизации для этого инбаунда

Sniffing включён всегда (http, tls, quic, bittorrent, routeOnly) — он только размечает трафик; блокировка торрентов управляется отдельно (Трафик).