Files
knowledge-base/decisions/2026-04-28-netbird-watchdog-lxc-132-137.md

2.8 KiB
Raw Blame History

date, type, tags
date type tags
2026-04-28 decision
decision
openclaw
netbird
code-server
monitoring

2026-04-28: NetBird watchdog на LXC 132 и 137 (фикс "бот молчит")

Симптом

Олег пишет Максимке (openclaw, LXC 137) с 10:10 до 11:09 — 9 сообщений без ответа. В логах gateway:

FailoverError: LLM request failed: network connection error
502 [kiro/claude-sonnet-4.5]: fetch failed (reset after 1s)
502 [claude/claude-sonnet-4-6]: fetch failed (reset after 5s)
502 [codex/gpt-5.4]: fetch failed (reset after 2s)

Все 3 модели в failover-цепочке падают с TCP-reset за 1-5 секунд.

Корень

NetBird daemon на LXC 132 (code-server, OmniRoute + CLIProxy) в зомби-состоянии:

Management: Connected
Signal: Connected
Relays: 0/4 Available     ← застряло
Nameservers: 0/0 Available

DNS-запросы к 1.1.1.1 через wt0-туннель падают мгновенно с write: required key not available — WireGuard handshake с пиром не завершён, ключ не загружен в ядро. Поэтому curl на api.anthropic.com / api.openai.com отвечает HTTP 000 за 0.0001s. CLIProxy без апстрима возвращает HTTP 500 на каждый POST.

Ручной systemctl restart netbird сразу чинит — Relays поднимаются 4/4, DNS работает, curl Anthropic = 405, OpenAI = 401.

Решение

Watchdog на LXC 132 и LXC 137:

  • /usr/local/bin/netbird-watchdog.sh — проверяет netbird status. Если Relays: 0/N или Peers count: 0/N (при N>0 и Management=Connected) — systemctl restart netbird. Минимум 5 мин между рестартами (lock-файл /run/netbird-watchdog.last-restart).
  • netbird-watchdog.service (oneshot) + netbird-watchdog.timer (каждые 2 мин).

Деплой

for CT in 132 137; do
  pct push $CT netbird-watchdog.sh /usr/local/bin/ --perms 0755
  pct push $CT netbird-watchdog.service /etc/systemd/system/
  pct push $CT netbird-watchdog.timer /etc/systemd/system/
  pct exec $CT -- systemctl daemon-reload
  pct exec $CT -- systemctl enable --now netbird-watchdog.timer
done

Скрипты — snippets/netbird-watchdog/.

Логи

Решение пишет в journalctl с tag netbird-watchdog:

journalctl -t netbird-watchdog -n 20

Если за неделю не было ни одного срабатывания — проблема была разовой. Если срабатывает регулярно — нужно копать корень почему wireguard handshake разваливается (MTU? фрагментация UDP? провайдер режет?).