3.6 KiB
Архитектура
Границы ответственности
Hysteria2 URI содержит переносимые реквизиты: auth, hostname/ports, SNI,
insecure, тип obfs и obfs password. Production HY2XS выдаёт Gecko URI.
policy.json хранит локальную инфраструктуру: eth0, eth1, TUN CIDR и MTU,
route exclusions, таблицу 2022, marks, NFQUEUE, DNS, bandwidth и healthcheck.
Renderer никогда не патчит старый JSON, а строит полный deterministic config из
typed model.
Поток применения
URI + policy
│
├─ strict validation
├─ exact 1.14.0 + build-tag gate
├─ renderer_1_14_0
└─ sing-box check на private candidate
│
unchanged ───── changed
│ │
▼ ├─ проверка provenance текущего config
state.json ├─ versioned last-good backup
├─ atomic replace
├─ systemctl restart
└─ bounded healthcheck
Первое применение после чистой установки не создаёт last-good: предыдущего
управляемого конфига нет. При следующих изменениях backup разрешён только если
SHA установленного config совпадает со state этого же релиза и sing-box 1.14.0.
Gecko и DNS
Renderer добавляет для Gecko min_packet_size=512 и
max_packet_size=1200. Эти параметры являются частью локального HY2XS
compatibility profile и не читаются из URI.
В sing-box 1.14.0 TUN по умолчанию использует dns_mode=hijack, что меняет
настройки интерфейса и platform-level interception. Проект явно задаёт
dns_mode=disabled и сохраняет собственное route action port 53 -> hijack-dns. Bootstrap UDP DNS привязан к eth0; remote DoH использует detour
hy2-out.
Endpoint routing
Hysteria outbound хранит hostname и bind_interface=eth0, а его
domain_resolver указывает на bootstrap DNS через eth0. Публичный IP сервера
не добавляется в route_exclude_address; смена A-записи не требует изменения
policy.
Файловая модель
/etc/vpn-egress/ root:root 0700
├── policy.json root:root 0600
└── hysteria2.uri root:root 0600
/var/lib/vpn-egress/ root:root 0700
├── state.json без секретов, 0600
├── last-good.json содержит secrets, 0600
├── last-good.meta.json версия и SHA-256, 0600
└── backups/ config + соседний .meta, 0700/0600
/etc/sing-box/config.json root:root 0600
Metadata не обеспечивает доверие от root-компрометации. Её задача — исключить случайное смешивание релизов и повреждённых backup-файлов.
Граница установки
0.2.0 не содержит кода миграции 0.1.0. debian/preinst отклоняет in-place
upgrade, а postinst отклоняет legacy policy/state или unmanaged
/etc/sing-box/config.json. Same-release reinstall допускается, если state и
config согласованы.