Files
singbox_glue/docs/acceptance-0.2.0.md

124 lines
4.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Финальная приёмка 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-state first apply, генерация config, runtime health, DNS,
gateway E2E, idempotent no-op, E2E клиента за `br_vpn`, recovery после запуска
сервиса и fail-closed защита от прямого WAN.
Итоговый статус: `PASS / PRODUCTION E2E VALIDATED`.