Egy viszonylag új BGP funkciót veszünk ma górcső alá, ez pedig nem más, mint a dinamikus BGP peering lehetősége. IOS 15-ben jött be, és nagyon hasznos lehet például DMVPN környezetben.
Topológiánk a szokásos, letölthető INNEN.
R2 lesz a hub routerünk, R10, R14 pedig a spoke.
Célunk, hogy a BGP konfigurációt ne kelljen a hubon bántani, ha új spoke eszközt kell beépítenünk a hálózatba. A DMVPN mögött is hasonló logika húzódik meg egyébként. Ha új branch sitet kapcsolunk a hálózathoz, a hub konfigurációja sosem változik, mert az mGRE (multipoint GRE) tunnel dinamikusan fogadja az NHRP kapcsolatokat (ezért van az is, hogy a spoke routereknek nem kell fix IP cím, jó a DHCP, csak a hubnak kell fix IP; a spoke-n bekonfiguráljuk a hub IP-jét mint NHRP NHS, a hubon viszont nem konfigurálunk semmit. A kliens kezdeményezi az NHRP-t, ezért a hub abból már látja a public IP-t).
eBGP-t fogunk használni, nem iBGP-t, azaz a hub és a spoke-k külön AS-ben lesznek. Ennek oka elsősorban a már felépített topológia 🙂 . Természetesen ha egy adott enterprise-hoz tartoznak a site-k, azonos AS-be kerülnek, így iBGP épül ki közöttük, de itt most a technológiára fókuszálunk.
Topológiánk tehát a következő:
Hogy is néz ki egy tipikus BGP konfiguráció két neighbor között?
Nézzük mondjuk R2 – R10 között. Mindkét routeren be kell írnunk a másik IP címét, amelyen a BGP kapcsolatot szeretnénk felépíteni. Azaz:
R2 conf t router bgp 100 neighbor 192.168.0.22 remote-as 200 neighbor 192.168.0.22 ebgp-multihop 10 end
R10 conf t router bgp 200 neighbor 192.168.0.2 remote-as 100 neighbor 192.168.0.2 ebgp-multihop 10 end
Eddig jók vagyunk:
R2# *May 12 20:47:46.442: %BGP-5-ADJCHANGE: neighbor 192.168.0.22 Up R2#
Képzeljük el, hogy nem csak kettő, hanem 100 remote site-nk van. Minden spoke router a 192.168.0.0/16 subnetből kapott IP-t. Ez azt jelenti, hogy R2-n százszor kell felvenni a peereket, és minden új site-nál bővíteni kell a listát. Macerás. De van rá megoldás, a dinamikus peering.
Spoke oldalon semmi nem változik. Ott meg kell adnunk a hub routert, ahogy eddig.
A hubon a szükséges minimum egy peer-group létrehozása, illetve egy parancs, ami a következő:
bgp listen range A.B.C.D/nn peer-group GROUP
Opcionálisan megadhatjuk, hány peert engedélyezünk dinamikusan:
bgp listen limit <1-10000>
Nézzük gyakorlatban, R2-n. Távolítsuk el R2-ről a régi, R10-re vonatkozó konfigurációt, és próbáljuk meg most már dinamikusan felépíteni a kapcsolatot.
R2 conf t router bgp 100 neighbor TEST peer-group neighbor TEST remote-as 200 neighbor TEST ebgp-multihop 10 bgp listen range 192.168.0.0/16 peer-group TEST end
Láthatjuk, hogy minden AS-hez kell egy peer-group, azaz ha sok különböző eBGP neighbor van, akkor nem vagyunk sokkal beljebb ezzel a lehetőséggel. Ha iBGP-nk van, akkor nyilván egy peer-group elég lesz.
És…
*May 12 21:03:18.712: %BGP-5-ADJCHANGE: neighbor *192.168.0.22 Up
Picit átdolgozták a BGP show kimeneteket, hogy láthassuk a dinamikus peereket:
R2#sh ip bgp s BGP router identifier 2.2.2.2, local AS number 100 BGP table version is 83, main routing table version 83 14 network entries using 2016 bytes of memory 24 path entries using 1920 bytes of memory 11/6 BGP path/bestpath attribute entries using 1672 bytes of memory 6 BGP AS-PATH entries using 144 bytes of memory 0 BGP route-map cache entries using 0 bytes of memory 0 BGP filter-list cache entries using 0 bytes of memory BGP using 5752 total bytes of memory BGP activity 17/3 prefixes, 73/49 paths, scan interval 60 secs Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 192.168.0.1 4 65000 19 16 83 0 0 00:05:15 9 *192.168.0.22 4 200 16 16 83 0 0 00:03:00 9 * Dynamically created based on a listen range command Dynamically created neighbors: 1, Subnet ranges: 1 BGP peergroup TEST listen range group members: 192.168.0.0/16 Total dynamically created neighbors: 1/(100 max), Subnet ranges: 1 R2#
Még több info:
R2#sh ip bgp neigh 192.168.0.22 BGP neighbor is *192.168.0.22, remote AS 200, external link Member of peer-group TEST for session parameters Belongs to the subnet range group: 192.168.0.0/16 BGP version 4, remote router ID 10.10.10.10 BGP state = Established, up for 00:04:08 Last read 00:00:29, last write 00:00:34, hold time is 180, keepalive interval is 60 seconds Neighbor sessions: 1 active, is not multisession capable (disabled) Neighbor capabilities: Route refresh: advertised and received(new) Four-octets ASN Capability: advertised and received Address family IPv4 Unicast: advertised and received Enhanced Refresh Capability: advertised and received Multisession Capability: Stateful switchover support enabled: NO for session 1 Message statistics: InQ depth is 0 OutQ depth is 0 Sent Rcvd Opens: 1 1 Notifications: 0 0 Updates: 8 8 Keepalives: 6 6 Route Refresh: 0 0 Total: 17 17 Do log neighbor state changes (via global configuration) Default minimum time between advertisement runs is 30 seconds For address family: IPv4 Unicast Session: *192.168.0.22 BGP table version 83, neighbor version 83/0 Output queue size : 0 Index 4, Advertise bit 0 4 update-group member TEST peer-group member Slow-peer detection is disabled Slow-peer split-update-group dynamic is disabled Sent Rcvd Prefix activity: ---- ---- Prefixes Current: 14 9 (Consumes 720 bytes) Prefixes Total: 23 9 Implicit Withdraw: 8 0 Explicit Withdraw: 0 0 Used as bestpath: n/a 2 Used as multipath: n/a 0 Outbound Inbound Local Policy Denied Prefixes: -------- ------- AS_PATH loop: n/a 10 Bestpath from this peer: 8 n/a Total: 8 10 Number of NLRIs in the update sent: max 4, min 0 Last detected as dynamic slow peer: never Dynamic slow peer recovered: never Refresh Epoch: 2 Last Sent Refresh Start-of-rib: 00:04:08 Last Sent Refresh End-of-rib: 00:04:08 Refresh-Out took 0 seconds Last Received Refresh Start-of-rib: 00:04:08 Last Received Refresh End-of-rib: 00:04:08 Refresh-In took 0 seconds Sent Rcvd Refresh activity: ---- ---- Refresh Start-of-RIB 1 1 Refresh End-of-RIB 1 1 Address tracking is enabled, the RIB does have a route to *192.168.0.22 Connections established 1; dropped 0 Last reset never External BGP neighbor may be up to 10 hops away. External BGP neighbor NOT configured for connected checks (multi-hop no-disable-connected-check) Interface associated: (none) (peering address NOT in same link) Transport(tcp) path-mtu-discovery is enabled Graceful-Restart is disabled SSO is disabled Connection state is ESTAB, I/O status: 1, unread input bytes: 0 Connection is ECN Disabled, Mininum incoming TTL 0, Outgoing TTL 10 Local host: 192.168.0.2, Local port: 179 Foreign host: 192.168.0.22, Foreign port: 34821 Connection tableid (VRF): 0 Maximum output segment queue size: 50 Enqueued packets for retransmit: 0, input: 0 mis-ordered: 0 (0 bytes) Event Timers (current time is 0x58CF6B): Timer Starts Wakeups Next Retrans 9 0 0x0 TimeWait 0 0 0x0 AckHold 8 4 0x0 SendWnd 0 0 0x0 KeepAlive 0 0 0x0 GiveUp 0 0 0x0 PmtuAger 0 0 0x0 DeadWait 0 0 0x0 Linger 0 0 0x0 ProcessQ 0 0 0x0 iss: 153274195 snduna: 153274855 sndnxt: 153274855 irs: 1248721870 rcvnxt: 1248722542 sndwnd: 15725 scale: 0 maxrcvwnd: 16384 rcvwnd: 15713 scale: 0 delrcvwnd: 671 SRTT: 699 ms, RTTO: 2656 ms, RTV: 1957 ms, KRTT: 0 ms minRTT: 1 ms, maxRTT: 1000 ms, ACK hold: 200 ms uptime: 248359 ms, Sent idletime: 29190 ms, Receive idletime: 29396 ms Status Flags: passive open, gen tcbs Option Flags: nagle, path mtu capable IP Precedence value : 6 Datagrams (max data segment is 1460 bytes): Rcvd: 18 (out of order: 0), with data: 10, total data bytes: 671 Sent: 18 (retransmit: 0, fastretransmit: 0, partialack: 0, Second Congestion: 0), with data: 10, total data bytes: 659 Packets received in fast path: 0, fast processed: 0, slow path: 0 fast lock acquisition failures: 0, slow path: 0 TCP Semaphore 0xF60A3C54 FREE R2#
CCIE laboron előfordulhat ilyen feladat, és enterprise környezetben is hasznos lehet.