# Конфигурация AWG2 Harness Конфиг живёт в `/etc/awg2-harness/config.toml`. Он общий для всего пакета и должен содержать только эксплуатационно значимые параметры. ## Рекомендуемый `config.toml` ```toml [amnezia] container_names = ["amnezia-awg2", "amnezia-awg"] interface_candidates = ["awg0", "wg0", "amnezia0", "tun0"] interface_patterns = ["awg*", "wg*", "amnezia*", "tun*"] peer_ipv4_cidr = "10.8.1.0/24" [traffic] enabled = true peer_limit = "70mbit" root_rate = "1000mbit" reconcile_interval_secs = 60 container_ready_timeout_secs = 30 class_start_id = 10 ifb_name = "ifb0" full_rebuild_on_drift = true [anti_torrent] enabled = true max_connections_per_peer = 200 peer_ipv4_cidr = "10.8.1.0/24" apply_in_amnezia_netns = true [reboot] enabled = true window_start_utc = "01:00" window_end_utc = "02:00" [swap] enabled = true path = "/swapfile" size_mb = 2048 priority = -2 swappiness = 1 ``` ## Пояснения `amnezia.container_names` — имена контейнеров, которые считаются Amnezia/AWG. Порядок важен. По текущему production-снимку основной вариант — `amnezia-awg2`, fallback — `amnezia-awg`. `amnezia.interface_candidates` — точные имена интерфейса, которые пробуются первыми. `amnezia.interface_patterns` — fallback-паттерны для устойчивости к обновлениям Amnezia. Старые материалы прямо отмечают риск переименования интерфейса между `awg0`, `wg0`, `amnezia0`. `amnezia.peer_ipv4_cidr` — подсеть VPN peers. Сейчас старая bash-система жёстко ищет `10.8.1.x`; в Rust это должно быть конфигурируемо. `traffic.peer_limit` — per-peer лимит в обе стороны. Текущий production default — `70mbit`. `traffic.root_rate` — верхний HTB-класс, в старой системе `1000mbit`. `traffic.reconcile_interval_secs` — период фоновой проверки. Он нужен не вместо Docker events, а вместе с ними. `traffic.container_ready_timeout_secs` — сколько ждать появления интерфейса после старта контейнера. `traffic.class_start_id` — первый class id. В старой системе это `10`, что даёт классы `1:10`, `2:10` и дальше. `traffic.ifb_name` — имя IFB-интерфейса для ingress shaping. В старой системе это `ifb0`. Этот параметр можно оставить в конфиге, потому что бинарь реально создаёт/удаляет этот интерфейс. `traffic.full_rebuild_on_drift` — безопасная v1-модель: при drift удалить owned topology и собрать заново. `anti_torrent.enabled` — включает nftables connection-count guard против high-peer-count P2P-нагрузки. Это новое расширение, не часть old bash. `anti_torrent.max_connections_per_peer` — максимум одновременных conntrack flows на один VPN peer IP. Default `200`; `250` — более консервативный вариант. `anti_torrent.peer_ipv4_cidr` — подсеть, на которую распространяется правило. Обычно должна совпадать с `amnezia.peer_ipv4_cidr`. `anti_torrent.apply_in_amnezia_netns` — правило применяется в network namespace контейнера Amnezia. Это default, потому что именно там видны исходные VPN peer IP до возможного NAT. `reboot.enabled` — включает плановую перезагрузку. `reboot.window_start_utc` / `reboot.window_end_utc` — UTC-окно плановой перезагрузки. В старом Rust-модуле это было зашито как 01:00–02:00 UTC. `swap.enabled` — включает setup-задачу swap. `swap.path`, `swap.size_mb`, `swap.priority`, `swap.swappiness` — параметры аварийного swap. Default: 2 ГБ, низкий priority, `swappiness = 1`. ## Что не выносить в конфиг Не нужно выносить: - handles `1:`, `2:`, `ffff:`; - имена внутренних Rust-модулей; - формат команд `tc`; - retry micro-tuning; - формат логов; - путь lock-файла, если нет эксплуатационной причины; - hardening systemd; - nftables hook/priority/table names, если нет осознанной причины. Handles и структура `HTB + fq_codel + ingress + ifb` — это contract traffic module, а не настройка оператора.