openclaw 2026.4.24: фиксы bonjour crash-loop и FakeIP DNS

Два независимых фейла за один инцидент 2026-04-27:

1. Bonjour-плагин валит node на CIAO PROBING/ANNOUNCEMENT CANCELLED
   (mDNS не работает в LXC). Fix: plugins.entries.bonjour.enabled=false.
   Не лечится npm install openclaw@latest.

2. /etc/resolv.conf смотрел на 10.0.0.1 (LionART/Mihomo), который
   отдавал FakeIP 198.18.0.6 для api.telegram.org — из LXC такой
   трафик некуда маршрутизировать. Fix: nameserver 1.1.1.1 8.8.8.8
   через pct set --nameserver (резолвят через NetBird wt0).
This commit is contained in:
dttb
2026-04-27 10:08:32 +03:00
parent e2f166e416
commit 8599da3eeb

View File

@@ -258,6 +258,80 @@ ssh -o StrictHostKeyChecking=no root@10.0.0.250 \
### Проблема: Бот застревает при делегировании на Opus ### Проблема: Бот застревает при делегировании на Opus
Wrapper запускал `claude` без `-p` → интерактивный REPL → висел. Решение уже в wrapper (2026-04-17). Если опять: проверить что `/root/clawd/scripts/claude-code-wrapper.sh` использует `claude -p --output-format text`, а не голый `claude`. Wrapper запускал `claude` без `-p` → интерактивный REPL → висел. Решение уже в wrapper (2026-04-17). Если опять: проверить что `/root/clawd/scripts/claude-code-wrapper.sh` использует `claude -p --output-format text`, а не голый `claude`.
### Проблема: Crash-loop каждые ~40 сек с `CIAO PROBING/ANNOUNCEMENT CANCELLED` (bonjour плагин)
**Симптомы (2026-04-27, openclaw 2026.4.24):**
- `systemctl --user is-active openclaw-gateway.service``active`, но `NRestarts` растёт каждую минуту
- В логе `/tmp/openclaw/openclaw-<date>.log`: цикл `gateway ready (8 plugins: ..., bonjour, ...)``[openclaw] Unhandled promise rejection: CIAO PROBING CANCELLED` (или `CIAO ANNOUNCEMENT CANCELLED`) → `wrote stability bundle ... unhandled_rejection.json``Main process exited, code=exited, status=1/FAILURE` → systemd рестартит через 5 сек
- В журналах раньше предупреждение: `bonjour: watchdog detected non-announced service; attempting re-advertise`
- Telegram молчит (бот не успевает обработать update между рестартами)
**Корень:** плагин `bonjour` использует `@homebridge/ciao` для mDNS-анонса. Если LXC сеть не пускает multicast (типичная история для bridged-LXC за NPM), ciao периодически отменяет PROBING/ANNOUNCEMENT, выбрасывает rejection, который не отлавливается и валит весь node-процесс.
**Починка:** отключить bonjour-плагин — он по умолчанию загружается, даже если не прописан в `plugins.entries`.
```bash
pct exec 137 -- bash -c '
cp /root/.openclaw/openclaw.json /root/.openclaw/openclaw.json.bak.$(date +%F-%H%M)
python3 -c "
import json
p = \"/root/.openclaw/openclaw.json\"
d = json.load(open(p))
d.setdefault(\"plugins\",{}).setdefault(\"entries\",{})[\"bonjour\"] = {\"enabled\": False}
json.dump(d, open(p,\"w\"), indent=2, ensure_ascii=False)
"
XDG_RUNTIME_DIR=/run/user/0 systemctl --user restart openclaw-gateway.service
'
```
**Проверка успеха:** в логе должно быть `ready (7 plugins: acpx, browser, device-pair, nextcloud-talk, phone-control, talk-voice, telegram)` — без `bonjour`. `NRestarts=0` после рестарта, аптайм > 60 сек.
**Что bonjour даёт и что теряем:** mDNS-анонс gateway по `_openclaw-gw._tcp.local.` для автодискавери в LAN. У нас доступ всегда по фиксированному IP (10.0.0.239) или через `bot.dttb.ru` — не нужен.
### Проблема: Telegram polling stall + OmniRoute fetch failed (DNS отдаёт FakeIP)
**Симптомы (2026-04-27):**
- В логе `Telegram webhook cleanup failed: Network request for 'deleteWebhook' failed!`, `[telegram] Polling stall detected (no completed getUpdates for 240s); forcing restart`
- `OpenRouter pricing fetch failed (timeout 30s)`, OmniRoute через себя возвращает `502 [kiro/...]: fetch failed (reset after 5s)`
- Из контейнера `getent ahostsv4 api.telegram.org` отдаёт `198.18.0.6` (или другой `198.18.x`)
- `curl https://api.telegram.org/``Failed to connect ... port 443 after Xms`
- Но curl `--resolve api.telegram.org:443:149.154.166.110``200 OK` за ~150мс — то есть **сама сеть работает**, просто DNS даёт неработающий IP
**Корень:** дефолтный `/etc/resolv.conf` в LXC 137 после создания указывает на gateway `10.0.0.1` (это OpenWrt/MikroTik LionART с Mihomo/sing-box). Mihomo возвращает **FakeIP** (`198.18.0.0/15` per RFC 6815) для проксируемых доменов. FakeIP перенаправляется TPROXY-правилами на самом маршрутизаторе → его собственный proxy-выход. **Из LXC 137 трафик в `198.18/15`** некуда идти — нет route и нет TPROXY на этой машине, connection просто фейлится.
**Fix — DNS на честные `1.1.1.1` / `8.8.8.8`** (UDP/53 на них уходит через NetBird `wt0` → Финка-exit → реальный ответ):
```bash
pct set 137 --nameserver '1.1.1.1 8.8.8.8'
pct exec 137 -- bash -c 'cat > /etc/resolv.conf <<EOF
# 1.1.1.1 / 8.8.8.8 reachable via NetBird wt0 (Finland exit)
# 10.0.0.1 returns FakeIP 198.18.x without proxy route - DO NOT USE
search dttb.ru
nameserver 1.1.1.1
nameserver 8.8.8.8
EOF'
pct exec 137 -- bash -c 'XDG_RUNTIME_DIR=/run/user/0 systemctl --user restart openclaw-gateway.service'
```
**Проверка:**
```bash
# DNS — реальный IP, не FakeIP
pct exec 137 -- getent ahostsv4 api.telegram.org # → 149.154.x.x
# HTTP — 302/200
pct exec 137 -- curl -4 -sS -o /dev/null -w "%{http_code}\n" https://api.telegram.org/
# В логе после рестарта появится:
# webhook listening on http://10.0.0.239:8788/nextcloud-talk-webhook
# Delivery recovery complete: N recovered ← старые отложенные сообщения обработались
```
**Почему `pct set --nameserver` обязателен**`/etc/resolv.conf` в LXC при перезагрузке/миграции перегенерируется из конфига Proxmox (`/etc/pve/lxc/137.conf`). Правка только live-файла откатится.
**Что осталось как warning, но не блокирует:**
- `OpenRouter pricing fetch failed` — публичный pricing API через NetBird-выход иногда таймаутит, обновление кэша цен (бот работает на текущих).
- `embedded acpx runtime backend probe failed: Failed to spawn agent command: claude-code` — на LXC 137 нет `claude-code` в PATH. Это для **локального** делегирования через ACP. Реальное делегирование на Opus идёт через CLIProxy на code-server (LXC 132), не через embedded acpx.
**Не путать с IPv6-проблемой** (раздел выше) — там `Network request failed` тоже, но процесс не падает и DNS отдаёт правильные IP. Здесь же `Failed to connect` — значит резолв вернул broken IP.
### Проблема: периодические сбои `sendChatAction failed: Network request failed` и "Something went wrong" (причина — IPv6) ### Проблема: периодические сбои `sendChatAction failed: Network request failed` и "Something went wrong" (причина — IPv6)
**Корень (обнаружено 2026-04-17):** в LXC 137 IPv6 настроен, но наружу не маршрутизируется. `curl -4 https://api.telegram.org/` → 302 OK; `curl -6 https://api.telegram.org/` → connection failed. Node.js по умолчанию может резолвить AAAA первым и застревать на IPv6. Это даёт случайные `Network request failed` в Telegram API → у бота не отправляется typing-индикатор и ответ, пользователь видит "Something went wrong". **Корень (обнаружено 2026-04-17):** в LXC 137 IPv6 настроен, но наружу не маршрутизируется. `curl -4 https://api.telegram.org/` → 302 OK; `curl -6 https://api.telegram.org/` → connection failed. Node.js по умолчанию может резолвить AAAA первым и застревать на IPv6. Это даёт случайные `Network request failed` в Telegram API → у бота не отправляется typing-индикатор и ответ, пользователь видит "Something went wrong".
@@ -437,3 +511,6 @@ tar czf /root/openclaw-state-$(date +%F).tar.gz /root/.openclaw /root/clawd
- **2026-04-14** — LXC 129 (старый Clawdbot) удалён, данные в `/root/clawd/` на LXC 137. Решение: [decisions/2026-04-14-openclaw-claude-code-pipeline.md](../../decisions/2026-04-14-openclaw-claude-code-pipeline.md). - **2026-04-14** — LXC 129 (старый Clawdbot) удалён, данные в `/root/clawd/` на LXC 137. Решение: [decisions/2026-04-14-openclaw-claude-code-pipeline.md](../../decisions/2026-04-14-openclaw-claude-code-pipeline.md).
- **2026-04-17** — обновление 2026.4.10 → 2026.4.15, починка config (удалён `acp.agents`, `agents.list` object → удалён), починка wrapper (`claude` → `claude -p`), создан DELEGATION.md. Решение: [decisions/2026-04-17-code-server-upgrade.md](../../decisions/2026-04-17-code-server-upgrade.md). - **2026-04-17** — обновление 2026.4.10 → 2026.4.15, починка config (удалён `acp.agents`, `agents.list` object → удалён), починка wrapper (`claude` → `claude -p`), создан DELEGATION.md. Решение: [decisions/2026-04-17-code-server-upgrade.md](../../decisions/2026-04-17-code-server-upgrade.md).
- **2026-04-27** — две независимые проблемы привели к "бот молчит":
1. openclaw 2026.4.24 в crash-loop каждые ~40 сек на `Unhandled promise rejection: CIAO PROBING/ANNOUNCEMENT CANCELLED` (mDNS bonjour-плагин). Лечится отключением `plugins.entries.bonjour.enabled = false`.
2. После починки crash-loop всплыла FakeIP DNS — `/etc/resolv.conf` смотрел на `10.0.0.1`, тот отдавал `198.18.0.6` для api.telegram.org (Mihomo FakeIP без proxy-маршрута из LXC). Лечится переключением DNS на `1.1.1.1 8.8.8.8` через `pct set --nameserver` (резолвят через NetBird wt0). См. два новых раздела в "Частые проблемы".