Files
knowledge-base/decisions/2026-04-20-niikn-nspd-bypass-via-lionart.md
2026-04-20 11:32:15 +03:00

122 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
date: 2026-04-20
type: decision
tags: [decision, niikn, mmfb, network, wireguard]
---
# 2026-04-20: Обход блокировки nspd.gov.ru в НИИКН через WG-туннель к LionART
## Проблема
Сотрудники НИИКН не могут открыть `https://nspd.gov.ru/` (Национальная система пространственных данных Росреестра). Возвращается страница "Запрещено" с Rule `57615a88d1ec0120b56fdce6`, Client IP `85.235.181.190`.
## Диагностика — что НЕ помогло
1. **DNS override на OpenWrt** (исключение `nspd.gov.ru` из podkop через `dnsmasq.server=/nspd.gov.ru/77.88.8.8`) — DNS возвращает реальный IP, но клиент видит блок
2. **Hosts на клиенте** (`2.63.246.71 nspd.gov.ru`) — то же самое
3. **Static route на клиенте** (`route -p add 2.63.246.0/24 → 192.168.1.1`) — то же самое
4. **Полное отключение OpenWrt + podkop-fakeip route на MikroTik** — то же самое
5. **Отключение DoH в Yandex Browser** — то же самое
## Корень проблемы
Публичный IP MikroTik НИИКН = `85.235.181.190` (диапазон `Customers_P2P_B16_WAN_NET` от MTS PJSC, AS8359, country RU). НСПД блокирует именно этот корпоративный диапазон МТС на уровне WAF — это **блокировка по IP на стороне сервера НСПД**, никакие настройки внутри НИИКН не помогут.
Подтверждение: с другого МТС-IP (`176.62.183.186`, dttb.ru) и с публичного IP LionART (`195.26.30.163`) НСПД отвечает HTTP 200.
## Решение
Поднят WireGuard site-to-site туннель **MikroTik НИИКН ↔ MikroTik LionART**. Только трафик к подсети НСПД (`2.63.246.0/24`) маршрутизируется через туннель — остальной интернет НИИКН идёт по-прежнему через МТС.
```
[Клиент НИИКН 192.168.1.x]
→ [MikroTik НИИКН 192.168.1.1, masq на wg-lionart → 10.99.99.2]
→ [WG туннель 10.99.99.0/30]
→ [MikroTik LionART 10.253.1.1, masq на ether1 → 195.26.30.163]
→ [НСПД 2.63.246.0/24] ✅ HTTP 200
```
## Конфигурация
### MikroTik LionART (`10.253.1.1`, hydropark, RouterOS 7.16.2)
```
/interface/wireguard add name=wg-niikn listen-port=51820 mtu=1420 \
comment="tunnel to NIIKN MikroTik for NSPD bypass"
/ip address add address=10.99.99.1/30 interface=wg-niikn
/interface/wireguard/peers add interface=wg-niikn \
public-key="ozex5MoF4rxnYpFyO5w44oittLehavs1YiPEq/ec4xU=" \
allowed-address=10.99.99.2/32 comment="NIIKN MikroTik"
/ip firewall filter add chain=input action=accept protocol=udp dst-port=51820 \
in-interface-list=WAN comment="WG NIIKN" place-before=0
/ip firewall filter add chain=forward action=accept in-interface=wg-niikn \
out-interface-list=WAN comment="WG NIIKN to WAN" place-before=0
/ip firewall filter add chain=forward action=accept in-interface-list=WAN \
out-interface=wg-niikn connection-state=established,related \
comment="WAN to WG NIIKN reply" place-before=0
```
- Public key LionART: `YuI6lQ1f1bF37x5dwa/JQuW30x4McO2//cl/mEWg4mE=`
- WAN: ether1-gw-telekom, публичный IP `195.26.30.163/27`
### MikroTik НИИКН (`192.168.1.1`, RouterOS 7.20.6)
```
/interface/wireguard add name=wg-lionart listen-port=51821 mtu=1420 \
comment="tunnel to LionART for NSPD bypass"
/ip address add address=10.99.99.2/30 interface=wg-lionart
/interface/wireguard/peers add interface=wg-lionart \
public-key="YuI6lQ1f1bF37x5dwa/JQuW30x4McO2//cl/mEWg4mE=" \
endpoint-address=195.26.30.163 endpoint-port=51820 \
allowed-address=10.99.99.0/30,2.63.246.0/24 \
persistent-keepalive=25s comment="LionART exit for NSPD"
/ip route add dst-address=2.63.246.0/24 gateway=10.99.99.1 \
comment="NSPD via LionART"
/ip firewall nat add chain=srcnat action=masquerade out-interface=wg-lionart \
comment="masq NSPD via LionART WG"
```
- Public key НИИКН: `ozex5MoF4rxnYpFyO5w44oittLehavs1YiPEq/ec4xU=`
## Критичные моменты
1. **Masquerade на wg-lionart на стороне НИИКН обязателен.** Без него LionART получает пакеты с source `192.168.1.x`, но conntrack/firewall не пропускает обратные ответы → SYN уходит, SYN-ACK теряется → timeout.
2. **Forward правила на LionART обязательны** — дефолтный firewall пропускает только трафик из/в LAN `10.253.1.0/24`. Трафик из `wg-niikn` в WAN нужно явно разрешить.
3. **AllowedIPs `2.63.246.0/24` на peer НИИКН** автоматически создаёт маршрут — но я добавил явный static route для надёжности (с понятным комментом).
4. NSPD не отвечает на ICMP — для проверки используй `/tool fetch` или `curl`, а не ping.
## Откат полной конфигурации
```
# На LionART
/interface/wireguard remove wg-niikn
/ip firewall filter remove [find comment~"WG NIIKN"]
# На НИИКН
/interface/wireguard remove wg-lionart
/ip route remove [find comment="NSPD via LionART"]
/ip firewall nat remove [find comment="masq NSPD via LionART WG"]
```
## Связанные изменения (временные, из той же сессии)
В процессе диагностики были сделаны изменения, **не связанные** с финальным решением — их можно откатить:
1. **MikroTik НИИКН: podkop-fakeip route disable** (`/ip route disable [find comment="podkop-fakeip"]`) — отключил маршрут `198.18.0.0/15 → 192.168.1.50`. Из-за этого WhatsApp/Telegram/Instagram через podkop сейчас не работают. Для возврата: `/ip route enable [find comment="podkop-fakeip"]`.
2. **MikroTik НИИКН: DHCP DNS изменён** на `77.88.8.8,8.8.8.8` (вместо `192.168.1.50`). Для возврата: `/ip dhcp-server network set [find] dns-server=192.168.1.50`.
3. **OpenWrt: dnsmasq override для nspd.gov.ru** — добавлен в `/etc/config/dhcp` (`server=/nspd.gov.ru/77.88.8.8`). Не мешает работе, можно оставить или удалить через UCI.
После решения с WG туннелем эти временные изменения **больше не нужны для NSPD** — можно вернуть podkop в исходное состояние.
## Долгосрочное решение
Связаться со службой поддержки Росреестра/НСПД и попросить разблокировать корпоративный IP `85.235.181.190` (МТС). Контакт: 8-800-100-34-34, https://nspd.gov.ru/feedback. Тогда WG-туннель можно будет удалить.
## Теги
`#niikn` `#mmfb` `#lionart` `#mikrotik` `#wireguard` `#nspd` `#bypass` `#fix`