fix: adopt sing-box 1.14 DNS hijacking

This commit is contained in:
2026-09-08 21:20:08 +05:00
parent 76dce5b47a
commit b6e45d6e77
18 changed files with 219 additions and 99 deletions
+31 -12
View File
@@ -5,7 +5,8 @@
1. Unit: URI, policy, version, renderer, redaction и metadata.
2. Failure injection: candidate rejection, restart failure, URI/config restore,
unmanaged config, corrupted/legacy last-good.
3. Packaging: MPL-2.0, exact dependency, upgrade rejection и postinst guard.
3. Packaging: MPL-2.0, exact dependency, cross-release rejection,
same-release reinstall и postinst guard.
4. Real binary: официальный sing-box 1.14.0 для Gecko и Salamander configs.
5. Privileged Linux: TUN, systemd, nftables, routing и DNS.
6. HY2XS acceptance: Gecko TCP/UDP/DNS, failures, reconnect и reboot.
@@ -38,15 +39,33 @@ Windows — schema decoding через `format`, поскольку Windows bina
В disposable Incus/VM с двумя NIC проверить:
1. чистую установку и отказ in-place upgrade;
2. Gecko config и отсутствие last-good после первого apply;
3. table 2022, rule 9000/32768, marks и NFQUEUE 100;
4. bootstrap DNS через `eth0`, DoH через `hy2-out`;
5. TCP/UDP/DNS с workload за `eth1`;
6. отсутствие прямого WAN при остановленном sing-box;
7. credential failure и same-release rollback;
8. отказ legacy/mismatched metadata;
9. A-record change и reboot recovery.
1. собрать package и выполнить чистую установку;
2. повторно установить ровно 0.2.0 поверх согласованного состояния;
3. подтвердить отказ переходов 0.1.x → 0.2.0 и другой release → 0.2.0;
4. применить Gecko config и подтвердить отсутствие `last-good` после первого
apply;
5. проверить table 2022, rule 9000/32768, marks и NFQUEUE 100;
6. до установления HY2 разрешить hostname endpoint через `bootstrap-dns` по
`eth0`, без recursion в `172.19.0.2`;
7. подтвердить DoH `remote-dns` через `hy2-out`;
8. с хоста выполнить `getent hosts example.com`, `dig @8.8.8.8 example.com` и
`dig +tcp @8.8.8.8 example.com`;
9. повторить оба `dig` с workload за `eth1` и через `tcpdump`/nft counters
подтвердить отсутствие реального TCP/UDP 53 через `eth0`;
10. при наличии `systemd-resolved` проверить DNS и route-only domain `~.` для
`tun-sb0`; отдельно повторить запуск без доступного `resolvectl`;
11. проверить TCP/UDP и внешний VPN IP с workload за `eth1`;
12. подтвердить отсутствие прямого WAN при остановленном sing-box;
13. проверить credential failure и same-release rollback;
14. проверить отказ legacy/mismatched metadata и unmanaged identical config;
15. проверить смену A-record, reconnect, stop/start и reboot recovery;
16. после stop убедиться в очистке sing-box nftables/resolved state, после start
— в полном восстановлении.
Server-side Gecko E2E выполняет владелец HY2XS. Salamander проверяется только на
disposable test server и не добавляется в production server configuration.
Server-side Gecko E2E выполняется с production-compatible HY2XS. Salamander E2E
выполняется на disposable server, явно настроенном в compatibility-режим; это не
автоматический fallback и не default новой production-установки.
Platform hijack не обслуживает DNS, направленный на локальный LAN IP gateway.
Такой сценарий допустим только после добавления отдельного DNS listener и не
входит в acceptance версии 0.2.0.