diff --git a/docs/ux-ui-external-acceptance.md b/docs/ux-ui-external-acceptance.md index c345c0e8..1c10b3a2 100644 --- a/docs/ux-ui-external-acceptance.md +++ b/docs/ux-ui-external-acceptance.md @@ -1,6 +1,6 @@ # UX/UI: протокол внешней приёмки 12.5 -Актуальное продолжение 2026-10-10: завершены12.5.107–108 — VXLAN bridge/FDB и IPv6 ULA inner по IPv4 outer, отключение/восстановление собственного bridge-порта. Steady/recovery Ping10/10 в обе стороны; initial IPv6 loss сохранён, бесшовность не заявлена. Cleanup13 коллекций×2, настройкиIPv6 и own dynamic tables passed. Runtime ux-patch102/ux-a11y101 прежний. Следующий109 — IPv6 inner GRE/WireGuard; Portal/Telegram ожидают настройки и отдельного разрешения на сообщение.12.5 открыт. +Актуальное продолжение 2026-10-10: завершены12.5.107–109 — VXLAN bridge/FDB и IPv6 ULA inner в VXLAN/GRE/WireGuard по IPv4 outer. Steady/recovery Ping10/10 в обе стороны каждого типа; initial loss сохранён. Cleanup собственных объектов/baseline passed, обаCHR доступны. Runtime ux-patch102/ux-a11y101 прежний. Native IPv6 не означает поддержку IPv6 interface address в API/history/export GRE/WG. Следующий110 — профильная приёмка IPsec со сложным DN; Portal/Telegram ожидают настройки/разрешения.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). @@ -1048,3 +1048,13 @@ Initial Ping3/3 и steady Ping10/10 в обе стороны; сохранены Initial IPv6 Ping дал0/3 и1/3; packet rows сохранены, причина потерь не установлена. После3s паузы steady Ping10/10 в обе стороны. Native адреса valid/advertise=false, bridge host и VXLAN FDB изучили MAC противоположного моста с правильным remote VTEP. Каталог приложения показывает правильные интерфейсы/VNI/port/learning/remoteVteps без failures. После отключения собственного bridge-порта CHR1 Ping0/3 в обе стороны, интерфейсы остаются UP; после включения и2s паузы Ping10/10 и FDB подтверждены. Initial loss не скрыт повтором и не заменён утверждением о zero-loss startup/SLA. Exact-ID/marker cleanup вернул baseline projection13 коллекций×2, собственные bridge hosts/FDB отсутствуют; disable-ipv6/forward/accept-router-advertisements совпали с исходными. Пароли прежние, оба устройства доступны. Исходники/DB/runtime не менялись, build/общая UI регрессия не повторялись. Результат подтверждает native IPv6 inner в данной паре; не добавляет IPv6 IP/bridge/FDB в fragment экспорт, не доказывает SLAAC, клиентские ОС, масштаб, IPv6 outer или максимальную скорость. Следующий109 — GRE/WireGuard IPv6 inner по существующему IPv4 outer. + +## 12.5.109 — GRE/WireGuard: IPv6 inner и раздельное восстановление (2026-10-10) + +[Native отчёт](ux-ui/acceptance/gre-wireguard-ipv6-inner-2026-10-10.json). На обоих CHR создана отдельная GRE пара MTU1400 и WireGuard пара UDP59909/MTU1420. IPv6 ULA fd00:109:1::1/64↔::2/64 на GRE и fd00:109:2::1/64↔::2/64 на WG; advertise=no. GRE outer и WG endpoints остаются исходными публичными IPv4. Ключи сгенерировал RouterOS на собственных WG-интерфейсах; private keys не сохранялись в отчёт/репозиторий. Peer allowed-address ограничен удалённым собственным IPv6 /128, keepalive5s. До записей collision/baseline/IPv6 preflight завершён на обоих устройствах; ether1/глобальные настройки/ND/firewall/routes не изменялись вручную. + +Initial результаты: gre/CHR1=0/3, gre/CHR2=1/3, wireguard/CHR1=3/3, wireguard/CHR2=3/3. Все реальные packet rows сохранены. После3s паузы steady IPv6 Ping10/10 в обе стороны каждого типа, valid native адреса и WG handshake/rx/tx>0 подтверждены. Последовательно отключены только собственный GRE интерфейс CHR1 и собственный WG peer CHR1: соответствующий Ping0/3 в обе стороны, второй туннель в каждой фазе продолжает передавать3/3. После включения и3s паузы recovery Ping10/10 в обе стороны каждого типа. Измерение переходного loss/SLA/максимальной скорости не выполнялось. + +Production aggregate GET /api/gre/tunnels и /api/wireguard вернули собственные интерфейсы без failures; WG allowedIps сохранил native IPv6 /128, privateKey не возвращён. Ограничение обнаружено и зафиксировано: CHR1: GRE localInnerIp="", WG address=null; CHR2: GRE localInnerIp="", WG address=null. Текущие GRE/WG readers получают interface addresses из /ip/address, поэтому native IPv6 адрес не попадает в это поле. Эти проверки не принимают IPv6 создание/restore/history/export через приложение и не расширяют его API. Поддержка полного IPv6 управления требует отдельной согласованной модели адресов и миграции snapshots. + +Перед очисткой exact IDs/markers и immutable reference fields сверены; собственные peers/IPv6 addresses/interfaces удалены. Baseline projection13 коллекций×2 и7 исходных параметров IPv6 settings совпали. Пароли прежние, оба CHR доступны. DB/runtime/исходники продукта не менялись, повтор build/общей UI регрессии не требовался. Открыты IPv6 outer/client OS/scale, application IPv6 address lifecycle и остальные пункты матрицы. Следующий110 — IPsec complex/escaped DN с собственной сертификатной парой и контролем online identity; внешние Portal/Telegram требуют настоящей настройки. diff --git a/docs/ux-ui-plan.md b/docs/ux-ui-plan.md index aee036d0..594ed5cf 100644 --- a/docs/ux-ui-plan.md +++ b/docs/ux-ui-plan.md @@ -1,12 +1,12 @@ # План реализации UX/UI по пятичасовым окнам -Актуальное продолжение 2026-10-10: завершены12.5.107–108 — VXLAN bridge/FDB и IPv6 ULA inner по IPv4 outer, отключение/восстановление собственного bridge-порта. Steady/recovery Ping10/10 в обе стороны; initial IPv6 loss сохранён, бесшовность не заявлена. Cleanup13 коллекций×2, настройкиIPv6 и own dynamic tables passed. Runtime ux-patch102/ux-a11y101 прежний. Следующий109 — IPv6 inner GRE/WireGuard; Portal/Telegram ожидают настройки и отдельного разрешения на сообщение.12.5 открыт. +Актуальное продолжение 2026-10-10: завершены12.5.107–109 — VXLAN bridge/FDB и IPv6 ULA inner в VXLAN/GRE/WireGuard по IPv4 outer. Steady/recovery Ping10/10 в обе стороны каждого типа; initial loss сохранён. Cleanup собственных объектов/baseline passed, обаCHR доступны. Runtime ux-patch102/ux-a11y101 прежний. Native IPv6 не означает поддержку IPv6 interface address в API/history/export GRE/WG. Следующий110 — профильная приёмка IPsec со сложным DN; Portal/Telegram ожидают настройки/разрешения.12.5 открыт. Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-10. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат. ## Актуальная точка продолжения — 2026-10-10 -Актуальное продолжение 2026-10-10: завершены12.5.107–108 — VXLAN bridge/FDB и IPv6 ULA inner по IPv4 outer, отключение/восстановление собственного bridge-порта. Steady/recovery Ping10/10 в обе стороны; initial IPv6 loss сохранён, бесшовность не заявлена. Cleanup13 коллекций×2, настройкиIPv6 и own dynamic tables passed. Runtime ux-patch102/ux-a11y101 прежний. Следующий109 — IPv6 inner GRE/WireGuard; Portal/Telegram ожидают настройки и отдельного разрешения на сообщение.12.5 открыт. +Актуальное продолжение 2026-10-10: завершены12.5.107–109 — VXLAN bridge/FDB и IPv6 ULA inner в VXLAN/GRE/WireGuard по IPv4 outer. Steady/recovery Ping10/10 в обе стороны каждого типа; initial loss сохранён. Cleanup собственных объектов/baseline passed, обаCHR доступны. Runtime ux-patch102/ux-a11y101 прежний. Native IPv6 не означает поддержку IPv6 interface address в API/history/export GRE/WG. Следующий110 — профильная приёмка IPsec со сложным DN; Portal/Telegram ожидают настройки/разрешения.12.5 открыт. Этапы0–11 завершены в локальных границах журнала. История выполненных внешних блоков и доказательства сохранены в [журнале](ux-ui-stage-12.md) и [протоколе](ux-ui-external-acceptance.md). Реальная Telegram доставка, Portal SSO, multi-instance и оставшиеся профильные сетевые ограничения открыты. diff --git a/docs/ux-ui-progress.md b/docs/ux-ui-progress.md index b43fe205..5219b3cb 100644 --- a/docs/ux-ui-progress.md +++ b/docs/ux-ui-progress.md @@ -1,6 +1,6 @@ # UX/UI: журнал реализации -Актуальное продолжение 2026-10-10: завершены12.5.107–108 — VXLAN bridge/FDB и IPv6 ULA inner по IPv4 outer, отключение/восстановление собственного bridge-порта. Steady/recovery Ping10/10 в обе стороны; initial IPv6 loss сохранён, бесшовность не заявлена. Cleanup13 коллекций×2, настройкиIPv6 и own dynamic tables passed. Runtime ux-patch102/ux-a11y101 прежний. Следующий109 — IPv6 inner GRE/WireGuard; Portal/Telegram ожидают настройки и отдельного разрешения на сообщение.12.5 открыт. +Актуальное продолжение 2026-10-10: завершены12.5.107–109 — VXLAN bridge/FDB и IPv6 ULA inner в VXLAN/GRE/WireGuard по IPv4 outer. Steady/recovery Ping10/10 в обе стороны каждого типа; initial loss сохранён. Cleanup собственных объектов/baseline passed, обаCHR доступны. Runtime ux-patch102/ux-a11y101 прежний. Native IPv6 не означает поддержку IPv6 interface address в API/history/export GRE/WG. Следующий110 — профильная приёмка IPsec со сложным DN; Portal/Telegram ожидают настройки/разрешения.12.5 открыт. Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md). @@ -36,7 +36,17 @@ | 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–108 и ограничения ниже. Runtime backend ux-patch102/frontend ux-a11y101. | +| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–109 и ограничения ниже. Runtime backend ux-patch102/frontend ux-a11y101. | + +## 12.5.109 — GRE/WireGuard: IPv6 inner и раздельное восстановление (2026-10-10) + +[Native отчёт](ux-ui/acceptance/gre-wireguard-ipv6-inner-2026-10-10.json). На обоих CHR создана отдельная GRE пара MTU1400 и WireGuard пара UDP59909/MTU1420. IPv6 ULA fd00:109:1::1/64↔::2/64 на GRE и fd00:109:2::1/64↔::2/64 на WG; advertise=no. GRE outer и WG endpoints остаются исходными публичными IPv4. Ключи сгенерировал RouterOS на собственных WG-интерфейсах; private keys не сохранялись в отчёт/репозиторий. Peer allowed-address ограничен удалённым собственным IPv6 /128, keepalive5s. До записей collision/baseline/IPv6 preflight завершён на обоих устройствах; ether1/глобальные настройки/ND/firewall/routes не изменялись вручную. + +Initial результаты: gre/CHR1=0/3, gre/CHR2=1/3, wireguard/CHR1=3/3, wireguard/CHR2=3/3. Все реальные packet rows сохранены. После3s паузы steady IPv6 Ping10/10 в обе стороны каждого типа, valid native адреса и WG handshake/rx/tx>0 подтверждены. Последовательно отключены только собственный GRE интерфейс CHR1 и собственный WG peer CHR1: соответствующий Ping0/3 в обе стороны, второй туннель в каждой фазе продолжает передавать3/3. После включения и3s паузы recovery Ping10/10 в обе стороны каждого типа. Измерение переходного loss/SLA/максимальной скорости не выполнялось. + +Production aggregate GET /api/gre/tunnels и /api/wireguard вернули собственные интерфейсы без failures; WG allowedIps сохранил native IPv6 /128, privateKey не возвращён. Ограничение обнаружено и зафиксировано: CHR1: GRE localInnerIp="", WG address=null; CHR2: GRE localInnerIp="", WG address=null. Текущие GRE/WG readers получают interface addresses из /ip/address, поэтому native IPv6 адрес не попадает в это поле. Эти проверки не принимают IPv6 создание/restore/history/export через приложение и не расширяют его API. Поддержка полного IPv6 управления требует отдельной согласованной модели адресов и миграции snapshots. + +Перед очисткой exact IDs/markers и immutable reference fields сверены; собственные peers/IPv6 addresses/interfaces удалены. Baseline projection13 коллекций×2 и7 исходных параметров IPv6 settings совпали. Пароли прежние, оба CHR доступны. DB/runtime/исходники продукта не менялись, повтор build/общей UI регрессии не требовался. Открыты IPv6 outer/client OS/scale, application IPv6 address lifecycle и остальные пункты матрицы. Следующий110 — IPsec complex/escaped DN с собственной сертификатной парой и контролем online identity; внешние Portal/Telegram требуют настоящей настройки. ## 12.5.108 — VXLAN: IPv6 внутри собственного моста по IPv4-транспорту (2026-10-10) diff --git a/docs/ux-ui-remaining-acceptance.md b/docs/ux-ui-remaining-acceptance.md index a317eb5c..419772d3 100644 --- a/docs/ux-ui-remaining-acceptance.md +++ b/docs/ux-ui-remaining-acceptance.md @@ -1,16 +1,16 @@ # Оставшаяся внешняя приёмка — 2026-10-10 -Это актуальная матрица после 12.5.108. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии. +Это актуальная матрица после 12.5.109. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии. -Стенд: Debian13/Compose, PostgreSQL18.6, два CHR RouterOS7.24.5. Backend `ux-patch102`, frontend `ux-a11y101`; production lab использует AUTH_REQUIRED=false. Подписанные JWT/RBAC проверялись в изолированных процессах. Все собственные объекты108 удалены, исходные13 коллекций×2, ключевые настройкиIPv6 и отсутствие собственных bridge hosts/VXLAN FDB проверены; пароли не менялись. +Стенд: Debian13/Compose, PostgreSQL18.6, два CHR RouterOS7.24.5. Backend `ux-patch102`, frontend `ux-a11y101`; production lab использует AUTH_REQUIRED=false. Подписанные JWT/RBAC проверялись в изолированных процессах. Все собственные объекты109 удалены, исходные13 коллекций×2 и7 параметров IPv6 settings проверены; пароли не менялись. | Раздел | Подтверждено | Осталось / условие завершения | | --- | --- | --- | | PostgreSQL | Bootstrap, backup/restore, SQL rollback, concurrency, writer drain одного экземпляра, JWT guards и unknown commit: блоки14–24 | Несколько backend/worker экземпляров и координация всех writers; физическая потеря соединения отличается от введённого отказа подтверждения | | Speed/uptime | TCP transmit/receive/both32–33, короткий UDP34, auth failure25, transport timeout27, интерфейс after-ping28–29, snapshot/history race23–24 | Busy/abort/physical WAN disconnect; HTTP receipt socket disconnect принят97; независимое доказательство multi-WAN source/path; Home→JH/JH↔Exit с асимметричными каналами ; ROS-10 POST/SQL/GET и три часовых пояса приняты96. Короткие тесты не доказывают maximum throughput | | Outbox | Production PG claim/dedupe/settlement/retry/JWT/browser checkpoint/a11y35–49 | Настоящий Telegram API/чат, физический timeout после возможной отправки, несколько sender процессов. Нужны тестовый бот/чат и прямое разрешение на конкретное сообщение; подменённый ответ не доказывает доставку | -| GRE | Native lifecycle, metadata, live формы/меню/URL/Ping53–57; GRE используется в OSPF/BGP/IPsec последующих блоков | IPv6, независимые WAN, масштаб и длительное восстановление; принятие GRE не означает приёмку всех сценариев автоматического расписания | -| WireGuard | Native handshake/data plane58, deletion60, live create/peer/disable/enable/delete62, mobile64, export/import67–74 | Клиентские ОС и произвольные конфигурации, IPv6/scale, физический lost ACK и устойчивое восстановление; `.conf` с placeholders — шаблон, не принятый клиентский tunnel | +| 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 | Клиентские Windows/macOS/iOS/Android, сложные/escaped DN, полная 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 открыты | @@ -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 — GRE/WireGuard IPv6 inner. Реальные интеграции требуют тестовых доступов и отдельного разрешения на сообщение. +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 — IPsec complex/escaped DN. Реальные интеграции требуют тестовых доступов и отдельного разрешения на сообщение. 3. **Заключительный профильный контроль:** после последнего исправления собрать только затронутую часть, проверить её live и обновить матрицу. Общую регрессию выполнить один раз на согласованном runtime. 4. **Внешние зависимости:** Telegram/Portal/client OS/multi-WAN/scale проходят отдельную приёмку при наличии нужных аккаунтов, устройств и разрешений. Лабораторный результат двух CHR не закрывает их автоматически. diff --git a/docs/ux-ui-stage-12.md b/docs/ux-ui-stage-12.md index ddbb5084..51c291f5 100644 --- a/docs/ux-ui-stage-12.md +++ b/docs/ux-ui-stage-12.md @@ -1,6 +1,6 @@ # Этап 12: итоговая приёмка UX/UI -Актуальное продолжение 2026-10-10: завершены12.5.107–108 — VXLAN bridge/FDB и IPv6 ULA inner по IPv4 outer, отключение/восстановление собственного bridge-порта. Steady/recovery Ping10/10 в обе стороны; initial IPv6 loss сохранён, бесшовность не заявлена. Cleanup13 коллекций×2, настройкиIPv6 и own dynamic tables passed. Runtime ux-patch102/ux-a11y101 прежний. Следующий109 — IPv6 inner GRE/WireGuard; Portal/Telegram ожидают настройки и отдельного разрешения на сообщение.12.5 открыт. +Актуальное продолжение 2026-10-10: завершены12.5.107–109 — VXLAN bridge/FDB и IPv6 ULA inner в VXLAN/GRE/WireGuard по IPv4 outer. Steady/recovery Ping10/10 в обе стороны каждого типа; initial loss сохранён. Cleanup собственных объектов/baseline passed, обаCHR доступны. Runtime ux-patch102/ux-a11y101 прежний. Native IPv6 не означает поддержку IPv6 interface address в API/history/export GRE/WG. Следующий110 — профильная приёмка IPsec со сложным DN; Portal/Telegram ожидают настройки/разрешения.12.5 открыт. План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push. @@ -2353,3 +2353,13 @@ Initial Ping3/3 и steady Ping10/10 в обе стороны; сохранены Initial IPv6 Ping дал0/3 и1/3; packet rows сохранены, причина потерь не установлена. После3s паузы steady Ping10/10 в обе стороны. Native адреса valid/advertise=false, bridge host и VXLAN FDB изучили MAC противоположного моста с правильным remote VTEP. Каталог приложения показывает правильные интерфейсы/VNI/port/learning/remoteVteps без failures. После отключения собственного bridge-порта CHR1 Ping0/3 в обе стороны, интерфейсы остаются UP; после включения и2s паузы Ping10/10 и FDB подтверждены. Initial loss не скрыт повтором и не заменён утверждением о zero-loss startup/SLA. Exact-ID/marker cleanup вернул baseline projection13 коллекций×2, собственные bridge hosts/FDB отсутствуют; disable-ipv6/forward/accept-router-advertisements совпали с исходными. Пароли прежние, оба устройства доступны. Исходники/DB/runtime не менялись, build/общая UI регрессия не повторялись. Результат подтверждает native IPv6 inner в данной паре; не добавляет IPv6 IP/bridge/FDB в fragment экспорт, не доказывает SLAAC, клиентские ОС, масштаб, IPv6 outer или максимальную скорость. Следующий109 — GRE/WireGuard IPv6 inner по существующему IPv4 outer. + +## 12.5.109 — GRE/WireGuard: IPv6 inner и раздельное восстановление (2026-10-10) + +[Native отчёт](ux-ui/acceptance/gre-wireguard-ipv6-inner-2026-10-10.json). На обоих CHR создана отдельная GRE пара MTU1400 и WireGuard пара UDP59909/MTU1420. IPv6 ULA fd00:109:1::1/64↔::2/64 на GRE и fd00:109:2::1/64↔::2/64 на WG; advertise=no. GRE outer и WG endpoints остаются исходными публичными IPv4. Ключи сгенерировал RouterOS на собственных WG-интерфейсах; private keys не сохранялись в отчёт/репозиторий. Peer allowed-address ограничен удалённым собственным IPv6 /128, keepalive5s. До записей collision/baseline/IPv6 preflight завершён на обоих устройствах; ether1/глобальные настройки/ND/firewall/routes не изменялись вручную. + +Initial результаты: gre/CHR1=0/3, gre/CHR2=1/3, wireguard/CHR1=3/3, wireguard/CHR2=3/3. Все реальные packet rows сохранены. После3s паузы steady IPv6 Ping10/10 в обе стороны каждого типа, valid native адреса и WG handshake/rx/tx>0 подтверждены. Последовательно отключены только собственный GRE интерфейс CHR1 и собственный WG peer CHR1: соответствующий Ping0/3 в обе стороны, второй туннель в каждой фазе продолжает передавать3/3. После включения и3s паузы recovery Ping10/10 в обе стороны каждого типа. Измерение переходного loss/SLA/максимальной скорости не выполнялось. + +Production aggregate GET /api/gre/tunnels и /api/wireguard вернули собственные интерфейсы без failures; WG allowedIps сохранил native IPv6 /128, privateKey не возвращён. Ограничение обнаружено и зафиксировано: CHR1: GRE localInnerIp="", WG address=null; CHR2: GRE localInnerIp="", WG address=null. Текущие GRE/WG readers получают interface addresses из /ip/address, поэтому native IPv6 адрес не попадает в это поле. Эти проверки не принимают IPv6 создание/restore/history/export через приложение и не расширяют его API. Поддержка полного IPv6 управления требует отдельной согласованной модели адресов и миграции snapshots. + +Перед очисткой exact IDs/markers и immutable reference fields сверены; собственные peers/IPv6 addresses/interfaces удалены. Baseline projection13 коллекций×2 и7 исходных параметров IPv6 settings совпали. Пароли прежние, оба CHR доступны. DB/runtime/исходники продукта не менялись, повтор build/общей UI регрессии не требовался. Открыты IPv6 outer/client OS/scale, application IPv6 address lifecycle и остальные пункты матрицы. Следующий110 — IPsec complex/escaped DN с собственной сертификатной парой и контролем online identity; внешние Portal/Telegram требуют настоящей настройки. diff --git a/docs/ux-ui-test-server.md b/docs/ux-ui-test-server.md index 2c72b7a1..4a1192d8 100644 --- a/docs/ux-ui-test-server.md +++ b/docs/ux-ui-test-server.md @@ -1,6 +1,6 @@ # Тестовый сервер UX/UI — 2026-10-10 -Сервер161.104.46.222 предоставлен для временного тестирования. Backend ux-patch102/version1.0.0-test.patch102, frontend ux-a11y101/version1.0.0-test.a11y101; backend/PG healthy, frontend HTTP/browser passed. Основной блок IPsec77 принят в границах журнала, own fixtures/fake DB rows удалены; каталог flash CHR2 сохранён из-за неподтверждённого ownership. SSH/оба CHR доступны, пароли прежние. +Сервер161.104.46.222 предоставлен для временного тестирования. Backend ux-patch102/version1.0.0-test.patch102, frontend ux-a11y101/version1.0.0-test.a11y101; backend/PG healthy, frontend HTTP/browser passed. VPN107–109: VXLAN bridge/FDB и native IPv6 inner VXLAN/GRE/WireGuard приняты в границах журнала; собственные объекты удалены, baseline восстановлен; каталог flash CHR2 сохранён из-за неподтверждённого ownership. SSH/оба CHR доступны, пароли прежние. | Параметр | Проверенное состояние | | --- | --- | diff --git a/docs/ux-ui/acceptance/gre-wireguard-ipv6-inner-2026-10-10.json b/docs/ux-ui/acceptance/gre-wireguard-ipv6-inner-2026-10-10.json new file mode 100644 index 00000000..7978b88d --- /dev/null +++ b/docs/ux-ui/acceptance/gre-wireguard-ipv6-inner-2026-10-10.json @@ -0,0 +1,1801 @@ +{ + "date": "2026-10-10", + "block": "12.5.109", + "name": "mm-ipv6vpn109-1791597843877", + "runtime": { + "backend": "ux-patch102", + "frontend": "ux-a11y101" + }, + "creation": "Native REST; IPv6 inner over IPv4 GRE/WireGuard outer", + "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 + } + ], + "initial": [ + { + "type": "gre", + "serverId": 1, + "sent": 3, + "received": 0, + "rows": [ + { + "packet-loss": "100", + "received": "0", + "sent": "1", + "seq": "0", + "status": "no route to host" + }, + { + "packet-loss": "100", + "received": "0", + "sent": "2", + "seq": "1", + "status": "no route to host" + }, + { + "packet-loss": "100", + "received": "0", + "sent": "3", + "seq": "2", + "status": "no route to host" + } + ] + }, + { + "type": "gre", + "serverId": 2, + "sent": 3, + "received": 1, + "rows": [ + { + "packet-loss": "100", + "received": "0", + "sent": "1", + "seq": "0", + "status": "no route to host" + }, + { + "packet-loss": "100", + "received": "0", + "sent": "2", + "seq": "1", + "status": "no route to host" + }, + { + "avg-rtt": "53ms324us", + "host": "fd00:109:1::1", + "max-rtt": "53ms324us", + "min-rtt": "53ms324us", + "packet-loss": "66", + "received": "1", + "sent": "3", + "seq": "2", + "size": "56", + "status": "echo reply", + "time": "53ms324us", + "ttl": "64" + } + ] + }, + { + "type": "wireguard", + "serverId": 1, + "sent": 3, + "received": 3, + "rows": [ + { + "avg-rtt": "54ms786us", + "host": "fd00:109:2::2", + "max-rtt": "54ms786us", + "min-rtt": "54ms786us", + "packet-loss": "0", + "received": "1", + "sent": "1", + "seq": "0", + "size": "56", + "status": "echo reply", + "time": "54ms786us", + "ttl": "64" + }, + { + "avg-rtt": "55ms61us", + "host": "fd00:109:2::2", + "max-rtt": "55ms336us", + "min-rtt": "54ms786us", + "packet-loss": "0", + "received": "2", + "sent": "2", + "seq": "1", + "size": "56", + "status": "echo reply", + "time": "55ms336us", + "ttl": "64" + }, + { + "avg-rtt": "54ms922us", + "host": "fd00:109:2::2", + "max-rtt": "55ms336us", + "min-rtt": "54ms646us", + "packet-loss": "0", + "received": "3", + "sent": "3", + "seq": "2", + "size": "56", + "status": "echo reply", + "time": "54ms646us", + "ttl": "64" + } + ] + }, + { + "type": "wireguard", + "serverId": 2, + "sent": 3, + "received": 3, + "rows": [ + { + "avg-rtt": "54ms703us", + "host": "fd00:109:2::1", + "max-rtt": "54ms703us", + "min-rtt": "54ms703us", + "packet-loss": "0", + "received": "1", + "sent": "1", + "seq": "0", + "size": "56", + "status": "echo reply", + "time": "54ms703us", + "ttl": "64" + }, + { + "avg-rtt": "54ms654us", + "host": "fd00:109:2::1", + "max-rtt": "54ms703us", + "min-rtt": "54ms605us", + "packet-loss": "0", + "received": "2", + "sent": "2", + "seq": "1", + "size": "56", + "status": "echo reply", + "time": "54ms605us", + "ttl": "64" + }, + { + "avg-rtt": "54ms673us", + "host": "fd00:109:2::1", + "max-rtt": "54ms713us", + "min-rtt": "54ms605us", + "packet-loss": "0", + "received": "3", + "sent": "3", + "seq": "2", + "size": "56", + "status": "echo reply", + "time": "54ms713us", + "ttl": "64" + } + ] + } + ], + "steady": [ + { + "type": "gre", + "serverId": 1, + "sent": 10, + "received": 10, + "rows": [ + { + "avg-rtt": "54ms331us", + "host": "fd00:109:1::2", + "max-rtt": "54ms331us", + "min-rtt": "54ms331us", + "packet-loss": "0", + "received": "1", + "sent": "1", + "seq": "0", + "size": "56", + "status": "echo reply", + "time": "54ms331us", + "ttl": "64" + }, + { + "avg-rtt": "54ms334us", + "host": "fd00:109:1::2", + "max-rtt": "54ms338us", + "min-rtt": "54ms331us", + "packet-loss": "0", + "received": "2", + "sent": "2", + "seq": "1", + "size": "56", + "status": "echo reply", + "time": "54ms338us", + "ttl": "64" + }, + { + "avg-rtt": "54ms340us", + "host": "fd00:109:1::2", + "max-rtt": "54ms353us", + "min-rtt": "54ms331us", + "packet-loss": "0", + "received": "3", + "sent": "3", + "seq": "2", + "size": "56", + "status": "echo reply", + "time": "54ms353us", + "ttl": "64" + }, + { + "avg-rtt": "54ms342us", + "host": "fd00:109:1::2", + "max-rtt": "54ms353us", + "min-rtt": "54ms331us", + "packet-loss": "0", + "received": "4", + "sent": "4", + "seq": "3", + "size": "56", + "status": "echo reply", + "time": "54ms347us", + "ttl": "64" + }, + { + "avg-rtt": "54ms346us", + "host": "fd00:109:1::2", + "max-rtt": "54ms364us", + "min-rtt": "54ms331us", + "packet-loss": "0", + "received": "5", + "sent": "5", + "seq": "4", + "size": "56", + "status": "echo reply", + "time": "54ms364us", + "ttl": "64" + }, + { + "avg-rtt": "54ms459us", + "host": "fd00:109:1::2", + "max-rtt": "55ms24us", + "min-rtt": "54ms331us", + "packet-loss": "0", + "received": "6", + "sent": "6", + "seq": "5", + "size": "56", + "status": "echo reply", + "time": "55ms24us", + "ttl": "64" + }, + { + "avg-rtt": "54ms432us", + "host": "fd00:109:1::2", + "max-rtt": "55ms24us", + "min-rtt": "54ms272us", + "packet-loss": "0", + "received": "7", + "sent": "7", + "seq": "6", + "size": "56", + "status": "echo reply", + "time": "54ms272us", + "ttl": "64" + }, + { + "avg-rtt": "54ms411us", + "host": "fd00:109:1::2", + "max-rtt": "55ms24us", + "min-rtt": "54ms260us", + "packet-loss": "0", + "received": "8", + "sent": "8", + "seq": "7", + "size": "56", + "status": "echo reply", + "time": "54ms260us", + "ttl": "64" + }, + { + "avg-rtt": "54ms398us", + "host": "fd00:109:1::2", + "max-rtt": "55ms24us", + "min-rtt": "54ms260us", + "packet-loss": "0", + "received": "9", + "sent": "9", + "seq": "8", + "size": "56", + "status": "echo reply", + "time": "54ms293us", + "ttl": "64" + }, + { + "avg-rtt": "54ms386us", + "host": "fd00:109:1::2", + "max-rtt": "55ms24us", + "min-rtt": "54ms260us", + "packet-loss": "0", + "received": "10", + "sent": "10", + "seq": "9", + "size": "56", + "status": "echo reply", + "time": "54ms280us", + "ttl": "64" + } + ] + }, + { + "type": "gre", + "serverId": 2, + "sent": 10, + "received": 10, + "rows": [ + { + "avg-rtt": "53ms342us", + "host": "fd00:109:1::1", + "max-rtt": "53ms342us", + "min-rtt": "53ms342us", + "packet-loss": "0", + "received": "1", + "sent": "1", + "seq": "0", + "size": "56", + "status": "echo reply", + "time": "53ms342us", + "ttl": "64" + }, + { + "avg-rtt": "53ms339us", + "host": "fd00:109:1::1", + "max-rtt": "53ms342us", + "min-rtt": "53ms336us", + "packet-loss": "0", + "received": "2", + "sent": "2", + "seq": "1", + "size": "56", + "status": "echo reply", + "time": "53ms336us", + "ttl": "64" + }, + { + "avg-rtt": "53ms322us", + "host": "fd00:109:1::1", + "max-rtt": "53ms342us", + "min-rtt": "53ms288us", + "packet-loss": "0", + "received": "3", + "sent": "3", + "seq": "2", + "size": "56", + "status": "echo reply", + "time": "53ms288us", + "ttl": "64" + }, + { + "avg-rtt": "53ms323us", + "host": "fd00:109:1::1", + "max-rtt": "53ms342us", + "min-rtt": "53ms288us", + "packet-loss": "0", + "received": "4", + "sent": "4", + "seq": "3", + "size": "56", + "status": "echo reply", + "time": "53ms327us", + "ttl": "64" + }, + { + "avg-rtt": "53ms333us", + "host": "fd00:109:1::1", + "max-rtt": "53ms372us", + "min-rtt": "53ms288us", + "packet-loss": "0", + "received": "5", + "sent": "5", + "seq": "4", + "size": "56", + "status": "echo reply", + "time": "53ms372us", + "ttl": "64" + }, + { + "avg-rtt": "53ms347us", + "host": "fd00:109:1::1", + "max-rtt": "53ms418us", + "min-rtt": "53ms288us", + "packet-loss": "0", + "received": "6", + "sent": "6", + "seq": "5", + "size": "56", + "status": "echo reply", + "time": "53ms418us", + "ttl": "64" + }, + { + "avg-rtt": "53ms342us", + "host": "fd00:109:1::1", + "max-rtt": "53ms418us", + "min-rtt": "53ms288us", + "packet-loss": "0", + "received": "7", + "sent": "7", + "seq": "6", + "size": "56", + "status": "echo reply", + "time": "53ms316us", + "ttl": "64" + }, + { + "avg-rtt": "53ms373us", + "host": "fd00:109:1::1", + "max-rtt": "53ms591us", + "min-rtt": "53ms288us", + "packet-loss": "0", + "received": "8", + "sent": "8", + "seq": "7", + "size": "56", + "status": "echo reply", + "time": "53ms591us", + "ttl": "64" + }, + { + "avg-rtt": "53ms377us", + "host": "fd00:109:1::1", + "max-rtt": "53ms591us", + "min-rtt": "53ms288us", + "packet-loss": "0", + "received": "9", + "sent": "9", + "seq": "8", + "size": "56", + "status": "echo reply", + "time": "53ms409us", + "ttl": "64" + }, + { + "avg-rtt": "53ms376us", + "host": "fd00:109:1::1", + "max-rtt": "53ms591us", + "min-rtt": "53ms288us", + "packet-loss": "0", + "received": "10", + "sent": "10", + "seq": "9", + "size": "56", + "status": "echo reply", + "time": "53ms367us", + "ttl": "64" + } + ] + }, + { + "type": "wireguard", + "serverId": 1, + "sent": 10, + "received": 10, + "rows": [ + { + "avg-rtt": "54ms508us", + "host": "fd00:109:2::2", + "max-rtt": "54ms508us", + "min-rtt": "54ms508us", + "packet-loss": "0", + "received": "1", + "sent": "1", + "seq": "0", + "size": "56", + "status": "echo reply", + "time": "54ms508us", + "ttl": "64" + }, + { + "avg-rtt": "54ms697us", + "host": "fd00:109:2::2", + "max-rtt": "54ms887us", + "min-rtt": "54ms508us", + "packet-loss": "0", + "received": "2", + "sent": "2", + "seq": "1", + "size": "56", + "status": "echo reply", + "time": "54ms887us", + "ttl": "64" + }, + { + "avg-rtt": "54ms646us", + "host": "fd00:109:2::2", + "max-rtt": "54ms887us", + "min-rtt": "54ms508us", + "packet-loss": "0", + "received": "3", + "sent": "3", + "seq": "2", + "size": "56", + "status": "echo reply", + "time": "54ms545us", + "ttl": "64" + }, + { + "avg-rtt": "54ms638us", + "host": "fd00:109:2::2", + "max-rtt": "54ms887us", + "min-rtt": "54ms508us", + "packet-loss": "0", + "received": "4", + "sent": "4", + "seq": "3", + "size": "56", + "status": "echo reply", + "time": "54ms613us", + "ttl": "64" + }, + { + "avg-rtt": "54ms653us", + "host": "fd00:109:2::2", + "max-rtt": "54ms887us", + "min-rtt": "54ms508us", + "packet-loss": "0", + "received": "5", + "sent": "5", + "seq": "4", + "size": "56", + "status": "echo reply", + "time": "54ms715us", + "ttl": "64" + }, + { + "avg-rtt": "54ms622us", + "host": "fd00:109:2::2", + "max-rtt": "54ms887us", + "min-rtt": "54ms468us", + "packet-loss": "0", + "received": "6", + "sent": "6", + "seq": "5", + "size": "56", + "status": "echo reply", + "time": "54ms468us", + "ttl": "64" + }, + { + "avg-rtt": "54ms625us", + "host": "fd00:109:2::2", + "max-rtt": "54ms887us", + "min-rtt": "54ms468us", + "packet-loss": "0", + "received": "7", + "sent": "7", + "seq": "6", + "size": "56", + "status": "echo reply", + "time": "54ms645us", + "ttl": "64" + }, + { + "avg-rtt": "54ms614us", + "host": "fd00:109:2::2", + "max-rtt": "54ms887us", + "min-rtt": "54ms468us", + "packet-loss": "0", + "received": "8", + "sent": "8", + "seq": "7", + "size": "56", + "status": "echo reply", + "time": "54ms535us", + "ttl": "64" + }, + { + "avg-rtt": "54ms611us", + "host": "fd00:109:2::2", + "max-rtt": "54ms887us", + "min-rtt": "54ms468us", + "packet-loss": "0", + "received": "9", + "sent": "9", + "seq": "8", + "size": "56", + "status": "echo reply", + "time": "54ms584us", + "ttl": "64" + }, + { + "avg-rtt": "54ms620us", + "host": "fd00:109:2::2", + "max-rtt": "54ms887us", + "min-rtt": "54ms468us", + "packet-loss": "0", + "received": "10", + "sent": "10", + "seq": "9", + "size": "56", + "status": "echo reply", + "time": "54ms703us", + "ttl": "64" + } + ] + }, + { + "type": "wireguard", + "serverId": 2, + "sent": 10, + "received": 10, + "rows": [ + { + "avg-rtt": "54ms542us", + "host": "fd00:109:2::1", + "max-rtt": "54ms542us", + "min-rtt": "54ms542us", + "packet-loss": "0", + "received": "1", + "sent": "1", + "seq": "0", + "size": "56", + "status": "echo reply", + "time": "54ms542us", + "ttl": "64" + }, + { + "avg-rtt": "54ms584us", + "host": "fd00:109:2::1", + "max-rtt": "54ms627us", + "min-rtt": "54ms542us", + "packet-loss": "0", + "received": "2", + "sent": "2", + "seq": "1", + "size": "56", + "status": "echo reply", + "time": "54ms627us", + "ttl": "64" + }, + { + "avg-rtt": "54ms647us", + "host": "fd00:109:2::1", + "max-rtt": "54ms772us", + "min-rtt": "54ms542us", + "packet-loss": "0", + "received": "3", + "sent": "3", + "seq": "2", + "size": "56", + "status": "echo reply", + "time": "54ms772us", + "ttl": "64" + }, + { + "avg-rtt": "54ms680us", + "host": "fd00:109:2::1", + "max-rtt": "54ms780us", + "min-rtt": "54ms542us", + "packet-loss": "0", + "received": "4", + "sent": "4", + "seq": "3", + "size": "56", + "status": "echo reply", + "time": "54ms780us", + "ttl": "64" + }, + { + "avg-rtt": "54ms666us", + "host": "fd00:109:2::1", + "max-rtt": "54ms780us", + "min-rtt": "54ms542us", + "packet-loss": "0", + "received": "5", + "sent": "5", + "seq": "4", + "size": "56", + "status": "echo reply", + "time": "54ms609us", + "ttl": "64" + }, + { + "avg-rtt": "54ms660us", + "host": "fd00:109:2::1", + "max-rtt": "54ms780us", + "min-rtt": "54ms542us", + "packet-loss": "0", + "received": "6", + "sent": "6", + "seq": "5", + "size": "56", + "status": "echo reply", + "time": "54ms633us", + "ttl": "64" + }, + { + "avg-rtt": "54ms653us", + "host": "fd00:109:2::1", + "max-rtt": "54ms780us", + "min-rtt": "54ms542us", + "packet-loss": "0", + "received": "7", + "sent": "7", + "seq": "6", + "size": "56", + "status": "echo reply", + "time": "54ms614us", + "ttl": "64" + }, + { + "avg-rtt": "54ms647us", + "host": "fd00:109:2::1", + "max-rtt": "54ms780us", + "min-rtt": "54ms542us", + "packet-loss": "0", + "received": "8", + "sent": "8", + "seq": "7", + "size": "56", + "status": "echo reply", + "time": "54ms605us", + "ttl": "64" + }, + { + "avg-rtt": "54ms667us", + "host": "fd00:109:2::1", + "max-rtt": "54ms823us", + "min-rtt": "54ms542us", + "packet-loss": "0", + "received": "9", + "sent": "9", + "seq": "8", + "size": "56", + "status": "echo reply", + "time": "54ms823us", + "ttl": "64" + }, + { + "avg-rtt": "54ms674us", + "host": "fd00:109:2::1", + "max-rtt": "54ms823us", + "min-rtt": "54ms542us", + "packet-loss": "0", + "received": "10", + "sent": "10", + "seq": "9", + "size": "56", + "status": "echo reply", + "time": "54ms738us", + "ttl": "64" + } + ] + } + ], + "disabled": [ + { + "type": "gre", + "serverId": 1, + "sent": 3, + "received": 0, + "rows": [ + { + "packet-loss": "100", + "received": "0", + "sent": "1", + "seq": "0", + "status": "22 (Invalid argument)" + }, + { + "packet-loss": "100", + "received": "0", + "sent": "2", + "seq": "1", + "status": "no route to host" + }, + { + "packet-loss": "100", + "received": "0", + "sent": "3", + "seq": "2", + "status": "no route to host" + } + ] + }, + { + "type": "gre", + "serverId": 2, + "sent": 3, + "received": 0, + "rows": [ + { + "host": "fd00:109:1::1", + "packet-loss": "100", + "received": "0", + "sent": "1", + "seq": "0", + "status": "timeout" + }, + { + "host": "fd00:109:1::1", + "packet-loss": "100", + "received": "0", + "sent": "2", + "seq": "1", + "status": "timeout" + }, + { + "host": "fd00:109:1::1", + "packet-loss": "100", + "received": "0", + "sent": "3", + "seq": "2", + "status": "timeout" + } + ] + }, + { + "type": "wireguard", + "serverId": 1, + "sent": 3, + "received": 3, + "rows": [ + { + "avg-rtt": "54ms782us", + "host": "fd00:109:2::2", + "max-rtt": "54ms782us", + "min-rtt": "54ms782us", + "packet-loss": "0", + "received": "1", + "sent": "1", + "seq": "0", + "size": "56", + "status": "echo reply", + "time": "54ms782us", + "ttl": "64" + }, + { + "avg-rtt": "54ms738us", + "host": "fd00:109:2::2", + "max-rtt": "54ms782us", + "min-rtt": "54ms695us", + "packet-loss": "0", + "received": "2", + "sent": "2", + "seq": "1", + "size": "56", + "status": "echo reply", + "time": "54ms695us", + "ttl": "64" + }, + { + "avg-rtt": "54ms747us", + "host": "fd00:109:2::2", + "max-rtt": "54ms782us", + "min-rtt": "54ms695us", + "packet-loss": "0", + "received": "3", + "sent": "3", + "seq": "2", + "size": "56", + "status": "echo reply", + "time": "54ms764us", + "ttl": "64" + } + ], + "unaffectedOtherTunnel": true + }, + { + "type": "wireguard", + "serverId": 1, + "sent": 3, + "received": 0, + "rows": [ + { + "packet-loss": "100", + "received": "0", + "sent": "1", + "seq": "0", + "status": "126 (No error information)" + }, + { + "host": "fd00:109:2::1", + "packet-loss": "100", + "received": "0", + "sent": "1", + "seq": "0", + "size": "104", + "status": "address unreachable", + "time": "84us", + "ttl": "64" + }, + { + "packet-loss": "100", + "received": "0", + "sent": "2", + "seq": "1", + "status": "126 (No error information)" + } + ] + }, + { + "type": "wireguard", + "serverId": 2, + "sent": 3, + "received": 0, + "rows": [ + { + "host": "fd00:109:2::1", + "packet-loss": "100", + "received": "0", + "sent": "1", + "seq": "0", + "status": "timeout" + }, + { + "host": "fd00:109:2::1", + "packet-loss": "100", + "received": "0", + "sent": "2", + "seq": "1", + "status": "timeout" + }, + { + "host": "fd00:109:2::1", + "packet-loss": "100", + "received": "0", + "sent": "3", + "seq": "2", + "status": "timeout" + } + ] + }, + { + "type": "gre", + "serverId": 1, + "sent": 3, + "received": 3, + "rows": [ + { + "avg-rtt": "54ms387us", + "host": "fd00:109:1::2", + "max-rtt": "54ms387us", + "min-rtt": "54ms387us", + "packet-loss": "0", + "received": "1", + "sent": "1", + "seq": "0", + "size": "56", + "status": "echo reply", + "time": "54ms387us", + "ttl": "64" + }, + { + "avg-rtt": "54ms525us", + "host": "fd00:109:1::2", + "max-rtt": "54ms664us", + "min-rtt": "54ms387us", + "packet-loss": "0", + "received": "2", + "sent": "2", + "seq": "1", + "size": "56", + "status": "echo reply", + "time": "54ms664us", + "ttl": "64" + }, + { + "avg-rtt": "54ms474us", + "host": "fd00:109:1::2", + "max-rtt": "54ms664us", + "min-rtt": "54ms371us", + "packet-loss": "0", + "received": "3", + "sent": "3", + "seq": "2", + "size": "56", + "status": "echo reply", + "time": "54ms371us", + "ttl": "64" + } + ], + "unaffectedOtherTunnel": true + } + ], + "recovered": [ + { + "type": "gre", + "serverId": 1, + "sent": 10, + "received": 10, + "rows": [ + { + "avg-rtt": "54ms555us", + "host": "fd00:109:1::2", + "max-rtt": "54ms555us", + "min-rtt": "54ms555us", + "packet-loss": "0", + "received": "1", + "sent": "1", + "seq": "0", + "size": "56", + "status": "echo reply", + "time": "54ms555us", + "ttl": "64" + }, + { + "avg-rtt": "54ms586us", + "host": "fd00:109:1::2", + "max-rtt": "54ms617us", + "min-rtt": "54ms555us", + "packet-loss": "0", + "received": "2", + "sent": "2", + "seq": "1", + "size": "56", + "status": "echo reply", + "time": "54ms617us", + "ttl": "64" + }, + { + "avg-rtt": "54ms565us", + "host": "fd00:109:1::2", + "max-rtt": "54ms617us", + "min-rtt": "54ms524us", + "packet-loss": "0", + "received": "3", + "sent": "3", + "seq": "2", + "size": "56", + "status": "echo reply", + "time": "54ms524us", + "ttl": "64" + }, + { + "avg-rtt": "54ms581us", + "host": "fd00:109:1::2", + "max-rtt": "54ms631us", + "min-rtt": "54ms524us", + "packet-loss": "0", + "received": "4", + "sent": "4", + "seq": "3", + "size": "56", + "status": "echo reply", + "time": "54ms631us", + "ttl": "64" + }, + { + "avg-rtt": "54ms526us", + "host": "fd00:109:1::2", + "max-rtt": "54ms631us", + "min-rtt": "54ms303us", + "packet-loss": "0", + "received": "5", + "sent": "5", + "seq": "4", + "size": "56", + "status": "echo reply", + "time": "54ms303us", + "ttl": "64" + }, + { + "avg-rtt": "54ms486us", + "host": "fd00:109:1::2", + "max-rtt": "54ms631us", + "min-rtt": "54ms287us", + "packet-loss": "0", + "received": "6", + "sent": "6", + "seq": "5", + "size": "56", + "status": "echo reply", + "time": "54ms287us", + "ttl": "64" + }, + { + "avg-rtt": "54ms459us", + "host": "fd00:109:1::2", + "max-rtt": "54ms631us", + "min-rtt": "54ms287us", + "packet-loss": "0", + "received": "7", + "sent": "7", + "seq": "6", + "size": "56", + "status": "echo reply", + "time": "54ms302us", + "ttl": "64" + }, + { + "avg-rtt": "54ms442us", + "host": "fd00:109:1::2", + "max-rtt": "54ms631us", + "min-rtt": "54ms287us", + "packet-loss": "0", + "received": "8", + "sent": "8", + "seq": "7", + "size": "56", + "status": "echo reply", + "time": "54ms323us", + "ttl": "64" + }, + { + "avg-rtt": "54ms461us", + "host": "fd00:109:1::2", + "max-rtt": "54ms631us", + "min-rtt": "54ms287us", + "packet-loss": "0", + "received": "9", + "sent": "9", + "seq": "8", + "size": "56", + "status": "echo reply", + "time": "54ms610us", + "ttl": "64" + }, + { + "avg-rtt": "54ms457us", + "host": "fd00:109:1::2", + "max-rtt": "54ms631us", + "min-rtt": "54ms287us", + "packet-loss": "0", + "received": "10", + "sent": "10", + "seq": "9", + "size": "56", + "status": "echo reply", + "time": "54ms426us", + "ttl": "64" + } + ] + }, + { + "type": "gre", + "serverId": 2, + "sent": 10, + "received": 10, + "rows": [ + { + "avg-rtt": "53ms497us", + "host": "fd00:109:1::1", + "max-rtt": "53ms497us", + "min-rtt": "53ms497us", + "packet-loss": "0", + "received": "1", + "sent": "1", + "seq": "0", + "size": "56", + "status": "echo reply", + "time": "53ms497us", + "ttl": "64" + }, + { + "avg-rtt": "53ms933us", + "host": "fd00:109:1::1", + "max-rtt": "54ms369us", + "min-rtt": "53ms497us", + "packet-loss": "0", + "received": "2", + "sent": "2", + "seq": "1", + "size": "56", + "status": "echo reply", + "time": "54ms369us", + "ttl": "64" + }, + { + "avg-rtt": "53ms741us", + "host": "fd00:109:1::1", + "max-rtt": "54ms369us", + "min-rtt": "53ms357us", + "packet-loss": "0", + "received": "3", + "sent": "3", + "seq": "2", + "size": "56", + "status": "echo reply", + "time": "53ms357us", + "ttl": "64" + }, + { + "avg-rtt": "53ms627us", + "host": "fd00:109:1::1", + "max-rtt": "54ms369us", + "min-rtt": "53ms285us", + "packet-loss": "0", + "received": "4", + "sent": "4", + "seq": "3", + "size": "56", + "status": "echo reply", + "time": "53ms285us", + "ttl": "64" + }, + { + "avg-rtt": "53ms605us", + "host": "fd00:109:1::1", + "max-rtt": "54ms369us", + "min-rtt": "53ms285us", + "packet-loss": "0", + "received": "5", + "sent": "5", + "seq": "4", + "size": "56", + "status": "echo reply", + "time": "53ms519us", + "ttl": "64" + }, + { + "avg-rtt": "54ms738us", + "host": "fd00:109:1::1", + "max-rtt": "60ms403us", + "min-rtt": "53ms285us", + "packet-loss": "0", + "received": "6", + "sent": "6", + "seq": "5", + "size": "56", + "status": "echo reply", + "time": "60ms403us", + "ttl": "64" + }, + { + "avg-rtt": "54ms538us", + "host": "fd00:109:1::1", + "max-rtt": "60ms403us", + "min-rtt": "53ms285us", + "packet-loss": "0", + "received": "7", + "sent": "7", + "seq": "6", + "size": "56", + "status": "echo reply", + "time": "53ms336us", + "ttl": "64" + }, + { + "avg-rtt": "54ms391us", + "host": "fd00:109:1::1", + "max-rtt": "60ms403us", + "min-rtt": "53ms285us", + "packet-loss": "0", + "received": "8", + "sent": "8", + "seq": "7", + "size": "56", + "status": "echo reply", + "time": "53ms367us", + "ttl": "64" + }, + { + "avg-rtt": "54ms287us", + "host": "fd00:109:1::1", + "max-rtt": "60ms403us", + "min-rtt": "53ms285us", + "packet-loss": "0", + "received": "9", + "sent": "9", + "seq": "8", + "size": "56", + "status": "echo reply", + "time": "53ms455us", + "ttl": "64" + }, + { + "avg-rtt": "54ms210us", + "host": "fd00:109:1::1", + "max-rtt": "60ms403us", + "min-rtt": "53ms285us", + "packet-loss": "0", + "received": "10", + "sent": "10", + "seq": "9", + "size": "56", + "status": "echo reply", + "time": "53ms513us", + "ttl": "64" + } + ] + }, + { + "type": "wireguard", + "serverId": 1, + "sent": 10, + "received": 10, + "rows": [ + { + "avg-rtt": "54ms915us", + "host": "fd00:109:2::2", + "max-rtt": "54ms915us", + "min-rtt": "54ms915us", + "packet-loss": "0", + "received": "1", + "sent": "1", + "seq": "0", + "size": "56", + "status": "echo reply", + "time": "54ms915us", + "ttl": "64" + }, + { + "avg-rtt": "55ms42us", + "host": "fd00:109:2::2", + "max-rtt": "55ms169us", + "min-rtt": "54ms915us", + "packet-loss": "0", + "received": "2", + "sent": "2", + "seq": "1", + "size": "56", + "status": "echo reply", + "time": "55ms169us", + "ttl": "64" + }, + { + "avg-rtt": "55ms498us", + "host": "fd00:109:2::2", + "max-rtt": "56ms410us", + "min-rtt": "54ms915us", + "packet-loss": "0", + "received": "3", + "sent": "3", + "seq": "2", + "size": "56", + "status": "echo reply", + "time": "56ms410us", + "ttl": "64" + }, + { + "avg-rtt": "55ms371us", + "host": "fd00:109:2::2", + "max-rtt": "56ms410us", + "min-rtt": "54ms915us", + "packet-loss": "0", + "received": "4", + "sent": "4", + "seq": "3", + "size": "56", + "status": "echo reply", + "time": "54ms991us", + "ttl": "64" + }, + { + "avg-rtt": "55ms349us", + "host": "fd00:109:2::2", + "max-rtt": "56ms410us", + "min-rtt": "54ms915us", + "packet-loss": "0", + "received": "5", + "sent": "5", + "seq": "4", + "size": "56", + "status": "echo reply", + "time": "55ms262us", + "ttl": "64" + }, + { + "avg-rtt": "55ms245us", + "host": "fd00:109:2::2", + "max-rtt": "56ms410us", + "min-rtt": "54ms725us", + "packet-loss": "0", + "received": "6", + "sent": "6", + "seq": "5", + "size": "56", + "status": "echo reply", + "time": "54ms725us", + "ttl": "64" + }, + { + "avg-rtt": "55ms157us", + "host": "fd00:109:2::2", + "max-rtt": "56ms410us", + "min-rtt": "54ms633us", + "packet-loss": "0", + "received": "7", + "sent": "7", + "seq": "6", + "size": "56", + "status": "echo reply", + "time": "54ms633us", + "ttl": "64" + }, + { + "avg-rtt": "55ms99us", + "host": "fd00:109:2::2", + "max-rtt": "56ms410us", + "min-rtt": "54ms633us", + "packet-loss": "0", + "received": "8", + "sent": "8", + "seq": "7", + "size": "56", + "status": "echo reply", + "time": "54ms693us", + "ttl": "64" + }, + { + "avg-rtt": "55ms61us", + "host": "fd00:109:2::2", + "max-rtt": "56ms410us", + "min-rtt": "54ms633us", + "packet-loss": "0", + "received": "9", + "sent": "9", + "seq": "8", + "size": "56", + "status": "echo reply", + "time": "54ms754us", + "ttl": "64" + }, + { + "avg-rtt": "55ms65us", + "host": "fd00:109:2::2", + "max-rtt": "56ms410us", + "min-rtt": "54ms633us", + "packet-loss": "0", + "received": "10", + "sent": "10", + "seq": "9", + "size": "56", + "status": "echo reply", + "time": "55ms101us", + "ttl": "64" + } + ] + }, + { + "type": "wireguard", + "serverId": 2, + "sent": 10, + "received": 10, + "rows": [ + { + "avg-rtt": "54ms407us", + "host": "fd00:109:2::1", + "max-rtt": "54ms407us", + "min-rtt": "54ms407us", + "packet-loss": "0", + "received": "1", + "sent": "1", + "seq": "0", + "size": "56", + "status": "echo reply", + "time": "54ms407us", + "ttl": "64" + }, + { + "avg-rtt": "54ms487us", + "host": "fd00:109:2::1", + "max-rtt": "54ms567us", + "min-rtt": "54ms407us", + "packet-loss": "0", + "received": "2", + "sent": "2", + "seq": "1", + "size": "56", + "status": "echo reply", + "time": "54ms567us", + "ttl": "64" + }, + { + "avg-rtt": "54ms552us", + "host": "fd00:109:2::1", + "max-rtt": "54ms683us", + "min-rtt": "54ms407us", + "packet-loss": "0", + "received": "3", + "sent": "3", + "seq": "2", + "size": "56", + "status": "echo reply", + "time": "54ms683us", + "ttl": "64" + }, + { + "avg-rtt": "54ms581us", + "host": "fd00:109:2::1", + "max-rtt": "54ms683us", + "min-rtt": "54ms407us", + "packet-loss": "0", + "received": "4", + "sent": "4", + "seq": "3", + "size": "56", + "status": "echo reply", + "time": "54ms670us", + "ttl": "64" + }, + { + "avg-rtt": "54ms588us", + "host": "fd00:109:2::1", + "max-rtt": "54ms683us", + "min-rtt": "54ms407us", + "packet-loss": "0", + "received": "5", + "sent": "5", + "seq": "4", + "size": "56", + "status": "echo reply", + "time": "54ms615us", + "ttl": "64" + }, + { + "avg-rtt": "54ms589us", + "host": "fd00:109:2::1", + "max-rtt": "54ms683us", + "min-rtt": "54ms407us", + "packet-loss": "0", + "received": "6", + "sent": "6", + "seq": "5", + "size": "56", + "status": "echo reply", + "time": "54ms596us", + "ttl": "64" + }, + { + "avg-rtt": "54ms603us", + "host": "fd00:109:2::1", + "max-rtt": "54ms688us", + "min-rtt": "54ms407us", + "packet-loss": "0", + "received": "7", + "sent": "7", + "seq": "6", + "size": "56", + "status": "echo reply", + "time": "54ms688us", + "ttl": "64" + }, + { + "avg-rtt": "54ms614us", + "host": "fd00:109:2::1", + "max-rtt": "54ms691us", + "min-rtt": "54ms407us", + "packet-loss": "0", + "received": "8", + "sent": "8", + "seq": "7", + "size": "56", + "status": "echo reply", + "time": "54ms691us", + "ttl": "64" + }, + { + "avg-rtt": "54ms633us", + "host": "fd00:109:2::1", + "max-rtt": "54ms783us", + "min-rtt": "54ms407us", + "packet-loss": "0", + "received": "9", + "sent": "9", + "seq": "8", + "size": "56", + "status": "echo reply", + "time": "54ms783us", + "ttl": "64" + }, + { + "avg-rtt": "54ms620us", + "host": "fd00:109:2::1", + "max-rtt": "54ms783us", + "min-rtt": "54ms407us", + "packet-loss": "0", + "received": "10", + "sent": "10", + "seq": "9", + "size": "56", + "status": "echo reply", + "time": "54ms505us", + "ttl": "64" + } + ] + } + ], + "cleanup": [ + { + "serverId": 1, + "/interface/gre": true, + "/interface/wireguard": true, + "/interface/wireguard/peers": 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, + "ipv6SettingsUnchanged": true + }, + { + "serverId": 2, + "/interface/gre": true, + "/interface/wireguard": true, + "/interface/wireguard/peers": 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, + "ipv6SettingsUnchanged": true + } + ], + "limits": [ + "Two CHR, IPv4 outer on existing public WAN; no IPv6 outer/client OS/scale/SLA claim", + "Application IPv6 interface address read/write/history/export is not accepted by native data-plane proof" + ], + "nativePeers": [ + { + "serverId": 1, + "name": "mm-ipv6vpn109-1791597843877-peer", + "interface": "mm-ipv6vpn109-1791597843877-w", + "allowed-address": "fd00:109:2::2/128", + "current-endpoint-address": "104.165.244.7", + "current-endpoint-port": "59909", + "last-handshake": "25s", + "rx": "2740", + "tx": "2832", + "disabled": "false" + }, + { + "serverId": 2, + "name": "mm-ipv6vpn109-1791597843877-peer", + "interface": "mm-ipv6vpn109-1791597843877-w", + "allowed-address": "fd00:109:2::1/128", + "current-endpoint-address": "194.226.121.150", + "current-endpoint-port": "59909", + "last-handshake": "26s", + "rx": "2684", + "tx": "2740", + "disabled": "false" + } + ], + "nativeAddresses": [ + { + "serverId": 1, + "rows": [ + { + ".id": "*89", + "actual-interface": "mm-ipv6vpn109-1791597843877-g", + "address": "fd00:109:1::1/64", + "advertise": "false", + "auto-link-local": "true", + "comment": "mm-ipv6vpn109-1791597843877", + "deprecated": "false", + "disabled": "false", + "dynamic": "false", + "eui-64": "false", + "from-pool": "", + "global": "true", + "interface": "mm-ipv6vpn109-1791597843877-g", + "invalid": "false", + "no-dad": "false", + "slave": "false", + "vrf": "main" + }, + { + ".id": "*8A", + "actual-interface": "mm-ipv6vpn109-1791597843877-w", + "address": "fd00:109:2::1/64", + "advertise": "false", + "auto-link-local": "true", + "comment": "mm-ipv6vpn109-1791597843877", + "deprecated": "false", + "disabled": "false", + "dynamic": "false", + "eui-64": "false", + "from-pool": "", + "global": "true", + "interface": "mm-ipv6vpn109-1791597843877-w", + "invalid": "false", + "no-dad": "false", + "slave": "false", + "vrf": "main" + } + ] + }, + { + "serverId": 2, + "rows": [ + { + ".id": "*6B", + "actual-interface": "mm-ipv6vpn109-1791597843877-g", + "address": "fd00:109:1::2/64", + "advertise": "false", + "auto-link-local": "true", + "comment": "mm-ipv6vpn109-1791597843877", + "deprecated": "false", + "disabled": "false", + "dynamic": "false", + "eui-64": "false", + "from-pool": "", + "global": "true", + "interface": "mm-ipv6vpn109-1791597843877-g", + "invalid": "false", + "no-dad": "false", + "slave": "false", + "vrf": "main" + }, + { + ".id": "*6C", + "actual-interface": "mm-ipv6vpn109-1791597843877-w", + "address": "fd00:109:2::2/64", + "advertise": "false", + "auto-link-local": "true", + "comment": "mm-ipv6vpn109-1791597843877", + "deprecated": "false", + "disabled": "false", + "dynamic": "false", + "eui-64": "false", + "from-pool": "", + "global": "true", + "interface": "mm-ipv6vpn109-1791597843877-w", + "invalid": "false", + "no-dad": "false", + "slave": "false", + "vrf": "main" + } + ] + } + ], + "application": [ + { + "serverId": 1, + "gre": { + "name": "mm-ipv6vpn109-1791597843877-g", + "status": "up", + "localInnerIp": "", + "remoteInnerIp": "" + }, + "wireguard": { + "name": "mm-ipv6vpn109-1791597843877-w", + "status": "up", + "address": null, + "allowedIps": [ + "fd00:109:2::2/128" + ], + "privateKeyReturned": false + } + }, + { + "serverId": 2, + "gre": { + "name": "mm-ipv6vpn109-1791597843877-g", + "status": "up", + "localInnerIp": "", + "remoteInnerIp": "" + }, + "wireguard": { + "name": "mm-ipv6vpn109-1791597843877-w", + "status": "up", + "address": null, + "allowedIps": [ + "fd00:109:2::1/128" + ], + "privateKeyReturned": false + } + } + ] +} \ No newline at end of file