Tuesday, November 30, 2010

BGP Confederations Demystified - Coming Soon...

Passing BGP Updates Through Network of Non-BGP Speakers - How Cool is that ?

In my last post  - http://deepakarora1984.blogspot.com/2010/11/transiting-non-bgp-speaking-devices.html

I presented a scenario in which we need to pass BGP updates between two AS through a Transit AS. But in Transit AS some of the devices were not BGP capable devices for say. So what we gonna do now ?


Redistribution of BGP routes into IGP could be another Idea, but in real world we usually avoid such things.


Hmmm....so what else we can try ?


Lets first setup the network and see what can be done a little later.
 Physical Topology






Logical Topology



Lets get started:



### R1 ###

Router>en
Router#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Router(config)#no ip do lo
Router(config)#line con 0
Router(config-line)#no exec-time
Router(config-line)#exit
Router(config)#ho R1
R1(config)#int lo0
R1(config-if)#ip add 1.1.1.1 255.255.255.255
R1(config-if)#exit
R1(config)#int f0/0
R1(config-if)#ip add 12.12.12.1 255.255.255.0 
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#int f0/1
R1(config-if)#ip add 51.51.51.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit 
R1(config)#ip route 5.5.5.5 255.255.255.255 f0/1 51.51.51.5
R1(config)#router eigrp 100
R1(config-router)#no au
R1(config-router)#net 1.1.1.1 0.0.0.0
R1(config-router)#net 12.12.12.1 0.0.0.0
R1(config-router)#exit
R1(config)#router bgp 123
R1(config-router)#no au
R1(config-router)#no sync
R1(config-router)#nei 5.5.5.5 remote 15
R1(config-router)#nei 5.5.5.5 update lo0
R1(config-router)#nei 5.5.5.5 ebgp      
R1(config-router)#nei 3.3.3.3 remote 123
R1(config-router)#nei 3.3.3.3 update lo0
R1(config-router)#nei 3.3.3.3 next-hop-self
R1(config-router)#exit     

=============================================================
### R2 ###

Router>en
Router#conf
Configuring from terminal, memory, or network [terminal]? 
Enter configuration commands, one per line.  End with CNTL/Z.
Router(config)#ho R2
R2(config)#no ip do lo
R2(config)#line con 0
R2(config-line)#no exec-time
R2(config-line)#exit
R2(config)#int f0/0
R2(config-if)#ip add 12.12.12.2 255.255.255.0
R2(config-if)#no sh 
R2(config-if)#exit
R2(config)#int f0/1
R2(config-if)#ip add 23.23.23.2 255.255.255.0
R2(config-if)#no sh
R2(config-if)#exit
R2(config)#router eigrp 100
R2(config-router)#no au
R2(config-router)#net 0.0.0.0
R2(config-router)#exit

=============================================================


### R3 ###

Router>en
Router#conf
Configuring from terminal, memory, or network [terminal]? 
Enter configuration commands, one per line.  End with CNTL/Z.
Router(config)#ho R3
R3(config)#no ip do lo
R3(config)#line con 0
R3(config-line)#no exec-time
R3(config-line)#exit
R3(config)#int lo0
R3(config-if)#ip add 3.3.3.3 255.255.255.255 
R3(config-if)#exit
R3(config)#int f0/0
R3(config-if)#ip add 23.23.23.3 255.255.255.0 
R3(config-if)#no sh
R3(config-if)#exit
R3(config)#int f0/1
R3(config-if)#ip add 43.43.43.3 255.255.255.0
R3(config-if)#no sh
R3(config-if)#exit
R3(config)#ip route 4.4.4.4 255.255.255.255 f0/1 43.43.43.4
R3(config)#router eigrp 100
R3(config-router)#no au
R3(config-router)#net 3.3.3.3 0.0.0.0
R3(config-router)#net 23.23.23.3 0.0.0.0
R3(config-router)#exit
R3(config)#router bgp 123
R3(config-router)#no au
R3(config-router)#no sync
R3(config-router)#nei 4.4.4.4 remote 34
R3(config-router)#nei 4.4.4.4 update lo0
R3(config-router)#nei 4.4.4.4 ebgp      
R3(config-router)#nei 1.1.1.1 remote 123
R3(config-router)#nei 1.1.1.1 update lo0
R3(config-router)#nei 1.1.1.1 next-hop-self
R3(config-router)#exit
==============================================================

### R4 ####

