Packaging
Каталог содержит package-managed systemd-конфигурацию проекта. Установка
файлов в Debian-пакет описана в debian/install.
Состав
systemd/vpn-egress-guard.service— до запуска sing-box атомарно устанавливает отдельную nftables-таблицу, блокирующую прямой forwardingeth1 -> 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.servicerequirement и 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.