Commit Graph
4 Commits
Author SHA1 Message Date
ayurishchevandClaude Sonnet 5 1e287ee81c Add DNAT anycast -> backend in frr_anycast nftables config
Трафик на anycast-адрес (172.31.255.10) теперь сначала DNAT'ится на
реальный backend (DNAT_TARGET_IP=95.163.53.117 для site-cloud) в
prerouting, и только потом проходит уже существующий sNAT/masquerade
в postrouting — обе цепочки в одной table inet nat, порядок хуков
гарантирует правильную последовательность.

DNAT включается автоматически по факту заданного dnat_target_ip (без
отдельного булева флага), выключен по умолчанию — площадка A не
затронута. Pre-flight assert не даёт задать dnat_target_ip без
enable_snat (иначе nftables.conf вообще не разворачивается).

render-check-cloud.sh дополнен проверкой DNAT-правила и валидацией
синтаксиса каждого nftables.conf через `nft -c -f`.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Bc3HkMiDwooSyLBLoMKNyF
2026-09-10 17:25:09 +03:00
ayurishchevandClaude Sonnet 5 b2b7306a3c Generalize frr_anycast role, add site-cloud environment (4 nodes, prepend, sNAT)
По updated_dia.png: новое окружение "Облачная площадка" (vr01-vr04, AS 65200,
anycast 172.31.255.10/32) с двумя внешними BGP-каналами — основным (ASN 65104,
без as-path prepend) и резервным (ASN 65103, с prepend на всех узлах) — плюс
sNAT (nftables masquerade) на внешнем интерфейсе.

Роль frr_anycast обобщена под это: вместо двух жёстко именованных соседей —
список bgp_neighbors произвольной длины с флагом prepend; sNAT/ip_forward —
опциональный блок (enable_snat). Площадка A мигрирована на новый формат
host_vars/group_vars без изменения site-a.env и без изменения рендера —
render-check.sh (golden-diff) по-прежнему проходит 6/6.

Для site-cloud (окружение новое, ВМ не подняты) добавлен render-check-cloud.sh
с grep-инвариантами: 4 соседа на узел, prepend только на резервном канале,
nftables masquerade на внешнем интерфейсе — 56/56 проверок пройдено.

run.sh обобщён на несколько окружений: инвентарь по имени playbook'а,
env-файл через SITE_ENV_FILE (алиас SITE_A_ENV_FILE сохранён).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Bc3HkMiDwooSyLBLoMKNyF
2026-09-09 20:59:40 +03:00
ayurishchevandClaude Sonnet 5 98f9f502ce Add Ansible playbook for Site A FRR configuration on VMs
Разворачивает FRR на a1/a2/a3 (площадка A) через Ansible вместо
Docker-лабы, для реальных ВМ. Provisioning ВМ (3 NIC: внешний +
2 приватных) — Terraform, вне рамок этой задачи; playbook создаёт
только dummy0 (netplan) и конфигурирует FRR.

- ansible/site-a.env — единственный источник site-A-специфичных
  значений (ASN, anycast-префикс, router-id/BGP-соседи по узлам,
  имена интерфейсов); роль frr_anycast полностью параметризована
- ansible/roles/frr_anycast — задачи, handlers (netplan apply перед
  restart frr), шаблоны frr.conf.j2/daemons.j2/dummy0.netplan.yml.j2
- ansible/tests/render-check.sh — офлайн golden-diff проверка
  рендера конфигов против уже провалидированных в Docker-лабе
  frr/a{1,2,3}/ (ВМ ещё не подняты, функциональный тест недоступен)
- README.md — раздел «Развёртывание площадки A на ВМ (Ansible)»
- docs/ — план и summary изменения

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Bc3HkMiDwooSyLBLoMKNyF
2026-09-03 14:14:04 +03:00
ayurishchevandClaude Sonnet 5 eaa577e6b7 Add FRR anycast lab: HLD, containerized topology, docs
Реализует HLD-дизайн (hld.md) в виде развёртываемого Docker Compose
окружения: 5 FRR-роутеров (A1-A3 anycast 10.200.200.1/32 на AS 65001,
B1/B2 на AS 65002/65003) + 6 клиентских контейнеров, ECMP-балансировка
трафика клиентов площадки B к anycast-адресу площадки A.

- docker-compose.yml, frr/*, entrypoints/* — топология и конфиги FRR
- scripts/verify.sh, scripts/traffic-test.sh — проверка BGP/ECMP и трафика
- hld.md — HLD-дизайн + Mermaid-диаграмма топологии
- README.md — запуск, структура, команды проверки на роутерах и клиентах
- docs/ — планы внедрения и summary по каждому изменению

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Bc3HkMiDwooSyLBLoMKNyF
2026-09-03 12:52:44 +03:00