Router>en
Router#conf
Configuring from terminal, memory, or network [terminal]? 
Enter configuration commands, one per line.  End with CNTL/Z.
Router(config)#ho R4
R4(config)#no ip do lo
R4(config)#line con 0
R4(config-line)#no exec-time
R4(config-line)#exit
R4(config)#int lo0
R4(config-if)#ip add 4.4.4.4 255.255.255.255
R4(config-if)#exit
R4(config)#int lo1
R4(config-if)#ip add 44.44.44.44 255.255.255.255
R4(config-if)#exit
R4(config)#int f0/0
R4(config-if)#ip add 43.43.43.4 255.255.255.0
R4(config-if)#no sh
R4(config-if)#exit
R4(config)#ip route 3.3.3.3 255.255.255.255 f0/0 43.43.43.3
R4(config)#router bgp 34
R4(config-router)#no au
R4(config-router)#no sync
R4(config-router)#nei 3.3.3.3 remote 123
R4(config-router)#nei 3.3.3.3 update lo0
R4(config-router)#nei 3.3.3.3 ebgp      
R4(config-router)#net 44.44.44.44 mask 255.255.255.255
R4(config-router)#exit
========================================================

### R5 ###

Router>en
Router#conf
Configuring from terminal, memory, or network [terminal]? 
Enter configuration commands, one per line.  End with CNTL/Z.
Router(config)#ho R5
R5(config)#no ip do lo
R5(config)#line con 0
R5(config-line)#no exec-time
R5(config-line)#exit
R5(config)#int lo0
R5(config-if)#ip add 5.5.5.5 255.255.255.255
R5(config-if)#exit
R5(config)#int lo1
R5(config-if)#ip add 5.5.5.5 255.255.255.255
R5(config-if)#exit
R5(config)#int lo1
R5(config-if)#ip add 55.55.55.55 255.255.255.255
R5(config-if)#exit
R5(config)#int f0/0 
R5(config-if)#ip add 51.51.51.5 255.255.255.0  
R5(config-if)#no sh
R5(config-if)#exit 
R5(config)#ip route 1.1.1.1 255.255.255.255 f0/0 51.51.51.1
R5(config)#router bgp 15
R5(config-router)#no au
R5(config-router)#no sync
R5(config-router)#nei 1.1.1.1 remote 123
R5(config-router)#nei 1.1.1.1 update lo0
R5(config-router)#nei 1.1.1.1 ebgp
R5(config-router)#net 55.55.55.55 mask 255.255.255.255
R5(config-router)#exit
================================================================



R1(config)#do sh ip bgp | b Net       
   Network          Next Hop            Metric LocPrf Weight Path
*>i44.44.44.44/32   3.3.3.3                  0    100      0        34 i
*> 55.55.55.55/32   5.5.5.5                  0               0        15 i




R5(config)#do sh ip bgp | b Net
   Network          Next Hop            Metric LocPrf Weight Path
*> 44.44.44.44/32   1.1.1.1                                0 123     34 i
*> 55.55.55.55/32   0.0.0.0                  0         32768            i

Hmmm...so far everything looks good. Lets trace R4's Lo1 from R5

R5(config)#do trace 44.44.44.44 so lo1

Type escape sequence to abort.
Tracing the route to 44.44.44.44

  1 51.51.51.1 4 msec 12 msec 8 msec
  2  *  *  * 
  3  *  *  * 

Hmmm...Things doesn't look quite working yet.

Lets hop on to R2 and check it's routing table:

R2(config)#do sh ip ro | b ^G
Gateway of last resort is not set

     1.0.0.0/32 is subnetted, 1 subnets
D       1.1.1.1 [90/409600] via 12.12.12.1, 01:47:22, FastEthernet0/0
     3.0.0.0/32 is subnetted, 1 subnets
D       3.3.3.3 [90/409600] via 23.23.23.3, 01:43:41, FastEthernet0/1
     23.0.0.0/24 is subnetted, 1 subnets
C       23.23.23.0 is directly connected, FastEthernet0/1
     12.0.0.0/24 is subnetted, 1 subnets
C       12.12.12.0 is directly connected, FastEthernet0/0

so here is the problem. R2 has no knowledge about who is 44.44.44.44, so when it receive packets destined for 44.44.44.44; it checks its local routing table and as it doesn't find any entry in there it simply drops the packets. One work around could be redistributing BGP into EIGRP but thats restricted here. So what else ?

Hmmm...how about our old friend tunnels ? :-)


Okay... I am certainly not a patient of Tarsal Tunnel Syndrome :-P 

But lets see how we can fix this with tunnels.

R1(config)#int tu13
R1(config-if)#ip add 13.13.13.1 255.255.255.0
R1(config-if)#tu so f0/0
R1(config-if)#tu dest 23.23.23.3
R1(config-if)#exit


