# Anycast FRR Configuration ## Топология ### Full Mesh между площадками ```cfg Site A (AS 65001) Site B A1 ───────── 10.0.1.0/30 ───────── B1 (AS 65002) A1 ───────── 10.0.2.0/30 ───────── B2 (AS 65003) A2 ───────── 10.0.3.0/30 ───────── B1 (AS 65002) A2 ───────── 10.0.4.0/30 ───────── B2 (AS 65003) A3 ───────── 10.0.5.0/30 ───────── B1 (AS 65002) A3 ───────── 10.0.6.0/30 ───────── B2 (AS 65003) ``` - Anycast-адрес на всех A: `10.200.200.1/32` (dummy0) - Клиентские сети площадки Б: - B1: `10.100.1.0/24` - B2: `10.100.2.0/24` ### Диаграмма (Mermaid) ```mermaid flowchart LR subgraph SiteA["Площадка A — AS 65001 · anycast 10.200.200.1/32"] A1["A1
dummy0: 10.200.200.1/32"] A2["A2
dummy0: 10.200.200.1/32"] A3["A3
dummy0: 10.200.200.1/32"] end subgraph SiteB1["Площадка B — B1 · AS 65002 · 10.100.1.0/24"] B1["B1"] C1["C1
10.100.1.11"] C2["C2
10.100.1.12"] C3["C3
10.100.1.13"] C1 --> B1 C2 --> B1 C3 --> B1 end subgraph SiteB2["Площадка B — B2 · AS 65003 · 10.100.2.0/24"] B2["B2"] C4["C4
10.100.2.14"] C5["C5
10.100.2.15"] C6["C6
10.100.2.16"] C4 --> B2 C5 --> B2 C6 --> B2 end A1 ---|"10.0.1.0/30"| B1 A2 ---|"10.0.3.0/30"| B1 A3 ---|"10.0.5.0/30"| B1 A1 ---|"10.0.2.0/30"| B2 A2 ---|"10.0.4.0/30"| B2 A3 ---|"10.0.6.0/30"| B2 ``` Каждый B-роутер держит 3 eBGP-сессии в сторону площадки A (ECMP, `maximum-paths 3`) — трафик клиентов к anycast-адресу распределяется по A1/A2/A3. --- ## Конфигурация FRR — площадка A ### A1 (AS 65001) ```cfg interface dummy0 ip address 10.200.200.1/32 ! interface eth0 ip address 10.0.1.1/30 ! interface eth1 ip address 10.0.2.1/30 ! router bgp 65001 bgp router-id 10.0.0.1 no bgp ebgp-requires-policy neighbor 10.0.1.2 remote-as 65002 neighbor 10.0.2.2 remote-as 65003 ! address-family ipv4 unicast network 10.200.200.1/32 neighbor 10.0.1.2 activate neighbor 10.0.2.2 activate exit-address-family ``` ### A2 (AS 65001) ```cfg interface dummy0 ip address 10.200.200.1/32 ! interface eth0 ip address 10.0.3.1/30 ! interface eth1 ip address 10.0.4.1/30 ! router bgp 65001 bgp router-id 10.0.0.2 no bgp ebgp-requires-policy neighbor 10.0.3.2 remote-as 65002 neighbor 10.0.4.2 remote-as 65003 ! address-family ipv4 unicast network 10.200.200.1/32 neighbor 10.0.3.2 activate neighbor 10.0.4.2 activate exit-address-family ``` ### A3 (AS 65001) ```cfg interface dummy0 ip address 10.200.200.1/32 ! interface eth0 ip address 10.0.5.1/30 ! interface eth1 ip address 10.0.6.1/30 ! router bgp 65001 bgp router-id 10.0.0.3 no bgp ebgp-requires-policy neighbor 10.0.5.2 remote-as 65002 neighbor 10.0.6.2 remote-as 65003 ! address-family ipv4 unicast network 10.200.200.1/32 neighbor 10.0.5.2 activate neighbor 10.0.6.2 activate exit-address-family ``` --- ## Конфигурация FRR — площадка B ### B1 (AS 65002) ``` interface eth0 ip address 10.0.1.2/30 ! interface eth1 ip address 10.0.3.2/30 ! interface eth2 ip address 10.0.5.2/30 ! interface eth3 ip address 10.100.1.1/24 ! router bgp 65002 bgp router-id 10.0.0.4 no bgp ebgp-requires-policy bgp bestpath as-path multipath-relax neighbor 10.0.1.1 remote-as 65001 neighbor 10.0.3.1 remote-as 65001 neighbor 10.0.5.1 remote-as 65001 ! address-family ipv4 unicast network 10.100.1.0/24 maximum-paths 3 neighbor 10.0.1.1 activate neighbor 10.0.3.1 activate neighbor 10.0.5.1 activate exit-address-family ``` ### B2 (AS 65003) ```cfg interface eth0 ip address 10.0.2.2/30 ! interface eth1 ip address 10.0.4.2/30 ! interface eth2 ip address 10.0.6.2/30 ! interface eth3 ip address 10.100.2.1/24 ! router bgp 65003 bgp router-id 10.0.0.5 no bgp ebgp-requires-policy bgp bestpath as-path multipath-relax neighbor 10.0.2.1 remote-as 65001 neighbor 10.0.4.1 remote-as 65001 neighbor 10.0.6.1 remote-as 65001 ! address-family ipv4 unicast network 10.100.2.0/24 maximum-paths 3 neighbor 10.0.2.1 activate neighbor 10.0.4.1 activate neighbor 10.0.6.1 activate exit-address-family ``` --- ## Traffic Flow ### От клиента к anycast-адресу ```cfg Клиенты (Site B) B-маршрутизаторы A-маршрутизаторы (Site A) [Anycast IP 10.200.200.1/32] C1 (10.100.1.11) ──► B1 ───────────────────► A1 ──► dummy0 C2 (10.100.1.12) ──► B1 ───────────────────► A2 ──► dummy0 C3 (10.100.1.13) ──► B1 ───────────────────► A3 ──► dummy0 C4 (10.100.2.14) ──► B2 ───────────────────► A1 ──► dummy0 C5 (10.100.2.15) ──► B2 ───────────────────► A2 ──► dummy0 C6 (10.100.2.16) ──► B2 ───────────────────► A3 ──► dummy0 ``` Каждый B использует ECMP (3 равноправных eBGP-пути) и распределяет клиентские потоки по A1/A2/A3. --- ## ECMP и распределение трафика > Логика распределения нагрузки на примере 6 клиентов к anycast адресу на площадке B. При 6 клиентах каждый маршрутизатор площадки B (B1 или B2) имеет три равноправных eBGP-маршрута к anycast-префиксу `10.200.200.1/32` (через A1, A2, A3) и использует ECMP. Распределение трафика по путям выполняется на основе хэша 5-tuple (src IP, dst IP, src port, dst port, protocol) каждого клиентского потока: - если все 6 клиентов подключены к B1 → каждый поток попадает в один из трёх путей (A1/A2/A3), в среднем по 2 клиента на путь, но возможны отклонения из-за конкретных значений хэша; - если клиенты распределены между B1 и B2 → каждый маршрутизатор B независимо распределяет свои клиентские потоки по своим трём линкам (всего 6 линков в сторону A). Итог: трафик от 6 клиентов разделяется на 3 (или 6) параллельных потоков, каждый клиент закрепляется за одним anycast-узлом (A1/A2/A3) на время сессии.