eBGP multihop vs. disable-connected-check


Egy újabb BGP-s poszt következik. A topológia ugyanaz mint a legutóbbi bejegyzésnél.

 

 

A konfiguráció is hasonló, csak kivettem az ebgp-multihop parancsot.

 

----
R1
----

conf t
hostname R1
no ip domain-lookup
int f0/0
ip add 10.0.12.1 255.255.255.0
no shut
int Lo0
ip add 1.1.1.1 255.255.255.255
router bgp 12
neighbor 2.2.2.2 remote-as 21
neighbor 2.2.2.2 up lo0
exit
ip route 2.2.2.2 255.255.255.255 10.0.12.2
end

 

----
R2
----

conf t
hostname R2
no ip domain-lookup
int f0/0
ip add 10.0.12.2 255.255.255.0
no shut
int Lo0
ip add 2.2.2.2 255.255.255.255
router bgp 21
neighbor 1.1.1.1 remote-as 12
neighbor 1.1.1.1 up lo0
exit
ip route 1.1.1.1 255.255.255.255 10.0.12.1
end

 

A loopback interface-k között megvan a kapcsolat, eddig rendben vagyunk.

 

R1#ping 2.2.2.2 so lo0

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds:
Packet sent with a source address of 1.1.1.1
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 8/23/44 ms
R1#

 

A BGP neighborship nem épült fel, OPEN üzenet sem megy ki a routerekből.

 

R1#
R1#debug ip bgp
BGP debugging is on for address family: IPv4 Unicast
R1#
R1#
R1#

 

Az eBGP alapból TTL=1-et használ. Ez logikus, hiszen a neighborshipet a link másik felén lévő routerrel szeretnénk felépíteni (“azonos kábel”). Sokan rávágnák hogy azért nem áll össze a BGP mert a TTL-t meg kellene emelni. Ez részben jogos, megoldaná a problémát. De csak azért, mert az “ebgp-multihop” kikapcsolja a “connected-check” vizsgálatát. Mit is jelent ez?

Az eBGP OPEN üzenetnél a TTL mindig “1” és feltételezzük hogy a neighbor “directly connected” (“azonos kábel”), ezt kellene látnunk a RIB-ben (route tábla). De nyilván nem ezt látjuk, ezért a BGP meg sem próbálkozik felépíteni a kapcsolatot.

 

R2#sh ip route 1.1.1.1
Routing entry for 1.1.1.1/32
Known via "static", distance 1, metric 0
Routing Descriptor Blocks:
* 10.0.12.1
Route metric is 0, traffic share count is 1

R2#

 

A TTL=1 jelen esetben nem jelent gondot mert a közhiedelemmel ellentétben a routeren belüli “routing” nem csökkenti a TTL-t.

Pont erre az esetre való a “disable-connected-check” parancs: ignoráljuk annak vizsgálatát hogy a router azonos kábelen van -e, de a TTL marad 1 az üzenetben.

 

R1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)#router bgp 12
R1(config-router)#neighbor 2.2.2.2 disable-connected-check
R1(config-router)#end
R1#

 

R2#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R2(config-router)#neighbor 1.1.1.1 disable-connected-check
R2(config-router)#end
R2#

 

Ésssss….

 

