feat: bootstrap awg2 harness rust workspace and docs
This commit is contained in:
@@ -0,0 +1,153 @@
|
||||
# Установка 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-выкладки.
|
||||
Reference in New Issue
Block a user