chore(test): подтвердить таймер BGP без BFD

This commit is contained in:
Denozordec committed 2026-10-10 03:34:04 +07:00
1 parent 2d4e8baa13
commit beb72ceea1
7 files changed
+774 -8

No files matched your search

+13 -1
View File
@@ -1,6 +1,6 @@
# UX/UI: протокол внешней приёмки 12.5
Актуальное продолжение 2026-10-10: завершены12.5.93–103. Native Ping8×10 packets: public10/10 в обоих направлениях/фазах, GRE initial9/10→settled10/10 наCHR1→2, reverse10/10; raw counts согласованы, прежние потери102 не скрыты. Own fixtures очищены; backend ux-patch102/frontend ux-a11y101. Следующий12.5.104 — BGP безBFD, scoped TCP loss/hold3s и withdrawal/recovery при работающем GRE. Матрица docs/ux-ui-remaining-acceptance.md; этап12.5 открыт.
Актуальное продолжение 2026-10-10: завершены12.5.93–104. BGP безBFD/hold3s/keepalive1s: scoped TCP loss при GRE ICMP3/3×2 вызвал session/own-route withdrawal; снятиеdrops вернуло Established/Rx1, baseline10 collections×2 restored. Backend ux-patch102/frontend ux-a11y101, credentials прежние. Следующий12.5.105 — финальный source/context/runtime/evidence контроль и оставшиеся внешние условия. Матрица docs/ux-ui-remaining-acceptance.md; этап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).
@@ -998,3 +998,15 @@ Scoped TypeScript/новые components+test lint passed; старый NavUser s
Во всех8 ответах final sent/received соответствуют числу raw reply/timeout rows. В этой серии статистика согласована; счётчики нельзя «исправить», скрыв timeout. Наблюдения102 с1/3 и2/3 не переписаны. Здесь steady sample не выявил устойчивых потерь, но причиной начальных потерь и долгосрочной zero-loss/SLA это не является; startup/transient explanation остаётся гипотезой. Нет packet capture/физическогоWAN теста/максимальной нагрузки.
Exact own GRE/IP IDs/name/comment/address/interface удалены, baseline3 коллекций×2 совпал; public/default/metadata/195.195.195.195/32 иcredentials сохранены. ОбаCHR доступны, native fixtures/extra containers0, build/DB writes/messages0. Следующий104 — собственная BGP пара безBFD, negotiated hold3s/keepalive1s, scoped TCP loss при работающем GRE/ICMP, withdrawal/recovery. Проверка отличает hold expiry от административного connection/interface disable; не обещает точный timing/physical WAN redundancy. Один локальный commit без push; этап12.5 открыт.
## 12.5.104 — BGP hold expiry без BFD (2026-10-10)
[Native/API/cleanup](ux-ui/acceptance/bgp-hold-timer-2026-10-10.json). Собственная GRE198.18.104.0/30/loopbacks198.18.204.1/32↔2/32, AS65104/65105; input/output chains принимают только соответствующий exact own /32, output.network single own loopback/default-originate never. Обаnative connection use-bfd=false, hold3s/keepalive1s; session local/remote hold-time3s иkeepalive1s подтверждены, BFD configurations не создавались.
Две собственные firewall rules только наCHR1: input/output TCP между own GRE link IPs с exact in/out-interface; baseline firewall empty проверен. НиGRE, ниBGPconnection не отключались. Полный underlay остаётся активным, после protocol loss direct GRE ICMP3/3×2/running=true. BGP initially Established/own route/Ping3/3×2; после scoped TCP loss обе сессии перестали быть Established/active own route отсутствует. Снятие двух own rules восстановило Established/own /32/catalog Rx1×2.
ACK добавления двухdrops41,3ms; первое notEstablished наблюдение2667,3ms, обе active routes отсутствуют3690,5ms от начала fault. last-keepalive instant не зафиксирован, samples включаютREST/планирование: это upper observation bounds, не точное hold duration/SLA. Различие с92 административнымdisable/93BFD-path loss сохранено. В этой конфигурации отказ TCP проявился при работающем GRE/ICMP; physical WAN redundancy/разные peers/IPv6/scale не приняты.
Определение hold/keepalive подтверждено [официальным BGP connection reference](https://manual.mikrotik.com/docs/cli-reference/routing/bgp/connection/); текущая online docs7.26, наличие свойств/поведение непосредственно проверено на lab7.24.5. Source/UI/build/DB writes/messages0, первая попытка passed. Ownership preflight exact IDs/name/comment/chain/list/address/interface/protocol/src/dst, drops сначала удалены дляrecovery, потом own BGP/filter/address-list/IP/bridge/GRE. Baseline10 коллекций×2 совпал, public/default/metadata/195.195.195.195/32/credentials сохранены, обаCHR доступны. Runtime backend patch102/frontend a11y101, extra fixtures/containers0. Один локальный commit без push.
Следующий105 — заключительный source/context/runtime/evidence контроль окна и точная матрица оставшихся внешних условий. Принятые network tests не повторять без изменения/ошибки. Этап12.5 остаётся открытым.
+2 -2
View File
@@ -1,12 +1,12 @@
# План реализации UX/UI по пятичасовым окнам
Актуальное продолжение 2026-10-10: завершены12.5.93–103. Native Ping8×10 packets: public10/10 в обоих направлениях/фазах, GRE initial9/10→settled10/10 наCHR1→2, reverse10/10; raw counts согласованы, прежние потери102 не скрыты. Own fixtures очищены; backend ux-patch102/frontend ux-a11y101. Следующий12.5.104 — BGP безBFD, scoped TCP loss/hold3s и withdrawal/recovery при работающем GRE. Матрица docs/ux-ui-remaining-acceptance.md; этап12.5 открыт.
Актуальное продолжение 2026-10-10: завершены12.5.93–104. BGP безBFD/hold3s/keepalive1s: scoped TCP loss при GRE ICMP3/3×2 вызвал session/own-route withdrawal; снятиеdrops вернуло Established/Rx1, baseline10 collections×2 restored. Backend ux-patch102/frontend ux-a11y101, credentials прежние. Следующий12.5.105 — финальный source/context/runtime/evidence контроль и оставшиеся внешние условия. Матрица docs/ux-ui-remaining-acceptance.md; этап12.5 открыт.
Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-10. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат.
## Актуальная точка продолжения — 2026-10-10
Актуальное продолжение 2026-10-10: завершены12.5.93–103. Native Ping8×10 packets: public10/10 в обоих направлениях/фазах, GRE initial9/10→settled10/10 наCHR1→2, reverse10/10; raw counts согласованы, прежние потери102 не скрыты. Own fixtures очищены; backend ux-patch102/frontend ux-a11y101. Следующий12.5.104 — BGP безBFD, scoped TCP loss/hold3s и withdrawal/recovery при работающем GRE. Матрица docs/ux-ui-remaining-acceptance.md; этап12.5 открыт.
Актуальное продолжение 2026-10-10: завершены12.5.93–104. BGP безBFD/hold3s/keepalive1s: scoped TCP loss при GRE ICMP3/3×2 вызвал session/own-route withdrawal; снятиеdrops вернуло Established/Rx1, baseline10 collections×2 restored. Backend ux-patch102/frontend ux-a11y101, credentials прежние. Следующий12.5.105 — финальный source/context/runtime/evidence контроль и оставшиеся внешние условия. Матрица docs/ux-ui-remaining-acceptance.md; этап12.5 открыт.
Этапы0–11 завершены в локальных границах журнала. История выполненных внешних блоков и доказательства сохранены в [журнале](ux-ui-stage-12.md) и [протоколе](ux-ui-external-acceptance.md). Реальная Telegram доставка, Portal SSO, multi-instance и оставшиеся профильные сетевые ограничения открыты.
+14 -2
View File
@@ -1,6 +1,6 @@
# UX/UI: журнал реализации
Актуальное продолжение 2026-10-10: завершены12.5.93–103. Native Ping8×10 packets: public10/10 в обоих направлениях/фазах, GRE initial9/10→settled10/10 наCHR1→2, reverse10/10; raw counts согласованы, прежние потери102 не скрыты. Own fixtures очищены; backend ux-patch102/frontend ux-a11y101. Следующий12.5.104 — BGP безBFD, scoped TCP loss/hold3s и withdrawal/recovery при работающем GRE. Матрица docs/ux-ui-remaining-acceptance.md; этап12.5 открыт.
Актуальное продолжение 2026-10-10: завершены12.5.93–104. BGP безBFD/hold3s/keepalive1s: scoped TCP loss при GRE ICMP3/3×2 вызвал session/own-route withdrawal; снятиеdrops вернуло Established/Rx1, baseline10 collections×2 restored. Backend ux-patch102/frontend ux-a11y101, credentials прежние. Следующий12.5.105 — финальный source/context/runtime/evidence контроль и оставшиеся внешние условия. Матрица docs/ux-ui-remaining-acceptance.md; этап12.5 открыт.
Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md).
@@ -36,7 +36,19 @@
| 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–103 и ограничения ниже. Runtime backend ux-diagnostics89/frontend ux-ospf91. |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–104 и ограничения ниже. Runtime backend ux-diagnostics89/frontend ux-ospf91. |
## 12.5.104 — BGP hold expiry без BFD (2026-10-10)
[Native/API/cleanup](ux-ui/acceptance/bgp-hold-timer-2026-10-10.json). Собственная GRE198.18.104.0/30/loopbacks198.18.204.1/32↔2/32, AS65104/65105; input/output chains принимают только соответствующий exact own /32, output.network single own loopback/default-originate never. Обаnative connection use-bfd=false, hold3s/keepalive1s; session local/remote hold-time3s иkeepalive1s подтверждены, BFD configurations не создавались.
Две собственные firewall rules только наCHR1: input/output TCP между own GRE link IPs с exact in/out-interface; baseline firewall empty проверен. НиGRE, ниBGPconnection не отключались. Полный underlay остаётся активным, после protocol loss direct GRE ICMP3/3×2/running=true. BGP initially Established/own route/Ping3/3×2; после scoped TCP loss обе сессии перестали быть Established/active own route отсутствует. Снятие двух own rules восстановило Established/own /32/catalog Rx1×2.
ACK добавления двухdrops41,3ms; первое notEstablished наблюдение2667,3ms, обе active routes отсутствуют3690,5ms от начала fault. last-keepalive instant не зафиксирован, samples включаютREST/планирование: это upper observation bounds, не точное hold duration/SLA. Различие с92 административнымdisable/93BFD-path loss сохранено. В этой конфигурации отказ TCP проявился при работающем GRE/ICMP; physical WAN redundancy/разные peers/IPv6/scale не приняты.
Определение hold/keepalive подтверждено [официальным BGP connection reference](https://manual.mikrotik.com/docs/cli-reference/routing/bgp/connection/); текущая online docs7.26, наличие свойств/поведение непосредственно проверено на lab7.24.5. Source/UI/build/DB writes/messages0, первая попытка passed. Ownership preflight exact IDs/name/comment/chain/list/address/interface/protocol/src/dst, drops сначала удалены дляrecovery, потом own BGP/filter/address-list/IP/bridge/GRE. Baseline10 коллекций×2 совпал, public/default/metadata/195.195.195.195/32/credentials сохранены, обаCHR доступны. Runtime backend patch102/frontend a11y101, extra fixtures/containers0. Один локальный commit без push.
Следующий105 — заключительный source/context/runtime/evidence контроль окна и точная матрица оставшихся внешних условий. Принятые network tests не повторять без изменения/ошибки. Этап12.5 остаётся открытым.
## 12.5.103 — native Ping: public и собственный GRE (2026-10-10)
+3 -3
View File
@@ -1,6 +1,6 @@
# Оставшаяся внешняя приёмка — 2026-10-10
Это актуальная матрица после 12.5.103. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии.
Это актуальная матрица после 12.5.104. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 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 проверялись в изолированных процессах. Все собственные объекты последнего сценария удалены, исходные11 коллекций×2 восстановлены; пароли не менялись.
@@ -14,7 +14,7 @@
| VXLAN | Собственная пара/private Ping/catalog/URL/export75–76 | API приложения read-only: create/delete проверены native. IPv6, bridge/FDB/масштаб/производительность, профильные 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 открыты |
| BGP | Established83, exact /32 exchange/API/UI/administrative withdrawal92, BFD primary GRE loss/alternate/recovery93 | Hold timer безBFD, packet loss в переходе, разные внешние peers/WAN policy, IPv6/scale. Два логических пути используют тот же public WAN; physical redundancy не принята |
| 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 | DNS использует backend resolver; MTU — ограниченная оценка, не гарантированный максимум. Stop ожидания не доказывает остановку RouterOS команды; arbitrary CLI и physical disconnect не приняты |
| Portal/интеграции | Локальные и isolated JWT guards; UI/API error states в границах журналов | Настоящий Portal issuer/login/отзыв прав; внешние RIPE/MaxMind/S3/container/certificate jobs и Gitea delivery требуют отдельных тестовых endpoints/аккаунтов. Не отправлять сообщения и не публиковать релиз без соответствующего поручения |
@@ -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 — BGP hold-timer безBFD.
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.
3. **Заключительный профильный контроль:** после последнего исправления собрать только затронутую часть, проверить её live и обновить матрицу. Общую регрессию выполнить один раз на согласованном runtime.
4. **Внешние зависимости:** Telegram/Portal/client OS/multi-WAN/scale проходят отдельную приёмку при наличии нужных аккаунтов, устройств и разрешений. Лабораторный результат двух CHR не закрывает их автоматически.
+12
View File
@@ -2303,3 +2303,15 @@ Scoped TypeScript/новые components+test lint passed; старый NavUser s
Во всех8 ответах final sent/received соответствуют числу raw reply/timeout rows. В этой серии статистика согласована; счётчики нельзя «исправить», скрыв timeout. Наблюдения102 с1/3 и2/3 не переписаны. Здесь steady sample не выявил устойчивых потерь, но причиной начальных потерь и долгосрочной zero-loss/SLA это не является; startup/transient explanation остаётся гипотезой. Нет packet capture/физическогоWAN теста/максимальной нагрузки.
Exact own GRE/IP IDs/name/comment/address/interface удалены, baseline3 коллекций×2 совпал; public/default/metadata/195.195.195.195/32 иcredentials сохранены. ОбаCHR доступны, native fixtures/extra containers0, build/DB writes/messages0. Следующий104 — собственная BGP пара безBFD, negotiated hold3s/keepalive1s, scoped TCP loss при работающем GRE/ICMP, withdrawal/recovery. Проверка отличает hold expiry от административного connection/interface disable; не обещает точный timing/physical WAN redundancy. Один локальный commit без push; этап12.5 открыт.
## 12.5.104 — BGP hold expiry без BFD (2026-10-10)
[Native/API/cleanup](ux-ui/acceptance/bgp-hold-timer-2026-10-10.json). Собственная GRE198.18.104.0/30/loopbacks198.18.204.1/32↔2/32, AS65104/65105; input/output chains принимают только соответствующий exact own /32, output.network single own loopback/default-originate never. Обаnative connection use-bfd=false, hold3s/keepalive1s; session local/remote hold-time3s иkeepalive1s подтверждены, BFD configurations не создавались.
Две собственные firewall rules только наCHR1: input/output TCP между own GRE link IPs с exact in/out-interface; baseline firewall empty проверен. НиGRE, ниBGPconnection не отключались. Полный underlay остаётся активным, после protocol loss direct GRE ICMP3/3×2/running=true. BGP initially Established/own route/Ping3/3×2; после scoped TCP loss обе сессии перестали быть Established/active own route отсутствует. Снятие двух own rules восстановило Established/own /32/catalog Rx1×2.
ACK добавления двухdrops41,3ms; первое notEstablished наблюдение2667,3ms, обе active routes отсутствуют3690,5ms от начала fault. last-keepalive instant не зафиксирован, samples включаютREST/планирование: это upper observation bounds, не точное hold duration/SLA. Различие с92 административнымdisable/93BFD-path loss сохранено. В этой конфигурации отказ TCP проявился при работающем GRE/ICMP; physical WAN redundancy/разные peers/IPv6/scale не приняты.
Определение hold/keepalive подтверждено [официальным BGP connection reference](https://manual.mikrotik.com/docs/cli-reference/routing/bgp/connection/); текущая online docs7.26, наличие свойств/поведение непосредственно проверено на lab7.24.5. Source/UI/build/DB writes/messages0, первая попытка passed. Ownership preflight exact IDs/name/comment/chain/list/address/interface/protocol/src/dst, drops сначала удалены дляrecovery, потом own BGP/filter/address-list/IP/bridge/GRE. Baseline10 коллекций×2 совпал, public/default/metadata/195.195.195.195/32/credentials сохранены, обаCHR доступны. Runtime backend patch102/frontend a11y101, extra fixtures/containers0. Один локальный commit без push.
Следующий105 — заключительный source/context/runtime/evidence контроль окна и точная матрица оставшихся внешних условий. Принятые network tests не повторять без изменения/ошибки. Этап12.5 остаётся открытым.
+12
View File
@@ -814,3 +814,15 @@ Scoped TypeScript/новые components+test lint passed; старый NavUser s
Во всех8 ответах final sent/received соответствуют числу raw reply/timeout rows. В этой серии статистика согласована; счётчики нельзя «исправить», скрыв timeout. Наблюдения102 с1/3 и2/3 не переписаны. Здесь steady sample не выявил устойчивых потерь, но причиной начальных потерь и долгосрочной zero-loss/SLA это не является; startup/transient explanation остаётся гипотезой. Нет packet capture/физическогоWAN теста/максимальной нагрузки.
Exact own GRE/IP IDs/name/comment/address/interface удалены, baseline3 коллекций×2 совпал; public/default/metadata/195.195.195.195/32 иcredentials сохранены. ОбаCHR доступны, native fixtures/extra containers0, build/DB writes/messages0. Следующий104 — собственная BGP пара безBFD, negotiated hold3s/keepalive1s, scoped TCP loss при работающем GRE/ICMP, withdrawal/recovery. Проверка отличает hold expiry от административного connection/interface disable; не обещает точный timing/physical WAN redundancy. Один локальный commit без push; этап12.5 открыт.
## 12.5.104 — BGP hold expiry без BFD (2026-10-10)
[Native/API/cleanup](ux-ui/acceptance/bgp-hold-timer-2026-10-10.json). Собственная GRE198.18.104.0/30/loopbacks198.18.204.1/32↔2/32, AS65104/65105; input/output chains принимают только соответствующий exact own /32, output.network single own loopback/default-originate never. Обаnative connection use-bfd=false, hold3s/keepalive1s; session local/remote hold-time3s иkeepalive1s подтверждены, BFD configurations не создавались.
Две собственные firewall rules только наCHR1: input/output TCP между own GRE link IPs с exact in/out-interface; baseline firewall empty проверен. НиGRE, ниBGPconnection не отключались. Полный underlay остаётся активным, после protocol loss direct GRE ICMP3/3×2/running=true. BGP initially Established/own route/Ping3/3×2; после scoped TCP loss обе сессии перестали быть Established/active own route отсутствует. Снятие двух own rules восстановило Established/own /32/catalog Rx1×2.
ACK добавления двухdrops41,3ms; первое notEstablished наблюдение2667,3ms, обе active routes отсутствуют3690,5ms от начала fault. last-keepalive instant не зафиксирован, samples включаютREST/планирование: это upper observation bounds, не точное hold duration/SLA. Различие с92 административнымdisable/93BFD-path loss сохранено. В этой конфигурации отказ TCP проявился при работающем GRE/ICMP; physical WAN redundancy/разные peers/IPv6/scale не приняты.
Определение hold/keepalive подтверждено [официальным BGP connection reference](https://manual.mikrotik.com/docs/cli-reference/routing/bgp/connection/); текущая online docs7.26, наличие свойств/поведение непосредственно проверено на lab7.24.5. Source/UI/build/DB writes/messages0, первая попытка passed. Ownership preflight exact IDs/name/comment/chain/list/address/interface/protocol/src/dst, drops сначала удалены дляrecovery, потом own BGP/filter/address-list/IP/bridge/GRE. Baseline10 коллекций×2 совпал, public/default/metadata/195.195.195.195/32/credentials сохранены, обаCHR доступны. Runtime backend patch102/frontend a11y101, extra fixtures/containers0. Один локальный commit без push.
Следующий105 — заключительный source/context/runtime/evidence контроль окна и точная матрица оставшихся внешних условий. Принятые network tests не повторять без изменения/ошибки. Этап12.5 остаётся открытым.
@@ -0,0 +1,718 @@
{
"date": "2026-10-10",
"name": "mm-bgp104-1791577657130",
"devices": [
{
"serverId": 1,
"catalog": {
"id": "*2800007",
"serverId": 1,
"serverName": "CHR",
"serverSite": "",
"serverCountry": "",
"name": "mm-bgp104-1791577657130-1",
"peerIp": "198.18.104.2",
"remoteAs": 65105,
"localAs": 65104,
"localId": "198.18.204.1",
"remoteId": "198.18.204.2",
"state": "Established",
"type": "eBGP",
"uptime": "440ms",
"holdTime": 3,
"keepalive": 1,
"prefixesRx": 1,
"prefixesTx": null,
"inputMessages": 2,
"outputMessages": 2,
"capabilities": [
"MP-BGP",
"Route Refresh",
"Extended Next-Hop",
"Graceful Restart",
"4-byte-AS"
],
"lastError": null,
"afi": "ip"
},
"nativeRoute": {
".id": "*2014D000",
"active": "true",
"bgp": "true",
"distance": "20",
"dst-address": "198.18.204.2/32",
"dynamic": "true",
"gateway": "198.18.104.2",
"immediate-gw": "198.18.104.2%mm-bgp104-1791577657130",
"inactive": "false",
"routing-table": "main",
"scope": "40",
"target-scope": "10"
},
"pingReceived": 3,
"pingAttempts": [
3
],
"exactOwnPrefixOnly": true
},
{
"serverId": 2,
"catalog": {
"id": "*2800006",
"serverId": 2,
"serverName": "CHR",
"serverSite": "",
"serverCountry": "",
"name": "mm-bgp104-1791577657130-1",
"peerIp": "198.18.104.1",
"remoteAs": 65104,
"localAs": 65105,
"localId": "198.18.204.2",
"remoteId": "198.18.204.1",
"state": "Established",
"type": "eBGP",
"uptime": "320ms",
"holdTime": 3,
"keepalive": 1,
"prefixesRx": 1,
"prefixesTx": null,
"inputMessages": 2,
"outputMessages": 2,
"capabilities": [
"MP-BGP",
"Route Refresh",
"Extended Next-Hop",
"Graceful Restart",
"4-byte-AS"
],
"lastError": null,
"afi": "ip"
},
"nativeRoute": {
".id": "*2014D000",
"active": "true",
"bgp": "true",
"distance": "20",
"dst-address": "198.18.204.1/32",
"dynamic": "true",
"gateway": "198.18.104.1",
"immediate-gw": "198.18.104.1%mm-bgp104-1791577657130",
"inactive": "false",
"routing-table": "main",
"scope": "40",
"target-scope": "10"
},
"pingReceived": 3,
"pingAttempts": [
3
],
"exactOwnPrefixOnly": true
}
],
"cleanup": [
{
"serverId": 1,
"/ip/firewall/filter": true,
"/routing/bfd/configuration": true,
"/routing/bgp/connection": true,
"/routing/bgp/instance": true,
"/routing/filter/rule": true,
"/ip/firewall/address-list": true,
"/interface/gre": true,
"/interface/bridge": true,
"/ip/address": true,
"/ip/route": true
},
{
"serverId": 2,
"/ip/firewall/filter": true,
"/routing/bfd/configuration": true,
"/routing/bgp/connection": true,
"/routing/bgp/instance": true,
"/routing/filter/rule": true,
"/ip/firewall/address-list": true,
"/interface/gre": true,
"/interface/bridge": true,
"/ip/address": true,
"/ip/route": true
}
],
"initial": [
{
"sessions": [
{
".id": "*2800007",
"ebgp": "",
"established": "true",
"hold-time": "3s",
"input.filter": "mm-bgp104-1791577657130-in",
"input.procid": "20",
"instance": "mm-bgp104-1791577657130",
"keepalive-time": "1s",
"last-started": "2026-10-09 23:27:41",
"local.address": "198.18.104.1",
"local.afi": "ip",
"local.as": "65104",
"local.bytes": "68",
"local.capabilities": "mp,rr,enhe,gr,as4",
"local.cluster-id": "198.18.204.1",
"local.eor": "",
"local.id": "198.18.204.1",
"local.messages": "2",
"name": "mm-bgp104-1791577657130-1",
"output.filter-chain": "mm-bgp104-1791577657130-out",
"output.network": "mm-bgp104-1791577657130",
"output.procid": "20",
"prefix-count": "1",
"remote.address": "198.18.104.2",
"remote.afi": "ip",
"remote.as": "65105",
"remote.bytes": "68",
"remote.capabilities": "mp,rr,enhe,gr,as4",
"remote.eor": "",
"remote.hold-time": "3s",
"remote.id": "198.18.204.2",
"remote.messages": "2",
"uptime": "440ms"
}
],
"routes": [
{
".id": "*2014D000",
"active": "true",
"bgp": "true",
"distance": "20",
"dst-address": "198.18.204.2/32",
"dynamic": "true",
"gateway": "198.18.104.2",
"immediate-gw": "198.18.104.2%mm-bgp104-1791577657130",
"inactive": "false",
"routing-table": "main",
"scope": "40",
"target-scope": "10"
}
]
},
{
"sessions": [
{
".id": "*2800006",
"ebgp": "",
"established": "true",
"hold-time": "3s",
"input.filter": "mm-bgp104-1791577657130-in",
"input.procid": "20",
"instance": "mm-bgp104-1791577657130",
"keepalive-time": "1s",
"last-started": "2026-10-09 22:27:41",
"local.address": "198.18.104.2",
"local.afi": "ip",
"local.as": "65105",
"local.bytes": "68",
"local.capabilities": "mp,rr,enhe,gr,as4",
"local.cluster-id": "198.18.204.2",
"local.eor": "",
"local.id": "198.18.204.2",
"local.messages": "2",
"name": "mm-bgp104-1791577657130-1",
"output.filter-chain": "mm-bgp104-1791577657130-out",
"output.network": "mm-bgp104-1791577657130",
"output.procid": "20",
"prefix-count": "0",
"remote.address": "198.18.104.1",
"remote.afi": "ip",
"remote.as": "65104",
"remote.bytes": "68",
"remote.capabilities": "mp,rr,enhe,gr,as4",
"remote.eor": "",
"remote.hold-time": "3s",
"remote.id": "198.18.204.1",
"remote.messages": "2",
"uptime": "320ms"
}
],
"routes": [
{
".id": "*2014D000",
"active": "true",
"bgp": "true",
"distance": "20",
"dst-address": "198.18.204.1/32",
"dynamic": "true",
"gateway": "198.18.104.1",
"immediate-gw": "198.18.104.1%mm-bgp104-1791577657130",
"inactive": "false",
"routing-table": "main",
"scope": "40",
"target-scope": "10"
}
]
}
],
"nativeConnections": [
{
"serverId": 1,
"useBfd": "false",
"hold": "3s",
"keepalive": "1s"
},
{
"serverId": 2,
"useBfd": "false",
"hold": "3s",
"keepalive": "1s"
}
],
"loss": {
"scopedTcpOnly": true,
"interfaceDisabled": false,
"connectionDisabled": false,
"acknowledgedMs": 41.25659199999973,
"firstNotEstablished": 2667.269095999999,
"firstNoActiveRoute": 3690.540894999999,
"samples": [
{
"beganMs": 41.262173000000075,
"endedMs": 267.55814199999986,
"established": [
true,
true
],
"activeRoutes": [
true,
true
]
},
{
"beganMs": 368.28421699999944,
"endedMs": 436.9728669999995,
"established": [
true,
true
],
"activeRoutes": [
true,
true
]
},
{
"beganMs": 537.3723649999993,
"endedMs": 606.6827239999993,
"established": [
true,
true
],
"activeRoutes": [
true,
true
]
},
{
"beganMs": 707.1440159999993,
"endedMs": 777.1101789999993,
"established": [
true,
true
],
"activeRoutes": [
true,
true
]
},
{
"beganMs": 877.5098009999992,
"endedMs": 947.3788399999994,
"established": [
true,
true
],
"activeRoutes": [
true,
true
]
},
{
"beganMs": 1047.8871149999995,
"endedMs": 1124.0534739999994,
"established": [
true,
true
],
"activeRoutes": [
true,
true
]
},
{
"beganMs": 1224.647223,
"endedMs": 1297.0276879999992,
"established": [
true,
true
],
"activeRoutes": [
true,
true
]
},
{
"beganMs": 1397.4342539999989,
"endedMs": 1467.2807449999991,
"established": [
true,
true
],
"activeRoutes": [
true,
true
]
},
{
"beganMs": 1567.6731119999995,
"endedMs": 1639.8602739999997,
"established": [
true,
true
],
"activeRoutes": [
true,
true
]
},
{
"beganMs": 1740.2848239999994,
"endedMs": 1809.9277119999997,
"established": [
true,
true
],
"activeRoutes": [
true,
true
]
},
{
"beganMs": 1910.3524179999995,
"endedMs": 1979.1934699999993,
"established": [
true,
true
],
"activeRoutes": [
true,
true
]
},
{
"beganMs": 2079.598013,
"endedMs": 2149.2285079999992,
"established": [
true,
true
],
"activeRoutes": [
true,
true
]
},
{
"beganMs": 2249.6923909999996,
"endedMs": 2327.2061430000003,
"established": [
true,
true
],
"activeRoutes": [
true,
true
]
},
{
"beganMs": 2427.641654,
"endedMs": 2496.8365949999998,
"established": [
true,
true
],
"activeRoutes": [
true,
true
]
},
{
"beganMs": 2597.2220740000002,
"endedMs": 2667.269095999999,
"established": [
false,
true
],
"activeRoutes": [
false,
true
]
},
{
"beganMs": 2767.72232,
"endedMs": 2836.9666019999995,
"established": [
false,
true
],
"activeRoutes": [
false,
true
]
},
{
"beganMs": 2937.351680999999,
"endedMs": 3007.000541999999,
"established": [
false,
true
],
"activeRoutes": [
false,
true
]
},
{
"beganMs": 3107.417828999999,
"endedMs": 3179.8466070000004,
"established": [
false,
true
],
"activeRoutes": [
false,
true
]
},
{
"beganMs": 3280.268379,
"endedMs": 3348.9262389999994,
"established": [
false,
true
],
"activeRoutes": [
false,
true
]
},
{
"beganMs": 3449.27934,
"endedMs": 3518.761459999999,
"established": [
false,
true
],
"activeRoutes": [
false,
true
]
},
{
"beganMs": 3620.6175749999993,
"endedMs": 3690.540894999999,
"established": [
false,
false
],
"activeRoutes": [
false,
false
]
}
]
},
"linkDuringLoss": [
{
"serverId": 1,
"received": 3
},
{
"serverId": 2,
"received": 3
}
],
"recovered": [
{
"sessions": [
{
".id": "*2800007",
"ebgp": "",
"established": "true",
"hold-time": "3s",
"input.filter": "mm-bgp104-1791577657130-in",
"input.procid": "20",
"instance": "mm-bgp104-1791577657130",
"keepalive-time": "1s",
"last-started": "2026-10-09 23:27:50",
"last-stopped": "2026-10-09 23:27:45",
"local.address": "198.18.104.1",
"local.afi": "ip",
"local.as": "65104",
"local.bytes": "68",
"local.capabilities": "mp,rr,enhe,gr,as4",
"local.cluster-id": "198.18.204.1",
"local.eor": "",
"local.id": "198.18.204.1",
"local.messages": "2",
"name": "mm-bgp104-1791577657130-1",
"output.filter-chain": "mm-bgp104-1791577657130-out",
"output.last-notification": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0015030400",
"output.network": "mm-bgp104-1791577657130",
"output.procid": "20",
"prefix-count": "1",
"remote.address": "198.18.104.2",
"remote.afi": "ip",
"remote.as": "65105",
"remote.bytes": "68",
"remote.capabilities": "mp,rr,enhe,gr,as4",
"remote.eor": "",
"remote.hold-time": "3s",
"remote.id": "198.18.204.2",
"remote.messages": "2",
"uptime": "40ms"
}
],
"routes": [
{
".id": "*2014D000",
"active": "true",
"bgp": "true",
"distance": "20",
"dst-address": "198.18.204.2/32",
"dynamic": "true",
"gateway": "198.18.104.2",
"immediate-gw": "198.18.104.2%mm-bgp104-1791577657130",
"inactive": "false",
"routing-table": "main",
"scope": "40",
"target-scope": "10"
}
]
},
{
"sessions": [
{
".id": "*2800006",
"ebgp": "",
"established": "true",
"hold-time": "3s",
"input.filter": "mm-bgp104-1791577657130-in",
"input.procid": "20",
"instance": "mm-bgp104-1791577657130",
"keepalive-time": "1s",
"last-started": "2026-10-09 22:27:50",
"last-stopped": "2026-10-09 22:27:46",
"local.address": "198.18.104.2",
"local.afi": "ip",
"local.as": "65105",
"local.bytes": "68",
"local.capabilities": "mp,rr,enhe,gr,as4",
"local.cluster-id": "198.18.204.2",
"local.eor": "",
"local.id": "198.18.204.2",
"local.messages": "2",
"name": "mm-bgp104-1791577657130-1",
"output.filter-chain": "mm-bgp104-1791577657130-out",
"output.last-notification": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0015030400",
"output.network": "mm-bgp104-1791577657130",
"output.procid": "20",
"prefix-count": "1",
"remote.address": "198.18.104.1",
"remote.afi": "ip",
"remote.as": "65104",
"remote.bytes": "68",
"remote.capabilities": "mp,rr,enhe,gr,as4",
"remote.eor": "",
"remote.hold-time": "3s",
"remote.id": "198.18.204.1",
"remote.messages": "2",
"uptime": "140ms"
}
],
"routes": [
{
".id": "*2014D000",
"active": "true",
"bgp": "true",
"distance": "20",
"dst-address": "198.18.204.1/32",
"dynamic": "true",
"gateway": "198.18.104.1",
"immediate-gw": "198.18.104.1%mm-bgp104-1791577657130",
"inactive": "false",
"routing-table": "main",
"scope": "40",
"target-scope": "10"
}
]
}
],
"recoveryCatalog": [
{
"id": "*2800007",
"serverId": 1,
"serverName": "CHR",
"serverSite": "",
"serverCountry": "",
"name": "mm-bgp104-1791577657130-1",
"peerIp": "198.18.104.2",
"remoteAs": 65105,
"localAs": 65104,
"localId": "198.18.204.1",
"remoteId": "198.18.204.2",
"state": "Established",
"type": "eBGP",
"uptime": "40ms",
"holdTime": 3,
"keepalive": 1,
"prefixesRx": 1,
"prefixesTx": null,
"inputMessages": 2,
"outputMessages": 2,
"capabilities": [
"MP-BGP",
"Route Refresh",
"Extended Next-Hop",
"Graceful Restart",
"4-byte-AS"
],
"lastError": null,
"afi": "ip"
},
{
"id": "*2800006",
"serverId": 2,
"serverName": "CHR",
"serverSite": "",
"serverCountry": "",
"name": "mm-bgp104-1791577657130-1",
"peerIp": "198.18.104.1",
"remoteAs": 65104,
"localAs": 65105,
"localId": "198.18.204.2",
"remoteId": "198.18.204.1",
"state": "Established",
"type": "eBGP",
"uptime": "140ms",
"holdTime": 3,
"keepalive": 1,
"prefixesRx": 1,
"prefixesTx": null,
"inputMessages": 2,
"outputMessages": 2,
"capabilities": [
"MP-BGP",
"Route Refresh",
"Extended Next-Hop",
"Graceful Restart",
"4-byte-AS"
],
"lastError": null,
"afi": "ip"
}
]
}