R1#
*Mar 1 00:20:12.615: BGP: 2.2.2.2 went from Idle to Active
*Mar 1 00:20:12.623: BGP: 2.2.2.2 open active delayed 32630ms (35000ms max, 28% jitter)
*Mar 1 00:20:45.255: BGP: 2.2.2.2 open active, local address 1.1.1.1
*Mar 1 00:20:45.319: BGP: 2.2.2.2 went from Active to OpenSent
*Mar 1 00:20:45.323: BGP: 2.2.2.2 sending OPEN, version 4, my as: 12, holdtime 180 seconds
*Mar 1 00:20:45.327: BGP: 2.2.2.2 send message type 1, length (incl. header) 45
*Mar 1 00:20:45.359: BGP: 2.2.2.2 rcv message type 1, length (excl. header) 26
*Mar 1 00:20:45.359: BGP: 2.2.2.2 rcv OPEN, version 4, holdtime 180 seconds
*Mar 1 00:20:45.359: BGP: 2.2.2.2 rcv OPEN w/ OPTION parameter len: 16
*Mar 1 00:20:45.363: BGP: 2.2.2.2 rcvd OPEN w/ optional parameter type 2 (Capability) len 6
*Mar 1 00:20:45.363: BGP: 2.2.2.2 OPEN has CAPABILITY code: 1, length 4
*Mar 1 00:20:45.363: BGP: 2.2.2.2 OPEN has MP_EXT CAP for afi/safi: 1/1
*Mar 1 00:20:45.363: BGP: 2.2.2.2 rcvd OPEN w/ optional parameter type 2 (Capability) len 2
*Mar 1 00:20:45.363: BGP: 2.2.2.2 OPEN has CAPABILITY code: 128, length 0
*Mar 1 00:20:45.363: BGP: 2.2.2.2 OPEN has ROUTE-REFRESH capability(old) for all address-families
*Mar 1 00:20:45.363: BGP: 2.2.2.2 rcvd OPEN w/ optional parameter type 2 (Capability) len 2
*Mar 1 00:20:45.363: BGP: 2.2.2.2 OPEN has CAPABILITY code: 2, length 0
*Mar 1 00:20:45.363: BGP: 2.2.2.2 OPEN has ROUTE-REFRESH capability(new) for all address-families
BGP: 2.2.2.2 rcvd OPEN w/ remote AS 21
*Mar 1 00:20:45.363: BGP: 2.2.2.2 went from OpenSent to OpenConfirm
*Mar 1 00:20:45.371: BGP: 2.2.2.2 went from OpenConfirm to Established
*Mar 1 00:20:45.371: %BGP-5-ADJCHANGE: neighbor 2.2.2.2 Up

 

Wiresharkban látszik hogy a TTL valóban 1 maradt.

 

 

A másik megoldás a jól ismert “ebgp-multihop” parancs. Ez ellentétben a “disable connected check” megoldással megnöveli a TTL-t és implicit tiltja a connected check-et. Nézzük meg ezt is. Kiveszem a “disable-connected-check” parancsot, mehet az “ebgp-multihop”, aztán letiltom R2-t hogy kikényszerítsek egy billenést. Wireshark-ban látjuk hogy ez egy TCP RST üzenetet jelent.

 

R1(config)#router bgp 12
R1(config-router)#no neighbor 2.2.2.2 disable-connected-check
R1(config-router)#neighbor 2.2.2.2 ebgp-multihop
R1(config-router)#neighbor 2.2.2.2 shut
R1(config-router)#
*Mar 1 00:28:57.915: BGPNSF state: 2.2.2.2 went from nsf_not_active to nsf_not_active
*Mar 1 00:28:57.915: BGP: 2.2.2.2 went from Established to Idle
*Mar 1 00:28:57.915: %BGP-5-ADJCHANGE: neighbor 2.2.2.2 Down Admin. shutdown
*Mar 1 00:28:57.919: BGP: 2.2.2.2 closing

R2#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R2(config)#router bgp 21
R2(config-router)#no neighbor 1.1.1.1 disable-connected-check
R2(config-router)#neighbor 1.1.1.1 ebgp-multihop
R2(config-router)#

 

Engedjük fel R2-t.

 

R1(config-router)#
R1(config-router)#no neighbor 2.2.2.2 shut
R1(config-router)#

 

BGP UP.

