fix: harden sing-box egress rollout

This commit is contained in:
2026-08-27 03:39:06 +05:00
parent adb3e849df
commit 8ac3b2b1ba
24 changed files with 228 additions and 48 deletions
+8 -3
View File
@@ -40,7 +40,7 @@ URI + policy
▼ ├─ last-good backup
no restart ├─ atomic replace
├─ systemctl restart
└─ bounded healthcheck
└─ bounded local connectivity healthcheck
fail ┴ success
│ │
@@ -66,11 +66,11 @@ Outbound сохраняет DNS hostname и содержит `bind_interface=eth
## Файловая модель
```text
/etc/vpn-egress/
/etc/vpn-egress/ root:root 0700
├── policy.json root:root 0600
└── hysteria2.uri root:root 0600
/var/lib/vpn-egress/
/var/lib/vpn-egress/ root:root 0700
├── state.json без секретов, 0600
├── last-good.json содержит secrets, 0600
└── backups/ ограниченная история, 0700/0600
@@ -86,6 +86,11 @@ Guard читает имена интерфейсов из того же policy
таблицу одной batch-транзакцией. Если новый ruleset некорректен, nft не оставляет
систему с частично заменённой таблицей.
Package-managed drop-in добавляет для `sing-box.service` зависимости
`Requires=` и `After=` от guard. Поэтому при совместном запуске ошибка guard
блокирует старт sing-box. Уже активный oneshot не является watchdog: ручное
удаление nftables-таблицы обнаруживает `doctor`, но не systemd dependency.
## Версионная граница
В коде существует только `renderer_1_13_19.py`. Renderer для 1.14 не является