137 lines
7.1 KiB
Markdown
137 lines
7.1 KiB
Markdown
---
|
||
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).
|
||
|
||
### 2026-05-04 — добавлены zakupki и telemost
|
||
|
||
Аналогичная схема (без TLS-cert проблем — `zakupki.gov.ru` имеет GlobalSign cert, `telemost.yandex.ru` тоже стандартный).
|
||
|
||
NetBird Routes API (`POST /api/routes`):
|
||
- `zakupki-bypass` → `95.167.245.0/24` (id `d7s61o2fadhs73bjk520`) → peer `cuisnd3l0ubs73bsbbl0` (pve-lionart)
|
||
- `telemost-bypass` → `87.250.251.0/24` (id `d7s61oafadhs73bjk750`) → тот же peer
|
||
|
||
MikroTik НИИКН:
|
||
```
|
||
/ip/route/add dst-address=95.167.245.0/24 gateway=192.168.1.201 comment="zakupki via NetBird->LionART"
|
||
/ip/route/add dst-address=87.250.251.0/24 gateway=192.168.1.201 comment="telemost via NetBird->LionART"
|
||
```
|
||
|
||
pve-niikn — добавлен **MSS clamping** для wt0 (NetBird MTU=1280, br-lan/vmbr0=1500 → большие TCP-ответы дропались):
|
||
```bash
|
||
iptables -t mangle -A FORWARD -o wt0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
|
||
iptables -t mangle -A FORWARD -i wt0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
|
||
```
|
||
|
||
Не забыть `iptables-save > /etc/iptables/rules.v4` для persist (или дополнить `iptables-nspd-restore.service`).
|
||
|
||
Известный артефакт: `lk.zakupki.gov.ru` (`94.25.27.250`) даёт TLS handshake failure даже с LionART — у него mTLS / ГОСТ-крипто-провайдер требуется. Решается локально на клиенте (КриптоПро/JaCarta), не сетевыми средствами.
|
||
|
||
## Откат
|
||
|
||
```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`
|