lightweight-server/agents/codex/done/2026-10-23-ru-family-subscriptions.md
ochenstarik 3c32e12d7c
All checks were successful
Bash syntax / syntax (push) Successful in 18s
Bash syntax / syntax (pull_request) Successful in 21s
docs: record diagnosed RU to DE fingerprint failure and repair
2026-10-23 12:37:21 +00:00

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

# RU family subscriptions — операционная приёмка 23.10.2026
Задание CODEX-ru-family-subscriptions.md выполнено на RU. DE проверен только на чтение; FI/DK и системный proxy домашней машины не менялись. Операционная приёмка PASS; этот PR содержит только отчёт и не заменяет независимое ревью.
## Одна запись на человека
Владелец уточнил, что дубли пользователей с разными настройками не нужны, и самостоятельно переименовал/прикрепил клиентов. Финальный результат сохраняет эти изменения: Виктор, Яна, Ярик, Саша, Сервера — ровно пять глобальных Clients. У каждого один UUID, один subId, одинаковые неограниченные настройки без срока, привязка ко всем трём inbound. Идентичность сверена с новым checkpoint после правок владельца. Устаревший откат остановлен, чтобы не затереть его изменения.
Каждая стабильная подписка содержит в порядке: «⚡ Авто», «🇩🇪 Германия», «🇷🇺 Россия». Авто и Германия отправляют RU-направления напрямую, прочие — через DE; Россия отправляет всё напрямую. Авто использует leastLoad по vpn-, fallback blocked. Прежние outbounds сохранены, прежние routing rules сохранены в прежнем порядке.
## TLS и доступ
Публичная подписка — HTTPS sub.ochenstarik.ru на TCP2096; порт обязателен, поскольку TCP443 занят Reality. Случайный путь не менее 32 символов, обновление раз в 12 часов. Старый стандартный путь возвращает404. Панель2053 слушает только loopback, UFW не открывает её наружу. VPN443/24443/24444 и TLS2096 доступны согласно назначению; HTTP80 после challenge закрыт.
После обновления DNS все пять ссылок проверены обычным curl из текущей сети: HTTP200, нормальная проверка TLS, без подмены DNS и SSH data tunnel. Сертификат Let's Encrypt установлен; certbot.timer включён. Реальный renewal dry-run с --no-random-sleep-on-renew завершился успешно. Pre/post hooks временно открывают/закрывают80, deploy hook перезапускает x-ui. Первая попытка ожидала случайную задержку certbot и была прервана по таймауту; проверки сертификата не отключались.
Секретные URL сохранены только в операторском family_subscriptions.txt (0600) в согласованном защищённом каталоге. UUID, subId, Reality private keys, реальные адреса серверов и случайные пути в этот отчёт не включены. Импорт в Happ на телефонах выполняет владелец.
## Причина нестабильности и реальные проверки
У исходного inbound camouflage target и набор разрешённых SNI не совпадали: подписка выбирала случайное постороннее имя. На всех трёх inbound установлен согласованный проверенный TLS1.3 target/SNI www.microsoft.com; ключи самостоятельны, старый ключ Германии сохранён. После исправления все 15 профилей (5 × 3) прошли проверку зарубежного и российского направления. Временные клиенты не изменяли системный proxy и были остановлены.
Для российского IP использована страница Интернетометра Яндекса с проверкой отображаемого IPv4. Его /api/v0/ip возвращал loopback даже напрямую с RU и не использован как доказательство маршрута. Контроль страницы с RU и текущего DE давал разные ожидаемые роли; в семейных профилях российская страница показывала RU. Зарубежный IP соответствовал DE для Авто/Германии и RU для России. Тела ответов с адресами не публикуются.
## Отказ и восстановление
Отдельная nft-таблица на RU блокировала только RU→DE TCP24443. Независимое автоматическое удаление через60с включено до правила. Пять проб на0.0/4.9/9.8/14.7/17.6с подтвердили отказ зарубежного Авто без тихого выхода через RU; российские назначения Авто и строка Россия продолжали работать. Это пять проб, а не непрерывная запись всего окна отказа.
Правило удалилось автоматически, Авто восстановился через DE; общая длительность проверки139.5с. leastLoad учитывает историю burst-измерений, поэтому возврат не мгновенный. Сейчас зарубежный выход один; сравнительная скорость и переключение между несколькими выходами не заявлены проверенными. После добавления FI/DK требуется отдельная многосерверная приёмка.
## Аудит и восстановление
x-ui active, certbot.timer enabled; временная fault-таблица отсутствует, собственные fault/rollback timers остановлены. Согласованные root-only snapshots: исходный /root/codex-family-before-20261023 и сохраняющий правки владельца /root/codex-family-before-final-20261023; каталоги0700, БД0600. Финальный accepted marker защищает от позднего устаревшего отката. В просмотренном журнале x-ui за последние2ч текущие семейные секреты не обнаружены.
DE сверён с runbook без изменений: exit24443 включён, firewall только от RU, домашний443 сохранён. Отдельный runbook: [PR24](https://git.ochenstarik.ru/ochenstarik/lightweight-server/pulls/24), docs/runbooks/ru-hub-add-exit.md. Скрипт установки не добавлен: текущий API различает глобальные Clients, DTO и формы; для пяти записей выбран проверяемый операторский runbook.
Санитизированные доказательства сохранены локально в reports/ru-family-20261023 и постоянном artifact bundle. Основные SHA256:
- acceptance-proof.json: c9835ca9bfab097882904505b96e7599bc6ebe04869474ab4fd139cfc4622ccf
- family-proof.json: 33522f9f0eb7826c60a9c8cac8afa22a9f2db0b0ab14accdd7a105de8fca9f8e
- fault-proof.json: 51a5d25e53e3cca4f7b4440fcffaf5c44a7909c57a251003cdb8d802c65241e7
- renewal-proof.json: 51b59def3d7cb5a9fc1ac1df2c01487e7cc6400345f8d8e22fa499261c656aa7
CI и разрешённое независимое ревью проверяются отдельно на точном SHA PR. Самостоятельного слияния отчёта без review gate нет; automation30 не возобновлялась, новые KAgent/Telegram прогоны не запускались.
## Исправление после пользовательского сбоя: транспорт RU→DE
Позднее владелец сообщил, что Германия не работает; на скриншоте Happ Авто также давал таймауты. Сбой воспроизведён: все три зарубежные контрольные точки через Германию/Авто не проходили, Россия и RU-исключения работали. x-ui обоих серверов active, TCP RU→DE24443 доступен, target/SNI согласованы, прямой интернет DE исправен, временной fault-таблицы нет.
На RU отдельным временным клиентом выполнен чередующийся A/B chrome/firefox/chrome/firefox с неизменными реквизитами vpn-de. В обеих chrome-пробах ipify/gstatic дали таймауты; в обеих firefox-пробах HTTP200/204. Подтверждена зависимость работоспособности от TLS fingerprint; конкретный механизм сетевой фильтрации не установлен.
Перед изменением сохранён согласованный SQLite snapshot /root/codex-de-fingerprint-20261023 (0700/0600) и шаблон. Кандидат проверен native Xray run -test; штатным API изменён только vpn-de.streamSettings.realitySettings.fingerprint chrome→firefox. Автоматический ограниченный rollback подготовлен до применения, затем отменён после проверок. Правила, ключи, клиенты, UUID/subId, подписки, firewall и DE не менялись. Панель остаётся через SSH-туннель по прямому ответу владельца; публичный web-доступ не открывался.
После исправления матрица всех15профилей дала14 PASS и одну неуспешную параллельную пробу Авто/Яна (оба запроса). Отдельная повторная проверка этой строки, Германии/Виктор и Авто/Виктор дала3 PASS с правильными DE/RU ролями; первоначальный неуспех сохранён в доказательствах, не замаскирован. Итоговый аудит подтвердил единственный ожидаемый diff шаблона, x-ui active, rollback отменён. Это исправление текущего транспорта, а не повторный outage-тест или изменение FI/DK.
Дополнительно подготовлены локальные личные QR подписок (0600), независимое декодирование zbar5/5 и свежая загрузка HTTPS5/5. Публичный subURI RU уже был правильным; происхождение показанного владельцем QR с127… не воспроизведено, поэтому не объявляется доказанной причиной серверного сбоя.