# Финальная приёмка 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`.