Полный продакшн-фикс: parity с old bash, drift-recovery, status/runtime и builder separation
This commit is contained in:
@@ -46,8 +46,12 @@
|
||||
- [ ] Повторный `apply-limits` не меняет healthy state без причины.
|
||||
- [ ] Если удалить root qdisc на AWG/WG-интерфейсе, daemon восстанавливает topology.
|
||||
- [ ] Если удалить ingress qdisc, daemon восстанавливает topology.
|
||||
- [ ] Если удалить ingress redirect filter (`parent ffff:`), drift детектируется и topology восстанавливается.
|
||||
- [ ] Если удалить `ifb0`, daemon восстанавливает topology.
|
||||
- [ ] Если сделать `ifb0` DOWN, drift детектируется и topology восстанавливается.
|
||||
- [ ] Если удалить один peer filter, daemon восстанавливает topology.
|
||||
- [ ] Если изменить `rate/ceil` peer class, drift детектируется и topology восстанавливается.
|
||||
- [ ] Если добавить stale peer class/filter, drift детектируется и topology восстанавливается.
|
||||
- [ ] После удаления peer устаревшие class/filter исчезают через rebuild.
|
||||
- [ ] После добавления peer появляются новые class/filter.
|
||||
|
||||
@@ -65,11 +69,14 @@
|
||||
- [ ] `status` показывает desired peer limit из конфига, а не hardcoded 70.
|
||||
- [ ] `status` показывает egress state.
|
||||
- [ ] `status` показывает ingress/ifb state.
|
||||
- [ ] `status` показывает WireGuard clients (online/offline, latest handshake, RX/TX, endpoint).
|
||||
- [ ] `status` показывает missing/stale peer rules.
|
||||
- [ ] `status` явно показывает partial/drift state.
|
||||
- [ ] `status` показывает tc filter counters по peer или `filter statistics: unavailable`.
|
||||
- [ ] Логи доступны через `journalctl -u awg2-harness`.
|
||||
- [ ] Ошибка отсутствия `tc`/`ip`/`wg` логируется явно.
|
||||
- [ ] Последний reconcile result виден в status или journal.
|
||||
- [ ] `status` показывает последние события reconcile/firewall из `/run/awg2-harness/events.log`.
|
||||
|
||||
## G. Reboot scheduler
|
||||
|
||||
@@ -94,8 +101,9 @@
|
||||
- [ ] Есть chain `forward_antitorrent` с hook `forward` и policy `accept`.
|
||||
- [ ] Правило ограничивает `ip saddr <peer_ipv4_cidr>`, default `10.8.1.0/24`.
|
||||
- [ ] Лимит считается per source VPN IP через meter/set, а не глобально по всей подсети.
|
||||
- [ ] Порог совпадает с `anti_torrent.max_connections_per_peer`, default `200`.
|
||||
- [ ] Порог совпадает с `anti_torrent.max_connections_per_peer`, default `100`.
|
||||
- [ ] Drop counter виден в `status`.
|
||||
- [ ] На first-run без table `awg2-harness apply-firewall` создаёт `table inet awg2_harness`, а не падает.
|
||||
- [ ] При превышении порога новые flows дропаются, established flows ниже порога не ломаются.
|
||||
- [ ] После restart контейнера nftables rule пересоздаётся в новом netns.
|
||||
- [ ] При `anti_torrent.enabled = false` удаляется/отключается только AWG2-owned nftables state; Docker/Amnezia rules не flush-ятся.
|
||||
|
||||
Reference in New Issue
Block a user