From 835ea67c0e588c435276940039381b99c3a068be Mon Sep 17 00:00:00 2001 From: Claude Auto-Sync Date: Fri, 17 Apr 2026 13:04:23 +0000 Subject: [PATCH] =?UTF-8?q?=D0=B7=D0=B0=D1=89=D0=B8=D1=82=D0=B0=20Podkop?= =?UTF-8?q?=20=D0=9F=D0=B5=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=BA=D0=B8:=20gu?= =?UTF-8?q?ard-=D1=81=D0=BA=D1=80=D0=B8=D0=BF=D1=82=20+=20cron=20=D0=BE?= =?UTF-8?q?=D1=82=20=D0=BF=D0=BE=D0=BB=D0=BE=D0=BC=D0=BA=D0=B8=20=D0=BF?= =?UTF-8?q?=D0=B0=D1=82=D1=87=D0=B0=20opkg=20upgrade?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...26-04-17-peredelki-podkop-stability-fix.md | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/decisions/2026-04-17-peredelki-podkop-stability-fix.md b/decisions/2026-04-17-peredelki-podkop-stability-fix.md index f157dfd..cd90341 100644 --- a/decisions/2026-04-17-peredelki-podkop-stability-fix.md +++ b/decisions/2026-04-17-peredelki-podkop-stability-fix.md @@ -67,13 +67,36 @@ uci commit podkop - AWG transfer: 60 MiB received через туннель - iPhone 192.168.2.160: 14 ASSURED conntrack соединений +## Защита от повторной поломки (guard) + +Патч /usr/bin/podkop слетит при `opkg upgrade podkop`. Поставлен трёхслойный guard: + +### `/usr/sbin/podkop-prio-guard` +Проверяет и чинит: +1. Строку 311 в `/usr/bin/podkop` (если `-150` → восстанавливает `-140`) +2. Runtime chain `PodkopTable.mangle` (если `priority mangle` → пересоздаёт с `priority -140`) + +### Триггеры запуска +- **cron каждые 2 минуты**: `*/2 * * * * /usr/sbin/podkop-prio-guard` (crontab root) +- **после ребута**: `(sleep 30 && /usr/sbin/podkop-prio-guard) &` в `/etc/rc.local` +- **ручной запуск**: `/usr/sbin/podkop-prio-guard` — см. `logread -l 50 | grep podkop-prio` + +### Протестированные сценарии восстановления +| Сценарий | Приоритет после | Guard восстанавливает за | +|----------|-----------------|--------------------------| +| `podkop restart` | `-140` (сохраняется патчем) | не требуется | +| Патч слетел + `podkop restart` (имитация opkg upgrade) | `-150` | ≤ 2 мин (cron) | +| Руками `nft delete chain` + mangle на `-150` | `-150` | ≤ 2 мин (cron) | +| Ребут роутера | зависит от порядка procd | `sleep 30` после inet-up | + ## Важное на будущее 1. **Конфликт priority при co-existence Podkop + NetBird** — если в сети присутствует NetBird (или любой другой nft-wrapper-VPN с hook prerouting priority mangle), Podkop нужно сдвигать на `-140` или позже. Это не описано в документации Podkop. 2. **Не верь только счётчику `mangle`** — если `proxy.tproxy` counter сильно отстаёт, метка где-то перезаписывается. -3. Патч `/usr/bin/podkop` слетит при обновлении пакета — после каждого `opkg upgrade podkop` проверять `sed -n '311p' /usr/bin/podkop`. +3. После `opkg upgrade podkop` окно поломки до 2 минут (до следующего cron). Для нулевого downtime — вручную: `/usr/sbin/podkop-prio-guard && podkop restart`. 4. `podkop apply` команды не существует — для перегенерации правил: `podkop restart`. 5. На OpenWrt Переделки **нет `conntrack` CLI и `timeout`** — только /proc и builtin. +6. Лог работы guard: `logread | grep podkop-prio-guard`. ## Диагностика на будущее