154 lines
4.3 KiB
Markdown
154 lines
4.3 KiB
Markdown
# Установка 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
|
|
cargo build --release
|
|
```
|
|
|
|
Проверки перед переносом:
|
|
|
|
```bash
|
|
cargo fmt --check
|
|
cargo clippy --all-targets --all-features -- -D warnings
|
|
cargo test --release
|
|
file target/release/awg2-harness
|
|
ldd target/release/awg2-harness
|
|
```
|
|
|
|
## 3. Установка файлов
|
|
|
|
```bash
|
|
install -m 0755 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
|
|
```
|
|
|
|
Проверка конфига:
|
|
|
|
```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
|
|
|
|
Если нужно временно вернуться к old bash:
|
|
|
|
```bash
|
|
systemctl stop awg2-harness.service
|
|
systemctl disable awg2-harness.service
|
|
# вернуть /opt/amnezia/limit_peers.sh и /opt/amnezia/docker_watcher.sh
|
|
# вернуть amnezia-tc.service и amnezia-tc-watcher.service
|
|
systemctl daemon-reload
|
|
systemctl enable --now amnezia-tc.service amnezia-tc-watcher.service
|
|
```
|
|
|
|
Rollback должен быть проверен до первой production-выкладки.
|