Files

Packaging

Каталог содержит package-managed systemd-конфигурацию проекта. Установка файлов в Debian-пакет описана в debian/install.

Состав

  • systemd/vpn-egress-guard.service — до запуска sing-box атомарно устанавливает отдельную nftables-таблицу, блокирующую прямой forwarding eth1 -> eth0;
  • systemd/vpn-egress-sync.service — выполняет однократный reconcile текущих Hysteria2 URI и policy;
  • systemd/vpn-egress-sync.path — запускает sync при изменении защищённого URI;
  • systemd/sing-box.service.d/10-vpn-egress-guard.conf — добавляет к штатному sing-box.service requirement и ordering dependency от guard.

Зависимости запуска

vpn-egress-guard.service
          │
          ├── required before ──> sing-box.service
          │
          └── required before ──> vpn-egress-sync.service
                                      ▲
                                      │
                             vpn-egress-sync.path

Before=/After= задают порядок, а Requires= — обязательность успешной активации dependency. Drop-in нужен потому, что один Before=sing-box.service в guard unit не заставляет sing-box запускать guard и не блокирует sing-box при ошибке guard.

Guard является Type=oneshot с RemainAfterExit=yes. Эти зависимости защищают совместный запуск units, но не являются watchdog для ручного удаления таблицы inet vpn_egress_guard. Текущее runtime-состояние проверяет vpn-egressctl doctor.

Units устанавливаются без автоматического enable/start. Их включение выполняется явно по инструкции docs/migration.md, после проверки локальных значений policy.

Граница релиза 0.2.0

debian/preinst отклоняет установку 0.2.0 поверх другого релиза. postinst устанавливает новый policy только при отсутствии файла и запускает строгую проверку: legacy policy/state и unmanaged sing-box config не мигрируют.

Переход выполняется только по clean-install runbook с runtime mask для sing-box.service; anti-leak guard сохраняется до завершения acceptance. Повторная установка ровно версии 0.2.0 разрешена только при согласованных state и generated config; preinst отклоняет все cross-release переходы.