Files
knowledge-base/projects/buzharovo/podkop-router.md

15 KiB
Raw Blame History

date, type, tags, aliases
date type tags aliases
2026-06-23 project
buzharovo
openwrt
podkop
amneziawg
fakeip
doh
Severni Les router
Бужарово podkop роутер

Бужарово — podkop-роутер «Severny-Les» (Cudy TR3000)

Отдельный роутер обхода РКН для стройрынка Бужарово (Северный лес). Не путать со шлюзом 1С-сервера buzharovo-router — это новый 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 (Verbatim 31 ГБ, ext4 label extroot/overlay, ~27 ГБ свободно).
  • 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; версия на обход НЕ влияла, см. ниже).
  • AmneziaWG-пакеты (kmod-amneziawg 6.6.104.1.0.20250924, amneziawg-tools 1.0.20250903, luci-proto-amneziawg 2.0.4) перенесены с домашнего 10.0.0.1 (байт-в-байт та же платформа) — opkg files→tar→распаковка+depmod; kmod-зависимости (kmod-udptunnel4/6, crypto) из штатного фида. AWG 1.5 поддержан (S3/S4 + H-диапазоны). См. reference_infra / память «Переиспользуй инфру Олега».
    • ⚠️ Грабля LuCI «Unsupported protocol type» у awg0 (туннель при этом работает — это только вебка): при ручном копировании luci-proto-amneziawg его ресурсная зависимость /www/luci-static/resources/uqr.js (QR-lib) НЕ попадает в opkg files пакета → amneziawg.js делает require uqr → класс протокола не регистрируется. Фикс: скопировать uqr.js с домашнего + rm -f /tmp/luci-*; /etc/init.d/rpcd restart + hard-refresh браузера. (Бэкенд тоже нужен: ubus list | grep amnezialuci.amneziawg.) dom.js отдельным файлом отсутствует — это норма (в базовом бандле).

Сеть и доступ (стадия препрод, 2026-06-23)

Сейчас стоит в домашней лабе: воткнут во второй LAN-порт Proxmox.

  • LAN роутера: 192.168.1.1/24 (br-lan).
  • WAN роутера: eth0 DHCP из домашней сети — IP 10.0.0.215, шлюз 10.0.0.1 (домашний роутер). Весь интернет идёт через дом.
  • Доступ (основной): по NetBird — ssh root@100.70.113.251.
  • Доступ (фолбэк, по LAN): jump через Proxmox — ssh root@10.0.0.250ssh -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.

Туннель

  • AmneziaWG awg0 → Finland HOSTKEY 151.241.234.241:41624 (тот же хаб, что у дома и НИИКН; AWG 1.5: S3/S4 + H-диапазоны), клиент 10.8.1.3/32.
  • На Amnezia-панели (LXC 143) пир называется «Severni Les». Список клиентов хаба: Admin [macOS]=10.8.1.1, podkop homelab=10.8.1.2 (домашний), Severni Les=10.8.1.3.
  • rp_filter глобально 0 → транзит через туннель работает без правок (в отличие от домашнего, где нужен per-iface =2 — см. ../dttb/openwrt-router).

podkop-конфиг (рабочий)

