From 81ea89f7faade5205eb9776ddd7ca640c9478068 Mon Sep 17 00:00:00 2001 From: Crimson Date: Thu, 27 Aug 2026 03:48:49 +0500 Subject: [PATCH] docs: describe packaging layout --- packaging/README.md | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 packaging/README.md diff --git a/packaging/README.md b/packaging/README.md new file mode 100644 index 0000000..8957e5e --- /dev/null +++ b/packaging/README.md @@ -0,0 +1,40 @@ +# 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.