При тестировании HTB drop-in делал systemctl restart amneziawg-awg0. Ядро при пересоздании интерфейса удалило default dev awg0 table 202. 127 юзеров с route_rule=eu-nugush (fwmark=0x2 → table 202) попали в пустую таблицу → fallback в main → WAN mirkwood = direct без exit-сервера.
awg-firewall.timer (каждую минуту) пропускал работу с No changes — skipped из-за неизменного hash БД, full apply-firewall не запускался → routing не пересоздался.
/usr/local/bin/awg-route-restore.sh <iface> + drop-in /etc/systemd/system/amneziawg-awgX.service.d/route.conf с ExecStartPost=/usr/local/bin/awg-route-restore.sh awgX.
Скрипт:
exit 0)del + add)| Сервер | Интерфейс | Table |
|---|---|---|
| mirkwood | awg0 | 202 (eu-nugush) |
| mirkwood | awg2 | 203 (eu-syun) |
| mirkwood | awg3 | 204 (eu-sakmara) |
| exit-серверы | * | no-op |
awg1 (клиентский) не нуждается в drop-in
route.conf— у него нет своей маршрутной таблицы 20X.
contrib/bin/awg-route-restore.sh — bash скриптcontrib/ansible/roles/central-server/tasks/systemd-timers.yml:
Deploy awg-route-restore.sh to /usr/local/binCreate drop-in dirs for amneziawg services (loop awg0/1/2/3)Drop-in qos.conf (HTB recovery, все 4 iface)Drop-in route.conf (routing recovery, awg0/2/3 — без awg1)После деплоя drop-in любой systemctl restart amneziawg-awgX безопасен:
systemctl restart amneziawg-awg0
# → ExecStartPost: awg-qos.sh (восстанавливает HTB)
# → ExecStartPost: awg-route-restore.sh awg0 (восстанавливает default route)
ip route show table 202 # проверка: default dev awg0 ...
tc qdisc show dev awg0 # проверка: htb root + fq_codel
Обязательно обновить case в awg-route-restore.sh:
case "$IFACE" in
awg0) TABLE=202 ;;
awg2) TABLE=203 ;;
awg3) TABLE=204 ;;
awg4) TABLE=205 ;; # ← новый
*) exit 0 ;;
esac
И аналогично — в drop-in route.conf для нового amneziawg-awg4.service.
Без route.conf следующий systemctl restart amneziawg-awgX положит юзеров обратно в direct без exit-сервера. Drop-in идемпотентен и быстр (<1.5 сек), цена нулевая.
awg-firewall — health-check «kernel state matches DB», чтобы при ручных правках tc/ip система авто-восстанавливала.qos.conf делает то же для tc qdisc. Оба drop-in'а в одной dir amneziawg-awgX.service.d/, не конфликтуют.Changelog