Dynamic BGP peering

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ő:

topologia

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.