chore(test): подтвердить две IKE-сессии одного сертификата

This commit is contained in:
Denozordec committed 2026-10-10 23:14:37 +07:00
1 parent 08fcebd549
commit d379045d20
10 files changed
+537 -10

No files matched your search

+17 -1
View File
@@ -1,6 +1,6 @@
# UX/UI: протокол внешней приёмки 12.5
Актуальное продолжение 2026-10-10: завершён12.5.118 — legacy client export больше не угадывает certificate по managed имени; PSK/отсутствующая binding дают409 до export, explicit certificate binding работает после rename. Backend8 scripts/state114/build/ESLint passed; native before200 с чужим для identity своим cert, after409 без архива/positive bound200, cleanup13×2. Архивы/passphrase не сохранялись. Backend ux-export118/version1.0.0-test.export118, frontend ux-bound116/version1.0.0-test.bound116. Следующий119 — реальные одновременные IKE sessions с одним ID через isolated Linux clients; image подготовка начата.12.5 открыт.
Актуальное продолжение 2026-10-10: завершён12.5.119 в принятой конфигурации — два real strongSwan6.0.1 clients/один certificate-derived DN, две established sessions/разные VIP, Ping3/3 каждый. API online1 без случайного activeAddress/uptime, UI1280/320 passed. Docker clients/network/credentials очищены, baseline16×2 совпал. Backend ux-export118/frontend ux-bound116 прежние. FQDN/ADDR4/manual DN AUTH_FAILED сохранён; следующий120 — интероперабельность ID/encoding без ослабления certificate verification.12.5 открыт.
IPsec78: реальный PSK responder established, mode-config198.18.78.10 и online=true подтверждены API; точные собственные объекты удалены. Сертификатный/DN online, late failure и history restore остаются открытыми. [Отчёт](ux-ui/acceptance/ipsec-mode-config-2026-10-09.json), [журнал](ux-ui-progress.md).
@@ -1223,3 +1223,19 @@ Backend ux-export118/version1.0.0-test.export118 собран из build-bound11
| Референс | Схема |
| --- | --- |
| [ReUI Sheet8](https://reui.io/preview/base/sheet-8?ref=mcp) | Выбранный клиент → явная certificate binding → PKI export либо409 без архива |
## 12.5.119 — две реальные IKE-сессии одного certificate principal (2026-10-10)
Контролируемая граница113 дополнена реальными сессиями: два Docker Linux клиента, official Debian trixie/strongSwan6.0.1-6+deb13u7, собственные namespace/bridge, NET_ADMIN только внутри clients. Один свой RSA2048 клиентский сертификат/ключ, свой CA и явно закреплённый server certificate. IKE/ESP AES256/SHA256/MODP2048, unique=never; чужие сетевые объекты/host networking приложения не перенастраивались. Docker создал и затем удалил собственную временную bridge/NAT сеть.
В принятой конфигурации local ID получен непосредственно из сертификата. RouterOS подтвердил две established с одинаковым ID CN=<имя>-client и разными198.18.119.249/248. Каждый клиент выполнил Ping3/3 до собственного encrypted endpoint198.18.119.1. Это short data-plane proof, не throughput/rekey/SLA. API: clientsTotal1/clientsOnline1, activeAddress/activeSince/sessionAmbiguous отсутствуют. Два live UI1280/320 без mocks: один зелёный «онлайн», VIP не присвоен произвольно, unknown alert отсутствует; writes0/pageerrors0. Mobile screenshot просмотрен. Application source не менялся, backend118/frontend116 сохранены.
Первый cleanup остановился: helper ошибочно ожидал comment у cert, который SDK/RouterOS не сохранил. До повторения scoped recovery проверил имя/CN/CA references/native IDs, удалил только свои объекты/credential files; Docker cleanup уже был завершён. Последующие retries сохранили baseline16×2. Первые FQDN/ADDR4, ручной DN и pinned server+ручной DN получили AUTH_FAILED; RouterOS сообщил identity not found/peer ID does not match certificate. Certificate-derived ID с тем же ключом/CA/server pin прошёл. Точная причина различий encoding не доказана; эти варианты не переименованы в success и остаются следующей120 приёмкой.
Final cleanup: labelled clients/network удалены после owner проверки, свои native logging/peer/identity/policy/group/profile/proposal/mode-config/pool/bridge/address/certificates удалены по ID;16 исходных коллекций×2 совпали, default/public/metadata/195.195.195.195/32 сохранены. Private P12/pass/PEM/config files удалены, пустые свои directories закрыты без recursive delete. Архивы/ключи не попали в Git. Оба CHR доступны, пароли прежние. Инструментальный image сохранён для повторения; приложение не пересобиралось. Протоколы: [native/отказы/cleanup](ux-ui/acceptance/ipsec-real-multiple-sessions-2026-10-10.json), [live UI](ux-ui/acceptance/browser-ipsec-multiple-2026-10-10.json).
References: [strongSwan configuration](https://docs.strongswan.org/docs/latest/swanctl/swanctlConf.html), [credentials](https://docs.strongswan.org/docs/latest/swanctl/swanctlDir.html), [RouterOS](https://manual.mikrotik.com/docs/virtual-private-networks/ipsec/). Два контейнера используют один public WAN/NAT, не являются независимыми площадками и не закрывают Windows/macOS/iOS/Android. Следующий120 — ID interop/encoding; остальные внешние зависимости сохранены в матрице.12.5 открыт.
| Референс | Схема |
| --- | --- |
| [ReUI Filtering2](https://reui.io/preview/base/data-grid-filtering-2?ref=mcp) | Две подтверждённые сессии → один клиент онлайн → без произвольно выбранного VIP |
+2 -2
View File
@@ -1,12 +1,12 @@
# План реализации UX/UI по пятичасовым окнам
Актуальное продолжение 2026-10-10: завершён12.5.118 — legacy client export больше не угадывает certificate по managed имени; PSK/отсутствующая binding дают409 до export, explicit certificate binding работает после rename. Backend8 scripts/state114/build/ESLint passed; native before200 с чужим для identity своим cert, after409 без архива/positive bound200, cleanup13×2. Архивы/passphrase не сохранялись. Backend ux-export118/version1.0.0-test.export118, frontend ux-bound116/version1.0.0-test.bound116. Следующий119 — реальные одновременные IKE sessions с одним ID через isolated Linux clients; image подготовка начата.12.5 открыт.
Актуальное продолжение 2026-10-10: завершён12.5.119 в принятой конфигурации — два real strongSwan6.0.1 clients/один certificate-derived DN, две established sessions/разные VIP, Ping3/3 каждый. API online1 без случайного activeAddress/uptime, UI1280/320 passed. Docker clients/network/credentials очищены, baseline16×2 совпал. Backend ux-export118/frontend ux-bound116 прежние. FQDN/ADDR4/manual DN AUTH_FAILED сохранён; следующий120 — интероперабельность ID/encoding без ослабления certificate verification.12.5 открыт.
Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-10. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат.
## Актуальная точка продолжения — 2026-10-10
Актуальное продолжение 2026-10-10: завершён12.5.118 — legacy client export больше не угадывает certificate по managed имени; PSK/отсутствующая binding дают409 до export, explicit certificate binding работает после rename. Backend8 scripts/state114/build/ESLint passed; native before200 с чужим для identity своим cert, after409 без архива/positive bound200, cleanup13×2. Архивы/passphrase не сохранялись. Backend ux-export118/version1.0.0-test.export118, frontend ux-bound116/version1.0.0-test.bound116. Следующий119 — реальные одновременные IKE sessions с одним ID через isolated Linux clients; image подготовка начата.12.5 открыт.
Актуальное продолжение 2026-10-10: завершён12.5.119 в принятой конфигурации — два real strongSwan6.0.1 clients/один certificate-derived DN, две established sessions/разные VIP, Ping3/3 каждый. API online1 без случайного activeAddress/uptime, UI1280/320 passed. Docker clients/network/credentials очищены, baseline16×2 совпал. Backend ux-export118/frontend ux-bound116 прежние. FQDN/ADDR4/manual DN AUTH_FAILED сохранён; следующий120 — интероперабельность ID/encoding без ослабления certificate verification.12.5 открыт.
Этапы0–11 завершены в локальных границах журнала. История выполненных внешних блоков и доказательства сохранены в [журнале](ux-ui-stage-12.md) и [протоколе](ux-ui-external-acceptance.md). Реальная Telegram доставка, Portal SSO, multi-instance и оставшиеся профильные сетевые ограничения открыты.
+18 -2
View File
@@ -1,6 +1,6 @@
# UX/UI: журнал реализации
Актуальное продолжение 2026-10-10: завершён12.5.118 — legacy client export больше не угадывает certificate по managed имени; PSK/отсутствующая binding дают409 до export, explicit certificate binding работает после rename. Backend8 scripts/state114/build/ESLint passed; native before200 с чужим для identity своим cert, after409 без архива/positive bound200, cleanup13×2. Архивы/passphrase не сохранялись. Backend ux-export118/version1.0.0-test.export118, frontend ux-bound116/version1.0.0-test.bound116. Следующий119 — реальные одновременные IKE sessions с одним ID через isolated Linux clients; image подготовка начата.12.5 открыт.
Актуальное продолжение 2026-10-10: завершён12.5.119 в принятой конфигурации — два real strongSwan6.0.1 clients/один certificate-derived DN, две established sessions/разные VIP, Ping3/3 каждый. API online1 без случайного activeAddress/uptime, UI1280/320 passed. Docker clients/network/credentials очищены, baseline16×2 совпал. Backend ux-export118/frontend ux-bound116 прежние. FQDN/ADDR4/manual DN AUTH_FAILED сохранён; следующий120 — интероперабельность ID/encoding без ослабления certificate verification.12.5 открыт.
Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md).
@@ -36,7 +36,23 @@
| 10 | Маршрутизация, диагностика, карта и терминал | Завершён в границах локальной приёмки 2026-10-01; блоки 10.1–10.71, внешние ограничения в 10.71 |
| 11А | Пользователи, контейнеры, сертификаты и резервные копии | Завершён в границах локальной приёмки 2026-10-01; 11А.1–11А.33, внешние ограничения в 11А.33 |
| 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | Завершён в границах локальной приёмки 2026-10-03; ограничения и evidence в11Б.7 |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–118 и ограничения ниже. Runtime backend ux-export118/frontend ux-bound116. |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–119 и ограничения ниже. Runtime backend ux-export118/frontend ux-bound116. |
## 12.5.119 — две реальные IKE-сессии одного certificate principal (2026-10-10)
Контролируемая граница113 дополнена реальными сессиями: два Docker Linux клиента, official Debian trixie/strongSwan6.0.1-6+deb13u7, собственные namespace/bridge, NET_ADMIN только внутри clients. Один свой RSA2048 клиентский сертификат/ключ, свой CA и явно закреплённый server certificate. IKE/ESP AES256/SHA256/MODP2048, unique=never; чужие сетевые объекты/host networking приложения не перенастраивались. Docker создал и затем удалил собственную временную bridge/NAT сеть.
В принятой конфигурации local ID получен непосредственно из сертификата. RouterOS подтвердил две established с одинаковым ID CN=<имя>-client и разными198.18.119.249/248. Каждый клиент выполнил Ping3/3 до собственного encrypted endpoint198.18.119.1. Это short data-plane proof, не throughput/rekey/SLA. API: clientsTotal1/clientsOnline1, activeAddress/activeSince/sessionAmbiguous отсутствуют. Два live UI1280/320 без mocks: один зелёный «онлайн», VIP не присвоен произвольно, unknown alert отсутствует; writes0/pageerrors0. Mobile screenshot просмотрен. Application source не менялся, backend118/frontend116 сохранены.
Первый cleanup остановился: helper ошибочно ожидал comment у cert, который SDK/RouterOS не сохранил. До повторения scoped recovery проверил имя/CN/CA references/native IDs, удалил только свои объекты/credential files; Docker cleanup уже был завершён. Последующие retries сохранили baseline16×2. Первые FQDN/ADDR4, ручной DN и pinned server+ручной DN получили AUTH_FAILED; RouterOS сообщил identity not found/peer ID does not match certificate. Certificate-derived ID с тем же ключом/CA/server pin прошёл. Точная причина различий encoding не доказана; эти варианты не переименованы в success и остаются следующей120 приёмкой.
Final cleanup: labelled clients/network удалены после owner проверки, свои native logging/peer/identity/policy/group/profile/proposal/mode-config/pool/bridge/address/certificates удалены по ID;16 исходных коллекций×2 совпали, default/public/metadata/195.195.195.195/32 сохранены. Private P12/pass/PEM/config files удалены, пустые свои directories закрыты без recursive delete. Архивы/ключи не попали в Git. Оба CHR доступны, пароли прежние. Инструментальный image сохранён для повторения; приложение не пересобиралось. Протоколы: [native/отказы/cleanup](ux-ui/acceptance/ipsec-real-multiple-sessions-2026-10-10.json), [live UI](ux-ui/acceptance/browser-ipsec-multiple-2026-10-10.json).
References: [strongSwan configuration](https://docs.strongswan.org/docs/latest/swanctl/swanctlConf.html), [credentials](https://docs.strongswan.org/docs/latest/swanctl/swanctlDir.html), [RouterOS](https://manual.mikrotik.com/docs/virtual-private-networks/ipsec/). Два контейнера используют один public WAN/NAT, не являются независимыми площадками и не закрывают Windows/macOS/iOS/Android. Следующий120 — ID interop/encoding; остальные внешние зависимости сохранены в матрице.12.5 открыт.
| Референс | Схема |
| --- | --- |
| [ReUI Filtering2](https://reui.io/preview/base/data-grid-filtering-2?ref=mcp) | Две подтверждённые сессии → один клиент онлайн → без произвольно выбранного VIP |
## 12.5.118 — IPsec: legacy экспорт только по явной certificate привязке (2026-10-10)
+19 -3
View File
@@ -1,6 +1,6 @@
# Оставшаяся внешняя приёмка — 2026-10-10
Это актуальная матрица после 12.5.118. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии.
Это актуальная матрица после 12.5.119. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии.
Стенд: Debian13/Compose, PostgreSQL18.6, два CHR RouterOS7.24.5. Backend `ux-export118`, frontend `ux-bound116`; production lab использует AUTH_REQUIRED=false. Подписанные JWT/RBAC проверялись в изолированных процессах. Все собственные объекты112 удалены, исходные13 коллекций×2 (включая logging/certificates/files/routes) проверены; пароли не менялись.
@@ -12,7 +12,7 @@
| GRE | Native lifecycle, metadata, live формы/меню/URL/Ping53–57; GRE используется в OSPF/BGP/IPsec последующих блоков; native IPv6 ULA inner109 | IPv6 outer и application IPv6 interface address lifecycle, независимые WAN, масштаб и длительное восстановление; принятие GRE не означает приёмку всех сценариев автоматического расписания |
| WireGuard | Native handshake/data plane58, deletion60, live create/peer/disable/enable/delete62, mobile64, export/import67–74; native IPv6 ULA inner/allowedIps/handshake109 | Клиентские ОС и произвольные конфигурации, IPv6 outer/scale и application IPv6 interface address lifecycle, физический lost ACK и устойчивое восстановление; `.conf` с placeholders — шаблон, не принятый клиентский tunnel |
| VXLAN | Собственная пара/private Ping/catalog/URL/export75–76; bridge/FDB/port loss/recovery107; IPv6 ULA inner по IPv4 outer108 | API приложения read-only: create/delete проверены native. IPv6 outer, масштаб/производительность, профильные mutation RBAC/concurrency отдельно не приняты |
| IPsec | PSK и сертификатное шифрование77–82, active peer/online/mode-config, scoped NAT/group, partial/unknown/applied receipts, restore conflicts, JWT; full DN/специальные символы/online110; literal CN namespace guards и explicit FQDN111; certificate/PSK shared ID unknown/recovery112; multiple sessions controlled snapshots113; shared certificate rows/target guards114; preserve-certificate UI/native DELETE115; explicit deletion binding/PSK collision116; legacy export binding118 | Реальные одновременные sessions с одним ID, Одновременные реальные sessions одного ID; native edit identical matching rules rejected; клиентские Windows/macOS/iOS/Android, прочие DN форматы/custom OIDs/IKE ID namespaces, полная PKI и policy/profile/proposal restore, физический disconnect, durable retry/multi-instance, IPv6/maximum throughput |
| IPsec | PSK и сертификатное шифрование77–82, active peer/online/mode-config, scoped NAT/group, partial/unknown/applied receipts, restore conflicts, JWT; full DN/специальные символы/online110; literal CN namespace guards и explicit FQDN111; certificate/PSK shared ID unknown/recovery112; multiple sessions controlled snapshots113; shared certificate rows/target guards114; preserve-certificate UI/native DELETE115; explicit deletion binding/PSK collision116; legacy export binding118; real duplicate DN sessions/Linux Ping/UI119 | Реальные duplicate certificate-derived DN sessions приняты119; остальные ID типы, FQDN/ADDR4/manual DN interop/encoding и прочие ID типы; native edit identical matching rules rejected; клиентские Windows/macOS/iOS/Android, прочие DN форматы/custom OIDs/IKE ID namespaces, полная PKI и policy/profile/proposal restore, физический disconnect, durable retry/multi-instance, IPv6/maximum throughput |
| OSPF/BFD | Real Full/own routes84–85, раздельные наблюдения BFD86, effective disabled/optimizer cost/partial/RBAC87, alternate path90 и CIDR91 | Sustained BFD-only gate не принят: в86 сосед мог вновь статьFull при доступныхHello. В90 переходный Ping18/40 с55% loss: бесшовность не принята. REST timing — наблюдаемая граница, не SLA; IPv6/scale/independent WAN открыты |
| BGP | Established83, exact /32 exchange/API/UI/administrative withdrawal92, BFD primary GRE loss/alternate/recovery93 | Hold timer/TCP loss безBFD принят104; packet loss в переходе, разные внешние peers/WAN policy, IPv6/scale. Два логических пути используют тот же public WAN; physical redundancy не принята |
| Recursive routes | Production PUT/change/own history restore88, disabled guards, partial/unknown/applied outcomes, live формы/контекст | Автоматический rollback/retry, durable receipts и несколько экземпляров отсутствуют; PUT не является idempotent noop. Полная произвольная legacy catalog миграция не принята |
@@ -25,7 +25,7 @@
## Следующая последовательность
1. **12.5.95 завершён:** [source/context/compiled audit](ux-ui/acceptance/deployment-source-audit-2026-10-10.json), production source drift не выявлен; нормализация и исключения явно указаны.
2. **12.5.96 timezone завершён:** [6 live UI cases](ux-ui/acceptance/browser-speed-timezone-2026-10-10.json). 97 HTTP receipt disconnect принят: [протокол](ux-ui/acceptance/speed-disconnect-2026-10-10.json). 98 сообщение неизвестного native результата исправлено/развёрнуто. 99 main/context завершён с точной записью одного failure/delta;100 transport и101 accessibility исправлены/развёрнуты.102 malformed PATCH исправлен/принят.103 packet rows/public/GRE приняты в границах коротких samples; initial loss/root cause остаётся открытым.104 hold/TCP loss/recovery принят.105 source/runtime/evidence сверка passed.106 read-only readiness: auth disabled/Portal localhost/bot and chat unconfigured.107 — native bridge/FDB/loss/recovery принят.108 — IPv6 inner VXLAN принят, initial0/3 и1/3 остаются в протоколе;109 — native GRE/WireGuard IPv6 inner принят; readers /ip/address не показывают native IPv6 interface addresses.110 — полный native DN/online исправлен и принят;111 — literal CN guards/real explicit FQDN accepted;112 — certificate/PSK alias ambiguity marked unknown/recovery accepted;113 — repeated native ID groups исправлены на controlled snapshots; 114 — multiple refs/target guards/native conflict приняты в описанных границах. 115 — UI сохранения сертификата/native DELETE принят; 116 — name-based guessing удалён/live PSK collision принят;117 — main1243/1failed+delta1/context221/source runtime приняты в точных границах; 118 — legacy export binding/native409/explicit200 принят;119 — isolated Linux multiple IKE sessions. Реальные интеграции требуют тестовых доступов и отдельного разрешения на сообщение.
2. **12.5.96 timezone завершён:** [6 live UI cases](ux-ui/acceptance/browser-speed-timezone-2026-10-10.json). 97 HTTP receipt disconnect принят: [протокол](ux-ui/acceptance/speed-disconnect-2026-10-10.json). 98 сообщение неизвестного native результата исправлено/развёрнуто. 99 main/context завершён с точной записью одного failure/delta;100 transport и101 accessibility исправлены/развёрнуты.102 malformed PATCH исправлен/принят.103 packet rows/public/GRE приняты в границах коротких samples; initial loss/root cause остаётся открытым.104 hold/TCP loss/recovery принят.105 source/runtime/evidence сверка passed.106 read-only readiness: auth disabled/Portal localhost/bot and chat unconfigured.107 — native bridge/FDB/loss/recovery принят.108 — IPv6 inner VXLAN принят, initial0/3 и1/3 остаются в протоколе;109 — native GRE/WireGuard IPv6 inner принят; readers /ip/address не показывают native IPv6 interface addresses.110 — полный native DN/online исправлен и принят;111 — literal CN guards/real explicit FQDN accepted;112 — certificate/PSK alias ambiguity marked unknown/recovery accepted;113 — repeated native ID groups исправлены на controlled snapshots; 114 — multiple refs/target guards/native conflict приняты в описанных границах. 115 — UI сохранения сертификата/native DELETE принят; 116 — name-based guessing удалён/live PSK collision принят;117 — main1243/1failed+delta1/context221/source runtime приняты в точных границах; 118 — legacy export binding/native409/explicit200 принят;119 — real certificate-derived DN/Linux sessions приняты; следующий120 — manual ID interop/encoding. Реальные интеграции требуют тестовых доступов и отдельного разрешения на сообщение.
3. **Заключительный профильный контроль:** после последнего исправления собрать только затронутую часть, проверить её live и обновить матрицу. Общую регрессию выполнить один раз на согласованном runtime.
4. **Внешние зависимости:** Telegram/Portal/client OS/multi-WAN/scale проходят отдельную приёмку при наличии нужных аккаунтов, устройств и разрешений. Лабораторный результат двух CHR не закрывает их автоматически.
@@ -138,3 +138,19 @@ Backend ux-export118/version1.0.0-test.export118 собран из build-bound11
| Референс | Схема |
| --- | --- |
| [ReUI Sheet8](https://reui.io/preview/base/sheet-8?ref=mcp) | Выбранный клиент → явная certificate binding → PKI export либо409 без архива |
## 12.5.119 — две реальные IKE-сессии одного certificate principal (2026-10-10)
Контролируемая граница113 дополнена реальными сессиями: два Docker Linux клиента, official Debian trixie/strongSwan6.0.1-6+deb13u7, собственные namespace/bridge, NET_ADMIN только внутри clients. Один свой RSA2048 клиентский сертификат/ключ, свой CA и явно закреплённый server certificate. IKE/ESP AES256/SHA256/MODP2048, unique=never; чужие сетевые объекты/host networking приложения не перенастраивались. Docker создал и затем удалил собственную временную bridge/NAT сеть.
В принятой конфигурации local ID получен непосредственно из сертификата. RouterOS подтвердил две established с одинаковым ID CN=<имя>-client и разными198.18.119.249/248. Каждый клиент выполнил Ping3/3 до собственного encrypted endpoint198.18.119.1. Это short data-plane proof, не throughput/rekey/SLA. API: clientsTotal1/clientsOnline1, activeAddress/activeSince/sessionAmbiguous отсутствуют. Два live UI1280/320 без mocks: один зелёный «онлайн», VIP не присвоен произвольно, unknown alert отсутствует; writes0/pageerrors0. Mobile screenshot просмотрен. Application source не менялся, backend118/frontend116 сохранены.
Первый cleanup остановился: helper ошибочно ожидал comment у cert, который SDK/RouterOS не сохранил. До повторения scoped recovery проверил имя/CN/CA references/native IDs, удалил только свои объекты/credential files; Docker cleanup уже был завершён. Последующие retries сохранили baseline16×2. Первые FQDN/ADDR4, ручной DN и pinned server+ручной DN получили AUTH_FAILED; RouterOS сообщил identity not found/peer ID does not match certificate. Certificate-derived ID с тем же ключом/CA/server pin прошёл. Точная причина различий encoding не доказана; эти варианты не переименованы в success и остаются следующей120 приёмкой.
Final cleanup: labelled clients/network удалены после owner проверки, свои native logging/peer/identity/policy/group/profile/proposal/mode-config/pool/bridge/address/certificates удалены по ID;16 исходных коллекций×2 совпали, default/public/metadata/195.195.195.195/32 сохранены. Private P12/pass/PEM/config files удалены, пустые свои directories закрыты без recursive delete. Архивы/ключи не попали в Git. Оба CHR доступны, пароли прежние. Инструментальный image сохранён для повторения; приложение не пересобиралось. Протоколы: [native/отказы/cleanup](ux-ui/acceptance/ipsec-real-multiple-sessions-2026-10-10.json), [live UI](ux-ui/acceptance/browser-ipsec-multiple-2026-10-10.json).
References: [strongSwan configuration](https://docs.strongswan.org/docs/latest/swanctl/swanctlConf.html), [credentials](https://docs.strongswan.org/docs/latest/swanctl/swanctlDir.html), [RouterOS](https://manual.mikrotik.com/docs/virtual-private-networks/ipsec/). Два контейнера используют один public WAN/NAT, не являются независимыми площадками и не закрывают Windows/macOS/iOS/Android. Следующий120 — ID interop/encoding; остальные внешние зависимости сохранены в матрице.12.5 открыт.
| Референс | Схема |
| --- | --- |
| [ReUI Filtering2](https://reui.io/preview/base/data-grid-filtering-2?ref=mcp) | Две подтверждённые сессии → один клиент онлайн → без произвольно выбранного VIP |
+17 -1
View File
@@ -1,6 +1,6 @@
# Этап 12: итоговая приёмка UX/UI
Актуальное продолжение 2026-10-10: завершён12.5.118 — legacy client export больше не угадывает certificate по managed имени; PSK/отсутствующая binding дают409 до export, explicit certificate binding работает после rename. Backend8 scripts/state114/build/ESLint passed; native before200 с чужим для identity своим cert, after409 без архива/positive bound200, cleanup13×2. Архивы/passphrase не сохранялись. Backend ux-export118/version1.0.0-test.export118, frontend ux-bound116/version1.0.0-test.bound116. Следующий119 — реальные одновременные IKE sessions с одним ID через isolated Linux clients; image подготовка начата.12.5 открыт.
Актуальное продолжение 2026-10-10: завершён12.5.119 в принятой конфигурации — два real strongSwan6.0.1 clients/один certificate-derived DN, две established sessions/разные VIP, Ping3/3 каждый. API online1 без случайного activeAddress/uptime, UI1280/320 passed. Docker clients/network/credentials очищены, baseline16×2 совпал. Backend ux-export118/frontend ux-bound116 прежние. FQDN/ADDR4/manual DN AUTH_FAILED сохранён; следующий120 — интероперабельность ID/encoding без ослабления certificate verification.12.5 открыт.
План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push.
@@ -2528,3 +2528,19 @@ Backend ux-export118/version1.0.0-test.export118 собран из build-bound11
| Референс | Схема |
| --- | --- |
| [ReUI Sheet8](https://reui.io/preview/base/sheet-8?ref=mcp) | Выбранный клиент → явная certificate binding → PKI export либо409 без архива |
## 12.5.119 — две реальные IKE-сессии одного certificate principal (2026-10-10)
Контролируемая граница113 дополнена реальными сессиями: два Docker Linux клиента, official Debian trixie/strongSwan6.0.1-6+deb13u7, собственные namespace/bridge, NET_ADMIN только внутри clients. Один свой RSA2048 клиентский сертификат/ключ, свой CA и явно закреплённый server certificate. IKE/ESP AES256/SHA256/MODP2048, unique=never; чужие сетевые объекты/host networking приложения не перенастраивались. Docker создал и затем удалил собственную временную bridge/NAT сеть.
В принятой конфигурации local ID получен непосредственно из сертификата. RouterOS подтвердил две established с одинаковым ID CN=<имя>-client и разными198.18.119.249/248. Каждый клиент выполнил Ping3/3 до собственного encrypted endpoint198.18.119.1. Это short data-plane proof, не throughput/rekey/SLA. API: clientsTotal1/clientsOnline1, activeAddress/activeSince/sessionAmbiguous отсутствуют. Два live UI1280/320 без mocks: один зелёный «онлайн», VIP не присвоен произвольно, unknown alert отсутствует; writes0/pageerrors0. Mobile screenshot просмотрен. Application source не менялся, backend118/frontend116 сохранены.
Первый cleanup остановился: helper ошибочно ожидал comment у cert, который SDK/RouterOS не сохранил. До повторения scoped recovery проверил имя/CN/CA references/native IDs, удалил только свои объекты/credential files; Docker cleanup уже был завершён. Последующие retries сохранили baseline16×2. Первые FQDN/ADDR4, ручной DN и pinned server+ручной DN получили AUTH_FAILED; RouterOS сообщил identity not found/peer ID does not match certificate. Certificate-derived ID с тем же ключом/CA/server pin прошёл. Точная причина различий encoding не доказана; эти варианты не переименованы в success и остаются следующей120 приёмкой.
Final cleanup: labelled clients/network удалены после owner проверки, свои native logging/peer/identity/policy/group/profile/proposal/mode-config/pool/bridge/address/certificates удалены по ID;16 исходных коллекций×2 совпали, default/public/metadata/195.195.195.195/32 сохранены. Private P12/pass/PEM/config files удалены, пустые свои directories закрыты без recursive delete. Архивы/ключи не попали в Git. Оба CHR доступны, пароли прежние. Инструментальный image сохранён для повторения; приложение не пересобиралось. Протоколы: [native/отказы/cleanup](ux-ui/acceptance/ipsec-real-multiple-sessions-2026-10-10.json), [live UI](ux-ui/acceptance/browser-ipsec-multiple-2026-10-10.json).
References: [strongSwan configuration](https://docs.strongswan.org/docs/latest/swanctl/swanctlConf.html), [credentials](https://docs.strongswan.org/docs/latest/swanctl/swanctlDir.html), [RouterOS](https://manual.mikrotik.com/docs/virtual-private-networks/ipsec/). Два контейнера используют один public WAN/NAT, не являются независимыми площадками и не закрывают Windows/macOS/iOS/Android. Следующий120 — ID interop/encoding; остальные внешние зависимости сохранены в матрице.12.5 открыт.
| Референс | Схема |
| --- | --- |
| [ReUI Filtering2](https://reui.io/preview/base/data-grid-filtering-2?ref=mcp) | Две подтверждённые сессии → один клиент онлайн → без произвольно выбранного VIP |
+17 -1
View File
@@ -1,6 +1,6 @@
# Тестовый сервер UX/UI — 2026-10-10
Сервер161.104.46.222: backend ux-export118/version1.0.0-test.export118, frontend ux-bound116/version1.0.0-test.bound116. Native legacy PSK export409 без архива, explicit binding/rename positive200, cleanup13×2 passed. Source/compiled route bytehash совпал; оба CHR доступны/пароли прежние. Следующий119 — isolated Linux IKE clients с общим ID.
Сервер161.104.46.222: backend ux-export118/version1.0.0-test.export118, frontend ux-bound116/version1.0.0-test.bound116. Две real Linux certificate-derived ID sessions, Ping3/3×2/API online1/UI1280/320 passed. Cleanup16×2/clients/network/private files passed; оба CHR доступны/пароли прежние. Instrumental strongSwan image accept119 сохранён. Следующий120 — ручные ID/encoding interop.
| Параметр | Проверенное состояние |
| --- | --- |
@@ -954,3 +954,19 @@ Backend ux-export118/version1.0.0-test.export118 собран из build-bound11
| Референс | Схема |
| --- | --- |
| [ReUI Sheet8](https://reui.io/preview/base/sheet-8?ref=mcp) | Выбранный клиент → явная certificate binding → PKI export либо409 без архива |
## 12.5.119 — две реальные IKE-сессии одного certificate principal (2026-10-10)
Контролируемая граница113 дополнена реальными сессиями: два Docker Linux клиента, official Debian trixie/strongSwan6.0.1-6+deb13u7, собственные namespace/bridge, NET_ADMIN только внутри clients. Один свой RSA2048 клиентский сертификат/ключ, свой CA и явно закреплённый server certificate. IKE/ESP AES256/SHA256/MODP2048, unique=never; чужие сетевые объекты/host networking приложения не перенастраивались. Docker создал и затем удалил собственную временную bridge/NAT сеть.
В принятой конфигурации local ID получен непосредственно из сертификата. RouterOS подтвердил две established с одинаковым ID CN=<имя>-client и разными198.18.119.249/248. Каждый клиент выполнил Ping3/3 до собственного encrypted endpoint198.18.119.1. Это short data-plane proof, не throughput/rekey/SLA. API: clientsTotal1/clientsOnline1, activeAddress/activeSince/sessionAmbiguous отсутствуют. Два live UI1280/320 без mocks: один зелёный «онлайн», VIP не присвоен произвольно, unknown alert отсутствует; writes0/pageerrors0. Mobile screenshot просмотрен. Application source не менялся, backend118/frontend116 сохранены.
Первый cleanup остановился: helper ошибочно ожидал comment у cert, который SDK/RouterOS не сохранил. До повторения scoped recovery проверил имя/CN/CA references/native IDs, удалил только свои объекты/credential files; Docker cleanup уже был завершён. Последующие retries сохранили baseline16×2. Первые FQDN/ADDR4, ручной DN и pinned server+ручной DN получили AUTH_FAILED; RouterOS сообщил identity not found/peer ID does not match certificate. Certificate-derived ID с тем же ключом/CA/server pin прошёл. Точная причина различий encoding не доказана; эти варианты не переименованы в success и остаются следующей120 приёмкой.
Final cleanup: labelled clients/network удалены после owner проверки, свои native logging/peer/identity/policy/group/profile/proposal/mode-config/pool/bridge/address/certificates удалены по ID;16 исходных коллекций×2 совпали, default/public/metadata/195.195.195.195/32 сохранены. Private P12/pass/PEM/config files удалены, пустые свои directories закрыты без recursive delete. Архивы/ключи не попали в Git. Оба CHR доступны, пароли прежние. Инструментальный image сохранён для повторения; приложение не пересобиралось. Протоколы: [native/отказы/cleanup](ux-ui/acceptance/ipsec-real-multiple-sessions-2026-10-10.json), [live UI](ux-ui/acceptance/browser-ipsec-multiple-2026-10-10.json).
References: [strongSwan configuration](https://docs.strongswan.org/docs/latest/swanctl/swanctlConf.html), [credentials](https://docs.strongswan.org/docs/latest/swanctl/swanctlDir.html), [RouterOS](https://manual.mikrotik.com/docs/virtual-private-networks/ipsec/). Два контейнера используют один public WAN/NAT, не являются независимыми площадками и не закрывают Windows/macOS/iOS/Android. Следующий120 — ID interop/encoding; остальные внешние зависимости сохранены в матрице.12.5 открыт.
| Референс | Схема |
| --- | --- |
| [ReUI Filtering2](https://reui.io/preview/base/data-grid-filtering-2?ref=mcp) | Две подтверждённые сессии → один клиент онлайн → без произвольно выбранного VIP |
@@ -0,0 +1,27 @@
{
"date": "2026-10-10",
"runtime": {
"backend": "ux-export118",
"frontend": "ux-bound116"
},
"nativeSessions": 2,
"linuxEncryptedPings3of3": true,
"cases": [
{
"width": 1280,
"oneClientOnline": true,
"noArbitraryVip": true,
"noAmbiguity": true,
"noOverflow": true
},
{
"width": 320,
"oneClientOnline": true,
"noArbitraryVip": true,
"noAmbiguity": true,
"noOverflow": true
}
],
"pageErrors": [],
"applicationWrites": []
}
@@ -0,0 +1,420 @@
{
"date": "2026-10-10",
"block": "12.5.119",
"runtime": {
"backend": "ux-export118",
"frontend": "ux-bound116"
},
"native": {
"date": "2026-10-10",
"block": "12.5.119",
"name": "mm-ipsec119-1791648542512",
"linux": [
{
"index": 0,
"vip": "198.18.119.249",
"initiated": true,
"ping3of3": true
},
{
"index": 1,
"vip": "198.18.119.248",
"initiated": true,
"ping3of3": true
}
],
"cleanup": [
{
"serverId": 1,
"/system/logging": true,
"/ip/ipsec/identity": true,
"/ip/ipsec/peer": true,
"/ip/ipsec/policy": true,
"/ip/ipsec/policy/group": true,
"/ip/ipsec/mode-config": true,
"/ip/ipsec/proposal": true,
"/ip/ipsec/profile": true,
"/certificate": true,
"/file": true,
"/ip/address": true,
"/ip/route": true,
"/ip/firewall/nat": true,
"/ip/pool": true,
"/interface/bridge": true,
"/ipv6/address": true
},
{
"serverId": 2,
"/system/logging": true,
"/ip/ipsec/identity": true,
"/ip/ipsec/peer": true,
"/ip/ipsec/policy": true,
"/ip/ipsec/policy/group": true,
"/ip/ipsec/mode-config": true,
"/ip/ipsec/proposal": true,
"/ip/ipsec/profile": true,
"/certificate": true,
"/file": true,
"/ip/address": true,
"/ip/route": true,
"/ip/firewall/nat": true,
"/ip/pool": true,
"/interface/bridge": true,
"/ipv6/address": true
}
],
"clientImage": "sha256:c9d01c801de88b2349f685c1cb631e67a8b1c697439a00148d4045c23a584054",
"native": [
{
".id": "*1",
"id": "CN=mm-ipsec119-1791648542512-client",
"state": "established",
"dynamic-address": "198.18.119.249",
"remote-address": "161.104.46.222",
"uptime": "5s"
},
{
".id": "*2",
"id": "CN=mm-ipsec119-1791648542512-client",
"state": "established",
"dynamic-address": "198.18.119.248",
"remote-address": "161.104.46.222",
"uptime": "2s"
}
],
"catalog": {
"name": "mm-ipsec119-1791648542512",
"online": true
},
"summary": {
"clientsTotal": 1,
"clientsOnline": 1
},
"dockerCleanup": true,
"credentialFilesRemoved": true
},
"browserEvidence": "browser-ipsec-multiple-2026-10-10.json",
"preliminary": {
"ownershipRecovery": {
"date": "2026-10-10",
"name": "mm-ipsec119-1791646686109",
"certificates": [
{
".id": "*AA",
"name": "mm-ipsec119-1791646686109-ca",
"common-name": "mm-ipsec119-1791646686109-ca",
"key-usage": "key-cert-sign,crl-sign"
},
{
".id": "*AB",
"name": "mm-ipsec119-1791646686109-server",
"common-name": "194.226.121.150",
"ca": "mm-ipsec119-1791646686109-ca",
"key-usage": "digital-signature,key-encipherment,tls-server"
},
{
".id": "*AC",
"name": "mm-ipsec119-1791646686109-client",
"common-name": "mm-ipsec119-1791646686109-client",
"ca": "mm-ipsec119-1791646686109-ca",
"key-usage": "digital-signature,key-encipherment,tls-client"
}
],
"deleted": [
{
"path": "/ip/ipsec/identity",
"id": "*A"
},
{
"path": "/ip/ipsec/peer",
"id": "*1"
},
{
"path": "/ip/ipsec/policy",
"id": "*1000000"
},
{
"path": "/ip/address",
"id": "*74"
},
{
"path": "/interface/bridge",
"id": "*77"
},
{
"path": "/ip/ipsec/mode-config",
"id": "*2"
},
{
"path": "/ip/pool",
"id": "*D"
},
{
"path": "/ip/ipsec/policy/group",
"id": "*3"
},
{
"path": "/ip/ipsec/proposal",
"id": "*1"
},
{
"path": "/ip/ipsec/profile",
"id": "*B"
},
{
"path": "/certificate",
"id": "*AB"
},
{
"path": "/certificate",
"id": "*AC"
},
{
"path": "/certificate",
"id": "*AA"
}
],
"credentialFilesRemoved": true,
"nativeOwnedRemoved": true
},
"initialAuth": {
"date": "2026-10-10",
"block": "12.5.119",
"name": "mm-ipsec119-1791647119700",
"linux": [],
"cleanup": [
{
"serverId": 1,
"/system/logging": true,
"/ip/ipsec/identity": true,
"/ip/ipsec/peer": true,
"/ip/ipsec/policy": true,
"/ip/ipsec/policy/group": true,
"/ip/ipsec/mode-config": true,
"/ip/ipsec/proposal": true,
"/ip/ipsec/profile": true,
"/certificate": true,
"/file": true,
"/ip/address": true,
"/ip/route": true,
"/ip/firewall/nat": true,
"/ip/pool": true,
"/interface/bridge": true,
"/ipv6/address": true
},
{
"serverId": 2,
"/system/logging": true,
"/ip/ipsec/identity": true,
"/ip/ipsec/peer": true,
"/ip/ipsec/policy": true,
"/ip/ipsec/policy/group": true,
"/ip/ipsec/mode-config": true,
"/ip/ipsec/proposal": true,
"/ip/ipsec/profile": true,
"/certificate": true,
"/file": true,
"/ip/address": true,
"/ip/route": true,
"/ip/firewall/nat": true,
"/ip/pool": true,
"/interface/bridge": true,
"/ipv6/address": true
}
],
"clientImage": "sha256:c9d01c801de88b2349f685c1cb631e67a8b1c697439a00148d4045c23a584054",
"error": "IKE initiation failed: ad - curl_plugin_create not found and no plugin file available\ninitiate failed: establishing CHILD_SA 'private' failed\n[IKE] initiating IKE_SA lab[1] to 194.226.121.150\n[ENC] generating IKE_SA_INIT request 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(HASH_ALG) N(REDIR_SUP) ]\n[NET] sending packet: from 172.19.0.2[500] to 194.226.121.150[500] (464 bytes)\n[NET] received packet: from 194.226.121.150[500] to 172.19.0.2[500] (437 bytes)\n[ENC] parsed IKE_SA_INIT response 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) CERTREQ ]\n[CFG] selected proposal: IKE:AES_CBC_256/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_2048\n[IKE] local host is behind NAT, sending keep alives\n[IKE] sending cert request for \"CN=mm-ipsec119-1791647119700-ca\"\n[IKE] authentication of 'mm-ipsec119-1791647119700.example' (myself) with RSA signature successful\n[IKE] sending end entity cert \"CN=mm-ipsec119-1791647119700-client\"\n[IKE] establishing CHILD_SA private{1}\n[ENC] generating IKE_AUTH request 1 [ IDi CERT CERTREQ IDr AUTH CPRQ(ADDR DNS) SA TSi TSr N(MOBIKE_SUP) N(NO_ADD_ADDR) N(EAP_ONLY) N(MSG_ID_SYN_SUP) ]\n[ENC] splitting IKE message (1440 bytes) into 2 fragments\n[ENC] generating IKE_AUTH request 1 [ EF(1/2) ]\n[ENC] generating IKE_AUTH request 1 [ EF(2/2) ]\n[NET] sending packet: from 172.19.0.2[4500] to 194.226.121.150[4500] (1236 bytes)\n[NET] sending packet: from 172.19.0.2[4500] to 194.226.121.150[4500] (276 bytes)\n[NET] received packet: from 194.226.121.150[4500] to 172.19.0.2[4500] (272 bytes)\n[ENC] parsed IKE_AUTH response 1 [ N(AUTH_FAILED) ]\n[IKE] received AUTHENTICATION_FAILED notify error\n\n\n1 !== 0\n",
"dockerCleanup": true,
"credentialFilesRemoved": true
},
"fqdn": {
"date": "2026-10-10",
"block": "12.5.119",
"name": "mm-ipsec119-1791647456912",
"linux": [],
"cleanup": [
{
"serverId": 1,
"/system/logging": true,
"/ip/ipsec/identity": true,
"/ip/ipsec/peer": true,
"/ip/ipsec/policy": true,
"/ip/ipsec/policy/group": true,
"/ip/ipsec/mode-config": true,
"/ip/ipsec/proposal": true,
"/ip/ipsec/profile": true,
"/certificate": true,
"/file": true,
"/ip/address": true,
"/ip/route": true,
"/ip/firewall/nat": true,
"/ip/pool": true,
"/interface/bridge": true,
"/ipv6/address": true
},
{
"serverId": 2,
"/system/logging": true,
"/ip/ipsec/identity": true,
"/ip/ipsec/peer": true,
"/ip/ipsec/policy": true,
"/ip/ipsec/policy/group": true,
"/ip/ipsec/mode-config": true,
"/ip/ipsec/proposal": true,
"/ip/ipsec/profile": true,
"/certificate": true,
"/file": true,
"/ip/address": true,
"/ip/route": true,
"/ip/firewall/nat": true,
"/ip/pool": true,
"/interface/bridge": true,
"/ipv6/address": true
}
],
"clientImage": "sha256:c9d01c801de88b2349f685c1cb631e67a8b1c697439a00148d4045c23a584054",
"error": "IKE initiation failed: ad - curl_plugin_create not found and no plugin file available\ninitiate failed: establishing CHILD_SA 'private' failed\n[IKE] initiating IKE_SA lab[1] to 194.226.121.150\n[ENC] generating IKE_SA_INIT request 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(HASH_ALG) N(REDIR_SUP) ]\n[NET] sending packet: from 172.19.0.2[500] to 194.226.121.150[500] (464 bytes)\n[NET] received packet: from 194.226.121.150[500] to 172.19.0.2[500] (437 bytes)\n[ENC] parsed IKE_SA_INIT response 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) CERTREQ ]\n[CFG] selected proposal: IKE:AES_CBC_256/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_2048\n[IKE] local host is behind NAT, sending keep alives\n[IKE] sending cert request for \"CN=mm-ipsec119-1791647456912-ca\"\n[IKE] authentication of 'mm-ipsec119-1791647456912.example' (myself) with RSA signature successful\n[IKE] sending end entity cert \"CN=mm-ipsec119-1791647456912-client\"\n[IKE] establishing CHILD_SA private{1}\n[ENC] generating IKE_AUTH request 1 [ IDi CERT CERTREQ IDr AUTH CPRQ(ADDR DNS) SA TSi TSr N(MOBIKE_SUP) N(NO_ADD_ADDR) N(EAP_ONLY) N(MSG_ID_SYN_SUP) ]\n[ENC] splitting IKE message (1440 bytes) into 2 fragments\n[ENC] generating IKE_AUTH request 1 [ EF(1/2) ]\n[ENC] generating IKE_AUTH request 1 [ EF(2/2) ]\n[NET] sending packet: from 172.19.0.2[4500] to 194.226.121.150[4500] (1236 bytes)\n[NET] sending packet: from 172.19.0.2[4500] to 194.226.121.150[4500] (276 bytes)\n[NET] received packet: from 194.226.121.150[4500] to 172.19.0.2[4500] (256 bytes)\n[ENC] parsed IKE_AUTH response 1 [ N(AUTH_FAILED) ]\n[IKE] received AUTHENTICATION_FAILED notify error\n\n\n1 !== 0\n",
"routerAuthLogs": [
"generated CA certificate: mm-ipsec119-1791647456912-ca",
"generated certificate 73CAEE2AB860519E:194.226.121.150::::::IP:194.226.121.150 rsa-size:2048 usage:80000005 valid:2 skid:[hash] for CA mm-ipsec119-1791647456912-ca",
"generated certificate 6EC70FF67A4A34A1:mm-ipsec119-1791647456912-client::::::DNS:mm-ipsec119-1791647456912.example rsa-size:2048 usage:40000005 valid:2 skid:[hash] for CA mm-ipsec119-1791647456912-ca",
"ipsec identity added by api:admin@:: (*A = /ip ipsec identity add auth-method=digital-signature certificate=mm-ipsec119-1791647456912-server comment=mm-ipsec119-1791647456912 generate-policy=port-strict match-by=certificate mode-config=mm-ipsec119-1791647456912 my-id=address:194.226.121.150 peer=mm-ipsec119-1791647456912 policy-template-group=mm-ipsec119-1791647456912 remote-certificate=mm-ipsec119-1791647456912-client remote-id=fqdn:mm-ipsec119-1791647456912.example)",
"mm-ipsec119-1791647456912: => certificate (size 0x36f)",
"identity not found for responder: ADDR4:194.226.121.150 peer: FQDN:mm-ipsec119-1791647456912.example"
],
"dockerCleanup": true,
"credentialFilesRemoved": true
},
"manualDn": {
"date": "2026-10-10",
"block": "12.5.119",
"name": "mm-ipsec119-1791647684917",
"linux": [],
"cleanup": [
{
"serverId": 1,
"/system/logging": true,
"/ip/ipsec/identity": true,
"/ip/ipsec/peer": true,
"/ip/ipsec/policy": true,
"/ip/ipsec/policy/group": true,
"/ip/ipsec/mode-config": true,
"/ip/ipsec/proposal": true,
"/ip/ipsec/profile": true,
"/certificate": true,
"/file": true,
"/ip/address": true,
"/ip/route": true,
"/ip/firewall/nat": true,
"/ip/pool": true,
"/interface/bridge": true,
"/ipv6/address": true
},
{
"serverId": 2,
"/system/logging": true,
"/ip/ipsec/identity": true,
"/ip/ipsec/peer": true,
"/ip/ipsec/policy": true,
"/ip/ipsec/policy/group": true,
"/ip/ipsec/mode-config": true,
"/ip/ipsec/proposal": true,
"/ip/ipsec/profile": true,
"/certificate": true,
"/file": true,
"/ip/address": true,
"/ip/route": true,
"/ip/firewall/nat": true,
"/ip/pool": true,
"/interface/bridge": true,
"/ipv6/address": true
}
],
"clientImage": "sha256:c9d01c801de88b2349f685c1cb631e67a8b1c697439a00148d4045c23a584054",
"error": "IKE initiation failed: - curl_plugin_create not found and no plugin file available\ninitiate failed: establishing CHILD_SA 'private' failed\n[IKE] initiating IKE_SA lab[1] to 194.226.121.150\n[ENC] generating IKE_SA_INIT request 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(HASH_ALG) N(REDIR_SUP) ]\n[NET] sending packet: from 172.19.0.2[500] to 194.226.121.150[500] (464 bytes)\n[NET] received packet: from 194.226.121.150[500] to 172.19.0.2[500] (437 bytes)\n[ENC] parsed IKE_SA_INIT response 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) CERTREQ ]\n[CFG] selected proposal: IKE:AES_CBC_256/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_2048\n[IKE] local host is behind NAT, sending keep alives\n[IKE] sending cert request for \"CN=mm-ipsec119-1791647684917-ca\"\n[IKE] authentication of 'CN=mm-ipsec119-1791647684917-client' (myself) with RSA signature successful\n[IKE] sending end entity cert \"CN=mm-ipsec119-1791647684917-client\"\n[IKE] establishing CHILD_SA private{1}\n[ENC] generating IKE_AUTH request 1 [ IDi CERT CERTREQ IDr AUTH CPRQ(ADDR DNS) SA TSi TSr N(MOBIKE_SUP) N(NO_ADD_ADDR) N(EAP_ONLY) N(MSG_ID_SYN_SUP) ]\n[ENC] splitting IKE message (1472 bytes) into 2 fragments\n[ENC] generating IKE_AUTH request 1 [ EF(1/2) ]\n[ENC] generating IKE_AUTH request 1 [ EF(2/2) ]\n[NET] sending packet: from 172.19.0.2[4500] to 194.226.121.150[4500] (1236 bytes)\n[NET] sending packet: from 172.19.0.2[4500] to 194.226.121.150[4500] (308 bytes)\n[NET] received packet: from 194.226.121.150[4500] to 172.19.0.2[4500] (224 bytes)\n[ENC] parsed IKE_AUTH response 1 [ N(AUTH_FAILED) ]\n[IKE] received AUTHENTICATION_FAILED notify error\n\n\n1 !== 0\n",
"routerAuthLogs": [
"generated CA certificate: mm-ipsec119-1791647684917-ca",
"generated certificate 1A59BFB767930A62:194.226.121.150::::::IP:194.226.121.150 rsa-size:2048 usage:80000005 valid:2 skid:[hash] for CA mm-ipsec119-1791647684917-ca",
"generated certificate 5221DA522AA8CD0D:mm-ipsec119-1791647684917-client::::::DNS:mm-ipsec119-1791647684917.example rsa-size:2048 usage:40000005 valid:2 skid:[hash] for CA mm-ipsec119-1791647684917-ca",
"ipsec identity added by api:admin@:: (*A = /ip ipsec identity add auth-method=digital-signature certificate=mm-ipsec119-1791647684917-server comment=mm-ipsec119-1791647684917 generate-policy=port-strict match-by=certificate mode-config=mm-ipsec119-1791647684917 peer=mm-ipsec119-1791647684917 policy-template-group=mm-ipsec119-1791647684917 remote-certificate=mm-ipsec119-1791647684917-client)",
"mm-ipsec119-1791647684917: => certificate (size 0x36f)"
],
"dockerCleanup": true,
"credentialFilesRemoved": true
},
"pinnedServer": {
"date": "2026-10-10",
"block": "12.5.119",
"name": "mm-ipsec119-1791648365867",
"linux": [],
"cleanup": [
{
"serverId": 1,
"/system/logging": true,
"/ip/ipsec/identity": true,
"/ip/ipsec/peer": true,
"/ip/ipsec/policy": true,
"/ip/ipsec/policy/group": true,
"/ip/ipsec/mode-config": true,
"/ip/ipsec/proposal": true,
"/ip/ipsec/profile": true,
"/certificate": true,
"/file": true,
"/ip/address": true,
"/ip/route": true,
"/ip/firewall/nat": true,
"/ip/pool": true,
"/interface/bridge": true,
"/ipv6/address": true
},
{
"serverId": 2,
"/system/logging": true,
"/ip/ipsec/identity": true,
"/ip/ipsec/peer": true,
"/ip/ipsec/policy": true,
"/ip/ipsec/policy/group": true,
"/ip/ipsec/mode-config": true,
"/ip/ipsec/proposal": true,
"/ip/ipsec/profile": true,
"/certificate": true,
"/file": true,
"/ip/address": true,
"/ip/route": true,
"/ip/firewall/nat": true,
"/ip/pool": true,
"/interface/bridge": true,
"/ipv6/address": true
}
],
"clientImage": "sha256:c9d01c801de88b2349f685c1cb631e67a8b1c697439a00148d4045c23a584054",
"error": "IKE initiation failed: load - curl_plugin_create not found and no plugin file available\ninitiate failed: establishing CHILD_SA 'private' failed\n[IKE] initiating IKE_SA lab[1] to 194.226.121.150\n[ENC] generating IKE_SA_INIT request 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(HASH_ALG) N(REDIR_SUP) ]\n[NET] sending packet: from 172.19.0.2[500] to 194.226.121.150[500] (464 bytes)\n[NET] received packet: from 194.226.121.150[500] to 172.19.0.2[500] (437 bytes)\n[ENC] parsed IKE_SA_INIT response 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) CERTREQ ]\n[CFG] selected proposal: IKE:AES_CBC_256/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_2048\n[IKE] local host is behind NAT, sending keep alives\n[IKE] sending cert request for \"CN=mm-ipsec119-1791648365867-ca\"\n[IKE] authentication of 'CN=mm-ipsec119-1791648365867-client' (myself) with RSA signature successful\n[IKE] sending end entity cert \"CN=mm-ipsec119-1791648365867-client\"\n[IKE] establishing CHILD_SA private{1}\n[ENC] generating IKE_AUTH request 1 [ IDi CERT CERTREQ AUTH CPRQ(ADDR DNS) SA TSi TSr N(MOBIKE_SUP) N(NO_ADD_ADDR) N(EAP_ONLY) N(MSG_ID_SYN_SUP) ]\n[ENC] splitting IKE message (1440 bytes) into 2 fragments\n[ENC] generating IKE_AUTH request 1 [ EF(1/2) ]\n[ENC] generating IKE_AUTH request 1 [ EF(2/2) ]\n[NET] sending packet: from 172.19.0.2[4500] to 194.226.121.150[4500] (1236 bytes)\n[NET] sending packet: from 172.19.0.2[4500] to 194.226.121.150[4500] (276 bytes)\n[NET] received packet: from 194.226.121.150[4500] to 172.19.0.2[4500] (240 bytes)\n[ENC] parsed IKE_AUTH response 1 [ N(AUTH_FAILED) ]\n[IKE] received AUTHENTICATION_FAILED notify error\n\n\n1 !== 0\n",
"routerAuthLogs": [
"ipsec identity added by api:admin@:: (*A = /ip ipsec identity add auth-method=digital-signature certificate=mm-ipsec119-1791648365867-server comment=mm-ipsec119-1791648365867 generate-policy=port-strict match-by=certificate mode-config=mm-ipsec119-1791648365867 peer=mm-ipsec119-1791648365867 policy-template-group=mm-ipsec119-1791648365867 remote-certificate=mm-ipsec119-1791648365867-client)",
"mm-ipsec119-1791648365867: => certificate (size 0x36f)",
"peer's ID does not match certificate",
"peer's ID does not match certificate",
"peer failed to authorize: mm-ipsec119-1791648365867 161.104.46.222-194.226.121.150 899db11c475c6cdd:693c9339b9312cce"
],
"dockerCleanup": true,
"credentialFilesRemoved": true
}
},
"client": {
"image": "mmapp-test/strongswan:accept119",
"debianPackages": "6.0.1-6+deb13u7",
"networkNamespaces": 2,
"capability": "NET_ADMIN",
"sharedClientCertificate": true,
"serverCertificatePinned": true,
"localId": "Derived directly from certificate; manual FQDN/DN failed",
"crypto": "AES256/SHA256/MODP2048; certificate pubkey authentication"
},
"bounds": [
"Two sessions with one certificate-derived DN; not all IKE ID types",
"FQDN/ADDR4/manual DN interop remains unaccepted; exact encoding cause not proven",
"Two Linux Docker namespaces use one public WAN/NAT; not physical redundancy or desktop/mobile client OS acceptance",
"Ping3/3 each is short data-plane check, not performance/SLA/rekey test",
"First cleanup comment assumption failed; scoped recovery removed verified own IDs/files before retries"
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB