fix(ipsec): учитывать несколько сессий без ложного офлайн

This commit is contained in:
Denozordec committed 2026-10-10 20:42:58 +07:00
1 parent cb6ec09312
commit 60b2e099f0
10 files changed
+272 -24

No files matched your search

+19 -2
View File
@@ -1,6 +1,6 @@
# Тестовый сервер UX/UI — 2026-10-10
Сервер161.104.46.222 предоставлен для временного тестирования. Backend ux-alias112/version1.0.0-test.alias112, frontend ux-alias112-version/version1.0.0-test.alias112; backend/PG healthy, frontend HTTP/browser passed. VPN107–109 и IPsec110–112: bridge/FDB/IPv6 inner и исправление online по DN/CN, explicit FQDN и unknown при shared ID приняты в границах журнала; собственные объекты удалены, baseline восстановлен; каталог flash CHR2 сохранён из-за неподтверждённого ownership. SSH/оба CHR доступны, пароли прежние.
Сервер161.104.46.222: backend ux-sessions113/version1.0.0-test.sessions113, frontend ux-alias112-version/version1.0.0-test.alias112. Backend/PG healthy, live API и browser smoke1280/320 passed. Оба CHR доступны;113 не менял RouterOS/пароли и не создавал объектов. Множественные сессии проверены контролируемым snapshot, не новыми одновременными туннелями. Следующий114 — несколько identity refs одного сертификата.
| Параметр | Проверенное состояние |
| --- | --- |
@@ -14,7 +14,7 @@
| PostgreSQL | postgres:18-alpine,18.6;mmapp-test-postgres healthy;SELECT version() passed |
| Данные | Отдельный Compose project mmapp-test,том mmapp-test_mmapp-pgdata и каталог ./data |
| Доступ | PostgreSQL не публикуется;frontend3000/backend8000 привязаны к127.0.0.1 после запуска |
| Образы приложения | mmapp-test/backend:ux-alias112 и mmapp-test/frontend:ux-alias112-version; запущены |
| Образы приложения | mmapp-test/backend:ux-sessions113 и mmapp-test/frontend:ux-alias112-version; запущены |
Compose SHA256:3052bd6ab5d9865f97605cebfb5ff27a4410cd3357b81153a65a87fb7c92582f. OptionalBACKEND_IMAGE_TAG позволяетобновлятьbackendотдельно. Локальный и удалённый файлы совпали. Шаблоны: [Compose](../deploy/docker-compose.test.yml), [env без секретов](../deploy/env.test.example).
@@ -846,3 +846,20 @@ Runtime backend ux-patch102/version1.0.0-test.patch102/image34fca84b8721…; fro
Вопрос о наличии тестовых Portal/Telegram задан пользователю; ответа/разрешения на сообщение пока нет. Реальная приёмка этих веток не заменяется локальными fake sender/JWT checks35–49/89. Следующий107 требует тестовую Portal-конфигурацию/аккаунт и отдельный bot/chat; перед отправкой подготовить конкретное сообщение и получить прямое разрешение. Доступы кCHR/SSH этого разрешения не дают. Остальные clientOS/IPv6/WAN policy/scale/multi-instance/physical failure/durable retry bounds остаются в [матрице](ux-ui-remaining-acceptance.md).
За окно сохранены14 local commits93–106, push0. Backend patch102/frontend a11y101, source904/compiled984 matches, main1207/1208+geometry delta5/5/context221/221/backend171+parser8 profiles/accessibility24local20live вточных границах99–105. ОбаCHR доступны, свои конфиги/DB fixtures очищены, credentials не менялись. Квота94% использовано перед записью; этап12.5 целиком открыт. Один локальный commit без push.
## 12.5.113 — IPsec: несколько сессий одного клиента без ложного офлайн (2026-10-10)
Исправлен mapper: ранее повторяющиеся established active-peers.id удалялись из индекса целиком, и даже единственный соответствующий клиент выглядел офлайн. Теперь индекс сохраняет группу сессий. Единственный клиент с совпадающим ID получает online=true; activeAddress/activeSince выдаются только при одной established сессии. При нескольких сессиях reader не выбирает произвольный lease/uptime. Claims считаются на группу: если её разделяют разные catalog clients, у них sessionAmbiguous и нет подтверждённого online/адреса, как в112. Начальные/завершающиеся сессии не подтверждают online.
Изменены backend/src/services/ipsec-live.ts, ipsec-state.test.ts и tests/e2e/ipsec-data.spec.ts. Контракт и существующие компоненты ReUI не менялись: таблица уже показывает «онлайн» без адреса. Проверены certificate/PSK, перестановка native rows, конфликт aliases, переход несколько→одна→нет established сессий. State108/108; все8 профильных скриптов, backend build, ESLint прошли. E2E16 unique passed33.6s: два новых сценария1280/320 и прежняя профильная регрессия IPsec.
На стенд собран/развёрнут только backend ux-sessions113/version1.0.0-test.sessions113. Source base cb6ec09/context build-alias112 плюс один явный override; source и compiled ipsec-live.js SHA256 совпали с локальными байтами. Label sessions113 не является Git SHA. Frontend ux-alias112-version/version1.0.0-test.alias112 сохранён, backend/PG healthy; у frontend нет healthcheck, подтверждены HTTP/browser. Rollback .env сохранён privately как pre-sessions113.env, прежний образ оставлен.
Оба CHR прошли реальный fetchIpsecState, aggregate GET /api/ipsec вернул200 без failures. В собранном reader проверены контролируемые snapshots с повторяющимися ID и aliases на базе прочитанных состояний; это НЕ создание нескольких реальных IKE подключений. Каталог live пустой: browser smoke1280/320 проверил API, пустое состояние, отсутствие ошибки и overflow; pageerrors0/APIwrites0. Первый browser запуск получил ECONNREFUSED: прежний localhost туннель отсутствовал; восстановлен согласованный SSH forward3000/8000, повтор passed. RouterOS writes0, acceptance DBwrites0, тестовых сетевых объектов не создавалось; пароли прежние.
Протокол: [ipsec-multiple-sessions](ux-ui/acceptance/ipsec-multiple-sessions-2026-10-10.json). Следующий114 — один сертификат с несколькими identity refs: текущий last-reference-wins ещё не исправлен, нужно проверить представление строк и выбор target для мутаций. Одновременные реальные подключения с одним ID, внешние интеграции, client OS, полнаяPKI и итоговая общая регрессия остаются отдельной приёмкой.
| Референс | Схема |
| --- | --- |
| [ReUI Filtering2](https://reui.io/preview/base/data-grid-filtering-2?ref=mcp) | ID → группа established → один клиент «онлайн» / разные клиенты «Не определено» |
| [ReUI Stats12](https://reui.io/preview/base/stats-12?ref=mcp) | Несколько сессий → один подтверждённый клиент → сводка без двойного счёта |