Files
singbox_glue/docs/acceptance-0.2.0.md
T

4.6 KiB
Raw Blame History

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

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:

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 сообщил:

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.

Проверенный путь:

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.