fix: adopt sing-box 1.14 DNS hijacking
This commit is contained in:
+33
-17
@@ -3,7 +3,8 @@
|
||||
## Границы ответственности
|
||||
|
||||
Hysteria2 URI содержит переносимые реквизиты: auth, hostname/ports, SNI,
|
||||
`insecure`, тип obfs и obfs password. Production HY2XS выдаёт Gecko URI.
|
||||
`insecure`, тип obfs и obfs password. Новые production-установки HY2XS получают
|
||||
Gecko URI. Salamander остаётся явно согласуемым compatibility fallback.
|
||||
|
||||
`policy.json` хранит локальную инфраструктуру: `eth0`, `eth1`, TUN CIDR и MTU,
|
||||
route exclusions, таблицу 2022, marks, NFQUEUE, DNS, bandwidth и healthcheck.
|
||||
@@ -20,18 +21,24 @@ URI + policy
|
||||
├─ 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
|
||||
current отсутствует ── current существует
|
||||
│ │
|
||||
│ provenance gate
|
||||
│ │
|
||||
│ unchanged ───── changed
|
||||
│ │ │
|
||||
│ ▼ ├─ versioned last-good backup
|
||||
│ state.json │
|
||||
└────────────────────────────────┼─ atomic replace
|
||||
├─ systemctl restart
|
||||
└─ bounded healthcheck
|
||||
```
|
||||
|
||||
Первое применение после чистой установки не создаёт `last-good`: предыдущего
|
||||
управляемого конфига нет. При следующих изменениях backup разрешён только если
|
||||
SHA установленного config совпадает со state этого же релиза и sing-box 1.14.0.
|
||||
Побайтовое совпадение с candidate не доказывает ownership: существующий config
|
||||
без такого state отклоняется и не «усыновляется» контроллером.
|
||||
|
||||
## Gecko и DNS
|
||||
|
||||
@@ -39,11 +46,20 @@ 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`.
|
||||
Renderer явно задаёт штатный для sing-box 1.14.0 `dns_mode=hijack`. Поле
|
||||
`dns_address` не задаётся: sing-box выводит IPv4 DNS address `172.19.0.2` как
|
||||
следующий адрес после `172.19.0.1/30`, автоматически связывает его с DNS module
|
||||
и при `auto_redirect=true` устанавливает nftables DNAT для TCP/UDP 53. Поэтому
|
||||
отдельного route action `hijack-dns` в generated config нет.
|
||||
|
||||
Bootstrap UDP DNS привязан к `eth0`; remote DoH использует detour `hy2-out`.
|
||||
Собственный outbound sing-box исключается из auto-redirect по output mark, что
|
||||
необходимо подтвердить privileged Linux acceptance без bootstrap recursion.
|
||||
|
||||
Platform hijack не создаёт DNS listener на локальном LAN-адресе шлюза: трафик к
|
||||
такому адресу попадает в kernel `local` table раньше пользовательских rules.
|
||||
Если DHCP должен выдавать сам gateway как DNS server, требуется отдельный
|
||||
listener/service, который не входит в контракт 0.2.0.
|
||||
|
||||
## Endpoint routing
|
||||
|
||||
@@ -73,7 +89,7 @@ Metadata не обеспечивает доверие от root-компроме
|
||||
|
||||
## Граница установки
|
||||
|
||||
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 согласованы.
|
||||
0.2.0 не содержит кода миграции 0.1.0. `debian/preinst` отклоняет установку
|
||||
поверх любого другого релиза, а `postinst` отклоняет legacy policy/state или
|
||||
unmanaged `/etc/sing-box/config.json`. Same-release reinstall 0.2.0 допускается,
|
||||
если state и config согласованы.
|
||||
|
||||
Reference in New Issue
Block a user