chore(ux): подтвердить настоящий IPv6 IPFIX и восстановление стенда

This commit is contained in:
Denozordec committed 2026-10-11 17:11:32 +07:00
1 parent 11813179a7
commit d569932b2a
10 files changed
+1147 -12

No files matched your search

+16 -2
View File
@@ -1,6 +1,6 @@
# UX/UI: протокол внешней приёмки 12.5
Актуальное продолжение 2026-10-11: завершён12.5.144 — исправлен dual-stack IPFIX при zero IPv4 placeholders; реальный UDP→worker→SQL passed:6 IPv6 rows,25200B/42 packets raw/minute,7200B/12 Internet facts.21 local scripts exit0 с честными skips;984 outputs matched. Backend ux-ipfix144/frontend ux-traffic141. Далее145 — native RouterOS IPv6 exporter и populated API/UI, если конфигурация стенда позволяет.12.5 открыт.
Актуальное продолжение 2026-10-11: завершён12.5.145 — native CHR IPv6 ULA→IPFIX→production worker/SQL/API→frontend Sessions подтверждён; Ping5/5×2, PC/mobile DOM/API/no-overflow passed. Initial cleanup GET401 сохранён, recovery удалил2 exact-owned objects;12 collections×2/configs restored, own DB/container/ports/tunnel удалены. Backend ux-ipfix144/frontend ux-traffic141. Далее146 — понятные ICMPv6/IPv6 endpoint labels;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).
@@ -696,7 +696,7 @@ flowchart LR
## 12.5.77 — основной блок IPsec (2026-10-09)
Актуальное продолжение 2026-10-11: завершён12.5.144 — исправлен dual-stack IPFIX при zero IPv4 placeholders; реальный UDP→worker→SQL passed:6 IPv6 rows,25200B/42 packets raw/minute,7200B/12 Internet facts.21 local scripts exit0 с честными skips;984 outputs matched. Backend ux-ipfix144/frontend ux-traffic141. Далее145 — native RouterOS IPv6 exporter и populated API/UI, если конфигурация стенда позволяет.12.5 открыт.
Актуальное продолжение 2026-10-11: завершён12.5.145 — native CHR IPv6 ULA→IPFIX→production worker/SQL/API→frontend Sessions подтверждён; Ping5/5×2, PC/mobile DOM/API/no-overflow passed. Initial cleanup GET401 сохранён, recovery удалил2 exact-owned objects;12 collections×2/configs restored, own DB/container/ports/tunnel удалены. Backend ux-ipfix144/frontend ux-traffic141. Далее146 — понятные ICMPv6/IPv6 endpoint labels;12.5 открыт.
Подробный объём, протоколы, схема и ограничения: [12.5.77 в журнале](ux-ui-progress.md).
@@ -1553,3 +1553,17 @@ Unknown0/0 policy основана на наблюдённом live ответе
Backend ux-ipfix144 развёрнут, health healthy; frontend ux-traffic141 сохранён. Live traffic1440/320 passed без initial srv1/400, page errors/overflow. Rollback env/image оставлены. [Все попытки и границы](ux-ui/acceptance/ipv6-ipfix-worker-sql-2026-10-11.json), [browser smoke](ux-ui/acceptance/traffic-ipfix-smoke-2026-10-11.json).
Это real UDP/worker/SQL path с синтетическим exporter через IPv4 loopback transport, не native RouterOS IPv6 export/outer transport и не maximum throughput. CHR configuration/passwords не менялись. Следующий145 — проверить возможность native RouterOS IPv6 exporter и populated API/UI на собственных objects/DB.12.5 открыт.
## 12.5.145 — настоящий RouterOS IPv6 IPFIX и заполненный интерфейс (2026-10-11)
Оба CHR доступны с прежними credentials, RouterOS7.24.5. Исходно Traffic Flow disabled/targets empty. Созданы собственные GRE-пара с allow-fast-path=false и fd00:145:1::1/2/64, advertise=no. CHR1 временно экспортирует IPFIX только своего GRE, с short timeouts/one owned target. Native Ping прошёл5/5 в обе стороны; CPU/input-output path и IPv6 support сверены с [официальным Traffic Flow manual](https://manual.mikrotik.com/docs/diagnostics-monitoring-and-troubleshooting/traffic-flow/), версия manual7.26, фактическая проверка7.24.5.
На Debian запущен отдельный application/production collector worker в own temporary PostgreSQL DB. Скопирована конфигурация только CHR1 без публикации credentials; worker слушает UDP48145, HTTP API доступен только через localhost18145/SSH. Native RouterOS sender, не synthetic fixture, передал IPv6 IPFIX records: production API содержит реальные ULA source/destination и positive bytes/packets. Deployed frontend ux-traffic141 проверен через явный relay реальных ответов отдельного backend: Sessions DOM содержит IPv6, PC1440/mobile320 API200/pageerror0/no document overflow. Screenshots сохраняют frame/current scroll position, не все строки одновременно. Initial UI attempts искали адрес на Applications summary и ошибочно выбирали button вместо actual tab; исправлено только обращение к существующей вкладке.
Тест не использовал main DB для seeded fixtures; обычный background polling главного приложения оставался активным, поэтому абсолютное отсутствие background writes не заявляется. IPsec/WireGuard keys, пароли, исходные public/default/metadata routes не менялись. Native objects/GRE/IPv6 inputs принадлежат одному unique tag.
Автоматическая очистка восстановила Traffic Flow и удалила objects CHR1, но GET собственного GRE по ID на CHR2 вернул401. Child drain прошёл, own DB удалена. Read-only resource и полный каталог обоих CHR снова доступны с теми же credentials; причина одиночного GET401 не установлена, пароль не менялся. Recovery по свежему полному каталогу проверил exact comment/name/local-remote/address и отсутствие IDs в baseline; удалены только два оставшихся objects CHR2 обычным DELETE. Все12 collection projections×2 и Traffic Flow/IPFIX fields/IPv6 settings совпали с исходными. Initial failure и recovery сохранены, не заменены гладким success.
Own container удалён после проверки exact container ID; UDP48145/HTTP18145 и отдельный SSH tunnel закрыты, основной стенд backend ux-ipfix144/frontend ux-traffic141 healthy. Начальный неверный host port81245 был отвергнут до запуска/изменений, исправлен18145. [Native/API/cleanup receipt](ux-ui/acceptance/native-ipv6-ipfix-2026-10-11.json), [UI receipt](ux-ui/acceptance/native-ipv6-ipfix-ui-2026-10-11.json), [PC screenshot](ux-ui/screens/native-ipv6-ipfix145-1440-2026-10-11.png), [mobile screenshot](ux-ui/screens/native-ipv6-ipfix145-320-2026-10-11.png).
Доказан IPv6 ULA inner/native IPFIX поверх IPv4 GRE/export transport, не public IPv6 WAN/outer или throughput/произвольные clients. На live UI ICMPv6 подписан numeric58, IPv6 endpoints с портом требуют однозначного bracket format; следующий146 — улучшить эти подписи, сохранив ReUI/Frame/base-nova.12.5 открыт.
+3 -3
View File
@@ -1,12 +1,12 @@
# План реализации UX/UI по пятичасовым окнам
Актуальное продолжение 2026-10-11: завершён12.5.144 — исправлен dual-stack IPFIX при zero IPv4 placeholders; реальный UDP→worker→SQL passed:6 IPv6 rows,25200B/42 packets raw/minute,7200B/12 Internet facts.21 local scripts exit0 с честными skips;984 outputs matched. Backend ux-ipfix144/frontend ux-traffic141. Далее145 — native RouterOS IPv6 exporter и populated API/UI, если конфигурация стенда позволяет.12.5 открыт.
Актуальное продолжение 2026-10-11: завершён12.5.145 — native CHR IPv6 ULA→IPFIX→production worker/SQL/API→frontend Sessions подтверждён; Ping5/5×2, PC/mobile DOM/API/no-overflow passed. Initial cleanup GET401 сохранён, recovery удалил2 exact-owned objects;12 collections×2/configs restored, own DB/container/ports/tunnel удалены. Backend ux-ipfix144/frontend ux-traffic141. Далее146 — понятные ICMPv6/IPv6 endpoint labels;12.5 открыт.
Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-10. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат.
## Актуальная точка продолжения — 2026-10-10
Актуальное продолжение 2026-10-11: завершён12.5.144 — исправлен dual-stack IPFIX при zero IPv4 placeholders; реальный UDP→worker→SQL passed:6 IPv6 rows,25200B/42 packets raw/minute,7200B/12 Internet facts.21 local scripts exit0 с честными skips;984 outputs matched. Backend ux-ipfix144/frontend ux-traffic141. Далее145 — native RouterOS IPv6 exporter и populated API/UI, если конфигурация стенда позволяет.12.5 открыт.
Актуальное продолжение 2026-10-11: завершён12.5.145 — native CHR IPv6 ULA→IPFIX→production worker/SQL/API→frontend Sessions подтверждён; Ping5/5×2, PC/mobile DOM/API/no-overflow passed. Initial cleanup GET401 сохранён, recovery удалил2 exact-owned objects;12 collections×2/configs restored, own DB/container/ports/tunnel удалены. Backend ux-ipfix144/frontend ux-traffic141. Далее146 — понятные ICMPv6/IPv6 endpoint labels;12.5 открыт.
Этапы0–11 завершены в локальных границах журнала. История выполненных внешних блоков и доказательства сохранены в [журнале](ux-ui-stage-12.md) и [протоколе](ux-ui-external-acceptance.md). Реальная Telegram доставка, Portal SSO, multi-instance и оставшиеся профильные сетевые ограничения открыты.
@@ -371,6 +371,6 @@ flowchart LR
## 12.5.77 — основной блок IPsec (2026-10-09)
Актуальное продолжение 2026-10-11: завершён12.5.144 — исправлен dual-stack IPFIX при zero IPv4 placeholders; реальный UDP→worker→SQL passed:6 IPv6 rows,25200B/42 packets raw/minute,7200B/12 Internet facts.21 local scripts exit0 с честными skips;984 outputs matched. Backend ux-ipfix144/frontend ux-traffic141. Далее145 — native RouterOS IPv6 exporter и populated API/UI, если конфигурация стенда позволяет.12.5 открыт.
Актуальное продолжение 2026-10-11: завершён12.5.145 — native CHR IPv6 ULA→IPFIX→production worker/SQL/API→frontend Sessions подтверждён; Ping5/5×2, PC/mobile DOM/API/no-overflow passed. Initial cleanup GET401 сохранён, recovery удалил2 exact-owned objects;12 collections×2/configs restored, own DB/container/ports/tunnel удалены. Backend ux-ipfix144/frontend ux-traffic141. Далее146 — понятные ICMPv6/IPv6 endpoint labels;12.5 открыт.
Подробный объём, протоколы, схема и ограничения: [12.5.77 в журнале](ux-ui-progress.md).
+16 -2
View File
@@ -1,6 +1,6 @@
# UX/UI: журнал реализации
Актуальное продолжение 2026-10-11: завершён12.5.144 — исправлен dual-stack IPFIX при zero IPv4 placeholders; реальный UDP→worker→SQL passed:6 IPv6 rows,25200B/42 packets raw/minute,7200B/12 Internet facts.21 local scripts exit0 с честными skips;984 outputs matched. Backend ux-ipfix144/frontend ux-traffic141. Далее145 — native RouterOS IPv6 exporter и populated API/UI, если конфигурация стенда позволяет.12.5 открыт.
Актуальное продолжение 2026-10-11: завершён12.5.145 — native CHR IPv6 ULA→IPFIX→production worker/SQL/API→frontend Sessions подтверждён; Ping5/5×2, PC/mobile DOM/API/no-overflow passed. Initial cleanup GET401 сохранён, recovery удалил2 exact-owned objects;12 collections×2/configs restored, own DB/container/ports/tunnel удалены. Backend ux-ipfix144/frontend ux-traffic141. Далее146 — понятные ICMPv6/IPv6 endpoint labels;12.5 открыт.
Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md).
@@ -36,7 +36,21 @@
| 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–144 и ограничения ниже. Runtime backend ux-ipfix144/frontend ux-traffic141. |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–145 и ограничения ниже. Runtime backend ux-ipfix144/frontend ux-traffic141. |
## 12.5.145 — настоящий RouterOS IPv6 IPFIX и заполненный интерфейс (2026-10-11)
Оба CHR доступны с прежними credentials, RouterOS7.24.5. Исходно Traffic Flow disabled/targets empty. Созданы собственные GRE-пара с allow-fast-path=false и fd00:145:1::1/2/64, advertise=no. CHR1 временно экспортирует IPFIX только своего GRE, с short timeouts/one owned target. Native Ping прошёл5/5 в обе стороны; CPU/input-output path и IPv6 support сверены с [официальным Traffic Flow manual](https://manual.mikrotik.com/docs/diagnostics-monitoring-and-troubleshooting/traffic-flow/), версия manual7.26, фактическая проверка7.24.5.
На Debian запущен отдельный application/production collector worker в own temporary PostgreSQL DB. Скопирована конфигурация только CHR1 без публикации credentials; worker слушает UDP48145, HTTP API доступен только через localhost18145/SSH. Native RouterOS sender, не synthetic fixture, передал IPv6 IPFIX records: production API содержит реальные ULA source/destination и positive bytes/packets. Deployed frontend ux-traffic141 проверен через явный relay реальных ответов отдельного backend: Sessions DOM содержит IPv6, PC1440/mobile320 API200/pageerror0/no document overflow. Screenshots сохраняют frame/current scroll position, не все строки одновременно. Initial UI attempts искали адрес на Applications summary и ошибочно выбирали button вместо actual tab; исправлено только обращение к существующей вкладке.
Тест не использовал main DB для seeded fixtures; обычный background polling главного приложения оставался активным, поэтому абсолютное отсутствие background writes не заявляется. IPsec/WireGuard keys, пароли, исходные public/default/metadata routes не менялись. Native objects/GRE/IPv6 inputs принадлежат одному unique tag.
Автоматическая очистка восстановила Traffic Flow и удалила objects CHR1, но GET собственного GRE по ID на CHR2 вернул401. Child drain прошёл, own DB удалена. Read-only resource и полный каталог обоих CHR снова доступны с теми же credentials; причина одиночного GET401 не установлена, пароль не менялся. Recovery по свежему полному каталогу проверил exact comment/name/local-remote/address и отсутствие IDs в baseline; удалены только два оставшихся objects CHR2 обычным DELETE. Все12 collection projections×2 и Traffic Flow/IPFIX fields/IPv6 settings совпали с исходными. Initial failure и recovery сохранены, не заменены гладким success.
Own container удалён после проверки exact container ID; UDP48145/HTTP18145 и отдельный SSH tunnel закрыты, основной стенд backend ux-ipfix144/frontend ux-traffic141 healthy. Начальный неверный host port81245 был отвергнут до запуска/изменений, исправлен18145. [Native/API/cleanup receipt](ux-ui/acceptance/native-ipv6-ipfix-2026-10-11.json), [UI receipt](ux-ui/acceptance/native-ipv6-ipfix-ui-2026-10-11.json), [PC screenshot](ux-ui/screens/native-ipv6-ipfix145-1440-2026-10-11.png), [mobile screenshot](ux-ui/screens/native-ipv6-ipfix145-320-2026-10-11.png).
Доказан IPv6 ULA inner/native IPFIX поверх IPv4 GRE/export transport, не public IPv6 WAN/outer или throughput/произвольные clients. На live UI ICMPv6 подписан numeric58, IPv6 endpoints с портом требуют однозначного bracket format; следующий146 — улучшить эти подписи, сохранив ReUI/Frame/base-nova.12.5 открыт.
## 12.5.144 — IPv6 IPFIX через UDP, production worker и PostgreSQL (2026-10-11)
+17 -3
View File
@@ -1,6 +1,6 @@
# Оставшаяся внешняя приёмка — 2026-10-11
Это актуальная матрица после 12.5.144. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии.
Это актуальная матрица после 12.5.145. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии.
Стенд: Debian13/Compose, PostgreSQL18.6, два CHR RouterOS7.24.5. Backend `ux-ipfix144`, frontend `ux-traffic141`; production lab использует AUTH_REQUIRED=false. Подписанные JWT/RBAC проверялись в изолированных процессах. Все собственные объекты112 удалены, исходные13 коллекций×2 (включая logging/certificates/files/routes) проверены; пароли не менялись.
@@ -17,8 +17,8 @@
| 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 миграция не принята |
| Diagnostics/terminal | Allowlist/native reads, Ping/trace/route/MTU/DNS, actual avg-rtt, disabled guards, JWT/live PC/mobile89; real default memory tail/log limits/API/UI133 | DNS использует backend resolver; MTU — ограниченная оценка, не гарантированный максимум. Stop ожидания не доказывает остановку RouterOS команды; arbitrary CLI и physical disconnect не приняты |
| Portal/интеграции | Локальные и isolated JWT guards; UI/API error states в границах журналов | Настоящий Portal issuer/login/отзыв прав; RIPE SDK two-IP/no-fetch passed140, полный flow pipeline/local licensed MaxMind/S3/container/certificate jobs и Gitea delivery требуют отдельных тестовых endpoints/аккаунтов. Не отправлять сообщения и не публиковать релиз без соответствующего поручения |
| Общая приёмка | Локальная12.3.83; UI1244/context221/compiled984 parity139; профильные build/E2E/live проверки последующих блоков | Traffic initial live mock-id gate passed141; IPv6 special ranges/cache passed142; unknown RIPE coordinates passed143; IPv6 synthetic UDP/worker/SQL passed144; native exporter/API/UI145; последующие изменения проверять отдельно; scoped axe не означает полную WCAG сертификацию |
| Portal/интеграции | Локальные и isolated JWT guards; UI/API error states в границах журналов | Настоящий Portal issuer/login/отзыв прав; RIPE SDK two-IP/no-fetch passed140, native IPv6 ULA flow pipeline passed145 (IPv4 transport), public IPv6 WAN/local licensed MaxMind/S3/container/certificate jobs и Gitea delivery требуют отдельных тестовых endpoints/аккаунтов. Не отправлять сообщения и не публиковать релиз без соответствующего поручения |
| Общая приёмка | Локальная12.3.83; UI1244/context221/compiled984 parity139; профильные build/E2E/live проверки последующих блоков | Traffic initial live mock-id gate passed141; IPv6 special ranges/cache passed142; unknown RIPE coordinates passed143; IPv6 synthetic UDP/worker/SQL passed144; native CHR ULA/IPFIX/API/UI passed145; ICMPv6/IPv6 endpoint labels146; последующие изменения проверять отдельно; scoped axe не означает полную WCAG сертификацию |
Доказательства и точные ограничения: [полная история этапа12](ux-ui-stage-12.md), [внешний протокол](ux-ui-external-acceptance.md), [BGP93](ux-ui/acceptance/bgp-failover-2026-10-10.json), [паспорт стенда](ux-ui-test-server.md). Невыполненные пункты не являются все блокерами данного лабораторного сценария: для выпуска необходимо явно определить требуемые конфигурации и принять их либо согласовать ограничение.
@@ -468,3 +468,17 @@ Unknown0/0 policy основана на наблюдённом live ответе
Backend ux-ipfix144 развёрнут, health healthy; frontend ux-traffic141 сохранён. Live traffic1440/320 passed без initial srv1/400, page errors/overflow. Rollback env/image оставлены. [Все попытки и границы](ux-ui/acceptance/ipv6-ipfix-worker-sql-2026-10-11.json), [browser smoke](ux-ui/acceptance/traffic-ipfix-smoke-2026-10-11.json).
Это real UDP/worker/SQL path с синтетическим exporter через IPv4 loopback transport, не native RouterOS IPv6 export/outer transport и не maximum throughput. CHR configuration/passwords не менялись. Следующий145 — проверить возможность native RouterOS IPv6 exporter и populated API/UI на собственных objects/DB.12.5 открыт.
## 12.5.145 — настоящий RouterOS IPv6 IPFIX и заполненный интерфейс (2026-10-11)
Оба CHR доступны с прежними credentials, RouterOS7.24.5. Исходно Traffic Flow disabled/targets empty. Созданы собственные GRE-пара с allow-fast-path=false и fd00:145:1::1/2/64, advertise=no. CHR1 временно экспортирует IPFIX только своего GRE, с short timeouts/one owned target. Native Ping прошёл5/5 в обе стороны; CPU/input-output path и IPv6 support сверены с [официальным Traffic Flow manual](https://manual.mikrotik.com/docs/diagnostics-monitoring-and-troubleshooting/traffic-flow/), версия manual7.26, фактическая проверка7.24.5.
На Debian запущен отдельный application/production collector worker в own temporary PostgreSQL DB. Скопирована конфигурация только CHR1 без публикации credentials; worker слушает UDP48145, HTTP API доступен только через localhost18145/SSH. Native RouterOS sender, не synthetic fixture, передал IPv6 IPFIX records: production API содержит реальные ULA source/destination и positive bytes/packets. Deployed frontend ux-traffic141 проверен через явный relay реальных ответов отдельного backend: Sessions DOM содержит IPv6, PC1440/mobile320 API200/pageerror0/no document overflow. Screenshots сохраняют frame/current scroll position, не все строки одновременно. Initial UI attempts искали адрес на Applications summary и ошибочно выбирали button вместо actual tab; исправлено только обращение к существующей вкладке.
Тест не использовал main DB для seeded fixtures; обычный background polling главного приложения оставался активным, поэтому абсолютное отсутствие background writes не заявляется. IPsec/WireGuard keys, пароли, исходные public/default/metadata routes не менялись. Native objects/GRE/IPv6 inputs принадлежат одному unique tag.
Автоматическая очистка восстановила Traffic Flow и удалила objects CHR1, но GET собственного GRE по ID на CHR2 вернул401. Child drain прошёл, own DB удалена. Read-only resource и полный каталог обоих CHR снова доступны с теми же credentials; причина одиночного GET401 не установлена, пароль не менялся. Recovery по свежему полному каталогу проверил exact comment/name/local-remote/address и отсутствие IDs в baseline; удалены только два оставшихся objects CHR2 обычным DELETE. Все12 collection projections×2 и Traffic Flow/IPFIX fields/IPv6 settings совпали с исходными. Initial failure и recovery сохранены, не заменены гладким success.
Own container удалён после проверки exact container ID; UDP48145/HTTP18145 и отдельный SSH tunnel закрыты, основной стенд backend ux-ipfix144/frontend ux-traffic141 healthy. Начальный неверный host port81245 был отвергнут до запуска/изменений, исправлен18145. [Native/API/cleanup receipt](ux-ui/acceptance/native-ipv6-ipfix-2026-10-11.json), [UI receipt](ux-ui/acceptance/native-ipv6-ipfix-ui-2026-10-11.json), [PC screenshot](ux-ui/screens/native-ipv6-ipfix145-1440-2026-10-11.png), [mobile screenshot](ux-ui/screens/native-ipv6-ipfix145-320-2026-10-11.png).
Доказан IPv6 ULA inner/native IPFIX поверх IPv4 GRE/export transport, не public IPv6 WAN/outer или throughput/произвольные clients. На live UI ICMPv6 подписан numeric58, IPv6 endpoints с портом требуют однозначного bracket format; следующий146 — улучшить эти подписи, сохранив ReUI/Frame/base-nova.12.5 открыт.
+15 -1
View File
@@ -1,6 +1,6 @@
# Этап 12: итоговая приёмка UX/UI
Актуальное продолжение 2026-10-11: завершён12.5.144 — исправлен dual-stack IPFIX при zero IPv4 placeholders; реальный UDP→worker→SQL passed:6 IPv6 rows,25200B/42 packets raw/minute,7200B/12 Internet facts.21 local scripts exit0 с честными skips;984 outputs matched. Backend ux-ipfix144/frontend ux-traffic141. Далее145 — native RouterOS IPv6 exporter и populated API/UI, если конфигурация стенда позволяет.12.5 открыт.
Актуальное продолжение 2026-10-11: завершён12.5.145 — native CHR IPv6 ULA→IPFIX→production worker/SQL/API→frontend Sessions подтверждён; Ping5/5×2, PC/mobile DOM/API/no-overflow passed. Initial cleanup GET401 сохранён, recovery удалил2 exact-owned objects;12 collections×2/configs restored, own DB/container/ports/tunnel удалены. Backend ux-ipfix144/frontend ux-traffic141. Далее146 — понятные ICMPv6/IPv6 endpoint labels;12.5 открыт.
План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push.
@@ -2858,3 +2858,17 @@ Unknown0/0 policy основана на наблюдённом live ответе
Backend ux-ipfix144 развёрнут, health healthy; frontend ux-traffic141 сохранён. Live traffic1440/320 passed без initial srv1/400, page errors/overflow. Rollback env/image оставлены. [Все попытки и границы](ux-ui/acceptance/ipv6-ipfix-worker-sql-2026-10-11.json), [browser smoke](ux-ui/acceptance/traffic-ipfix-smoke-2026-10-11.json).
Это real UDP/worker/SQL path с синтетическим exporter через IPv4 loopback transport, не native RouterOS IPv6 export/outer transport и не maximum throughput. CHR configuration/passwords не менялись. Следующий145 — проверить возможность native RouterOS IPv6 exporter и populated API/UI на собственных objects/DB.12.5 открыт.
## 12.5.145 — настоящий RouterOS IPv6 IPFIX и заполненный интерфейс (2026-10-11)
Оба CHR доступны с прежними credentials, RouterOS7.24.5. Исходно Traffic Flow disabled/targets empty. Созданы собственные GRE-пара с allow-fast-path=false и fd00:145:1::1/2/64, advertise=no. CHR1 временно экспортирует IPFIX только своего GRE, с short timeouts/one owned target. Native Ping прошёл5/5 в обе стороны; CPU/input-output path и IPv6 support сверены с [официальным Traffic Flow manual](https://manual.mikrotik.com/docs/diagnostics-monitoring-and-troubleshooting/traffic-flow/), версия manual7.26, фактическая проверка7.24.5.
На Debian запущен отдельный application/production collector worker в own temporary PostgreSQL DB. Скопирована конфигурация только CHR1 без публикации credentials; worker слушает UDP48145, HTTP API доступен только через localhost18145/SSH. Native RouterOS sender, не synthetic fixture, передал IPv6 IPFIX records: production API содержит реальные ULA source/destination и positive bytes/packets. Deployed frontend ux-traffic141 проверен через явный relay реальных ответов отдельного backend: Sessions DOM содержит IPv6, PC1440/mobile320 API200/pageerror0/no document overflow. Screenshots сохраняют frame/current scroll position, не все строки одновременно. Initial UI attempts искали адрес на Applications summary и ошибочно выбирали button вместо actual tab; исправлено только обращение к существующей вкладке.
Тест не использовал main DB для seeded fixtures; обычный background polling главного приложения оставался активным, поэтому абсолютное отсутствие background writes не заявляется. IPsec/WireGuard keys, пароли, исходные public/default/metadata routes не менялись. Native objects/GRE/IPv6 inputs принадлежат одному unique tag.
Автоматическая очистка восстановила Traffic Flow и удалила objects CHR1, но GET собственного GRE по ID на CHR2 вернул401. Child drain прошёл, own DB удалена. Read-only resource и полный каталог обоих CHR снова доступны с теми же credentials; причина одиночного GET401 не установлена, пароль не менялся. Recovery по свежему полному каталогу проверил exact comment/name/local-remote/address и отсутствие IDs в baseline; удалены только два оставшихся objects CHR2 обычным DELETE. Все12 collection projections×2 и Traffic Flow/IPFIX fields/IPv6 settings совпали с исходными. Initial failure и recovery сохранены, не заменены гладким success.
Own container удалён после проверки exact container ID; UDP48145/HTTP18145 и отдельный SSH tunnel закрыты, основной стенд backend ux-ipfix144/frontend ux-traffic141 healthy. Начальный неверный host port81245 был отвергнут до запуска/изменений, исправлен18145. [Native/API/cleanup receipt](ux-ui/acceptance/native-ipv6-ipfix-2026-10-11.json), [UI receipt](ux-ui/acceptance/native-ipv6-ipfix-ui-2026-10-11.json), [PC screenshot](ux-ui/screens/native-ipv6-ipfix145-1440-2026-10-11.png), [mobile screenshot](ux-ui/screens/native-ipv6-ipfix145-320-2026-10-11.png).
Доказан IPv6 ULA inner/native IPFIX поверх IPv4 GRE/export transport, не public IPv6 WAN/outer или throughput/произвольные clients. На live UI ICMPv6 подписан numeric58, IPv6 endpoints с портом требуют однозначного bracket format; следующий146 — улучшить эти подписи, сохранив ReUI/Frame/base-nova.12.5 открыт.
+15 -1
View File
@@ -1,6 +1,6 @@
# Тестовый сервер UX/UI — 2026-10-10
Сервер161.104.46.222: завершён12.5.144 — исправлен dual-stack IPFIX при zero IPv4 placeholders; реальный UDP→worker→SQL passed:6 IPv6 rows,25200B/42 packets raw/minute,7200B/12 Internet facts.21 local scripts exit0 с честными skips;984 outputs matched. Backend ux-ipfix144/frontend ux-traffic141. Далее145 — native RouterOS IPv6 exporter и populated API/UI, если конфигурация стенда позволяет.12.5 открыт.
Сервер161.104.46.222: завершён12.5.145 — native CHR IPv6 ULA→IPFIX→production worker/SQL/API→frontend Sessions подтверждён; Ping5/5×2, PC/mobile DOM/API/no-overflow passed. Initial cleanup GET401 сохранён, recovery удалил2 exact-owned objects;12 collections×2/configs restored, own DB/container/ports/tunnel удалены. Backend ux-ipfix144/frontend ux-traffic141. Далее146 — понятные ICMPv6/IPv6 endpoint labels;12.5 открыт.
| Параметр | Проверенное состояние |
| --- | --- |
@@ -1284,3 +1284,17 @@ Unknown0/0 policy основана на наблюдённом live ответе
Backend ux-ipfix144 развёрнут, health healthy; frontend ux-traffic141 сохранён. Live traffic1440/320 passed без initial srv1/400, page errors/overflow. Rollback env/image оставлены. [Все попытки и границы](ux-ui/acceptance/ipv6-ipfix-worker-sql-2026-10-11.json), [browser smoke](ux-ui/acceptance/traffic-ipfix-smoke-2026-10-11.json).
Это real UDP/worker/SQL path с синтетическим exporter через IPv4 loopback transport, не native RouterOS IPv6 export/outer transport и не maximum throughput. CHR configuration/passwords не менялись. Следующий145 — проверить возможность native RouterOS IPv6 exporter и populated API/UI на собственных objects/DB.12.5 открыт.
## 12.5.145 — настоящий RouterOS IPv6 IPFIX и заполненный интерфейс (2026-10-11)
Оба CHR доступны с прежними credentials, RouterOS7.24.5. Исходно Traffic Flow disabled/targets empty. Созданы собственные GRE-пара с allow-fast-path=false и fd00:145:1::1/2/64, advertise=no. CHR1 временно экспортирует IPFIX только своего GRE, с short timeouts/one owned target. Native Ping прошёл5/5 в обе стороны; CPU/input-output path и IPv6 support сверены с [официальным Traffic Flow manual](https://manual.mikrotik.com/docs/diagnostics-monitoring-and-troubleshooting/traffic-flow/), версия manual7.26, фактическая проверка7.24.5.
На Debian запущен отдельный application/production collector worker в own temporary PostgreSQL DB. Скопирована конфигурация только CHR1 без публикации credentials; worker слушает UDP48145, HTTP API доступен только через localhost18145/SSH. Native RouterOS sender, не synthetic fixture, передал IPv6 IPFIX records: production API содержит реальные ULA source/destination и positive bytes/packets. Deployed frontend ux-traffic141 проверен через явный relay реальных ответов отдельного backend: Sessions DOM содержит IPv6, PC1440/mobile320 API200/pageerror0/no document overflow. Screenshots сохраняют frame/current scroll position, не все строки одновременно. Initial UI attempts искали адрес на Applications summary и ошибочно выбирали button вместо actual tab; исправлено только обращение к существующей вкладке.
Тест не использовал main DB для seeded fixtures; обычный background polling главного приложения оставался активным, поэтому абсолютное отсутствие background writes не заявляется. IPsec/WireGuard keys, пароли, исходные public/default/metadata routes не менялись. Native objects/GRE/IPv6 inputs принадлежат одному unique tag.
Автоматическая очистка восстановила Traffic Flow и удалила objects CHR1, но GET собственного GRE по ID на CHR2 вернул401. Child drain прошёл, own DB удалена. Read-only resource и полный каталог обоих CHR снова доступны с теми же credentials; причина одиночного GET401 не установлена, пароль не менялся. Recovery по свежему полному каталогу проверил exact comment/name/local-remote/address и отсутствие IDs в baseline; удалены только два оставшихся objects CHR2 обычным DELETE. Все12 collection projections×2 и Traffic Flow/IPFIX fields/IPv6 settings совпали с исходными. Initial failure и recovery сохранены, не заменены гладким success.
Own container удалён после проверки exact container ID; UDP48145/HTTP18145 и отдельный SSH tunnel закрыты, основной стенд backend ux-ipfix144/frontend ux-traffic141 healthy. Начальный неверный host port81245 был отвергнут до запуска/изменений, исправлен18145. [Native/API/cleanup receipt](ux-ui/acceptance/native-ipv6-ipfix-2026-10-11.json), [UI receipt](ux-ui/acceptance/native-ipv6-ipfix-ui-2026-10-11.json), [PC screenshot](ux-ui/screens/native-ipv6-ipfix145-1440-2026-10-11.png), [mobile screenshot](ux-ui/screens/native-ipv6-ipfix145-320-2026-10-11.png).
Доказан IPv6 ULA inner/native IPFIX поверх IPv4 GRE/export transport, не public IPv6 WAN/outer или throughput/произвольные clients. На live UI ICMPv6 подписан numeric58, IPv6 endpoints с портом требуют однозначного bracket format; следующий146 — улучшить эти подписи, сохранив ReUI/Frame/base-nova.12.5 открыт.
@@ -0,0 +1,910 @@
{
"date": "2026-10-11",
"block": "12.5.145",
"runtime": {
"backend": "ux-ipfix144",
"frontend": "ux-traffic141",
"backendHealthy": true
},
"native": {
"date": "2026-10-11",
"block": "12.5.145",
"name": "mm-flow145-1791712666652",
"runtime": {
"backend": "ux-ipfix144",
"frontend": "ux-traffic141"
},
"devices": [
{
"serverId": 1,
"host": "194.226.121.150",
"version": "7.24.5 (stable)",
"reachable": true
},
{
"serverId": 2,
"host": "104.165.244.7",
"version": "7.24.5 (stable)",
"reachable": true
}
],
"pings": [
{
"serverId": 1,
"sent": 5,
"received": 5,
"rows": [
{
"avg-rtt": "54ms548us",
"host": "fd00:145:1::2",
"max-rtt": "54ms548us",
"min-rtt": "54ms548us",
"packet-loss": "0",
"received": "1",
"sent": "1",
"seq": "0",
"size": "128",
"status": "echo reply",
"time": "54ms548us",
"ttl": "64"
},
{
"avg-rtt": "54ms427us",
"host": "fd00:145:1::2",
"max-rtt": "54ms548us",
"min-rtt": "54ms307us",
"packet-loss": "0",
"received": "2",
"sent": "2",
"seq": "1",
"size": "128",
"status": "echo reply",
"time": "54ms307us",
"ttl": "64"
},
{
"avg-rtt": "54ms515us",
"host": "fd00:145:1::2",
"max-rtt": "54ms692us",
"min-rtt": "54ms307us",
"packet-loss": "0",
"received": "3",
"sent": "3",
"seq": "2",
"size": "128",
"status": "echo reply",
"time": "54ms692us",
"ttl": "64"
},
{
"avg-rtt": "54ms492us",
"host": "fd00:145:1::2",
"max-rtt": "54ms692us",
"min-rtt": "54ms307us",
"packet-loss": "0",
"received": "4",
"sent": "4",
"seq": "3",
"size": "128",
"status": "echo reply",
"time": "54ms423us",
"ttl": "64"
},
{
"avg-rtt": "54ms440us",
"host": "fd00:145:1::2",
"max-rtt": "54ms692us",
"min-rtt": "54ms231us",
"packet-loss": "0",
"received": "5",
"sent": "5",
"seq": "4",
"size": "128",
"status": "echo reply",
"time": "54ms231us",
"ttl": "64"
}
]
},
{
"serverId": 2,
"sent": 5,
"received": 5,
"rows": [
{
"avg-rtt": "53ms466us",
"host": "fd00:145:1::1",
"max-rtt": "53ms466us",
"min-rtt": "53ms466us",
"packet-loss": "0",
"received": "1",
"sent": "1",
"seq": "0",
"size": "128",
"status": "echo reply",
"time": "53ms466us",
"ttl": "64"
},
{
"avg-rtt": "53ms480us",
"host": "fd00:145:1::1",
"max-rtt": "53ms494us",
"min-rtt": "53ms466us",
"packet-loss": "0",
"received": "2",
"sent": "2",
"seq": "1",
"size": "128",
"status": "echo reply",
"time": "53ms494us",
"ttl": "64"
},
{
"avg-rtt": "53ms498us",
"host": "fd00:145:1::1",
"max-rtt": "53ms534us",
"min-rtt": "53ms466us",
"packet-loss": "0",
"received": "3",
"sent": "3",
"seq": "2",
"size": "128",
"status": "echo reply",
"time": "53ms534us",
"ttl": "64"
},
{
"avg-rtt": "53ms469us",
"host": "fd00:145:1::1",
"max-rtt": "53ms534us",
"min-rtt": "53ms383us",
"packet-loss": "0",
"received": "4",
"sent": "4",
"seq": "3",
"size": "128",
"status": "echo reply",
"time": "53ms383us",
"ttl": "64"
},
{
"avg-rtt": "53ms467us",
"host": "fd00:145:1::1",
"max-rtt": "53ms534us",
"min-rtt": "53ms383us",
"packet-loss": "0",
"received": "5",
"sent": "5",
"seq": "4",
"size": "128",
"status": "echo reply",
"time": "53ms460us",
"ttl": "64"
}
]
}
],
"cleanup": [],
"limits": [
"Own GRE IPv6 ULA over IPv4 outer; native IPFIX over IPv4 WAN UDP; not IPv6 outer/WAN or throughput acceptance",
"Dedicated database/application process, main database not seeded with fixture rows; ordinary background polling remains active; preview UI uses explicit real API relay to isolated backend"
],
"controlledTrafficFlow": {
"active-flow-timeout": "10s",
"cache-entries": "256k",
"enabled": "true",
"inactive-flow-timeout": "3s",
"interfaces": "mm-flow145-1791712666652-g",
"packet-sampling": "false",
"sampling-interval": "0",
"sampling-space": "0"
},
"apiTalkers": {
"exportersOnline": 1,
"bytesPerMin": 844.8,
"uniqueSrc": 4,
"uniqueDst": 4,
"topProto": "58",
"talkers": [
{
"serverId": "1",
"serverName": "CHR · native145",
"src": "194.226.121.150",
"dst": "104.165.244.7",
"proto": 47,
"protoName": "GRE",
"srcPort": 0,
"dstPort": 0,
"bytes": 1616,
"packets": 12,
"bps": 43.093333333333334,
"inIface": "#144",
"inIfaceIndex": "144",
"application": "GRE"
},
{
"serverId": "1",
"serverName": "CHR · native145",
"src": "fd00:145:1::2",
"dst": "fd00:145:1::1",
"proto": 58,
"protoName": "58",
"srcPort": 0,
"dstPort": 0,
"bytes": 1280,
"packets": 10,
"bps": 34.13333333333333,
"inIface": "#144",
"inIfaceIndex": "144",
"application": "58/—"
},
{
"serverId": "1",
"serverName": "CHR · native145",
"src": "fd00:145:1::1",
"dst": "fd00:145:1::2",
"proto": 58,
"protoName": "58",
"srcPort": 0,
"dstPort": 0,
"bytes": 1280,
"packets": 10,
"bps": 34.13333333333333,
"inIface": "—",
"inIfaceIndex": "0",
"application": "58/—"
},
{
"serverId": "1",
"serverName": "CHR · native145",
"src": "fe80::2:68a5:f407",
"dst": "ff02::2",
"proto": 58,
"protoName": "58",
"srcPort": 0,
"dstPort": 0,
"bytes": 48,
"packets": 1,
"bps": 1.28,
"inIface": "—",
"inIfaceIndex": "0",
"application": "58/—"
}
],
"lastExporterIp": "194.226.121.150",
"lastError": null,
"packetsReceived": 6,
"lastDatagramAt": "2026-10-11T09:58:07.508Z",
"listenerBound": true,
"listenerAddress": "0.0.0.0:48145"
},
"apiAnalytics": {
"bpsNow": 112.64,
"bytes": 4224,
"packets": 33,
"conversations": 4,
"conversationsRaw": 4,
"uniqueSrc": 4,
"uniqueDst": 4,
"topProto": "58",
"topCategory": "Прочее",
"rxSeries": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0.000192,
0,
0.01024,
0,
0,
0,
0
],
"txSeries": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
],
"applications": [
{
"id": "58/—",
"label": "58/—",
"bytes": 2608,
"packets": 21,
"bps": 69.54666666666667,
"percent": 61.74242424242424
},
{
"id": "GRE",
"label": "GRE",
"bytes": 1616,
"packets": 12,
"bps": 43.093333333333334,
"percent": 38.25757575757576
}
],
"protocols": [
{
"id": "58",
"label": "58",
"bytes": 2608,
"packets": 21,
"bps": 69.54666666666667,
"percent": 61.74242424242424
},
{
"id": "GRE",
"label": "GRE",
"bytes": 1616,
"packets": 12,
"bps": 43.093333333333334,
"percent": 38.25757575757576
}
],
"sources": [
{
"id": "194.226.121.150",
"label": "194.226.121.150",
"bytes": 1616,
"packets": 12,
"bps": 43.093333333333334,
"percent": 38.25757575757576
},
{
"id": "fd00:145:1::2",
"label": "fd00:145:1::2",
"bytes": 1280,
"packets": 10,
"bps": 34.13333333333333,
"percent": 30.303030303030305
},
{
"id": "fd00:145:1::1",
"label": "fd00:145:1::1",
"bytes": 1280,
"packets": 10,
"bps": 34.13333333333333,
"percent": 30.303030303030305
},
{
"id": "fe80::2:68a5:f407",
"label": "fe80::2:68a5:f407",
"bytes": 48,
"packets": 1,
"bps": 1.28,
"percent": 1.1363636363636365
}
],
"destinations": [
{
"id": "104.165.244.7",
"label": "104.165.244.7",
"bytes": 1616,
"packets": 12,
"bps": 43.093333333333334,
"percent": 38.25757575757576
},
{
"id": "fd00:145:1::1",
"label": "fd00:145:1::1",
"bytes": 1280,
"packets": 10,
"bps": 34.13333333333333,
"percent": 30.303030303030305
},
{
"id": "fd00:145:1::2",
"label": "fd00:145:1::2",
"bytes": 1280,
"packets": 10,
"bps": 34.13333333333333,
"percent": 30.303030303030305
},
{
"id": "ff02::2",
"label": "ff02::2",
"bytes": 48,
"packets": 1,
"bps": 1.28,
"percent": 1.1363636363636365
}
],
"interfaces": [
{
"id": "#144",
"label": "#144",
"bytes": 2896,
"packets": 22,
"bps": 77.22666666666667,
"percent": 68.56060606060606
},
{
"id": "—",
"label": "—",
"bytes": 1328,
"packets": 11,
"bps": 35.413333333333334,
"percent": 31.439393939393938
}
],
"asns": [],
"countries": [],
"categories": [
{
"id": "Прочее",
"label": "Прочее",
"bytes": 2608,
"packets": 21,
"bps": 69.54666666666667,
"percent": 61.74242424242424
},
{
"id": "Туннель",
"label": "Туннель",
"bytes": 1616,
"packets": 12,
"bps": 43.093333333333334,
"percent": 38.25757575757576
}
],
"services": [
{
"id": "Прочее",
"label": "Прочее",
"bytes": 4224,
"packets": 33,
"bps": 112.64,
"percent": 100
}
],
"mapEdges": [],
"conversationsList": [
{
"serverId": "1",
"serverName": "CHR · native145",
"src": "194.226.121.150",
"dst": "104.165.244.7",
"proto": 47,
"protoName": "GRE",
"srcPort": 0,
"dstPort": 0,
"bytes": 1616,
"packets": 12,
"bps": 2260.13986013986,
"inIface": "#144",
"inIfaceIndex": "144",
"outIface": "#2",
"nextHop": "194.226.121.1",
"application": "GRE",
"category": "Туннель",
"service": "Прочее",
"internetPeer": "104.165.244.7",
"direction": "transit",
"plane": "overlay"
},
{
"serverId": "1",
"serverName": "CHR · native145",
"src": "fd00:145:1::2",
"dst": "fd00:145:1::1",
"proto": 58,
"protoName": "58",
"srcPort": 0,
"dstPort": 0,
"bytes": 1280,
"packets": 10,
"bps": 2509.8039215686276,
"inIface": "#144",
"inIfaceIndex": "144",
"nextHop": "::1:8000:0:0:0",
"application": "58/—",
"category": "Прочее",
"service": "Прочее",
"clientIp": "fd00:145:1::2",
"internetPeer": "fd00:145:1::1",
"direction": "from_client",
"plane": "payload"
},
{
"serverId": "1",
"serverName": "CHR · native145",
"src": "fd00:145:1::1",
"dst": "fd00:145:1::2",
"proto": 58,
"protoName": "58",
"srcPort": 0,
"dstPort": 0,
"bytes": 1280,
"packets": 10,
"bps": 2479.418886198547,
"inIface": "—",
"inIfaceIndex": "0",
"outIface": "#144",
"nextHop": "::4000:0:0:0",
"application": "58/—",
"category": "Прочее",
"service": "Прочее",
"clientIp": "fd00:145:1::1",
"internetPeer": "fd00:145:1::2",
"direction": "from_client",
"plane": "payload"
},
{
"serverId": "1",
"serverName": "CHR · native145",
"src": "fe80::2:68a5:f407",
"dst": "ff02::2",
"proto": 58,
"protoName": "58",
"srcPort": 0,
"dstPort": 0,
"bytes": 48,
"packets": 1,
"bps": 1.28,
"inIface": "—",
"inIfaceIndex": "0",
"outIface": "#144",
"nextHop": "::800:0:0:0",
"application": "58/—",
"category": "Прочее",
"service": "Прочее",
"clientIp": "fe80::2:68a5:f407",
"internetPeer": "ff02::2",
"direction": "from_client",
"plane": "payload"
}
],
"paths": [
{
"id": "unknown|1||104.165.244.7|#144",
"clientId": "unknown",
"clientName": "Неизвестный клиент",
"ifaces": "#144",
"serverId": "1",
"serverName": "CHR · native145",
"inIface": "#144",
"outIface": "#2",
"enId": "",
"enName": "",
"dst": "104.165.244.7",
"service": "Прочее",
"category": "Туннель",
"plane": "overlay",
"bytes": 1616,
"packets": 12,
"bps": 43.093333333333334
},
{
"id": "unknown|1||fd00:145:1::1|#144",
"clientId": "unknown",
"clientName": "Неизвестный клиент",
"ifaces": "#144",
"serverId": "1",
"serverName": "CHR · native145",
"inIface": "#144",
"outIface": "",
"enId": "",
"enName": "",
"dst": "fd00:145:1::1",
"service": "Прочее",
"category": "Прочее",
"plane": "payload",
"bytes": 1280,
"packets": 10,
"bps": 34.13333333333333
},
{
"id": "unknown|1||fd00:145:1::2|—",
"clientId": "unknown",
"clientName": "Неизвестный клиент",
"ifaces": "—",
"serverId": "1",
"serverName": "CHR · native145",
"inIface": "—",
"outIface": "#144",
"enId": "",
"enName": "",
"dst": "fd00:145:1::2",
"service": "Прочее",
"category": "Прочее",
"plane": "payload",
"bytes": 1280,
"packets": 10,
"bps": 34.13333333333333
},
{
"id": "unknown|1||ff02::2|—",
"clientId": "unknown",
"clientName": "Неизвестный клиент",
"ifaces": "—",
"serverId": "1",
"serverName": "CHR · native145",
"inIface": "—",
"outIface": "#144",
"enId": "",
"enName": "",
"dst": "ff02::2",
"service": "Прочее",
"category": "Прочее",
"plane": "payload",
"bytes": 48,
"packets": 1,
"bps": 1.28
}
],
"ifaces": [
{
"name": "#144",
"index": "144",
"bps": 77.22666666666667
},
{
"name": "—",
"index": "0",
"bps": 35.413333333333334
}
],
"live": true,
"dedupApplied": false,
"degraded": false,
"bytesPayload": 2608,
"bytesOverlay": 1616,
"bytesMesh": 0,
"bytesWire": 0,
"bpsOverlay": 43.093333333333334,
"bpsWire": 0,
"excludeMeshApplied": false,
"excludeOverlayApplied": false
},
"nativeDataReceived": true,
"browserCheckpoint": true,
"cleanupError": "RouterOS API error 401 on /interface/gre/*71: {\"error\":401,\"message\":\"Unauthorized\"}",
"childDrained": true,
"childExit": 0,
"databaseRemoved": true,
"childDiagnostic": "Private child stderr retained separately; no credential-bearing error text published"
},
"postFailureReadOnlyInspect": {
"date": "2026-10-11",
"name": "mm-flow145-1791712666652",
"readOnly": true,
"devices": [
{
"serverId": 1,
"host": "194.226.121.150",
"gre": [],
"addresses": [],
"systemReadSucceeded": true
},
{
"serverId": 2,
"host": "104.165.244.7",
"gre": [
{
".id": "*71",
"actual-mtu": "1400",
"allow-fast-path": "false",
"clamp-tcp-mss": "true",
"comment": "mm-flow145-1791712666652",
"disabled": "false",
"dont-fragment": "no",
"dscp": "inherit",
"keepalive": "10s,10",
"local-address": "104.165.244.7",
"mtu": "1400",
"name": "mm-flow145-1791712666652-g",
"remote-address": "194.226.121.150",
"running": "false"
}
],
"addresses": [
{
".id": "*73",
"actual-interface": "mm-flow145-1791712666652-g",
"address": "fd00:145:1::2/64",
"advertise": "false",
"auto-link-local": "true",
"comment": "mm-flow145-1791712666652",
"deprecated": "false",
"disabled": "false",
"dynamic": "false",
"eui-64": "false",
"from-pool": "",
"global": "true",
"interface": "mm-flow145-1791712666652-g",
"invalid": "false",
"no-dad": "false",
"slave": "false",
"vrf": "main"
}
],
"systemReadSucceeded": true
}
]
},
"recoveryCleanup": {
"date": "2026-10-11",
"name": "mm-flow145-1791712666652",
"actions": [
{
"serverId": 2,
"path": "/ipv6/address",
"id": "*73",
"method": "DELETE",
"removed": true
},
{
"serverId": 2,
"path": "/interface/gre",
"id": "*71",
"method": "DELETE",
"removed": true
}
],
"cleanup": [
{
"serverId": 1,
"/interface/gre": true,
"/ipv6/address": true,
"/ipv6/route": true,
"/ipv6/nd": true,
"/ipv6/firewall/filter": true,
"/ipv6/firewall/raw": true,
"/ip/address": true,
"/ip/route": true,
"/ip/firewall/filter": true,
"/ip/firewall/nat": true,
"/ip/firewall/mangle": true,
"/ip/traffic-flow/target": true,
"trafficFlowRestored": true,
"ipfixFieldsUnchanged": true,
"ipv6SettingsUnchanged": true
},
{
"serverId": 2,
"/interface/gre": true,
"/ipv6/address": true,
"/ipv6/route": true,
"/ipv6/nd": true,
"/ipv6/firewall/filter": true,
"/ipv6/firewall/raw": true,
"/ip/address": true,
"/ip/route": true,
"/ip/firewall/filter": true,
"/ip/firewall/nat": true,
"/ip/firewall/mangle": true,
"/ip/traffic-flow/target": true,
"trafficFlowRestored": true,
"ipfixFieldsUnchanged": true,
"ipv6SettingsUnchanged": true
}
],
"success": true
},
"infrastructureCleanup": {
"ownedContainerId": "ce12762cb132ced5dba28b28443eb0327d135dcd8e751e719b562b4ef606d73f",
"removedAfterIdentityCheck": true,
"udp48145Closed": true,
"isolatedHttp18145Closed": true,
"ssh18145TunnelClosed": true
},
"bounds": [
"Two native CHR RouterOS7.24.5; own GRE ULA addresses and allow-fast-path=false; native IPFIX from CHR1 through IPv4 WAN to real production listener",
"Traffic Flow was initially disabled with no targets; enabled only on own GRE, short timers, one own target; restored exact original settings",
"Owned isolated DB cloned only CHR1 configuration for a separate application/worker; credentials never published; ordinary main-app background polling stayed active, so no claim of zero background DB writes",
"Ping5/5 both directions, actual native IPv6 fields and positive bytes/packets observed through production API and frontend Sessions DOM; no synthetic IPFIX sender for this block",
"UI relay used real isolated HTTP backend responses, not mocked JSON; screenshots show current frame/scroll position, not every row; initial wrong tab/role selectors retained in UI protocol",
"Initial invalid host port81245 was rejected before container launch/native changes, corrected18145",
"Automatic cleanup on CHR2 hit one401 reading own GRE by id; credentials still permitted system/full-catalog reads. Two exact-owned remaining objects deleted by DELETE after fresh catalog ownership checks; all12 static collection projections per device and three config groups restored",
"Cause of the isolated GET-by-id401 not determined; do not infer password rotation or full permission failure",
"Own DB removed and child drain acknowledged; temporary receiver/API/container/tunnel closed; public/metadata/default routes and original settings preserved by baseline checks",
"IPv6 inner over IPv4 GRE outer/export transport; no public IPv6 WAN, arbitrary client OS, maximum throughput or all configurations acceptance"
]
}
@@ -0,0 +1,155 @@
{
"date": "2026-10-11",
"block": "12.5.145",
"runtime": {
"backend": "ux-ipfix144",
"frontend": "ux-traffic141"
},
"transport": "Deployed frontend assets; explicit real HTTP API relay through SSH to owned isolated backend18145; no mocked JSON",
"cases": [
{
"width": 1440,
"api": [
{
"path": "/api/auth/config",
"status": 200
},
{
"path": "/api/traffic/servers",
"status": 200
},
{
"path": "/api/traffic/bound-interfaces",
"status": 200
},
{
"path": "/api/traffic/users",
"status": 200
},
{
"path": "/api/servers",
"status": 200
},
{
"path": "/api/filters/gre-tunnels",
"status": 200
},
{
"path": "/api/traffic/flow/clients",
"status": 200
},
{
"path": "/api/traffic/flows",
"status": 200
},
{
"path": "/api/evobgp/settings",
"status": 200
},
{
"path": "/api/sidebar-counts",
"status": 200
},
{
"path": "/api/traffic/flow/exporters",
"status": 200
},
{
"path": "/api/sidebar-counts",
"status": 200
},
{
"path": "/api/traffic/flow/analytics",
"status": 200
},
{
"path": "/api/traffic/flow/live",
"status": 200
}
],
"pageErrors": [],
"noOverflow": true,
"screenshot": "docs/ux-ui/screens/native-ipv6-ipfix145-1440-2026-10-11.png",
"nativeIpv6RenderedInSessions": true
},
{
"width": 320,
"api": [
{
"path": "/api/auth/config",
"status": 200
},
{
"path": "/api/traffic/servers",
"status": 200
},
{
"path": "/api/traffic/users",
"status": 200
},
{
"path": "/api/traffic/bound-interfaces",
"status": 200
},
{
"path": "/api/filters/gre-tunnels",
"status": 200
},
{
"path": "/api/sidebar-counts",
"status": 200
},
{
"path": "/api/servers",
"status": 200
},
{
"path": "/api/sidebar-counts",
"status": 200
},
{
"path": "/api/evobgp/settings",
"status": 200
},
{
"path": "/api/traffic/flows",
"status": 200
},
{
"path": "/api/traffic/flow/exporters",
"status": 200
},
{
"path": "/api/traffic/flow/clients",
"status": 200
},
{
"path": "/api/traffic/flow/analytics",
"status": 200
},
{
"path": "/api/traffic/flow/live",
"status": 200
}
],
"pageErrors": [],
"noOverflow": true,
"screenshot": "docs/ux-ui/screens/native-ipv6-ipfix145-320-2026-10-11.png",
"nativeIpv6RenderedInSessions": true
}
],
"bounds": [
"Own native GRE ULA flows displayed; not public IPv6 WAN connectivity, IPv6 outer or real Internet application traffic",
"IPv6 text presence asserted in Sessions DOM; screenshots capture the current scroll position, not every data-grid row"
],
"initialAttempts": [
{
"passed": false,
"reason": "Address search attempted on default applications summary, before selecting Sessions tab"
},
{
"passed": false,
"reason": "Sessions selector incorrectly used button instead of actual tab role"
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB