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
+18 -4
View File
@@ -6,7 +6,7 @@
2. Failure injection: candidate rejection, restart failure, URI/config rollback,
idempotency и manual rollback swap.
3. Real binary: `sing-box 1.13.19 check` на Linux и schema/format validation на Windows.
4. Privileged Linux: TUN, nftables, systemd и HTTP data-plane healthcheck.
4. Privileged Linux: TUN, nftables, systemd и локальный HTTP connectivity healthcheck.
5. Canary: DNS A change без endpoint CIDR и credential rotation.
6. Reboot: guard ordering, persisted config и path watcher.
@@ -22,9 +22,9 @@ make check
SING_BOX_1_13_19=/usr/bin/sing-box make test
```
Он предварительно проверяет exact version и `with_quic`. Windows-бинарник не
может создать Linux auto-redirect и поэтому выполняет `format` полной схемы;
обязательный `check` остаётся в Linux CI/Incus.
Он предварительно проверяет exact version, `with_quic` и `with_gvisor`.
Windows-бинарник не может создать Linux auto-redirect и поэтому выполняет
`format` полной схемы; обязательный `check` остаётся в Linux CI/Incus.
## Privileged acceptance
@@ -39,4 +39,18 @@ SING_BOX_1_13_19=/usr/bin/sing-box make test
7. изменить A-запись endpoint, не меняя URI/config;
8. перезагрузить контейнер и повторить doctor.
Отдельный dependency failure test выполняется только в disposable Incus:
1. остановить sing-box и guard;
2. временно задать в test policy отсутствующий upstream interface;
3. убедиться, что `systemctl start sing-box.service` завершается ошибкой из-за
неуспешного guard;
4. восстановить policy и подтвердить успешный совместный запуск;
5. проверить drop-in командой `systemd-analyze verify` и содержимое собранного
Debian-пакета через `dpkg-deb -c`.
Локальный HTTPS healthcheck не заменяет запросы DNS/TCP/UDP с реального workload
за `eth1`. При остановленном sing-box такой workload не должен получить прямой
доступ через `eth0`.
Production A-запись не используется для эксперимента: нужен staging hostname.