docs: record 0.2.0 production acceptance

This commit is contained in:
2026-09-15 01:31:03 +05:00
parent b6e45d6e77
commit 105e981743
5 changed files with 150 additions and 0 deletions
+123
View File
@@ -0,0 +1,123 @@
# Финальная приёмка vpn-egressctl 0.2.0
## Паспорт прогона
- дата: 15 сентября 2026 года;
- статус: `PASS / PRODUCTION E2E VALIDATED`;
- gateway: `vpn-egress-gw`;
- `vpn-egressctl`: `0.2.0`;
- `sing-box`: `1.14.0`;
- сервер Hysteria2: `2.12.2`;
- obfs: Gecko;
- endpoint: `se.api.withen.pro:2053`;
- TUN: `tun-sb0`, `172.19.0.1/30`.
Это отчёт о клиентском control plane и полном пути трафика через gateway.
Отдельная приёмка ядра HY2XS в него не включена. До прогона endpoint был
независимо проверен официальным клиентом Hysteria 2.12.2: QUIC/Hysteria
handshake, SOCKS5, HTTPS и двусторонний UDP-трафик прошли успешно.
## Clean first apply
После удаления старого failed state установлен новый production URI.
```text
vpn-egressctl check
OK: se.api.withen.pro:2053, sing-box 1.14.0
vpn-egressctl sync
Configuration applied.
```
После применения:
- `status=ok`;
- `service_active=true`;
- `config_drift=false`;
- `source_drift=false`;
- SHA-256 из state совпал с фактическим SHA-256 установленного config.
Зафиксированный SHA-256 итогового config:
```text
0d888e7793bd979d212b613542070ce9349a625ddace2a0727776072b66c96ae
```
`last_good_available=false` и `last_good_valid=false` после этого прогона —
ожидаемое состояние. У первого успешного clean apply нет предыдущего managed
config, а последующий no-op sync не создаёт rollback predecessor.
## Runtime и gateway E2E
- `sing-box.service` и `vpn-egress-guard.service` активны;
- `tun-sb0` поднят с адресом `172.19.0.1/30`;
- DNS через sing-box работает;
- Hysteria2 outbound работает;
- DNS resolution и реальный HTTPS-запрос с `vpn-egress-gw` прошли успешно;
- внешний адрес gateway через туннель: `212.113.101.200`.
## Idempotency
Повторный `vpn-egressctl sync` сообщил:
```text
Desired state is already installed.
```
При этом `changed=false`, оба drift-флага остались `false`, SHA-256 config не
изменился, сервисы сохранили active state. Повторный E2E также прошёл с внешним
адресом `212.113.101.200`.
## Клиент за br_vpn
Для независимой проверки forwarding path создан временный клиент:
- адрес: `10.30.0.20/24`;
- default gateway: `10.30.0.2`;
- доступность gateway: `3/3`, потерь нет;
- DNS-запрос обработан sing-box;
- TCP/HTTPS-трафик принят через TUN;
- выбран outbound `hysteria2[hy2-out]`;
- внешний адрес клиента: `212.113.101.200`.
Проверенный путь:
```text
10.30.0.20
-> br_vpn
-> vpn-egress-gw / eth1
-> tun-sb0
-> sing-box 1.14.0
-> Hysteria2 / Gecko
-> se.api.withen.pro:2053
-> Internet
```
## Fail-closed / anti-leak
До остановки sing-box клиент выходил с адреса `212.113.101.200`. После
успешного `systemctl stop`:
- sing-box перешёл в inactive state;
- `vpn-egress-guard` остался active;
- прямой Internet access клиента отсутствовал;
- `curl` завершился с `rc=7`;
- выхода через обычный `eth0`/WAN не возникло.
После запуска sing-box доступ восстановился, а внешний адрес снова стал
`212.113.101.200`.
Статус anti-leak проверки: `PASS`.
## Cleanup и итог
После проверки удалены известные временные объекты: test namespace, veth,
официальный диагностический Hysteria binary, test configs, logs и pcap.
Production URI, config и state сохранены. Внутри `vpn-egress-gw` контрольный
`find` по использованным диагностическим шаблонам не вернул результатов.
Подтверждены clean installation и first apply, генерация config, runtime
health, DNS, gateway E2E, idempotent no-op, E2E клиента за `br_vpn`, recovery
после запуска сервиса и fail-closed защита от прямого WAN.
Итоговый статус: `PASS / PRODUCTION E2E VALIDATED`.