Инбаунды и профили
Модель
Section titled “Модель”Две сущности:
- Профиль (
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 ноды (Ноды).
Профиль
Section titled “Профиль”| Поле | Значения |
|---|---|
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 у существующего профиля запрещена — креденшелы клиентов протокол-зависимы (Клиенты и подписки); вместо этого создаётся новый профиль.
Инбаунд
Section titled “Инбаунд”| Поле | Назначение |
|---|---|
node_id, profile_id |
Привязка |
port |
Уникален в пределах ноды |
tag |
Тег в Xray, генерируется (in-<профиль>-<порт>), уникален в пределах ноды |
certificate_id |
Обязателен при security = tls, см. Сертификаты |
chain_id |
Не null → весь трафик инбаунда уходит в цепочку, см. Мультихоп |
enabled |
Выключенный инбаунд не рендерится и выпадает из подписок |
Клиенты не привязываются к инбаундам напрямую — доступ определяется группами доступа (Клиенты и подписки). При рендере desired state в инбаунд попадают креденшелы всех активных подписок, чья группа доступа содержит этот инбаунд.
Рендер в Xray
Section titled “Рендер в Xray”Из профиля + инбаунда backend собирает объект инбаунда Xray:
| Источник | Что даёт |
|---|---|
| Профиль | protocol, streamSettings, sniffing |
| Инбаунд | port, tag, пути к сертификату |
| Активные подписки группы | settings.clients[] (email-тег = id подписки) |
| Флаги ноды / цепочка | Правила маршрутизации для этого инбаунда |
Sniffing включён всегда (http, tls, quic, bittorrent, routeOnly) — он только размечает трафик; блокировка торрентов управляется отдельно (Трафик).