# 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. ## Зависимости запуска ```text 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.