R3(config)#int tu 13
R3(config-if)#ip add 13.13.13.3 255.255.255.0
R3(config-if)#tu so f0/0
R3(config-if)#tu dest 12.12.12.1
R3(config-if)#exit

*Mar  1 01:48:46.071: %LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel13, changed state to up


R1(config)#router bgp 123
R1(config-router)#nei 13.13.13.3 remote 123
R1(config-router)#nei 13.13.13.3 update tu13
R1(config-router)#nei 13.13.13.3 next-hop-s
R1(config-router)#exit


R3(config)#router bgp 123
R3(config-router)#nei 13.13.13.1 remote 123
R3(config-router)#nei 13.13.13.1 update tu13
R3(config-router)#nei 13.13.13.1 next-hop-s
R3(config-router)#exit

*Mar  1 01:53:16.167: %BGP-5-ADJCHANGE: neighbor 13.13.13.1 Up 


R5(config)#do trace 44.44.44.44 so lo1

Type escape sequence to abort.
Tracing the route to 44.44.44.44

  1 51.51.51.1 4 msec 12 msec 8 msec
  2 13.13.13.3 24 msec 16 msec 16 msec
  3 43.43.43.4 52 msec *  24 msec


R4(config)#do trace 55.55.55.55 so lo1

Type escape sequence to abort.
Tracing the route to 55.55.55.55

  1 43.43.43.3 8 msec 12 msec 8 msec
  2 13.13.13.1 16 msec 20 msec 20 msec
  3 51.51.51.5 24 msec *  64 msec


R4(config)#do ping 55.55.55.55 so lo1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 55.55.55.55, timeout is 2 seconds:
Packet sent with a source address of 44.44.44.44 
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 28/42/60 ms




HTH...
Deepak Arora

Thursday, November 25, 2010

Thursday, November 18, 2010

Transiting Non-BGP Speaking Devices

                                  
                      Note: Click Images To Enlarge

Requirements :
1. Establish Connectivity between R4(Lo1) <--> R5(Lo1). Lo0 interfaces are used just to setup BGP session.

Restrictions:
1. R2 can't run BGP instance, no static routes or 
    default routes/PBR.
2. No redistribution is allowed anywhere to establish full 
    connectivity between R4 & R5's Loopback 1 Interfaces.

Info:
1. R1/R3's Lo0 interfaces are advertised into EIGRP.
2. R1/R3 points a host static route towards R5/R4 
    respectively & Vice Versa to obtain basic reachability to 
    Lo0 interfaces. 

Solution:  Coming Soon....

HTH...
Deepak Arora 

CCIE Addiction - Must Watch

http://garvas.org/ipexpert/

HTH...
Deepak Arora

Tuesday, November 16, 2010

Auto-Negotiation ON vs OFF - Welcome Back To Ethernet World

Auto negotiation is one of those thing which comes back to every network engineer at some point. There is always so much talk about idea  that - if we should keep auto-negotiation "ON" or should we turn it "OFF" and hard-cord the "Duplex" & "Speed" settings.

There are always two schools of thoughts about this and you may choose which one you like more. 


So idea boils down to which school you prefer. 

But...

Here are some of drawbacks or I should say list of things which you won't be able to figure out easily or will not work at all if you turn off auto-negotiation over interface:

1. Performance Issue
2.
Link failures
3. 
Pause Frames or Flow Control
4.
Bad Cable Problem
5.
Link Partner Capabilities
6. Auto-MDIX will not work

For more:

http://en.wikipedia.org/wiki/Autonegotiation 

http://etherealmind.com/ethernet-autonegotiation-works-why-how-standard-should-be-set/

http://www.sun.com/blueprints/0704/817-7526.pdf

http://www.cisco.com/en/US/docs/internetworking/troubleshooting/guide/tr1923.html

http://www.cisco.com/en/US/products/hw/switches/ps700/products_tech_note09186a00800a7af0.shtml 

http://blog.ine.com/2008/07/08/802-3x-flow-control/ 
 
HTH...
Deepak  Arora

EIGRP Variance & Unequal Cost Load Balancing Demystified - With Little GNS Bug

It's been a month since I posted my EIGRP challenge lab:


http://deepakarora1984.blogspot.com/2010/10/eigrp-challenge-lab-1.html


So today it's time to show you how to do it. I won't be spending much time today in explaining theory behind all this as so many people have already written about it but of-course that doesn't mean they covered it from all aspects.


But still I'll provide some reference links in the end of this post to make sure you don't have any gaps regarding concepts.


So lets load the initial configurations which I provided in original post and lets get started :


