Files
CHIMERA/docs/BGP-NETWORK.md

135 lines
7.2 KiB
Markdown
Raw Permalink Normal View History

# BGP network map (ground truth from CiscoConfigs repo)
Source of truth: the archived configs in
`/hdd/GiTea-REPO/CiscoConfigs/MP-BGP_EVPN_VXLAN_V2/` and
`/hdd/GiTea-REPO/CiscoConfigs/VyOS/`. Everything below was read out of those
files; live state may drift (CHIMERA's job is to detect exactly that).
## 1. AS plan
| AS | Role |
|---------|-------------------------------------------------------------|
| `64572` | HQ EVPN/VXLAN **underlay** (FRR + switch RRs, iBGP full mesh w/ RRs) |
| `64580` | HQ **transit** routers (VyOS: NOZOMI, SHUN, VIPERA, REISA, EDGE-2, EDGE-9, EDGE-MIKU, LXC-1) |
| `64581` | MU3S / `mu3.panchain.org` (KIMIKONO, EDGE) |
| `64590` | SHUPO (cloud: Hetzner VMs + `shupo.panchain.org`) — also hosts FUMOS VRRP pair (HIKARI/MIYU/MEGU) |
| `64600` | NEKOS site (VRRP pair SOF/OHR, router EIN, edge, RRs) |
| `64610` | ORC site (KIKI) |
## 2. Route Reflector clusters
### HQ underlay — AS 64572, cluster-id `6.7.6.7`
Four RRs, full mesh between them, loopbacks in `10.255.254.0/24`
(advertised via OSPF):
| RR | Loopback / router-id | Form | Config |
|-------------|----------------------|--------------------|--------|
| MUYU-RR | `10.255.254.246` | Debian LXC (`frr version 10.3`, `service integrated-vtysh-config`) | `HQ/FRR/RouteReflectorLXC/MUYU/MUYU.ios` |
| FOX-RR | `10.255.254.247` | Debian LXC | `.../FOX/FOX.ios` |
| WOLF-RR | `10.255.254.245` | Debian LXC | `.../WOLF/WOLF.ios` |
| NYATER | `10.255.254.255` (bgp router-id `2.1.3.7`) | HQ hardware switch (also runs multicast AF) | `HQ/NYATER.ios` — NOT in RouteReflectorLXC/ |
Peer-groups (identical on all four, `update-source lo`):
- `RR-PEERS` — iBGP mesh members (the *other* RRs). **Never**
route-reflector-client. Each RR file lists the others minus itself — that
self-exclusion is why the four files are near-duplicates.
- `CLIENTS` — every underlay router; `route-reflector-client` in both
`address-family ipv4 unicast` and `address-family l2vpn evpn`.
RR-PEERS on e.g. MUYU: `.255`, `.247`, `.245`. CLIENTS (from MUYU.ios):
`.254 .253 .252 .251 .249 .248 .244 .242 .240 .250 .234`.
Known client identities: `.250` = URAKAZE (Debian), `.234` = VICTORIA
(OpenWRT AP). Others map to HQ hosts/hypervisors — resolve by importing live
state.
Address families activated on RRs: `l2vpn evpn` + `ipv4 unicast`, both with
`send-community both` on RR-PEERS and CLIENTS.
### NEKOS EVPN — AS 64600, cluster-id `172.19.67.0`
Four RRs, full mesh, loopbacks `10.255.254.0/24` (NEKOS OSPF domain):
| RR | Loopback / router-id | Form |
|-------------|----------------------|------|
| KOKONUT-RR | `10.255.254.183` | `NEKOS/FRR/RR/KOKONUT-RR.ios` |
| LH-RR | `10.255.254.184` | `NEKOS/FRR/RR/LH-RR.ios` |
| YUUKA-RR | `10.255.254.185` | `NEKOS/FRR/RR/YUUKA-RR.ios` |
| REIMU | `10.255.254.187` | bare metal, `NEKOS/REIMU/REIMU.ios` |
Same peer-group scheme: `RR-PEERS` (the other 3) + `CLIENTS`
(route-reflector-client in `ipv4 unicast` **and** `l2vpn evpn`,
`send-community both`, `update-source lo`).
NEKOS CLIENTS: `.200 .199 .198 .197 .196 .195` (LXC/VyOS class),
`.191 .190 .189 .188 .186` (hardware: YUUKA=`.190`, LOLI-HUNTER=`.189`,
KOKONUT=`.188`, SENKMX and PANKO both config'd with `.186` — see quirk list).
VyOS clients (SOF, OHR, EIN, Edge NIHA/EROHA/AOBA) peer with **all four RRs**
via their own peer-group `NEKOS` (`remote-as 64600`,
`update-source <172.19.x loopback>`).
### HQ transit — AS 64580, cluster-id `67.67.21.37` (VyOS)
- NOZOMI (bgp router-id `192.168.1.2`, iBGP `update-source 10.255.254.230`) and SHUN (`update-source 10.255.254.228`) are both configured with `bgp parameters cluster-id 67.67.21.37`.
- iBGP peer-group `HQ` toward the other transit RR, AFs: `ipv4-unicast`,
`ipv6-unicast`, `l2vpn-evpn` (plus multicast in comments).
- E-BGP peer-groups by site: `SHUPO` (64590), `NEKOS` (64600), `ORC` (64610),
`MU3S`/`MU3` (64581), `HOME` (64600, on YUZU).
- ⚠ **In the archived configs every `route-reflector-client` line on
NOZOMI/SHUN is commented out.** cluster-id with no RCC = ineffective
reflection. Either the live boxes have RCC enabled out-of-band, or this is
dead config. First thing CHIMERA drift-check should confirm.
## 3. Client side patterns (what CHIMERA manages *about*, but doesn't *is*)
- HQ FRR clients (URAKAZE, MOMI, IBUKI-M-ATOR, OPS, WOLF-HUNTER, APs…):
plain `router bgp 64572`, one neighbor per RR (`.255 .245 .246 .247`),
no client-side peer-group, `neighbor ... route-reflector-client` on *their*
side is absent (correct — RCC belongs on the RR), `timers 30 60`,
`bgp graceful-restart`, `no bgp default ipv4-unicast`.
- HQ VyOS routers (YUZU, IZUNA): transit iBGP peer-group `HQ` + eBGP
peer-groups per site AS.
- Underlay is OSPF (`auto-cost reference-bandwidth 40000` on HQ FRR,
`1000` on NEKOS RR files — mismatch is intentional per-site).
## 4. Quirks & gotchas (write these into the parser's expectations)
1. **Duplicated/nested AF stanzas.** `MUYU/FOX/WOLF`, `YUUKA-RR`, `REIMU`
contain a second `address-family l2vpn evpn` block (in REIMU it's even
*nested* inside the first, with no closing `exit-address-family`). FRR's
parser accepts and merges these, but `write memory`-generated config would
never look like this — hand-edit residue. CHIMERA must normalize to one
block per AF when writing.
2. **NYATER is an RR that lives outside the LXC folder** and uses non-loopback
router-id `2.1.3.7`; it also carries ipv4/ipv6 **multicast** address-family
neighbors (`HQ/NYATER.ios`). Grammar must cover multicast AF.
3. **PANKO and SENKMX share router-id `10.255.254.186`** in their files
(looks like one active-at-a-time config pair). Inventory must treat `.186`
as a single BGP peer identity.
4. **MOMI** (`10.255.254.243`, `HQ/FRR/MOMI/frr.ios`) has the whole `router bgp`
block commented out and is absent from the RR client lists — parked node.
5. VyOS `set protocols bgp neighbor <ip> remote-as` **duplicates** the
peer-group `remote-as` for every member — redundant but harmless; parser
can drop it.
6. All RRs: `frr version 10.3`, `service integrated-vtysh-config` → the live
store is `/etc/frr/frr.conf` managed through `vtysh -c "write memory"`.
Docs reference latest (10.7.1); no behavior change expected for
peer-group/route-reflector-client semantics between 10.3 and 10.7.
7. FRR hard rule respected everywhere: **RRs of the same cluster are meshed,
never RCC'd** (`RR-PEERS` never carries route-reflector-client).
8. `bgp cluster-id 172.19.67.0` uses IP-form notation; FRR also accepts
`A:B:C` and decimal forms. Treat as an arbitrary 32-bit value, keep the
exact notation in desired-state files.
## 5. FRR reference
Docs: https://docs.frrouting.org/en/latest/ (`bgpd` chapter = route
reflector: `bgp cluster-id`, per-AF `neighbor X route-reflector-client`,
peer-group inheritance; attributes set on a peer-group propagate to members,
per-peer overrides win). Order-of-commands matters in `configure terminal`:
define `neighbor G peer-group` + `remote-as` **before** attaching members to
it, and AF sub-mode changes require entering the right
`address-family` block first.