R1#
*Mar 1 00:30:41.871: BGP: 2.2.2.2 passive open to 1.1.1.1
*Mar 1 00:30:41.871: BGP: 2.2.2.2 went from Idle to Connect
*Mar 1 00:30:41.875: BGP: 2.2.2.2 rcv message type 1, length (excl. header) 26
*Mar 1 00:30:41.875: BGP: 2.2.2.2 rcv OPEN, version 4, holdtime 180 seconds
*Mar 1 00:30:41.875: BGP: 2.2.2.2 went from Connect to OpenSent
*Mar 1 00:30:41.879: BGP: 2.2.2.2 sending OPEN, version 4, my as: 12, holdtime 180 seconds
*Mar 1 00:30:41.879: BGP: 2.2.2.2 rcv OPEN w/ OPTION parameter len: 16
*Mar 1 00:30:41.879: BGP: 2.2.2.2 rcvd OPEN w/ optional parameter type 2 (Capability) len 6
*Mar 1 00:30:41.879: BGP: 2.2.2.2 OPEN has CAPABILITY code: 1, length 4
*Mar 1 00:30:41.879: BGP: 2.2.2.2 OPEN has MP_EXT CAP for afi/safi: 1/1
*Mar 1 00:30:41.879: BGP: 2.2.2.2 rcvd OPEN w/ optional parameter type 2 (Capability) len 2
*Mar 1 00:30:41.879: BGP: 2.2.2.2 OPEN has CAPABILITY code: 128, length 0
*Mar 1 00:30:41.879: BGP: 2.2.2.2 OPEN has ROUTE-REFRESH capability(old) for all address-families
*Mar 1 00:30:41.879: BGP: 2.2.2.2 rcvd OPEN w/ optional parameter type 2 (Capability) len 2
*Mar 1 00:30:41.879: BGP: 2.2.2.2 OPEN has CAPABILITY code: 2, length 0
*Mar 1 00:30:41.879: BGP: 2.2.2.2 OPEN has ROUTE-REFRESH capability(new) for all address-families
BGP: 2.2.2.2 rcvd OPEN w/ remote AS 21
*Mar 1 00:30:41.879: BGP: 2.2.2.2 went from OpenSent to OpenConfirm
*Mar 1 00:30:41.879: BGP: 2.2.2.2 send message type 1, length (incl. header) 45
*Mar 1 00:30:41.887: BGP: 2.2.2.2 went from OpenConfirm to Established
*Mar 1 00:30:41.887: %BGP-5-ADJCHANGE: neighbor 2.2.2.2 Up

 

Wireshark-ban látszik hogy a TTL 255-re nőtt.

 

 

Van lehetőség a TTL megadására is: neighbor X.X.X.X ebgp-multihop X

R1(config)#router bgp 12
R1(config-router)#neighbor 2.2.2.2 ebgp-multihop ?
<1-255> maximum hop count
<cr>

R1(config-router)#neighbor 2.2.2.2 ebgp-multihop 2

 

R2(config)#router bgp 21
R2(config-router)#neighbor 1.1.1.1 ebgp-multihop 2

 

Ha megnézzük Wireshark-ban akkor látjuk hogy a TTL valóban 2 lett.

 

 

Felmerül a kérdés: mi történik ha “ebgp-multihop”-pal TTL=1-et állítunk? Kikapcsolja -e ez is az implicit “connected check”-et?

Nézzük meg.

 

R1(config-router)#neighbor 2.2.2.2 ebgp-multihop 1
R2(config-router)#neighbor 1.1.1.1 ebgp-multihop 1

 

Ha most megnézzük a BGP konfigurációt R1-en akkor azt látjuk hogy a parancs nem került be, mivel ez a default konfiguráció. Tehát ilyen trükk nincs.

R1(config-router)#do sh run | s bgp
router bgp 12
no synchronization
bgp log-neighbor-changes
neighbor 2.2.2.2 remote-as 21
neighbor 2.2.2.2 update-source Loopback0
no auto-summary
R1(config-router)#

 

Ezt látjuk a capture-ben is. R2 TTL=1-gyel küldi a csomagot (SYN), R1 pedig TTL=255-tel TCP RST-vel válaszol (RST, ACK).

 


 

A lényeg tehát:

  • “disable-connected-check”: szomszédos routereknél, a TTL marad 1.
  • “ebgp-multihop”: szomszédos vagy nem szomszédos routereknél, TTL=255.

 

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.