NoteClick Images To Enlarge










so far we can see the route is in routing table of R4, but we don't see redundant path as yet because of it's higher cost.


Lets calculate variance to install redundant route in routing table:


For those who don't understand variance yet here is the link:


http://www.networkworld.com/community/node/29966


Lets first examine the difference between two metrics that belong to both links for same route:




Now to calculate the required variance use the equation: Higher FD / Lower FD, and result will be:




As variance can't be fractional, so we need to take higher value, which will be 4


Lets's use variance value 4 and take a look at routing table:







Looks like both routes now have made it to routing table. So first objective is achieved. Now lets take a look at Traffic Share Count for both links for same route:





so as you can see that current traffic share count is 21:80. Traffic share count is inversely proportional to metric difference between both links.


So next step is to somehow make it as 1:1 :-)


As you might be thinking that Mr. Garcia (Creator Of EIGRP) should be around :-)




so lets take a look at first how much difference is there between both metrics:




Now lets subtract the lower metric from higher metric: By Metric I mean FD AKA RD:




So the difference comes as - 30000128


Now in next step lets add this metric to link with lower metric using "offset-list".








Here offset List calling ACL "0" means matching all routes... just for your sake :-)


Lets check again different EIGRP tables and see if it works:




Duhhh....looks like GNS is creating pain in butt again.... tired of GNS bugs :-(




Actually to over come this issue I had to jump to real equipments with same configuration and here are the results:




Though IOS ver "15.x" was not liking somehow idea of offset-list 0, so I had to create a specific ACL for this route:




So all functional and we have traffic share count of 1:1 between both links though they have different bandwidth.


Some more interesting reads on EIGRP or I should say "Must" read documents on EIGRP Load Balancing:


http://www.cisco.com/en/US/tech/tk365/technologies_tech_note09186a0080094823.shtml

http://www.cisco.com/en/US/tech/tk365/technologies_tech_note09186a0080094820.shtml

http://www.cisco.com/en/US/tech/tk827/tk831/technologies_white_paper09186a00800a62d9.shtml

http://www.cisco.com/en/US/products/hw/modules/ps2033/prod_technical_reference09186a00800afeb7.html/

http://www.cisco.com/en/US/tech/tk365/technologies_tech_note09186a008009437d.shtml

http://www.cisco.com/en/US/tech/tk365/technologies_tech_note09186a00800c2d96.shtml

HTH...
Deepak Arora

Cisco ISP Essentials - E-Book (Free)...No Piracy :-)


While going through some web pages yesterday I came across this download link from Cisco Engineering Team. Using this link you can actually download pdf copy of this great book in free without getting into piracy issues :-)


ftp://ftp-eng.cisco.com/cons/isp/documents/IOSEssentialsPDF.zip


HTH...
Deepak Arora

Wednesday, November 10, 2010

Difference Between Routing Table & RIB (Routing Information Base) - Short Post



It's been long time since I wanted to talk over my blog about this. I have seen many people and books claiming that RIB is just another name of I should say fancy term to describe our old friend Routing Table. But In my personal opinion there is a significant difference between both.


RIB or Routing Information Base is local view about information from Routing Protocol Prospective. For example each routing protocol including BGP generates BGPtables in General. Yeah I know there are some more details as far how BGP builds its BGP Table :-). But for now lets talk about BGP table in short.


BGP table is local view of routing information received and generated locally. If you have ever run BGP than you must be aware about situations where you find some routing information which is in BGP table but when you run "show ip route" command , you don't see this information there. 


There are many possible reason for that in BGP like "Un-Reachable Next Hop" Address.


So what actually we see with "show ip bgp" is RIB built by BGP. On the other hand what we see with "show ip route" is Routing table which is derived from that RIB information. Or in other words best and valid information picked by router from BGP Table and placed it into routing table.




so next idea comes into mind is that how we check RIB for each protocol ?


And here is answer :-)


RIP -  "sh ip rip database"


OSPF - Older way > "sh ip ospf database"
              Modern Way > "sh ip ospf rib detail"


EIGRP - "sh ip eigrp topology all-links"


BGP - "sh ip bgp"


IS-IS - "sh isis database"


With the "sh ip eigrp topology all-links" command you can actually see routes that failed the feasibility check.


Also one of the reason that support idea of RIB being different from Routing Table is - In OSPF for example if Forwarding Address (FA) for LSA 5 is not reachable, in such case you will see entries for those LSAs in "OSPF database" with command " sh ip ospf database" but on the other hand you won't find those routes in Routing table when you run command "sh ip route"


HTH...
Deepak Arora