# Установка AWG2 Harness на production-хост ## 1. Предусловия Хост: - Debian 13 amd64; - root-доступ; - SSH настроен заранее; - AmneziaWG/AWG 2.0 установлена официальным способом; - контейнер Amnezia запускается через Docker; - сервер выделенный, без соседних сервисов, чьи сетевые правила нужно сохранять. На хосте должны быть доступны: ```bash docker systemctl ip tc wg nsenter modprobe nft ``` `tc/ip/wg` внутри контейнера полезны для fallback, но целевая модель — host tools + вход в network namespace контейнера. ## 2. Сборка бинаря Сборку лучше выполнять на отдельной build-машине с тем же целевым ABI. ```bash ./tools/build.sh --prepare-build-env --bootstrap-rust --yes ./tools/build.sh ``` Альтернатива (ручной запуск cargo из корня репозитория): ```bash cargo build --locked --manifest-path traffic_core/Cargo.toml --release ``` Проверки перед переносом: ```bash cargo fmt --manifest-path traffic_core/Cargo.toml --all --check cargo clippy --locked --manifest-path traffic_core/Cargo.toml --all-targets -- -D warnings cargo test --locked --manifest-path traffic_core/Cargo.toml --release file traffic_core/target/release/awg2-harness ldd traffic_core/target/release/awg2-harness ``` ## 3. Установка файлов ```bash install -m 0755 traffic_core/target/release/awg2-harness /usr/local/bin/awg2-harness install -d -m 0755 /etc/awg2-harness install -m 0644 config.toml /etc/awg2-harness/config.toml ``` Важно: production-установка **не должна** автоматически копировать [`config.example.toml`](config.example.toml) как боевой конфиг. Если используется [`tools/build.sh`](tools/build.sh), режим `--install` завершится ошибкой при отсутствии `/etc/awg2-harness/config.toml`. Режим `--install` копирует только бинарь и unit, выполняет `systemctl daemon-reload`, но не делает `systemctl enable --now`. Сначала подготовьте осознанный production-конфиг вручную. Проверка конфига: ```bash awg2-harness validate-config --config /etc/awg2-harness/config.toml ``` ## 4. Первичное применение traffic topology ```bash awg2-harness apply-limits --config /etc/awg2-harness/config.toml awg2-harness status --config /etc/awg2-harness/config.toml ``` Ожидается: - найден контейнер `amnezia-awg2` или `amnezia-awg`; - найден network namespace контейнера; - найден AWG/WG-интерфейс; - найдены peers из `wg show all allowed-ips`; - создана egress topology на AWG/WG-интерфейсе; - создан `ifb0`; - создан ingress redirect в `ifb0`; - на каждого peer есть egress и ingress class/filter; - если anti-torrent включён, в Amnezia netns есть `table inet awg2_harness` и drop counter отображается в status. ## 5. Настройка swap ```bash awg2-harness ensure-swap --config /etc/awg2-harness/config.toml swapon --show cat /proc/sys/vm/swappiness ``` Ожидается `/swapfile` размером 2 ГБ, права `0600`, запись в `/etc/fstab`, низкая склонность к использованию. ## 6. Установка systemd unit `/etc/systemd/system/awg2-harness.service`: ```ini [Unit] Description=AWG2 Harness multi-orchestrator After=network-online.target docker.service Wants=network-online.target Requires=docker.service [Service] Type=simple User=root ExecStart=/usr/local/bin/awg2-harness daemon --config /etc/awg2-harness/config.toml Restart=always RestartSec=5 StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target ``` Активация: ```bash systemd-analyze verify /etc/systemd/system/awg2-harness.service systemctl daemon-reload systemctl enable --now awg2-harness.service ``` ## 7. Проверка после запуска daemon ```bash systemctl status awg2-harness.service journalctl -u awg2-harness.service -n 100 --no-pager awg2-harness status --config /etc/awg2-harness/config.toml ``` ## 8. Проверка auto-healing ```bash docker restart amnezia-awg2 sleep 30 awg2-harness status --config /etc/awg2-harness/config.toml ``` Затем проверить Docker restart и host reboot. После каждого события status должен показывать healthy state без ручного запуска old bash. ## 9. Rollback Production-путь AWG2 Harness не включает возврат к old bash в штатный процесс выкладки.