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

# Бужарово — 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 (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 amnezia` → `luci.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.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`.

## Туннель
- 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 `3389` → `192.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.1`→`198.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)
Своп со WR6500H выполнен, роутер в проде. Проверено по NetBird `100.70.113.251`:
- **WAN** поднялся на родном `185.13.47.2/25` (gw `185.13.47.1`) — WAN-MAC/тип подключения перенесены верно.
- **Туннель** awg0→Финляндия: handshake свежий, трафик идёт. telegram/youtube `200` через FakeIP (`198.18.x`); gosuslugi `200` напрямую (реальный IP). На роутере обход 100% рабочий (tproxy-счётчики PodkopTable растут).
- **1С**: Server1C `192.168.1.249` в сети; проброс RDP `3389→.249` активен (DNAT-счётчик >0, порт OPEN по WAN и по NetBird `100.70.75.103`).
- **NetBird**: Management/Signal Connected, служба enabled (autostart).
- Точки доступа TP-Link (`c4:2f:90`: .200/.105) и Keenetic (`44:47:cc`: .210) — чистые AP/bridge (свой DHCP/DNS не раздают, на :53 молчат). Двойного NAT нет.

### Грабля «обход не работает у клиентов» — ДВЕ разные причины (2026-06-24)
При миграции роутера **не перенесли DNS-hijack/анти-утечку** (дома он есть, см. [[../../snippets/podkop-reference]] §190). Клиенты резолвили мимо роутера → нет FakeIP → мимо туннеля. В conntrack видны были утечки `src=LAN dst=77.88.8.8/1.1.1.1/8.8.8.8 :53`.

**Добавлено на TR3000** (бэкапы: `/etc/config/firewall.bak-forcedns-20260624`, `firewall.bak-blockdoh-20260624`, `dhcp.bak-privaterelay-20260624`):
1. `Force-DNS-53` — DNAT всех LAN :53 (tcp/udp) → `192.168.1.1`. Заворачивает любой чужой DNS на dnsmasq роутера. ✅ счётчик растёт, утечки переписываются на `.1`.
2. `Block-DoT-853` — REJECT :853 (Android/iOS Private DNS).
3. `Block-DoH-443` — REJECT :443 к публичным DoH-резолверам (8.8.8.8/8.8.4.4/1.1.1.1/1.0.0.1/9.9.9.9/149.112.112.112/94.140.14.14-15/77.88.8.8/77.88.8.1).
4. `Block-QUIC-443` — REJECT udp/443 LAN→WAN (убивает HTTP/3-DoH и транспорт iCloud Private Relay; TCP/443 цел).
5. dnsmasq `address=/mask.icloud.com/`, `/mask-h2.icloud.com/`, `/mask-api.icloud.com/` → NXDOMAIN (отключает iCloud Private Relay при переподключении к Wi-Fi).
> ⚠️ Эти 5 правил полезны для ВСЕХ клиентов и должны остаться. После добавления сбрасывать conntrack :53 (или ждать ~30с UDP-таймаут), иначе старые сессии висят мимо DNAT.

**НО iPhone `192.168.1.115` «не сработал» по ДРУГОЙ причине (не DNS/не Relay):** на самом телефоне установлено **приложение AmneziaVPN/AmneziaWG**, заворачивающее весь трафик в свой туннель `202.71.12.186:37209` (старый резервный домашний AWG-эндпоинт). conntrack: `src=192.168.1.115 dst=202.71.12.186 dport=37209` [ASSURED], мегабайты трафика, 0 запросов :53 к роутеру изначально. Роутерный обход к такому телефону неприменим — он ходит мимо Wi-Fi-маршрутизации целиком.
> **Фикс (на стороне айфона, НЕ роутера):** выключить/удалить приложение Amnezia на телефоне (`Настройки → VPN → откл` или в самом приложении). После — переподключить Wi-Fi → пойдёт через FakeIP роутера. **Урок:** прежде чем чинить DNS на роутере — проверь conntrack клиента на свой VPN-туннель (большой UDP-поток на внешний IP мимо :53).

**Не доделано (вернуться):** подтвердить, что после выключения Amnezia на iPhone .115 трафик идёт через FakeIP (`dst=198.18.x`). Опц.: решить, оставлять ли Block-QUIC-443 (к этому айфону отношения не имел, но полезен против HTTP/3-DoH).

## Установка на объекте — чеклист (выезд 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.org` → `200`.
   - Телефон в 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`).

## Связанное
- [[README]] — проект Бужарово
- [[../dttb/openwrt-router]] — домашний роутер (тот же финский хаб awg2; там грабля rp_filter)
- [[../../decisions/2026-06-23-amnezia-web-panel-lxc143]] — Amnezia-панель и финский хаб
