Files
knowledge-base/decisions/2026-05-04-niikn-nspd-via-netbird-lionart.md

5.5 KiB
Raw Blame History

date, type, status, tags
date type status tags
2026-05-04 decision рабочее
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

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.12.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

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):

    $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).

Откат

# 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

Связанные

Теги

#niikn #mmfb #lionart #netbird #nspd #mikrotik #openwrt #fix