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
This commit is contained in:
commit
eaa577e6b7
30 files changed
+1035
No files matched your search
Executable
+32
@@ -0,0 +1,32 @@
|
||||
#!/bin/sh
|
||||
# Drives traffic from a Site-B client to the anycast address and shows which
|
||||
# A-node (a1/a2/a3) answered each request, demonstrating ECMP distribution.
|
||||
# Usage: scripts/traffic-test.sh [client] [request-count]
|
||||
set -e
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
CLIENT="${1:-c1}"
|
||||
COUNT="${2:-20}"
|
||||
DST="10.200.200.1"
|
||||
|
||||
echo "==== $CLIENT: ping $DST ===="
|
||||
docker compose exec -T "$CLIENT" ping -c 4 "$DST"
|
||||
|
||||
echo
|
||||
echo "==== $CLIENT: traceroute $DST ===="
|
||||
docker compose exec -T "$CLIENT" traceroute -n -m 5 "$DST" 2>&1 || true
|
||||
|
||||
echo
|
||||
echo "==== $CLIENT: $COUNT requests to http://$DST, varying source port (ECMP hash input) ===="
|
||||
RESULTS=$(docker compose exec -T "$CLIENT" sh -c '
|
||||
for i in $(seq 1 '"$COUNT"'); do
|
||||
port=$((30000 + i))
|
||||
node=$(curl -s --local-port "$port" --max-time 3 "http://'"$DST"'/" || echo "no-answer")
|
||||
echo "req $i (src-port $port) -> $node"
|
||||
done
|
||||
')
|
||||
echo "$RESULTS"
|
||||
|
||||
echo
|
||||
echo "Distribution:"
|
||||
echo "$RESULTS" | awk '{print $NF}' | sort | uniq -c
|
||||
Executable
+16
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
# Checks that BGP has converged and that b1/b2 have 3-way ECMP to the anycast prefix.
|
||||
set -e
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
for n in a1 a2 a3 b1 b2; do
|
||||
echo "==== $n: show bgp summary ===="
|
||||
docker compose exec -T "$n" vtysh -c "show bgp summary"
|
||||
echo
|
||||
done
|
||||
|
||||
for n in b1 b2; do
|
||||
echo "==== $n: show ip route 10.200.200.1/32 ===="
|
||||
docker compose exec -T "$n" vtysh -c "show ip route 10.200.200.1/32"
|
||||
echo
|
||||
done
|
||||
Reference in new issue
Block a user