# Ops Checklist (Selective VPN) / Боевой чеклист RU: Практический чеклист для проверки и восстановления работы маршрутизации и DNS. EN: Practical runbook/checklist for validating and recovering routing + DNS behavior. RU: DNS mode и Traffic mode это две независимые оси. EN: DNS mode and Traffic mode are independent. ## 0) Safety First / Безопасность RU: - Лучше тестировать изменения, пока у тебя есть стабильный SSH. - `direct` traffic mode это аварийный режим: он убирает базовые policy rules. - Если ты сидишь удаленно и доступ только через VPN, избегай `direct` без плана отката. EN: - Prefer to test changes while you still have a stable SSH session. - `direct` traffic mode is an emergency option: it removes base policy rules. - If VPN is your only access, avoid switching to `direct` without a rollback plan. ## 1) Quick Health (API) ```bash curl -s http://127.0.0.1:8080/healthz curl -s http://127.0.0.1:8080/api/v1/status curl -s http://127.0.0.1:8080/api/v1/dns/status curl -s http://127.0.0.1:8080/api/v1/traffic/mode/test ``` RU: смотри, чтобы `traffic/mode/test` вернул `healthy=true`, `probe_ok=true`. EN: make sure `traffic/mode/test` returns `healthy=true`, `probe_ok=true`. ## 2) Quick Health (Linux) ```bash ip rule show ip -4 route show table agvpn ip -4 route get 1.1.1.1 ip -4 route get 1.1.1.1 mark 0x66 ``` RU: ожидаемые паттерны: - Selective: есть правило типа `pref 12000 fwmark 0x66 lookup agvpn`. - Full tunnel: есть правило типа `pref 11900 lookup agvpn`. - В VPN-режимах в `agvpn` таблице есть `default dev `. EN: expected patterns: - Selective mode: rule like `pref 12000 fwmark 0x66 lookup agvpn`. - Full tunnel: rule like `pref 11900 lookup agvpn`. - In VPN modes `agvpn` has `default dev `. ## 3) Validate LAN and Containers / Проверка локалки и Docker RU: цель: в `full_tunnel` обычно нужно, чтобы LAN и Docker продолжали работать. EN: goal: in `full_tunnel` you usually want LAN and Docker networks to keep working. RU: если в `full_tunnel` ломается доступ к LAN/docker: - включи `auto_local_bypass`. - если нужно, чтобы контейнеры ходили в интернет direct (а хост через VPN), добавь docker CIDR в `Force Direct subnets`. EN: if LAN/docker break in `full_tunnel`: - enable `auto_local_bypass`. - if you want containers direct in full tunnel, add docker CIDRs to `Force Direct subnets`. ## 4) Validate nft sets / Проверка nft RU: обычно используются два сета: - `agvpn4`: direct-resolved IPs + static - `agvpn_dyn4`: wildcard/smartdns dynamic IPs ```bash nft list table inet agvpn nft list set inet agvpn agvpn4 nft list set inet agvpn agvpn_dyn4 ``` ## 5) Wildcard DNS / SmartDNS RU: state и артефакты: - Canonical wildcard state: `/var/lib/selective-vpn/smartdns-wildcards.json` - Generated rules file: `/etc/selective-vpn/smartdns.conf` RU: runtime accelerator (опционально): - когда включен, SmartDNS конфиг может содержать `nftset ... agvpn_dyn4`. - когда выключен, wildcard все равно работает через resolver job + prewarm. ```bash systemctl is-active smartdns-local.service ls -la /etc/selective-vpn/smartdns.conf /var/lib/selective-vpn/smartdns-wildcards.json ``` ## 6) Safe Recovery / Безопасный откат ### A) Clear routes (save cache) / Clear с сохранением снапшота GUI: `Clear routes (save cache)`. RU: очищает routes/nft, но сохраняет снапшот для восстановления. EN: clears routes/nft but saves a snapshot for restore. ### B) Restore cached routes / Восстановление снапшота GUI: `Restore cached routes`. RU: - часть маршрутов может быть `linkdown` (docker bridge). Restore пропускает некритичные ошибки. EN: - some routes can be `linkdown` (docker bridges). Restore skips non-critical failures. ### C) Restart services / Рестарт сервисов ```bash sudo systemctl restart selective-vpn-api.service ``` ## 7) Logs / Логи ```bash journalctl -u selective-vpn-api.service -n 200 --no-pager journalctl -u selective-vpn-api.service -f ``` ## 8) Common Pitfalls / Частые грабли - Docker bridge маршруты могут существовать, но быть `linkdown` (best-effort). - UID/cgroup overrides влияют на процессы хоста (OUTPUT) и обычно не управляют forwarded Docker-трафиком. - Если overrides списки слишком большие, backend отвергнет их (лимит на каждый тип).