Параметр Значение
interface awg0 (Финляндия)
community_lists meta youtube telegram
disable_quic 1
dns_type doh ← ключевой фикс
dns_server 1.1.1.1/dns-query (DoH по IP, БЕЗ префикса https://)
download_lists_via_proxy 1 / section main

⚠️ 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.
  2. Главное: обход не работал (telegram/youtube 000), хотя туннель жив. sing-box дозванивался до самого FakeIP (dial tcp 198.18.0.x: i/o timeout) вместо реального IP. Корень — препрод-среда: роутер стоит за домашним роутером, а у того catch-all DNS-хайджек (udp dport 53 dnat → 10.0.0.1:53). Восходящий резолв sing-box'а (за реальным IP по udp:53) перехватывался домашним хайджеком → возвращался домашний FakeIP → петля. Фикс: dns_type=doh — резолвер по https/443 минует :53-хайджек. На боевом объекте (свой провайдер) работал бы и на udp, но DoH делает роутер устойчивым к любому вышестоящему DNS-перехвату. Грабля в справочнике: ../../snippets/podkop-reference §5.
    • Тупиковые версии (отброшены проверкой): sing-box 1.12.22→1.12.4 и dns_server 77.88.8.8→8.8.8.8 — на обход не влияли, причина была в DNS-хайджеке.

sing-box 1.13.x — НЕ ставить (пока podkop 0.7.19)

podkop 0.7.19 генерит sing-box-конфиг под ветку 1.12 (старый формат DNS-секции). В 1.13 формат DNS менялся → риск, что sing-box не распарсит конфиг и не стартует. Держим 1.12.x (как дома). Латест — только после проверки совместимости с podkop, откатно.

Веб-терминал в LuCI (ttyd)

luci-app-ttyd + ttyd 1.7.3 уже стоят, служба enabled, слушает 0.0.0.0:7681, writable (этот билд RW по умолчанию; -R сделал бы RO — его нет). LuCI-вьюшка (System → Terminal) вставляет <iframe src="http://<хост-как-открыта-LuCI>:7681">.

  • Грабля «окно терминала не активно/пустое»: LuCI открывали на 192.168.1.1, а этот адрес коллизит с НИИКН/Переделки в NetBird (тот же 192.168.1.0/24) → iframe на 192.168.1.1:7681 уходил не туда. Фикс: uci set ttyd.@ttyd[0].url_override='http://100.70.113.251:7681' (стабильный NetBird-IP). Теперь терминал грузится с него независимо от того, как открыта LuCI (браузер должен быть в NetBird).
  • Рекомендация: открывать сам роутер по NetBird — http://100.70.113.251 (а не 192.168.1.1), тогда и LuCI, и терминал однозначны. После правки — hard-refresh страницы LuCI (term.js кешируется).
  • Терминал спрашивает логин (/bin/login → root/1qaz!QAZ); :7681 гейтит firewall-зона nbird + ACL группы Claude-Diag.

Шлюз 1С — миграция настроек со старого WR6500H (2026-06-23)

TR3000 = шлюз Бужарово (Вариант B, см. ../../decisions/2026-06-22-buzharovo-podkop). Перенесено:

Статик-лизы DHCP (/etc/config/dhcp, у всех dns=1):

Хост IP MAC
Server1C 192.168.1.249 00:E0:4C:68:9E:34
KASSA3 (касса 1) 192.168.1.18 1C:1B:0D:32:10:A2
KASSIRULICA2 (касса 2) 192.168.1.99 74:D4:35:83:B8:B6

MAC'и сняты из ARP-кэша Server1C (WinRM через openclaw LXC137 по NetBird, физ. iface 192.168.1.249 — чтобы обойти коллизию подсети с НИИКН). Полный ARP объекта — в логе сессии.

Проброс портов (firewall.@redirect, пока «как на старом WR6500H»):

  • RDP-Server1C: WAN tcp/udp 3389192.168.1.249:3389 (DNAT).
  • На WR6500H публично были также 443 (LuCI) и 53 (DNS) — это сервисы самого роутера, не host-проброс, не переносим.
  • ⚠️ RDP в интернет — security-риск (флагалось в разведке). Рекомендация: позже увести в NetBird (Server1C уже 100.70.75.103). Пока по решению Олега — как на старом.

LAN (проверено 2026-06-23): br-lan = 192.168.1.1/24 (= WR6500H), gw/DNS клиентам .1 = TR3000. DHCP-пул обрезан до .100.238 (был .100.249) — статик-IP касс (.18/.99) и Server1C (.249) вне пула. dnsmasq→127.0.0.42 (FakeIP), noresolv=1, dont_touch_dhcp=0. Проверка клиента: nslookup web.telegram.org @192.168.1.1198.18.x (туннель), gosuslugi.ru→реальный IP (напрямую). IPv6 на LAN отключён (dhcp.lan.ra=disabled, dhcpv6=disabled) — против утечки заблокированного мимо v4-FakeIP (как дома/Оливье).

Не пробрасывалось наружу: 1С-кластер (1540/1541/1560-1591) и MSSQL (1433) — только LAN. Wi-Fi держит WR6500H в режиме AP/bridge.

WR6500H (185.13.47.2): SSH off + браузерный sha256-хэш-логин → headless-дамп конфига невозможен; 1С-настройки восстановлены из ../../decisions/2026-05-07-buzharovo-recon.

Установка на объекте — чеклист (выезд 2026-06-24, утро)

TR3000 полностью преднастроен на столе. На объекте — физический своп со WR6500H + WAN провайдера.

Доступ во время работ:

  • По NetBird (основной): ssh root@100.70.113.251 (root/1qaz!QAZ), LuCI http://100.70.113.251, веб-терминал в LuCI работает.
  • Локально (фолбэк): ноут в LAN-порт TR3000 → http://192.168.1.1 (но этот IP коллизит с НИИКН в NetBird — по NetBird-IP надёжнее).

Шаги:

  1. WAN/провайдер (Олег сам). Снять с WR6500H тип подключения (Network → WAN: DHCP / PPPoE / Static) и WAN-MAC (Status). Поставить то же на TR3000 (Network → Interfaces → WAN):
    • DHCP с привязкой IP к MAC → WAN=DHCP + клонировать WAN-MAC WR6500H (WAN → Advanced → Override MAC). Иначе провайдер не выдаст 185.13.47.2.
    • PPPoE → логин/пароль провайдера.
    • Static → IP 185.13.47.2 + маска/шлюз/DNS.
    • 2.5G-аплинк перецепить в 2.5G-порт TR3000.
  2. WR6500H → режим AP/bridge: DHCP off; патч-корд LAN-порт WR6500H → LAN-порт TR3000. Wi-Fi 7 раздаёт WR6500H. Так нет двойного NAT (единственный NAT — на TR3000).
  3. Проверки после подъёма WAN (ssh root@100.70.113.251):
    • awg show awg0 — handshake свежий; curl -s -m8 -o/dev/null -w '%{http_code}' https://web.telegram.org200.
    • Телефон в Wi-Fi: Telegram/YouTube открываются; gosuslugi/банк/ОФД — напрямую (НЕ через туннель).
    • Server1C получил 192.168.1.249 (статик-лиз); RDP 185.13.47.2:3389 отвечает (проброс уже на TR3000).
    • Кассы .18/.99 видят 1С на 192.168.1.249.
  4. Флешку НЕ вынимать (на ней overlay → роутер откатится на 19 МБ внутренней памяти).

Откат: вернуть WAN в WR6500H + WR6500H обратно в router-режим. Конфиг TR3000 не трогается.

Уже готово на TR3000: extroot · podkop→awg0 (FI) meta/youtube/telegram · DoH · NetBird 100.70.113.251 · ttyd · статик-лизы (Server1C/KASSA3/KASSIRULICA2) · проброс RDP 3389→.249. Server1C — доступ/рецепты: server1c (rmngr-loop: Restart-Service '1C:Enterprise 8.3 Server Agent (x86-64)' -Force).

Связанное