11 KiB
date, type, tags
| date | type | tags | |||||
|---|---|---|---|---|---|---|---|
| 2026-05-04 | playbook |
|
Playbook: gov-сайты не открываются из НИИКН
Для оператора (Claude / Олег) — пошаговый алгоритм когда сотрудник НИИКН говорит «.gov.ru / .ru не работает». Все компоненты проверены 2026-05-04.
Архитектура bypass
Клиент НИИКН (192.168.1.x, Win+Yandex Browser)
└─ DNS → 192.168.1.50 (OpenWrt dnsmasq → podkop FakeIP по умолчанию)
└─ для исключённых доменов (sev/zakupki/nspd/...) → форвард в 77.88.8.8 / 8.8.8.8 → реальный IP
└─ маршрут к реальному IP:
├─ обычный → MikroTik (192.168.1.1) → MTS WAN 85.235.181.190
└─ для bypass-сетей (2.63.246/24, 95.167.245/24, 87.250.251/24) → 192.168.1.201 (pve-niikn) → wt0 (NetBird) → pve-LionART → WAN LionART 195.26.30.163
Ключевой узел — pve-LionART (100.70.128.49 в NetBird, peer ID cuisnd3l0ubs73bsbbl0) — чистый российский WAN.
Шаг 1. Триаж — какой класс проблемы
С pve-LionART прогнать сайт:
sshpass -p '1qaz!QAZ' ssh -o StrictHostKeyChecking=no root@100.70.128.49 "
getent hosts SITE
curl -sk -A 'Mozilla/5.0' -o /dev/null -w 'HTTP:%{http_code}\n' --max-time 10 https://SITE/
echo | openssl s_client -servername SITE -connect SITE:443 -connect_timeout 6 2>/dev/null | openssl x509 -noout -issuer 2>/dev/null
"
И с НИИКН (через OpenWrt → MTS):
sshpass -p '1qaz!QAZ' ssh root@100.70.120.229 "sshpass -p '1qaz!QAZ' ssh root@192.168.1.50 '
nslookup SITE 127.0.0.1 | tail -3
curl -sk -A Mozilla -o /dev/null -w \"HTTP:%{http_code}\\n\" --max-time 10 https://SITE/
'"
Соотношение результатов → класс:
| LionART | НИИКН curl | DNS на НИИКН | Класс | Решение |
|---|---|---|---|---|
| 200 | 200 | реальный IP | Норма | (вообще не должно жаловаться) |
| 200 | 4xx/000 | 198.18.x.x (FakeIP) |
A. FakeIP подмена (sev, culture, gosuslugi) | Шаг 2А |
| 200 | 000/forbidden | реальный IP | B. WAF-блок MTS-IP (nspd) | Шаг 2Б |
| 4xx unknown CA | то же | любое | C. ru-trust cert на клиенте (nspd с Jan 2026) | Шаг 2В |
| handshake failure / TLS alert | то же | любое | D. ГОСТ-mTLS / клиент-сертификат (lk.zakupki) | Шаг 2Г |
| 403 без UA, 200 с UA | (то же) | любое | E. Anti-bot WAF (uookn.sev) | A или Б — UA проблема не у нас |
Шаг 2А. FakeIP подмена (только DNS-фикс)
Симптом: nslookup SITE 127.0.0.1 → 198.18.x.x. Каждый раз когда я вижу FakeIP для gov-сайта — этот override либо потерян, либо никогда не был.
ssh root@100.70.120.229
ssh root@192.168.1.50 # 1qaz!QAZ оба
DOMAIN=sev.gov.ru # ROOT-домен достаточно — покрывает все поддомены
uci -q del_list dhcp.@dnsmasq[0].server="/$DOMAIN/77.88.8.8"
uci -q del_list dhcp.@dnsmasq[0].server="/$DOMAIN/8.8.8.8"
uci add_list dhcp.@dnsmasq[0].server="/$DOMAIN/77.88.8.8"
uci add_list dhcp.@dnsmasq[0].server="/$DOMAIN/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
После этого клиенту: ipconfig /flushdns (или просто перезапустить браузер).
Шаг 2Б. WAF-блок MTS-IP (DNS + NetBird route + MikroTik route)
Симптом: с LionART 200, c НИИКН (real IP) → 000/блок-страница «Forbidden Rule …». Решение — пустить только этот CIDR через NetBird → pve-LionART.
# 1. CIDR подсети сайта (через RIPE)
curl -s "https://stat.ripe.net/data/network-info/data.json?resource=$IP" | python3 -c "import json,sys; print(json.load(sys.stdin)['data']['prefix'])"
# 2. NetBird route через API (token в credentials.md → "Netbird (netbird.io cloud)")
NB="nbp_YTEmAVpS0hLhnTeJ09q3wYaC0AAXjN21NPvM"
curl -s -X POST -H "Authorization: Token $NB" -H "Content-Type: application/json" \
https://api.netbird.io/api/routes \
-d '{"network":"<CIDR>","network_id":"<short-name>","description":"<описание>","peer":"cuisnd3l0ubs73bsbbl0","masquerade":true,"metric":9999,"groups":["cqgcidrl0ubs73f2hgf0"],"enabled":true,"network_type":"IPv4"}'
# 3. MikroTik route (на 192.168.1.1)
sshpass -p 'OL260380eg' ssh -o KexAlgorithms=+diffie-hellman-group14-sha1 \
-o HostKeyAlgorithms=+ssh-rsa AI@192.168.1.1 \
'/ip/route/add dst-address=<CIDR> gateway=192.168.1.201 comment="<short-name> via NetBird->LionART"'
# 4. MASQUERADE и MSS clamp на pve-niikn — уже стоят в systemd unit
# iptables-nspd-restore.service. Если новый интерфейс — обновить.
# 5. DNS override на OpenWrt (см. шаг 2А) чтобы podkop не подменял на FakeIP
Известные группы / peers (NetBird):
- group
cqgcidrl0ubs73f2hgf0= «All» (default) - peer
cuisnd3l0ubs73bsbbl0= pve-lionart (наш чистый exit)
Шаг 2В. ru-trust cert на клиенте (для Минцифра-сертификатов)
Симптом: openssl x509 -issuer показывает Russian Trusted Sub CA или Russian Trusted Root CA. Chrome/Edge ругается «ERR_CERT_AUTHORITY_INVALID». Yandex Browser работает нативно.
Быстро для одного ПК — 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
Если gu-st.ru блочат — поменять на оригинальный путь https://www.gosuslugi.ru/crt. Если и тот не открывается — embed cert base64 прямо в скрипт.
Альтернатива без CSP-вмешательства: открывать gov-сайты в Yandex Browser (он встроенно доверяет Минцифре).
Шаг 2Г. ГОСТ-mTLS / клиент-сертификат
Симптом: TLS handshake failure / SSL alert от сервера независимо от выходного IP. Пример — lk.zakupki.gov.ru, многие ЛК Госуслуг для юр.лиц.
Сетью не решается. Юзеру нужен:
- КриптоПро CSP установлен
- Сертификат ЭЦП на токене (Rutoken / JaCarta) или в реестре
- Плагин для браузера (CryptoPro Browser Plugin)
Помочь могу только подсказать — установка обычно делается централизованно.
Шаг 2Д. Anti-bot WAF
Симптом: curl -sk → 403, но curl -sk -A 'Mozilla/5.0' → 200. Пример — uookn.sev.gov.ru на Bitrix BotProtect.
Действий не нужно — все нормальные браузеры отправляют User-Agent. Если жалобы при таком сценарии — значит у юзера ещё какая-то проблема (DNS-кэш / неправильный браузер / настройки прокси). Прогнать шаг 2А на всякий случай.
Текущий реестр overrides + routes
OpenWrt 192.168.1.50 — dnsmasq.server (форсируем реальный DNS вместо FakeIP)
Проверка списка: uci show dhcp | grep server=
| Домен | Когда добавлен | Класс |
|---|---|---|
nspd.gov.ru |
2026-04-20 (восст. 2026-05-04) | A+B (DNS + NetBird route) |
sev.gov.ru |
2026-04-28 (восст. 2026-05-04) | A |
zakupki.gov.ru |
2026-04-? (восст. 2026-05-04) | A+B |
gosuslugi.ru |
2026-05-04 | A |
rosreestr.gov.ru |
2026-05-04 | A (но MTS-блок остаётся, нужно расширять до B при обращении) |
culture.gov.ru |
2026-04-30 (восст. 2026-05-04) | A |
economy.gov.ru |
2026-05-04 | A (fgistp.economy.gov.ru — Минэк ФГИС ТП) |
⚠️ Эти overrides периодически теряются при работе с podkop / реконфигах OpenWrt. Если жалоба — проверять uci show dhcp в первую очередь.
NetBird Routes (через API) → pve-LionART
| Network | Network ID | CIDR | Назначение |
|---|---|---|---|
nspd-bypass |
d7ji3ajl0ubs73a92s40 |
2.63.246.0/24 |
nspd.gov.ru |
zakupki-bypass |
d7s61o2fadhs73bjk520 |
95.167.245.0/24 |
zakupki.gov.ru main |
telemost-bypass |
d7s61oafadhs73bjk750 |
87.250.251.0/24 |
telemost.yandex.ru |
MikroTik 192.168.1.1 — static routes
/ip/route/print where comment~"NetBird"
Должны быть routes 2.63.246.0/24, 95.167.245.0/24, 87.250.251.0/24 → 192.168.1.201.
pve-niikn 192.168.1.201 — iptables (persist через systemd)
/etc/systemd/system/iptables-nspd-restore.service:
- POSTROUTING:
-s 192.168.1.0/24 -o wt0 -j MASQUERADE - mangle FORWARD MSS clamp на wt0 (важно — MTU 1280)
Что делать когда юзер говорит "не открывается"
90% случаев: просто запусти шаг 2А с восстановлением dnsmasq overrides на OpenWrt + сказать клиенту перезапустить браузер. Это решает большинство «вчера работало, сегодня нет».
Если шаг 2А не помог: триаж по таблице → 2Б/2В/2Г.
Если ru-trust требуется массово: готовить .ps1 для раскатки через RustDesk на все ПК НИИКН.
Связанные
- decisions/2026-05-04-niikn-nspd-via-netbird-lionart.md — финальная схема NetBird→LionART
- decisions/2026-04-28-niikn-uookn-sev-gov-fakeip-fix.md — sev.gov.ru
- decisions/2026-04-30-niikn-culture-gov-fakeip-fix.md — culture.gov.ru
- openwrt-bypass.md — общая схема OpenWrt + AmneziaWG + podkop
- mikrotik.md — MikroTik НИИКН конфиг