diff --git a/projects/buzharovo/podkop-router.md b/projects/buzharovo/podkop-router.md index bb6f038..dcb3977 100644 --- a/projects/buzharovo/podkop-router.md +++ b/projects/buzharovo/podkop-router.md @@ -5,10 +5,13 @@ tags: [buzharovo, openwrt, podkop, amneziawg, fakeip, doh] aliases: [Severni Les router, Бужарово podkop роутер] --- -# Бужарово — podkop-роутер «Severni Les» (Cudy TR3000) +# Бужарово — podkop-роутер «Severny-Les» (Cudy TR3000) Отдельный роутер обхода РКН для стройрынка Бужарово (Северный лес). **Не путать** со шлюзом 1С-сервера [[buzharovo-router|Cudy WR6500H 185.13.47.2]] — это новый Cudy TR3000 под podkop. +- **hostname:** `Severny-Les` (было `Severni_Les` — поправлено на корректную латиницу 2026-06-23). +- **NetBird:** `100.70.113.251` / `severny-les-113-251.netbird.cloud` (группа Claude-Diag, ключ `64DF527E-…`, `--disable-dns`). Прямой доступ: **`ssh root@100.70.113.251`** (root/`1qaz!QAZ`). + ## Железо / ОС - **Cudy TR3000 v1**, OpenWrt 24.10.3 r28872, aarch64; extroot на USB. - podkop **v0.7.19**, sing-box **1.12.4** (бинарь скопирован с домашнего 10.0.0.1; opkg-метадата числит 1.12.22 — бэкап `/usr/bin/sing-box.bak-1.12.22`; версия на обход НЕ влияла, см. ниже). @@ -17,7 +20,9 @@ aliases: [Severni Les router, Бужарово podkop роутер] Сейчас стоит в домашней лабе: воткнут во **второй LAN-порт Proxmox**. - LAN роутера: **192.168.1.1/24** (br-lan). - WAN роутера: `eth0` DHCP из домашней сети — IP **10.0.0.215**, шлюз **10.0.0.1** (домашний роутер). Весь интернет идёт через дом. -- **Доступ:** jump через Proxmox — `ssh root@10.0.0.250` → `ssh -o UserKnownHostsFile=/dev/null root@192.168.1.1` (root / `1qaz!QAZ`). Host-key 192.168.1.1 на Proxmox конфликтует (там раньше было другое устройство) → нужен `UserKnownHostsFile=/dev/null`. +- **Доступ (основной):** по NetBird — `ssh root@100.70.113.251`. +- **Доступ (фолбэк, по LAN):** jump через Proxmox — `ssh root@10.0.0.250` → `ssh -o UserKnownHostsFile=/dev/null root@192.168.1.1` (root / `1qaz!QAZ`). Host-key 192.168.1.1 на Proxmox конфликтует → нужен `UserKnownHostsFile=/dev/null`. +- **Firewall для NetBird:** добавлена зона `nbird` (device `wt0`, `input=ACCEPT` для управления, `forward=REJECT` — NetBird-пиры НЕ ходят в LAN стройрынка, masq off). Без неё SSH на NetBird-IP = «Connection refused» (wt0 был вне зон). ⚠️ Доступ к роутеру по NetBird гейтит ACL группы Claude-Diag — на проде сузить, если в группе лишние пиры. - На стройрынке будет свой провайдер — сохранить LAN `192.168.1.0/24`. ## Туннель @@ -32,10 +37,14 @@ aliases: [Severni Les router, Бужарово podkop роутер] | `community_lists` | `meta youtube telegram` | | `disable_quic` | `1` | | `dns_type` | **`doh`** ← ключевой фикс | -| `dns_server` | **`https://1.1.1.1/dns-query`** (DoH по IP) | +| `dns_server` | **`1.1.1.1/dns-query`** (DoH по IP, БЕЗ префикса `https://`) | | `download_lists_via_proxy` | **`1`** / section `main` | -> ⚠️ **DoH по IP, не по хостнейму.** Если задать `dns_server=8.8.8.8`, podkop подставляет каноничный DoH-URL `https://dns.google/dns-query` (**хостнейм**) — а его надо резолвить через bootstrap по `:53`, который за домашним хайджеком → диагностика podkop «Основной DNS» краснеет и резолв хрупкий. Решение: полный URL с IP — `https://1.1.1.1/dns-query` → `url_get_host`=1.1.1.1 (IPv4) → bootstrap не нужен, sing-box стучит прямо на `1.1.1.1:443`. Диагностика зелёная, robust. +> ⚠️ **DoH по IP, и значение — `1.1.1.1/dns-query` (без `https://`).** Два подвоха: +> 1. **Не bare IP.** Если задать `dns_server=8.8.8.8`, podkop подставляет каноничный DoH-URL `https://dns.google/dns-query` (**хостнейм**) — его надо резолвить через bootstrap по `:53` (за домашним хайджеком) → хрупко. +> 2. **Не полный URL `https://1.1.1.1/dns-query`.** Конфиг sing-box он соберёт верно (IP-DoH), НО **проверка «Основной DNS» в диагностике podkop баговая**: делит `dns_server` по `/` и для `https://…` выполняет `dig @https:` → ложный красный крест. +> Правильное значение **`1.1.1.1/dns-query`**: `url_get_host`=`1.1.1.1` (IPv4) → bootstrap не нужен (sing-box стучит прямо на `1.1.1.1:443`), И диагностика парсит верно (`dig @1.1.1.1 +https=/dns-query`) → зелёная. +> Косметика: «Счётчики правил mangle» краснеют в препроде (нет LAN-клиентов → forward-метки на нуле); в проде с клиентами зеленеют. ## Грабли, которые лечили (2026-06-23) 1. **`download_lists_via_proxy=0` → sing-box не качал rule-set'ы** (GitHub блокирован РКН по WAN, `/tmp/sing-box/rulesets` пуст). Фикс: `download_lists_via_proxy=1` + `download_lists_via_proxy_section=main` (detour→`main-out`=туннель). Бэкап `/etc/config/podkop.bak-srs-fix-20260623`. Подробно: [[../../snippets/podkop-reference]] §5. diff --git a/snippets/podkop-reference.md b/snippets/podkop-reference.md index cadb5c2..2ef3233 100644 --- a/snippets/podkop-reference.md +++ b/snippets/podkop-reference.md @@ -132,7 +132,7 @@ uci commit podkop && /etc/init.d/podkop restart | **`download_lists_via_proxy='1'` с ПУСТОЙ секцией ломает sing-box** | `sing-box FATAL: start service: initialize rule-set: download detour not found: -out` → detour-тег вышел `-out` (пустая секция + суффикс) | На **0.7.19** включать МОЖНО и НУЖНО, если GitHub блокирован РКН: `uci set podkop.settings.download_lists_via_proxy=1; uci set podkop.settings.download_lists_via_proxy_section=main` → detour `main-out` (туннель). Тогда remote rule-set'ы (`*.srs` с `release-assets.githubusercontent.com`) качаются ЧЕРЕЗ туннель. Без этого при пустом `/tmp/sing-box/rulesets` (после `rm cache.db`/обновления) sing-box падает `initialize rule-set: Get ...` т.к. `route.final=direct-out`=WAN. **Грабля 0.7.14 = НЕ задана секция.** HomeLab dttb 2026-06-23. | | **`podkop list_update` падает: raw.githubusercontent.com блокирован РКН** | в логах `Attempt N/3 to download .../*.lst failed`, напрямую с WAN `curl raw.git` = HTTP 000. Списки тихо устаревают (обход «потихоньку перестаёт ловить» новые домены/подсети) | Добавить **сам GitHub в обход**: `uci set podkop.main.user_domain_list_type='dynamic'; uci add_list podkop.main.user_domains='githubusercontent.com'; uci commit podkop; /etc/init.d/podkop restart`. Тогда роутерный `list_update` резолвит raw.git в FakeIP → туннель → HTTP 200. via_proxy оставить `0`. | | 🔴 **`rp_filter` строгий на awg-интерфейсе → handshake есть, транзита НЕТ** | `awg show` = свежий handshake + растёт `received`; но `ping -I awgN 1.1.1.1` = **100% потерь**, end-to-end 000, sing-box не качает списки. Transport-ответ из туннеля приходит на awgN, при `rp_filter=1` (strict) ядро не видит обратного маршрута к internet-src через awgN → **дроп до доставки**. Особенно на мульти-туннельных роутерах, где один awg работает (стоит `=2`), другой нет (унаследовал `default=1`) | `sysctl -w net.ipv4.conf..rp_filter=2` (loose) → проверь `ping -I `. Персистентно: строка `net.ipv4.conf..rp_filter=2` в `/etc/sysctl.conf` + hotplug `/etc/hotplug.d/iface/99-awg-rpfilter` (loose на все `awg*` при ifup). **Диагностика:** сравни `sysctl net.ipv4.conf.{рабочий,сломанный}.rp_filter` — разница `2` vs `1` = это он. HomeLab dttb 2026-06-23 (awg2 vs awg0). | -| 🔴 **podkop-роутер ЗА чужим DNS-хайджеком → sing-box звонит на FakeIP** | Туннель жив (`ping -I awg` ОК), FakeIP присваивается, но end-to-end 000. В логах: `open connection to <домен> using outbound/direct[main-out]: dial tcp 198.18.0.x: i/o timeout` — sing-box знает домен, но дозванивается до **самого FakeIP** вместо реального IP. podkop self-check: ❌ «Прокси-трафик не маршрутизируется через FakeIP». Причина: при `dns_type=udp` восходящий резолв sing-box'а (реальный IP по `udp:53`) перехватывается **вышестоящим роутером с DNS-хайджеком** (`udp dport 53 dnat → его DNS`) → возвращается ЕГО FakeIP → петля. Бывает, когда podkop-роутер стоит WAN'ом за другим роутером, который сам хайджачит :53 (типично в препрод-лабе за домашним шлюзом). | **`uci set podkop.settings.dns_type=doh`** + **`dns_server='https://1.1.1.1/dns-query'`** (DoH по IP) → restart. Резолвер по `https/443` минует `:53`-хайджек. ⚠️ **DoH задавать ПОЛНЫМ URL с IP**, не bare `8.8.8.8` — bare IP podkop мапит в каноничный хостнейм (`https://dns.google/dns-query`), а хостнейм требует bootstrap-резолва по `:53` (тоже хайджек) → диагностика «Основной DNS» краснеет. С `https://1.1.1.1/dns-query` `url_get_host`=IP → bootstrap не нужен. На боевом объекте со своим провайдером работал бы и `udp`, но DoH = устойчивость к любому вышестоящему DNS-перехвату. **НЕ путать с «missing fakeip record»** (транзиент после `rm cache.db`, сам проходит). Бужарово/Severni Les 2026-06-23 за домашним catch-all хайджеком. | +| 🔴 **podkop-роутер ЗА чужим DNS-хайджеком → sing-box звонит на FakeIP** | Туннель жив (`ping -I awg` ОК), FakeIP присваивается, но end-to-end 000. В логах: `open connection to <домен> using outbound/direct[main-out]: dial tcp 198.18.0.x: i/o timeout` — sing-box знает домен, но дозванивается до **самого FakeIP** вместо реального IP. podkop self-check: ❌ «Прокси-трафик не маршрутизируется через FakeIP». Причина: при `dns_type=udp` восходящий резолв sing-box'а (реальный IP по `udp:53`) перехватывается **вышестоящим роутером с DNS-хайджеком** (`udp dport 53 dnat → его DNS`) → возвращается ЕГО FakeIP → петля. Бывает, когда podkop-роутер стоит WAN'ом за другим роутером, который сам хайджачит :53 (типично в препрод-лабе за домашним шлюзом). | **`uci set podkop.settings.dns_type=doh`** + **`dns_server='1.1.1.1/dns-query'`** (DoH по IP, БЕЗ `https://`) → restart. Резолвер по `https/443` минует `:53`-хайджек. ⚠️ **Значение точно `1.1.1.1/dns-query`**: (а) НЕ bare `8.8.8.8` — podkop мапит bare IP в каноничный хостнейм (`https://dns.google/dns-query`), а хостнейм требует bootstrap по `:53` (тоже хайджек); (б) НЕ полный `https://1.1.1.1/dns-query` — конфиг соберётся ОК, но проверка «Основной DNS» в диагностике podkop баговая (делит по `/`, делает `dig @https:`) → ложный красный. С `1.1.1.1/dns-query`: `url_get_host`=IP → без bootstrap, И диагностика зелёная. На боевом объекте со своим провайдером работал бы и `udp`, но DoH = устойчивость к вышестоящему DNS-перехвату. **НЕ путать с «missing fakeip record»** (транзиент после `rm cache.db`). Бужарово/Severni Les 2026-06-23 за домашним catch-all хайджеком. | --- @@ -188,7 +188,7 @@ nslookup ozon.ru 127.0.0.42 | **Переделки** | см. [[../projects/peredelki/README]] / [[../projects/peredelki/credentials]] | — | — | проверить | fwmark-патч -150→-140 (NetBird coexistence) | | **Benelux** | Cudy TR3000 `100.70.207.97`, ssh mac-ed25519 (compromise 2026-05-20) | vpn / awg0 | Сингапур `202.71.12.186` | `russia_inside`,`telegram`,`meta` (+`githubusercontent.com` user_domain) | ✅ 2026-06-17: обход ОК (TG 302 / WA 200), `russia_outside` нет; list_update чинён (raw.git заведён в обход — RKN блокировал WAN-загрузку); `download_lists_via_proxy=1` сломал sing-box, откатан | | **HomeLab dttb** | [[../projects/dttb/openwrt-router]] (Cudy TR3000 `10.0.0.1`) | vpn / **awg2** | **Финляндия** `151.241.234.241:41624` | `meta`,`russia_inside`,`telegram`,`google_ai` | ✅ 2026-06-23 на awg2; резерв awg0 `202.71.12.186`. Цепочка `dnsmasq→AGH:5353→127.0.0.42`; DNS-hijack стоит. Грабля: per-iface `rp_filter=2` обязателен (см. §5) | -| **Severni Les / Бужарово** | [[../projects/buzharovo/podkop-router]] (Cudy TR3000, jump `10.0.0.250`→`192.168.1.1`) | vpn / awg0 | **Финляндия** `151.241.234.241:41624` | `meta`,`youtube`,`telegram` | ✅ 2026-06-23; **`dns_type=doh` + `dns_server=https://1.1.1.1/dns-query`** (DoH по IP; стоит за домашним :53-хайджеком — иначе sing-box звонит на FakeIP, см. §5); `download_lists_via_proxy=1/main`; sing-box 1.12.4 | +| **Severny-Les / Бужарово** | [[../projects/buzharovo/podkop-router]] (Cudy TR3000, NetBird `100.70.113.251`; фолбэк jump `10.0.0.250`→`192.168.1.1`) | vpn / awg0 | **Финляндия** `151.241.234.241:41624` | `meta`,`youtube`,`telegram` | ✅ 2026-06-23; **`dns_type=doh` + `dns_server=1.1.1.1/dns-query`** (DoH по IP, без `https://`; стоит за домашним :53-хайджеком — иначе sing-box звонит на FakeIP, см. §5); `download_lists_via_proxy=1/main`; sing-box 1.12.4 | | Krasnogorsk / Znamenskoye | см. project README | — | — | проверить | проверить | > Быстрый аудит любого роутера на «грабли inside/outside»: