Files
knowledge-base/projects/niikn/govru-quickfix-playbook.md
dttb 5949452bcf niikn: КОРНЕВОЙ фикс — убрал russia_outside из podkop (ломал РФ-сайты)
russia_outside = РФ-сайты для доступа из-за границы; для офиса в РФ он фейкапил
gosuslugi/ozon/ЕИС/nspd и гнал в финский выход → гео-блок. Убран — РФ-сайты резолвятся
реально (проверено sing-box 127.0.0.42), overrides больше не нужны, цикл слётов разорван.
Инсайт Олега про inside/outside. Watchdog niikn-podkop-watchdog на pve-niikn сторожит откат.
Заодно: исправлены перепутанные chat_id (Олег=1292155421, Максим=437242345).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:24:04 +03:00

14 KiB
Raw Permalink Blame History

date, type, tags
date type tags
2026-05-04 playbook
niikn
network
gov-ru
troubleshooting
playbook

Playbook: gov-сайты не открываются из НИИКН

Для оператора (Claude / Олег) — пошаговый алгоритм когда сотрудник НИИКН говорит «.gov.ru / .ru не работает». Все компоненты проверены 2026-05-04.

КОРНЕВОЙ ФИКС 2026-05-29 — читать ПЕРВЫМ

Первопричина всех этих жалоб устранена: из podkop убран список russia_outside (он гнал РФ-сайты gosuslugi/ozon/ЕИС/nspd в финский выход → гео-блок). Теперь РФ-сайты резолвятся реально и идут напрямую / через LionART-маршруты. dnsmasq-overrides и весь алгоритм 2А ниже стали не нужны (оставлены как backup) — overrides больше не «слетают-и-ломают», т.к. сайты и так не фейкапятся.

  • НЕ возвращать russia_outside в podkop! Сторож niikn-podkop-watchdog.sh (pve-niikn, cron */15) снимет его + алерт Олегу через Антошку.
  • Если новая жалоба на РФ-сайт: проверь ssh root@192.168.1.50 'nslookup ДОМЕН 127.0.0.42' — если 198.18.x, значит снова попал в какой-то podkop-лист; убрать лист, а не лепить override.
  • Подробно: decisions/2026-05-29-niikn-diadoc-ozon-fix.md

Архитектура 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.1198.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 — Минэк ФГИС ТП)
ozon.ru (вся зона *.ozon.ru) 2026-05-29 russia_outside FakeIP'ил → выход в Финляндию → Ozon гео-блокирует зарубежные IP («Доступ ограничен»). Override → прямой MTS (РФ-IP). curl всё равно 403 (анти-бот по fingerprint, одинаков с MTS и LionART) — браузер проходит JS-challenge.

⚠️ Эти overrides периодически теряются при работе с podkop / реконфигах OpenWrt. Если жалоба — проверять uci show dhcp в первую очередь.

Аудит + восстановление 2026-05-29: при разборе жалобы (diadoc/ozon/ЕИС) в живом uci show dhcp оставались только nspd + ozon — остальные gov-overrides снова слетели, из-за чего zakupki.gov.ru (ЕИС), gosuslugi, sev, rosreestr, culture, economy уходили в FakeIP→Финляндию и не открывались. Восстановлены все (/$D/77.88.8.8 + /8.8.8.8), dnsmasq рестарт. Проверка с офисного ПК (maul-pc) и pve-niikn: zakupki.gov.ru200 (через LionART-route 95.167.245.0/24), gosuslugi/sev/rosreestr/culture/economy200 (через MTS напрямую). Прочие РФ-маркетплейсы (WB/СберМаркет/Я.Маркет/М.Видео/Авито) — direct, ок; russia_outside ловит узко (ozon, gosuslugi, zakupki).

⚠️ lk.zakupki.gov.ru (личный кабинет ЕИС) — ГОСТ-TLS only: TLS alert 40 (handshake_failure) с обоих путей (MTS и LionART), CIDR 94.25.0.0/17 Ростелеком. Маршрутом НЕ лечится (см. Шаг 2Г). Открывать в Yandex Browser (нативный ГОСТ) + КриптоПро CSP/ЭЦП для входа.

podkop/туннель проверены 2026-05-29: заблокированные работают (youtube/instagram→200, whatsapp соединяется с maul-pc), tproxy-счётчик растёт (8.3M пакетов), awg0 несёт трафик. Туннель Финляндия жив.

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
diadoc-bypass d8cljnbl0ubs7386r1ug 46.17.203.0/24 diadoc.ru / Контур (AS49675) — MTS WAN чёрная дыра (TCP timeout 12с); LionART достаёт. 2026-05-29

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, 46.17.203.0/24192.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 на все ПК НИИКН.

Связанные