From e896a24faeeee22f2d3c58e970c43cd1199e7afd Mon Sep 17 00:00:00 2001 From: dttb Date: Mon, 4 May 2026 11:57:08 +0300 Subject: [PATCH] =?UTF-8?q?decision=20=D0=9D=D0=A1=D0=9F=D0=94=20=D0=9D?= =?UTF-8?q?=D0=98=D0=98=D0=9A=D0=9D:=20=D1=84=D0=B8=D0=BD=D0=B0=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D0=B0=D1=8F=20=D1=81=D1=85=D0=B5=D0=BC=D0=B0=20?= =?UTF-8?q?=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20NetBird=E2=86=92LionART=20(Ope?= =?UTF-8?q?nWrt=20DNS=20override=20+=20MikroTik=20route=20+=20pve-niikn=20?= =?UTF-8?q?MASQ=20wt0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...26-05-04-niikn-nspd-via-netbird-lionart.md | 112 ++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 decisions/2026-05-04-niikn-nspd-via-netbird-lionart.md diff --git a/decisions/2026-05-04-niikn-nspd-via-netbird-lionart.md b/decisions/2026-05-04-niikn-nspd-via-netbird-lionart.md new file mode 100644 index 0000000..f29c403 --- /dev/null +++ b/decisions/2026-05-04-niikn-nspd-via-netbird-lionart.md @@ -0,0 +1,112 @@ +--- +date: 2026-05-04 +type: decision +status: рабочее +tags: [decision, niikn, mmfb, network, netbird, nspd, fix] +--- + +# 2026-05-04: NSPD из НИИКН — финальная схема через NetBird → pve-LionART + +## Контекст + +После отката WG-туннеля 2026-04-20 (общее замедление трафика) NSPD-bypass был на стороне NetBird Networks. Сегодня клиенты НИИКН пожаловались "не работает даже через NetBird и другие сайты тоже". + +## Что нашёл + +1. **Сетевая часть исправна** — netbird route `nspd-bypass` (2.63.246.0/24) активен, трейс `pve-niikn → 100.70.128.49 (pve-lionart) → 10.253.1.1 (MikroTik LionART)` работает. С `pve-niikn` `curl -k https://nspd.gov.ru/` отдаёт `HTTP:200`. +2. **Цепочка для клиентов разорвана в трёх местах:** + - OpenWrt 192.168.1.50: пропал `dnsmasq override` для `nspd.gov.ru` → podkop ловит в FakeIP `198.18.x.x` → AWG → Финляндия → блок (НСПД режет foreign IP). + - MikroTik 192.168.1.1: нет static route `2.63.246.0/24 → 192.168.1.201` (pve-niikn) → пакеты идут в default WAN → MTS WAF блок. + - pve-niikn: нет SNAT/MASQUERADE для `192.168.1.0/24 → wt0` → пакеты приходили на pve-lionart с приватным src → asymmetric routing. +3. **TLS-сертификат** NSPD выпущен `Russian Trusted Sub CA` (Минцифра, valid from 2026-01-23). Chrome/Edge без ru-trust → `ERR_CERT_AUTHORITY_INVALID`. Yandex Browser работает нативно. Попутный артефакт: `curl` из OpenWrt 24.10 на mbedTLS не парсит ASN.1 этого cert (`X509 - The name tag or value is invalid`) — но это не проблема пользователей. + +## Применённый фикс + +### 1. OpenWrt (192.168.1.50) — DNS-override + +```bash +ssh root@192.168.1.50 # 1qaz!QAZ +uci add_list dhcp.@dnsmasq[0].server='/nspd.gov.ru/77.88.8.8' +uci add_list dhcp.@dnsmasq[0].server='/nspd.gov.ru/8.8.8.8' +uci commit dhcp +/etc/init.d/dnsmasq restart +rm -f /tmp/sing-box/cache.db +/etc/init.d/sing-box restart +``` + +Проверка: `nslookup nspd.gov.ru 127.0.0.1` → `2.63.246.x` (НЕ 198.18.x.x). + +### 2. MikroTik НИИКН (192.168.1.1) — static route + +``` +/ip/route/add dst-address=2.63.246.0/24 gateway=192.168.1.201 \ + comment="NSPD via NetBird->LionART" +``` + +### 3. pve-niikn (192.168.1.201 / 100.70.120.229) — SNAT на wt0 + +```bash +iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o wt0 \ + -m comment --comment 'nspd-bypass-via-lionart' -j MASQUERADE +``` + +Persist через systemd unit `/etc/systemd/system/iptables-nspd-restore.service` (idempotent: `iptables -C ... || iptables -A ...`). + +## Подтверждение работы + +``` +# tcpdump на vmbr0 при curl с OpenWrt → nspd.gov.ru:443 +192.168.1.50 > 2.63.246.73:443 Flags [S] ← клиент +2.63.246.73:443 > 192.168.1.50 Flags [S.] ← НСПД отвечает! +192.168.1.50 > 2.63.246.73:443 Flags [P.] len 276 ← TLS ClientHello +2.63.246.73:443 > 192.168.1.50 Flags [.] len 1228 ← TLS ServerHello+Cert +... full data flow ... +``` + +## Что нужно от пользователей + +- **Yandex Browser** — открывают `nspd.gov.ru` сразу (встроенно доверяет Минцифре). +- **Chrome/Edge/Firefox** — установить ru-trust сертификаты с https://www.gosuslugi.ru/crt: + - `russian_trusted_root_ca.cer` → Trusted Root Certification Authorities + - `russian_trusted_sub_ca.cer` → Intermediate Certification Authorities + + PowerShell от админа (через RustDesk): + ```powershell + $tmp=$env:TEMP + iwr https://gu-st.ru/content/Other/doc/russian_trusted_root_ca.cer -OutFile $tmp\r.cer + iwr https://gu-st.ru/content/Other/doc/russian_trusted_sub_ca.cer -OutFile $tmp\s.cer + Import-Certificate -FilePath $tmp\r.cer -CertStoreLocation Cert:\LocalMachine\Root + Import-Certificate -FilePath $tmp\s.cer -CertStoreLocation Cert:\LocalMachine\CA + ``` + +## Распространение на другие гос-сайты + +Тот же ru-trust cert у `culture.gov.ru`, `gosuslugi.ru`, `rosreestr.gov.ru` (последний ещё блокирует MTS-IP отдельно — нужен такой же bypass через LionART). + +## Откат + +```bash +# pve-niikn +systemctl disable --now iptables-nspd-restore.service +rm /etc/systemd/system/iptables-nspd-restore.service +iptables -t nat -D POSTROUTING -s 192.168.1.0/24 -o wt0 \ + -m comment --comment 'nspd-bypass-via-lionart' -j MASQUERADE + +# MikroTik НИИКН +/ip/route/remove [find comment="NSPD via NetBird->LionART"] + +# OpenWrt +uci -q del_list dhcp.@dnsmasq[0].server='/nspd.gov.ru/77.88.8.8' +uci -q del_list dhcp.@dnsmasq[0].server='/nspd.gov.ru/8.8.8.8' +uci commit dhcp +/etc/init.d/dnsmasq restart +``` + +## Связанные + +- [decisions/2026-04-20-niikn-nspd-bypass-via-lionart.md](2026-04-20-niikn-nspd-bypass-via-lionart.md) — предыдущая попытка через WG-туннель MikroTik↔MikroTik, откачено +- [projects/niikn/openwrt-bypass.md](../projects/niikn/openwrt-bypass.md) — раздел "Исключение доменов из проксирования" +- [decisions/2026-04-28-niikn-uookn-sev-gov-fakeip-fix.md](2026-04-28-niikn-uookn-sev-gov-fakeip-fix.md) — другие gov-сайты + +## Теги +`#niikn` `#mmfb` `#lionart` `#netbird` `#nspd` `#mikrotik` `#openwrt` `#fix`