<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CCIE Blog &#187; BGP</title>
	<atom:link href="http://blog.ipexpert.com/tags/bgp/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.ipexpert.com</link>
	<description>CCIE Candidates blog for all technical overviews relating to CCIE R&#38;S, CCIE Voice, CCIE Security &#38; CCIE SP</description>
	<lastBuildDate>Wed, 08 Feb 2012 15:19:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Multi-Homed BGP and Policy-Based Routing</title>
		<link>http://blog.ipexpert.com/2012/02/08/multi-homed-bgp-and-policy-based-routing/</link>
		<comments>http://blog.ipexpert.com/2012/02/08/multi-homed-bgp-and-policy-based-routing/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 15:19:19 +0000</pubDate>
		<dc:creator>Marko Milivojevic</dc:creator>
				<category><![CDATA[CCIE]]></category>
		<category><![CDATA[Routing & Switching]]></category>
		<category><![CDATA[Service Provider]]></category>
		<category><![CDATA[BGP]]></category>
		<category><![CDATA[PBR]]></category>
		<category><![CDATA[r&s]]></category>
		<category><![CDATA[sp]]></category>

		<guid isPermaLink="false">http://blog.ipexpert.com/?p=10117</guid>
		<description><![CDATA[This blog explores another interesting question a student of ours asked the other day. His network is dual-homed to two ISPs on a single router. He wanted to make sure one of his subnets is always routed over ISP-1 and the other over ISP-2, unless there is a network failure. There was also a requirement [...]]]></description>
			<content:encoded><![CDATA[<p>This blog explores another interesting question a student of ours asked the other day. His network is dual-homed to two ISPs on a single router. He wanted to make sure one of his subnets is always routed over ISP-1 and the other over ISP-2, unless there is a network failure. There was also a requirement for the return traffic to take the same route, i.e. no asymmetric routing. This will be a fun one to solve.<span id="more-10117"></span></p>
<p>First of all, let&#8217;s take a look at the testbed network we can use for this situation.</p>
<p>&nbsp;</p>
<p><img title="BGP-PBR" src="http://blog.ipexpert.com/wp-content/uploads/2012/02/BGP-PBR.png" alt="BGP-PBR" />&nbsp;</p>
<p>In this scenario, routers R2 and R5 represent the two ISPs. Routers R6 and R9 represent our internal network, with two subnets we need to route differently represented by Loopback interfaces Loopback9 (9.9.9.0/24 subnet) and Loopback99 (from a 99.99.99.0/24 subnet) on R9. Router R4 represents a host &#8220;somewhere&#8221; on the Internet we&#8217;ll be using for testing. We&#8217;ll pretend to have no access to change any configurations on Internet routers, so only routers R6 and R9 are available to us. Let&#8217;s see the initial configurations and clarify few things there.</p>
<h2>Initial Network Configuration</h2>
<p>R2:</p>
<pre class="config">interface GigabitEthernet0/0
 ip address 172.16.24.2 255.255.255.0
!
interface GigabitEthernet0/1
 ip address 172.16.26.2 255.255.255.0
!
router bgp 65002
 neighbor 172.16.24.4 remote-as 65004
 neighbor 172.16.26.6 remote-as 65069
 address-family ipv4
  neighbor 172.16.24.4 activate
  neighbor 172.16.24.4 send-community
  neighbor 172.16.26.6 activate
  neighbor 172.16.26.6 send-community
!</pre>
<p>Router R4 is a dual-homed, just like our AS is. We&#8217;re using a simple configuration to prevent transit. We will apply a very similar configuration in our AS later.</p>
<p>R4:</p>
<pre class="config">interface Loopback4
 ip address 10.0.0.4 255.255.255.255
!
interface FastEthernet0/0
 ip address 172.16.24.4 255.255.255.0
!
interface FastEthernet0/1
 ip address 172.16.45.4 255.255.255.0
!
router bgp 65004
 neighbor 172.16.24.2 remote-as 65002
 neighbor 172.16.45.5 remote-as 65005
 address-family ipv4
  neighbor 172.16.24.2 activate
  neighbor 172.16.24.2 send-community
  neighbor 172.16.24.2 route-map NO-TRANSIT in
  neighbor 172.16.45.5 activate
  neighbor 172.16.45.5 send-community
  neighbor 172.16.45.5 route-map NO-TRANSIT in
  network 10.0.0.4 mask 255.255.255.255
!
route-map NO-TRANSIT permit 10
 set community no-advertise
!</pre>
<p>R5:</p>
<pre class="config">interface FastEthernet0/0
 ip address 172.16.56.5 255.255.255.0
!
interface FastEthernet0/1
 ip address 172.16.45.5 255.255.255.0
!
router bgp 65005
 neighbor 172.16.45.4 remote-as 65004
 neighbor 172.16.56.6 remote-as 65069
 address-family ipv4
  neighbor 172.16.45.4 activate
  neighbor 172.16.45.4 send-community
  neighbor 172.16.56.6 activate
  neighbor 172.16.56.6 send-community
!</pre>
<p>Similarly to the configuration on R4, we need to prevent the transit between our ISPs. However, we can&#8217;t use the &#8220;no-advertise&#8221; community here, since we need to advertise the received route(s) to R9. This is easily fixed using &#8220;no-export&#8221; community instead.</p>
<p>R6:</p>
<pre class="config">interface FastEthernet0/0
 ip address 172.16.56.6 255.255.255.0
!
interface FastEthernet0/1
 ip address 172.16.26.6 255.255.255.0
!
interface Serial0/2/0
 ip address 192.168.69.6 255.255.255.0
!
router bgp 65069
 neighbor 172.16.26.2 remote-as 65002
 neighbor 172.16.56.5 remote-as 65005
 neighbor 192.168.69.9 remote-as 65069
 address-family ipv4
  neighbor 172.16.26.2 activate
  neighbor 172.16.26.2 send-community
  neighbor 172.16.26.2 route-map NO-TRANSIT in
  neighbor 172.16.56.5 activate
  neighbor 172.16.56.5 send-community
  neighbor 172.16.56.5 route-map NO-TRANSIT in
  neighbor 192.168.69.9 activate
  neighbor 192.168.69.9 send-community
  neighbor 192.168.69.9 next-hop-self
!
route-map NO-TRANSIT permit 10
 set community no-export
!</pre>
<p>R9:</p>
<pre class="config">interface Loopback9
 ip address 9.9.9.9 255.255.255.255
!
interface Loopback99
 ip address 99.99.99.99 255.255.255.255
!
interface Serial0/2/0
 ip address 192.168.69.9 255.255.255.0
!
router bgp 65069
 neighbor 192.168.69.6 remote-as 65069
 address-family ipv4
  neighbor 192.168.69.6 activate
  neighbor 192.168.69.6 send-community
  network 9.9.9.0 mask 255.255.255.0
  network 99.99.99.0 mask 255.255.255.0
!</pre>
<p>At this point, router R9 should be able to reach Loopback4 interface advertised by R4 from its Loopback9 and Loopback99 interfaces. Let&#8217;s give it a go.</p>
<p>R9:</p>
<pre>R9#ping 10.0.0.4 source Loopback9

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.0.4, timeout is 2 seconds:
Packet sent with a source address of 9.9.9.9
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/3/4 ms
R9#ping 10.0.0.4 source Loopback99

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.0.4, timeout is 2 seconds:
Packet sent with a source address of 99.99.99.99
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/2/4 ms</pre>
<p>This works as expected. Now, lets&#8217; work on our &#8220;traffic engineering&#8221;.</p>
<h2>Chosing Different Paths from R9</h2>
<p>Let&#8217;s say that our goal is to make the traffic between 9.9.9.0/24 and 10.0.0.0/24 take the path R9-&gt;R6-&gt;R2-&gt;R4, while the traffic between 99.99.99.0/24 needs to take the R9-&gt;R6-&gt;R5-&gt;R4 path. We can easily fix this issue using a simple policy-based routing (PBR) configuration on R6.</p>
<p>All we need is to match the source of traffic when it enters R6 from R9 and force it down the specific path. For example, a policy like this may do the trick.</p>
<pre class="config">ip access-list standard Network-9
 permit 9.9.9.0 0.0.0.255
!
ip access-list standard Network-99
 permit 99.99.99.0 0.0.0.255
!
route-map Force-Path permit 10
 match ip address Network-9
 set ip next-hop 172.16.26.2
!
route-map Force-Path permit 20
 match ip address Network-99
 set ip next-hop 172.16.56.5
!
interface Serial0/2/0
 ip policy route-map Force-Path
!</pre>
<p>We could apply this policy and be done with it. However, there are couple of problems with this. What if the next-hop is not reachable? For example, the remote router crashes, the switch between R6 and R2/R5 drops the packets, etc? We would be black-holing the traffic. This is not a good thing in any kind of a production environment. Is there a way to solve this? As it turns out, there is. We can actually monitor the exit interface, next-hop route, as well as the next-hop itself, using object tracking. We can then have a conditional policy that will be taken into account only when all of these parameters are in place and operational. So, the policy I&#8217;m going to apply is <em>a little bit</em> more involved:</p>
<p>R6:</p>
<pre class="config">ip access-list standard Network-9
 permit 9.9.9.0 0.0.0.255
!
ip access-list standard Network-99
 permit 99.99.99.0 0.0.0.255
!
track 2 list boolean and
 object 21
 object 22
 object 23
!
track 5 list boolean and
 object 51
 object 52
 object 53
!
track 21 interface FastEthernet0/1 ip routing
track 22 ip route 172.16.26.0 255.255.255.0 reachability
track 23 ip sla 2
track 51 interface FastEthernet0/0 ip routing
track 52 ip route 172.16.56.0 255.255.255.0 reachability
track 53 ip sla 2
!
ip sla 2
 icmp-echo 172.16.26.2 source-ip 172.16.26.6
ip sla schedule 2 life forever start-time now
!
ip sla 5
 icmp-echo 172.16.56.5 source-ip 172.16.56.6
ip sla schedule 5 life forever start-time now
!
route-map Force-Path permit 10
 match ip address Network-9
 set ip next-hop verify-availability 172.16.26.2 10 track 2
!
route-map Force-Path permit 20
 match ip address Network-99
 set ip next-hop verify-availability 172.16.56.5 10 track 5
!
interface Serial0/2/0
 ip policy route-map Force-Path
!</pre>
<p>That&#8217;s a lot to handle in one go. Let&#8217;s break it down a little bit. First off, I start by defining track lists. Track lists are simply multiple tracking objects that will be compared using a single boolean logic. In this case, I have three sub-objects I&#8217;m tracking and I&#8217;m combining them using &#8220;and&#8221; logic. In plain English, this means the track list will be &#8220;up&#8221; if all monitored sub-objects are &#8220;up&#8221;. The three objects are exit interface&#8217;s routing status, next-hop route and the next-hop reachability, which we monitor using IP SLA ICMP-Echo (ping) probe. Finally, it all comes together in a route-map, which uses &#8220;verify-availability&#8221; keyword to track the next-hop. Let&#8217;s see if it all works.</p>
<p>R6:</p>
<pre>R6#show track 2
Track 2
  List boolean and
  Boolean AND is Up
    2 changes, last change 00:03:34
    object 21 Up
    object 22 Up
    object 23 Up
  Tracked by:
    ROUTE-MAP 0

R6#show track 5
Track 5
  List boolean and
  Boolean AND is Up
    2 changes, last change 00:03:36
    object 51 Up
    object 52 Up
    object 53 Up
  Tracked by:
    ROUTE-MAP 0

R6#show ip policy
Interface      Route map
Serial0/2/0    Force-Path</pre>
<p>R9:</p>
<pre>R9#traceroute 10.0.0.4 source Loopback9 

Type escape sequence to abort.
Tracing the route to 10.0.0.4

  1 192.168.69.6 0 msec 4 msec 0 msec
  2 172.16.26.2 4 msec 0 msec 0 msec
  3 172.16.24.4 4 msec *  0 msec

R9#traceroute 10.0.0.4 source Loopback99

Type escape sequence to abort.
Tracing the route to 10.0.0.4

  1 192.168.69.6 4 msec 0 msec 0 msec
  2 172.16.56.5 4 msec 0 msec 4 msec
  3 172.16.45.4 0 msec *  0 msec</pre>
<p>This seems to be working, as we expected. What about the return traffic?</p>
<p>R4:</p>
<pre>R4#traceroute 9.9.9.9 source Loopback4

Type escape sequence to abort.
Tracing the route to 9.9.9.9

  1 172.16.24.2 0 msec 0 msec 4 msec
  2 172.16.26.6 0 msec 0 msec 0 msec
  3 192.168.69.9 0 msec *  0 msec
R4#traceroute 99.99.99.99 source Loopback4

Type escape sequence to abort.
Tracing the route to 99.99.99.99

  1 172.16.24.2 0 msec 0 msec 4 msec
  2 172.16.26.6 0 msec 4 msec 0 msec
  3 192.168.69.9 0 msec *  0 msec</pre>
<p>We can clearly see that R4 is preferring the path R4-&gt;R2-&gt;R6-?R9 for both destinations. This means that the traffic between 10.0.0.0/24 and 99.99.99.0/24 networks is taking the asymmetric route, which was one of the things we needed to avoid. Let&#8217;s handle that part now.</p>
<h2>Chosing Different Paths from R4</h2>
<p>Let&#8217;s not be misguided by the subtitle. Remember that R4 is just another Internet host. We can&#8217;t modify any configuration on it, yet we need to influence the decisions it makes.</p>
<p>Possibly the simplest solution in this case would be to take the 9.9.9.0/24 network and prepend our AS when advertising it to R5 and do the same for 99.99.99.0/24 when advertising to R2. In the lab environment, this works like a charm. In real life, all our prepending can be easily overridden with a higher local preference or a similar thing. We can only <em>hint</em> our preference for the incoming traffic &#8211; we cannot decide it. It would also be a very simple thing to do. I don&#8217;t like simple things, so let&#8217;s complicate our solution a little bit.</p>
<p>There is one thing in IP routing that trumps all weights, local preferences and as-paths of this world. It&#8217;s a rule that &#8220;more specific route always wins&#8221;. How about we use that solution for our return traffic? Let&#8217;s inject 9.9.9.0/25 and 9.9.9.128/25 towards R2, and 99.99.99.0/25 and 99.99.99.128/25 towards R5. That way, R2 will advertise more specific 9.0.0.0/24 subnets and R5 will do the same for 99.0.0.0/24. To prevent black-holing, we&#8217;ll keep advertising both original /24 routes to both R2 and R5. Let&#8217;s take a look at that solution.</p>
<p>R6:</p>
<pre class="config">ip prefix-list Network-Inject-9 seq 10 permit 9.9.9.0/25
ip prefix-list Network-Inject-9 seq 20 permit 9.9.9.128/25
!
ip prefix-list Network-Inject-99 seq 10 permit 99.99.99.0/25
ip prefix-list Network-Inject-99 seq 20 permit 99.99.99.128/25
!
ip prefix-list Network-Match-9 seq 10 permit 9.9.9.0/24
!
ip prefix-list Network-Match-99 seq 10 permit 99.99.99.0/24
!
ip prefix-list R9 seq 5 permit 192.168.69.9/32
!
route-map Inject permit 10
 set ip address prefix-list Network-Inject-9
!
route-map Inject permit 20
 set ip address prefix-list Network-Inject-99
!
route-map Match permit 10
 match ip address prefix-list Network-Match-9
 match ip route-source prefix-list R9
!
route-map Match permit 20
 match ip address prefix-list Network-Match-99
 match ip route-source prefix-list R9
!
route-map Filter-Specific-R2 deny 10
 match ip address prefix-list Network-Inject-99
!
route-map Filter-Specific-R2 permit 20
!
route-map Filter-Specific-R5 deny 10
 match ip address prefix-list Network-Inject-9
!
route-map Filter-Specific-R5 permit 20
!
router bgp 65069
 address-family ipv4
  bgp inject-map Inject exist-map Match copy-attributes
  neighbor 172.16.26.2 route-map Filter-Specific-R2 out
  neighbor 172.16.56.5 route-map Filter-Specific-R5 out
!</pre>
<p>Again, quite a long configuration is in front of us. To solve the problem at hand, I&#8217;m using a BGP feature called &#8220;inject-map&#8221;. This feature works by referencing two route-maps, one to specify the routes to be injected and the other one to specify when these routes should be injected. In this case, my injection map is called &#8220;Inject&#8221; and the selection route-map is called &#8220;Match&#8221;. This is where simplicity ends and &#8220;IOS mind tricks&#8221; begin.</p>
<p>BGP inject-map feature is a tricky one. The &#8220;match&#8221; route-map <strong>must</strong> use two prefix-lists; one to match the source of the route (in our case a prefix-list called R9) and the second one to specify the routes to be considered as a condition for injection. We&#8217;re using two separate routes as triggers and for some odd reason, we must use two route-map entries to solve this problem. Each of these entries specifies a different prefix-list for the trigger route (Network-Match-9 and Network-Match-99).</p>
<p>The &#8220;injection&#8221; route-map works in a similar fashion. We have two-entry route-map, which uses two separate prefix-lists to inject more specific routes. These prefix-lists are Network-Inject-9 and Network-Inject-99. At this point, we should have all those more-specific routes in the BGP table on R6.</p>
<p>R6:</p>
<pre>R6#show ip bgp | begin Network
   Network          Next Hop            Metric LocPrf Weight Path
<span style="background-color: yellow; color: black;">*&gt;i9.9.9.0/25       192.168.69.9             0    100      0 i</span>
*&gt;i9.9.9.0/24       192.168.69.9             0    100      0 i
<span style="background-color: yellow; color: black;">*&gt;i9.9.9.128/25     192.168.69.9             0    100      0 i</span>
*&gt; 10.0.0.4/32      172.16.26.2                            0 65002 65004 i
*                   172.16.56.5                            0 65005 65004 i
<span style="background-color: yellow; color: black;">*&gt;i99.99.99.0/25    192.168.69.9             0    100      0 i</span>
*&gt;i99.99.99.0/24    192.168.69.9             0    100      0 i
<span style="background-color: yellow; color: black;">*&gt;i99.99.99.128/25  192.168.69.9             0    100      0 i</span></pre>
<p>The very last bit is to make sure the injected routes are advertised only to those neighbors we want them advertised to. For this purpose, I used Filter-Specific-R2 and Filter-Specific-R5 route-maps. If we examine routes received from R6 on R2 and R5, we should see a different picture on each.</p>
<p>R2:</p>
<pre>R2#show ip bgp neighbors 172.16.26.6 routes | begin Network
   Network          Next Hop            Metric LocPrf Weight Path
*&gt; 9.9.9.0/25       172.16.26.6                            0 65069 i
*&gt; 9.9.9.0/24       172.16.26.6                            0 65069 i
*&gt; 9.9.9.128/25     172.16.26.6                            0 65069 i
*&gt; 99.99.99.0/24    172.16.26.6                            0 65069 i

Total number of prefixes 4</pre>
<p>R5:</p>
<pre>R5#show ip bgp neighbors 172.16.56.6 routes | begin Network
   Network          Next Hop            Metric LocPrf Weight Path
*&gt; 9.9.9.0/24       172.16.56.6                            0 65069 i
*&gt; 99.99.99.0/25    172.16.56.6                            0 65069 i
*&gt; 99.99.99.0/24    172.16.56.6                            0 65069 i
*&gt; 99.99.99.128/25  172.16.56.6                            0 65069 i

Total number of prefixes 4</pre>
<p>This is exactly what I wanted to see. Last, but not the least, the routing table on R4 should also tell us that our solution worked. We&#8217;ll also confirm all this with two tracroutes.</p>
<p>R4:</p>
<pre>R4#show ip route bgp
     99.0.0.0/8 is variably subnetted, 3 subnets, 2 masks
B       99.99.99.0/25 [20/0] via 172.16.45.5, 00:09:26
B       99.99.99.0/24 [20/0] via 172.16.45.5, 00:09:26
B       99.99.99.128/25 [20/0] via 172.16.45.5, 00:09:26
     9.0.0.0/8 is variably subnetted, 3 subnets, 2 masks
B       9.9.9.0/25 [20/0] via 172.16.24.2, 00:09:25
B       9.9.9.0/24 [20/0] via 172.16.45.5, 00:09:26
B       9.9.9.128/25 [20/0] via 172.16.24.2, 00:09:25

R4#traceroute 9.9.9.9 source Loopback4    

Type escape sequence to abort.
Tracing the route to 9.9.9.9

  1 172.16.24.2 0 msec 0 msec 4 msec
  2 172.16.26.6 0 msec 0 msec 0 msec
  3 192.168.69.9 0 msec *  0 msec

R4#traceroute 99.99.99.99 source Loopback4

Type escape sequence to abort.
Tracing the route to 99.99.99.99

  1 172.16.45.5 0 msec 0 msec 0 msec
  2 172.16.56.6 4 msec 0 msec 0 msec
  3 192.168.69.9 4 msec *  0 msec</pre>
<p>There we go, a perfect solution, for a very real problem. Do you have an alternative solution to this? If you do, please post it in the comments below!</p>
<p>Happy studies!</p>
<p>&#8211;<br />
<a href="http://facebook.com/ccie18427" target="_blank">Marko Milivojevic</a> &#8211; CCIE #18427<br />
Senior CCIE Instructor &#8211; <a href="http://www.ipexpert.com/" target="_blank">IPexpert</a><br />
Join our <a href="http://www.onlinestudylist.com/" target="_blank">Online Study List</a></p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="medium" count="1" href="http://blog.ipexpert.com/2012/02/08/multi-homed-bgp-and-policy-based-routing/"></g:plusone></div><div style="text-align:left; margin: 0px 0px 0px 0px;" ><a href="http://blog.ipexpert.com/2012/02/08/multi-homed-bgp-and-policy-based-routing/?pfstyle=wp" style="text-decoration: none; outline: none; color: #990000;"><img class="printfriendly" src="http://cdn.printfriendly.com/pf-icon.gif" alt="Print Friendly"/><span style="font-size:14px; margin-left:3px; color: #990000;">Print Friendly</span></a></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ipexpert.com/2012/02/08/multi-homed-bgp-and-policy-based-routing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Follow-Up on OSPF and BGP Puzzle</title>
		<link>http://blog.ipexpert.com/2012/01/09/follow-up-on-ospf-and-bgp-puzzle/</link>
		<comments>http://blog.ipexpert.com/2012/01/09/follow-up-on-ospf-and-bgp-puzzle/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 16:30:51 +0000</pubDate>
		<dc:creator>Marko Milivojevic</dc:creator>
				<category><![CDATA[CCIE]]></category>
		<category><![CDATA[Routing & Switching]]></category>
		<category><![CDATA[BGP]]></category>
		<category><![CDATA[OSPF]]></category>
		<category><![CDATA[r&s]]></category>

		<guid isPermaLink="false">http://blog.ipexpert.com/?p=9650</guid>
		<description><![CDATA[Couple of days ago, I posted a small problem faced by one of our students and asked our readers to try and solve it. In this article, I will overview the possible solutions to that small puzzle. You should read the original &#8220;OSPF and BGP Puzzle&#8221; before we proceed. I&#8217;ll wait right here! The network [...]]]></description>
			<content:encoded><![CDATA[<p>Couple of days ago, I posted a small problem faced by one of our students and asked our readers to try and solve it. In this article, I will overview the possible solutions to that small puzzle. You should read the original &#8220;<a href="http://blog.ipexpert.com/2012/01/04/ospf-and-bgp-puzzle/" target="_blank">OSPF and BGP Puzzle</a>&#8221; before we proceed. I&#8217;ll wait right here!<span id="more-9650"></span></p>
<p>The network in question dealt with the following diagram.</p>
<p><img title="Diagram" src="http://blog.ipexpert.com/wp-content/uploads/2012/01/Diagram.png" alt="Diagram" /></p>
<p>This was the task:</p>
<ul>
<li>Redistribute only 0.0.0.0/0 into OSPF on R2</li>
<li>Make sure the default route is received in OSPF on R5 and advertised in BGP to R4</li>
</ul>
<p>Many of you responded with the possible solutions and I&#8217;m delighted to say that the vast majority of you picked up on what was wrong with the configuration. There is more than one problem though. There are, in fact, three. Let&#8217;s examine them one by one.</p>
<h2>OSPF Problem</h2>
<p>Simple redistribution of the static routes will not inject the default route into OSPF domain even if there was an actual static route in place. That was of course the reason for the route not to be present in OSPF on R5. Let&#8217;s take it from there. Here&#8217;s the most relevant configuration on R2.</p>
<p>R2:</p>
<pre class="config">ip route 0.0.0.0 0.0.0.0 Null0
!
router ospf 1
 redistribute static subnets route-map Connected
!</pre>
<p>Even though there is a route-map attached, it was configured in such a way to permit the default route. As we&#8217;ve established, this route never made it to the OSPF.</p>
<p>R2:</p>
<pre>R2#show ip ospf database external

            OSPF Router with ID (192.168.0.2) (Process ID 1)</pre>
<p>In order to install the default route, we&#8217;ll need to use the &#8220;default-information originate&#8221; command under the OSPF process.</p>
<p>R2:</p>
<pre class="config">router ospf 1
 default-information originate
!</pre>
<p>Things are now looking much better on R5, since we&#8217;ll see the default route in OSPF.</p>
<p>R5:</p>
<pre>R5#show ip route ospf
     192.168.0.0/32 is subnetted, 2 subnets
O       192.168.0.2 [110/65] via 192.168.25.2, 00:58:43, Serial0/2/0
O*E2 0.0.0.0/0 [110/1] via 192.168.25.2, 00:01:11, Serial0/2/0</pre>
<p>There is something I&#8217;m not telling you right now, but we&#8217;re not on a very good path. I&#8217;ll come back here later on.</p>
<h2>BGP Problem</h2>
<p>Let&#8217;s take a look at the second part of the problem, which is advertising the default route to R4 over the BGP session. Even though we&#8217;re redistributing the OSPF routes into BGP, the default route is not making it.</p>
<p>R5:</p>
<pre class="config">router bgp 5
 redistribute ospf 1
 neighbor 172.16.45.4 remote-as 4
!</pre>
<p>There are two reasons for this behavior. The first one is somewhat obscure behavior of BGP and OSPF interaction, which is the fact that when redistributing the routes form OSPF into BGP, only internal OSPF routes will be redistributed by default. To test this, we&#8217;ll quickly remove the route-map from the redistribution on R2. This should cause our other static route from R2 to be advertised into OSPF.</p>
<p>R2:</p>
<pre class="config">ip route 10.0.0.0 255.0.0.0 Null0
!
router ospf 1
 no redistribute static subnets route-map Connected
 redistribute static subnets
!</pre>
<p>Let&#8217;s check the routing and BGP tables on R5.</p>
<p>R5:</p>
<pre>R5#show ip route ospf
O E2 10.0.0.0/8 [110/20] via 192.168.25.2, 00:01:09, Serial0/2/0
     192.168.0.0/32 is subnetted, 2 subnets
O       192.168.0.2 [110/65] via 192.168.25.2, 01:07:25, Serial0/2/0
O*E2 0.0.0.0/0 [110/1] via 192.168.25.2, 00:09:54, Serial0/2/0

R5#show ip bgp | begin Network
   Network          Next Hop            Metric LocPrf Weight Path
*&gt; 192.168.0.2/32   192.168.25.2            65         32768 ?
*&gt; 192.168.0.5/32   0.0.0.0                  0         32768 ?
*&gt; 192.168.25.0     0.0.0.0                  0         32768 ?</pre>
<p>As we can see, 10.0.0.0/8 route didn&#8217;t make it into the BGP and neither did the default route. Let&#8217;s configure BGP to take external routes into account in addition to the internal routes.</p>
<p>R5:</p>
<pre class="config">router bgp 5
 redistribute ospf 1 match internal external
!</pre>
<pre>R5#show ip bgp | begin Network
   Network          Next Hop            Metric LocPrf Weight Path
<span style="background-color: yellow; color: black;">*&gt; 10.0.0.0         192.168.25.2            20         32768 ?</span>
*&gt; 192.168.0.2/32   192.168.25.2            65         32768 ?
*&gt; 192.168.0.5/32   0.0.0.0                  0         32768 ?
*&gt; 192.168.25.0     0.0.0.0                  0         32768 ?</pre>
<p>We can now see that 10.0.0.0/8 route made it into the BGP, but the default route is still missing. This brings us to the real problem. Similarly to OSPF when redistributing the routes into BGP, IOS will not consider the default route as the valid route for redistribution, unless we tell it explicitly.</p>
<p>There are several ways to do that, but I will use the solution suggested by most of the readers in the previous article (democracy wins), which is a &#8220;neighbor default-originate&#8221; command.</p>
<p>R5:</p>
<pre class="config">router bgp 5
 neighbor 192.168.45.4 default-originate
!</pre>
<p>R4:</p>
<pre>R4#show ip route bgp
B    192.168.25.0/24 [20/0] via 172.16.45.5, 01:14:22
B    10.0.0.0/8 [20/20] via 172.16.45.5, 00:04:40
     192.168.0.0/32 is subnetted, 2 subnets
B       192.168.0.2 [20/65] via 172.16.45.5, 01:14:22
B       192.168.0.5 [20/0] via 172.16.45.5, 01:14:53
<span style="background-color: yellow; color: black;">B*   0.0.0.0/0 [20/1] via 172.16.45.5, 00:00:55</span></pre>
<p>That&#8217;s it, problem solved! Well&#8230; not so fast.</p>
<h2>The Devil is in the Details</h2>
<p>Let&#8217;s remind ourselves again of the original task. I don&#8217;t like repeating myself repeating myself, repeating &#8230; but bear with me here.</p>
<ul>
<li>Redistribute only 0.0.0.0/0 into OSPF on R2</li>
<li>Make sure the default route is received in OSPF on R5 and advertised in BGP to R4</li>
</ul>
<p>We have certainly accomplished the task, as instructed, since we have the default route on R5 and on R4. What would happen though if I removed the default route from R2?</p>
<p>R2:</p>
<pre class="config">no ip route 0.0.0.0 0.0.0.0 Null0</pre>
<p>R5:</p>
<pre>R5#show ip route ospf
O E2 10.0.0.0/8 [110/20] via 192.168.25.2, 00:15:04, Serial0/2/0
     192.168.0.0/32 is subnetted, 2 subnets
O       192.168.0.2 [110/65] via 192.168.25.2, 01:21:20, Serial0/2/0</pre>
<p>Obviously, it will be gone from OSPF and not available on R5. What about R4?</p>
<p>R4:</p>
<pre>R4#show ip route bgp
B    192.168.25.0/24 [20/0] via 172.16.45.5, 00:02:00
B    10.0.0.0/8 [20/20] via 172.16.45.5, 00:02:00
     192.168.0.0/32 is subnetted, 2 subnets
B       192.168.0.2 [20/65] via 172.16.45.5, 00:02:00
B       192.168.0.5 [20/0] via 172.16.45.5, 00:02:00
B*   0.0.0.0/0 [20/0] via 172.16.45.5, 00:02:00</pre>
<p>Where did that default route come from? It was <strong>generated</strong> by R5 to R4, even though R5 never had it in the routing table.</p>
<p>As many of you correctly stated in the previous article&#8217;s comments, there are multiple ways of generating the default route in BGP. Other methods include:</p>
<ul>
<li>Redistribute the original source protocol and using &#8220;default-information originate&#8221;</li>
<li>Aggregate the prefixes using &#8220;aggregate-address&#8221;</li>
<li>Use the &#8220;network&#8221; statement</li>
</ul>
<p>Any of these methods would be useful and as always when dealing with the CCIE lab, you should probably use one that requires the least amount of work and produces the least amount of side effects. The easiest solution to use is the &#8220;network&#8221; statement. If we opt for &#8220;default-information originate&#8221;, we&#8217;ll need to redistribute OSPF into the BGP and that causes other routes to be advertised, too. If we use the aggregate-address, we&#8217;ll generate the default route if <em>any</em> route is present in the BGP table, unless we use conditional advertising. None of these are as easy as a simple &#8220;network&#8221; command. So, let&#8217;s change our configuration, but don&#8217;t forget to put the original static default back in.</p>
<p>R2:</p>
<pre class="config">ip route 0.0.0.0 0.0.0.0 Null0</pre>
<p>R5:</p>
<pre class="config">router bgp 5
 no neighbor 172.16.45.4 default-originate
 no redistribute ospf 1
 network 0.0.0.0 mask 0.0.0.0
!</pre>
<p>The beauty of this solution is that only the default route will be advertised to R4 as the result of the OSPF configuration on R2 and no other routes.</p>
<p>R4:</p>
<pre>R4#show ip route bgp
B*   0.0.0.0/0 [20/1] via 172.16.45.5, 00:01:26</pre>
<p>For testing purpose, let&#8217;s remove the static route on R2 and see what happens.</p>
<p>R2:</p>
<pre class="config">no ip route 0.0.0.0 0.0.0.0 Null0</pre>
<pre>R4#show ip route bgp</pre>
<p>Brilliant, but we&#8217;re not quite done yet. We have now established the correct relationship between BGP and OSPF on R5. How about the relationship between the static routes and OSPF on R2, the very origin of our routes?</p>
<p>We clearly saw what happens when we add or remove the static routes. We can see them being added and removed as a part of our redistribution process. We did have a requirement to redistribute <strong>only</strong> the default route and no other routes. Our original solution was to use the &#8220;redistribute static subnets route-map&#8221; command. There is no need for it though.</p>
<h2>One Step Further</h2>
<p>I should point out that we&#8217;re now entering the exercise zone. What follows was never a requirement of the original task, but it&#8217;s an interesting behavior and those are always fun to explore, if only a little bit.</p>
<p>When we configured &#8220;default-information originate&#8221; under the OSPF process, we configured an implicit redistribution of the 0.0.0.0/0 route from whatever source it came from. As it is, the default route could come from <strong>any</strong> valid source on R2! If we removed the static and we learned the default from EIGRP, R2 would still advertise the default route into OSPF. Can we actually solve the task in such a way to cause the injection of the default route in OSPF only if the original route came from the static route? The answer is &#8211; not really, but we can get very close to it.</p>
<p>It&#8217;s not a very straight-forward solution, but it can work. As a food for thought, I&#8217;ll leave it up to you to discuss why I did it this way and not some other way.</p>
<p>R2:</p>
<pre class="config">no ip route 0.0.0.0 0.0.0.0 Null0
ip route 192.0.2.1 255.255.255.255 Null0
ip route 0.0.0.0 0.0.0.0 192.0.2.1
!
access-list 10 permit host 0.0.0.0
access-list 11 permit host 192.0.2.1
!
route-map Static-Only permit 10
 match ip address 10
 match ip next-hop 11
!
router ospf 1
 no redistribute static
 default-information originate route-map Static-Only
!</pre>
<p>Happy studies!</p>
<p>&#8211;<br />
<a href="http://facebook.com/ccie18427" target="_blank">Marko Milivojevic</a> &#8211; CCIE #18427<br />
Senior CCIE Instructor &#8211; <a href="http://www.ipexpert.com/" target="_blank">IPexpert</a><br />
Join our <a href="http://www.onlinestudylist.com/" target="_blank">Online Study List</a></p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="medium" count="1" href="http://blog.ipexpert.com/2012/01/09/follow-up-on-ospf-and-bgp-puzzle/"></g:plusone></div><div style="text-align:left; margin: 0px 0px 0px 0px;" ><a href="http://blog.ipexpert.com/2012/01/09/follow-up-on-ospf-and-bgp-puzzle/?pfstyle=wp" style="text-decoration: none; outline: none; color: #990000;"><img class="printfriendly" src="http://cdn.printfriendly.com/pf-icon.gif" alt="Print Friendly"/><span style="font-size:14px; margin-left:3px; color: #990000;">Print Friendly</span></a></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ipexpert.com/2012/01/09/follow-up-on-ospf-and-bgp-puzzle/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>OSPF and BGP Puzzle</title>
		<link>http://blog.ipexpert.com/2012/01/04/ospf-and-bgp-puzzle/</link>
		<comments>http://blog.ipexpert.com/2012/01/04/ospf-and-bgp-puzzle/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 20:15:49 +0000</pubDate>
		<dc:creator>Marko Milivojevic</dc:creator>
				<category><![CDATA[CCIE]]></category>
		<category><![CDATA[Routing & Switching]]></category>
		<category><![CDATA[BGP]]></category>
		<category><![CDATA[CCIE R&S]]></category>
		<category><![CDATA[CCIE Routing & Switching]]></category>
		<category><![CDATA[OSPF]]></category>

		<guid isPermaLink="false">http://blog.ipexpert.com/?p=9613</guid>
		<description><![CDATA[I love interesting problems that we face when studying for our CCIEs. Especially fun are those that come from an unusual behavior of protocols. Couple of days ago, a student sent me this little problem. It looks simple, but let&#8217;s see how you do solving it. The setup is really straight-forward. Routers R2 and R5 [...]]]></description>
			<content:encoded><![CDATA[<p>I love interesting problems that we face when studying for our CCIEs. Especially fun are those that come from an unusual behavior of protocols.<span id="more-9613"></span></p>
<p>Couple of days ago, a student sent me this little problem. It looks simple, but let&#8217;s see how you do solving it.</p>
<p><img title="Diagram" src="http://blog.ipexpert.com/wp-content/uploads/2012/01/Diagram.png" alt="Diagram" /></p>
<p>The setup is really straight-forward. Routers R2 and R5 are running OSPF in area 0. Router R2 has two static routes pointing to Null0 interface (0.0.0.0/0 and 10.0.0.0/8). This is the task:</p>
<ul>
<li>Redistribute only 0.0.0.0/0 into OSPF on R2</li>
<li>Make sure the default route is received in OSPF on R5 and advertised in BGP to R4</li>
</ul>
<p>Here is the relevant configuration on all three routers.</p>
<p>R2:</p>
<pre class="config">hostname R2
!
interface Loopback0
 ip address 192.168.0.2 255.255.255.255
!
interface Serial0/2/0
 ip address 192.168.25.2 255.255.255.0
!
ip route 0.0.0.0 0.0.0.0 Null0
ip route 10.0.0.0 255.0.0.0 Null0
!
ip prefix-list Redistribute seq 10 permit 0.0.0.0/0
!
route-map Connected permit 10
 match ip address prefix-list Redistribute
!
router ospf 1
 router-id 192.168.0.2
 network 192.168.0.0 0.0.255.255 area 0
 redistribute static subnets route-map Connected
!</pre>
<p>R5:</p>
<pre class="config">hostname R5
!
interface Loopback0
 ip address 192.168.0.5 255.255.255.255
!
interface Serial0/0/0
 ip address 172.16.45.5 255.255.255.0
!
interface Serial0/2/0
 ip address 192.168.25.5 255.255.255.0
!
router ospf 1
 router-id 192.168.0.5
 network 192.168.0.0 0.0.255.255 area 0
!
router bgp 5
 bgp router-id 192.168.0.5
 neighbor 172.16.45.4 remote-as 4
 redistribute ospf 1
!</pre>
<p>R4:</p>
<pre class="config">hostname R4
!
interface Loopback0
 ip address 172.16.0.4 255.255.255.255
!
interface Serial0/1/0
 ip address 172.16.45.4 255.255.255.0
!
router bgp 4
 bgp router-id 172.16.0.4
 neighbor 172.16.45.5 remote-as 5
!</pre>
<p>We can see that both OSPF and BGP are operational:</p>
<p>R5:</p>
<pre>R5#show ip ospf neighbor 

Neighbor ID     Pri   State           Dead Time   Address         Interface
192.168.0.2       0   FULL/  -        00:00:34    192.168.25.2    Serial0/2/0

R5#show ip bgp summary | begin ^Neighbor
Neighbor        V          AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
172.16.45.4     4          4      31      33        4    0    0 00:29:56        0</pre>
<p>However, not everything works as expected. Take a look at the OSPF routes on R5:</p>
<p>R5:</p>
<pre>R5#show ip route ospf
     192.168.0.0/32 is subnetted, 2 subnets
O       192.168.0.2 [110/65] via 192.168.25.2, 00:31:28, Serial0/2/0</pre>
<p>Also, let&#8217;s take a look at the BGP routes on R4:</p>
<p>R4:</p>
<pre>R4#show ip route bgp
B    192.168.25.0/24 [20/0] via 172.16.45.5, 00:30:00
     192.168.0.0/32 is subnetted, 2 subnets
B       192.168.0.2 [20/65] via 172.16.45.5, 00:30:00
B       192.168.0.5 [20/0] via 172.16.45.5, 00:30:00</pre>
<p>We can clearly see that the default route is missing on both R5 and R4. What&#8217;s wrong and how do we fix this problem? Post your thoughts and solutions in the comments below and in a few days, I&#8217;ll follow-up with the solution.</p>
<p>Happy studies!</p>
<p>&#8211;<br />
<a href="http://facebook.com/ccie18427" target="_blank">Marko Milivojevic</a> &#8211; CCIE #18427<br />
Senior CCIE Instructor &#8211; <a href="http://www.ipexpert.com/" target="_blank">IPexpert</a><br />
Join our <a href="http://www.onlinestudylist.com/" target="_blank">Online Study List</a></p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="medium" count="1" href="http://blog.ipexpert.com/2012/01/04/ospf-and-bgp-puzzle/"></g:plusone></div><div style="text-align:left; margin: 0px 0px 0px 0px;" ><a href="http://blog.ipexpert.com/2012/01/04/ospf-and-bgp-puzzle/?pfstyle=wp" style="text-decoration: none; outline: none; color: #990000;"><img class="printfriendly" src="http://cdn.printfriendly.com/pf-icon.gif" alt="Print Friendly"/><span style="font-size:14px; margin-left:3px; color: #990000;">Print Friendly</span></a></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ipexpert.com/2012/01/04/ospf-and-bgp-puzzle/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Remote Triggered Black Hole Filtering</title>
		<link>http://blog.ipexpert.com/2010/11/24/remote-triggered-black-hole-filtering/</link>
		<comments>http://blog.ipexpert.com/2010/11/24/remote-triggered-black-hole-filtering/#comments</comments>
		<pubDate>Wed, 24 Nov 2010 15:48:37 +0000</pubDate>
		<dc:creator>Marko Milivojevic</dc:creator>
				<category><![CDATA[CCIE]]></category>
		<category><![CDATA[Routing & Switching]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Service Provider]]></category>
		<category><![CDATA[BGP]]></category>
		<category><![CDATA[DDoS]]></category>
		<category><![CDATA[DoS]]></category>
		<category><![CDATA[RTBH]]></category>

		<guid isPermaLink="false">http://blog.ipexpert.com/?p=5435</guid>
		<description><![CDATA[One of the more unpleasant experiences for any network engineer is handling Denial of Service attack. Even worse one is dealing with Distributed Denial of Service Attack, which usually looks as if the entire Internet is intent on crashing part of your network. In this article, I will explore one of the possible ways to [...]]]></description>
			<content:encoded><![CDATA[<p>One of the more unpleasant experiences for any network engineer is handling Denial of Service attack. Even worse one is dealing with Distributed Denial of Service Attack, which usually looks as if the entire Internet is intent on crashing part of your network. In this article, I will explore one of the possible ways to handle this kind of attack in both enterprise and service provider networks.<span id="more-5435"></span><br />
I will begin by saying that while this technique has been in use for many years, but <a href="http://tools.ietf.org/html/rfc5635" target="_blank">RFC-5635</a> detailing it has been published only recently in 2009. This RFC is very good read and I can highly recommend it as a warm-up to this article, which will focus on practical implementation and several caveats.</p>
<p>The biggest challenge when dealing with these kinds of attacks is detecting where they are coming from. In some networks, there are more than a few ingress points and there could be hundreds or even thousands of source addresses participating in the attack. Digesting this information and compiling the exact information takes time. During this time, not only the targets (victims) are suffering, but entire network infrastructure is under stress. In a case of service provider and carrier networks, customers other than those under direct attack may be affected. In other words, collateral damage during the attack investigation can be devastating. It is sometime necessary to &#8220;sacrifice&#8221; the intended victim, while ensuring the rest of the infrastructure and other customers are relatively unaffected by the attack.</p>
<p>When the infrastructure is protected and stabilized, investigation can take full force and original sources of the attack identified and prevented from further denial of service attack at the intended target.</p>
<p>What I described above are the guiding ideas between two types of DoS protection mechanisms using remote triggered black hole filtering, also known in the industry as RTBH filtering. These two types are <strong>destination</strong> and <strong>source</strong> based RTBH filtering.</p>
<p>Here are some brief characteristics of both.</p>
<ul>
<li>Destination Based RTBH:
<ul>
<li>Requires knowledge of the target (victim) address/network.</li>
<li>Willingly sacrifices (black-holes) the communication of the target with the rest of the world.</li>
<li>Relies on BGP to &#8220;signal&#8221; black-hole from trigger to one or more enforcers &#8211; usually edge (border) routers in the network.</li>
<li>Uses unreachable next-hop to drop packets to the destination.</li>
</ul>
</li>
<li>Source-Based RTBH:
<ul>
<li>Requires knowledge of the attack source/sources.</li>
<li>Attack sources are unable to communicate with the entire protected infrastructure, not only the intended victims.</li>
<li>Relies on BGP to &#8220;signal&#8221; black-hole from trigger to one or more enforcers &#8211; usually edge (border) routers in the network.</li>
<li>Uses Unicast Reverse Path Forwarding (uRPF) to drop packets.</li>
</ul>
</li>
</ul>
<h2>Test Network</h2>
<p>In order to properly test both kinds of RTBH, we will use the following network.</p>
<p><img title="Diagram" src="http://blog.ipexpert.com/wp-content/uploads/2010/11/RTBH.png" alt="Diagram" /></p>
<p>On the diagram above, R1 will represent the Internet. Two Loopbacks will represent &#8220;good&#8221; traffic (1.1.1.1) and &#8220;evil&#8221; traffic (11.11.11.11). Target/victim host resides on R6 and is represented by a loopback interface with the address 6.6.6.6. R2 and R4 are border routers in AS2456 and they peer with R1. R5 will have multiple roles in this scenario, as we&#8217;ll see.</p>
<p>For the initial configuration, we&#8217;ll use the following configurations on all involved routers. I will show only relevant bits.</p>
<p>R1:</p>
<pre class="config">interface Loopback1
 ip address 1.1.1.1 255.255.255.255
!
interface Loopback11
 ip address 11.11.11.11 255.255.255.255
!
ip bgp-community new-format
!
router bgp 1
 network 1.1.1.1 mask 255.255.255.255
 network 11.11.11.11 mask 255.255.255.255
 neighbor 172.16.12.2 remote-as 2456
 neighbor 172.16.12.2 send-community
 neighbor 172.16.14.4 remote-as 2456
 neighbor 172.16.14.4 send-community
!</pre>
<p>R2:</p>
<pre class="config">router ospf 1
 network 192.168.0.0 0.0.255.255 area 0
!
ip bgp-community new-format
!
router bgp 2456
 neighbor 172.16.12.1 remote-as 1
 neighbor 172.16.12.1 send-community
 neighbor 192.168.0.4 remote-as 2456
 neighbor 192.168.0.4 update-source Loopback0
 neighbor 192.168.0.4 next-hop-self
 neighbor 192.168.0.4 send-community
 neighbor 192.168.0.5 remote-as 2456
 neighbor 192.168.0.5 update-source Loopback0
 neighbor 192.168.0.5 next-hop-self
 neighbor 192.168.0.5 send-community
 neighbor 192.168.0.6 remote-as 2456
 neighbor 192.168.0.6 update-source Loopback0
 neighbor 192.168.0.6 next-hop-self
 neighbor 192.168.0.6 send-community
!</pre>
<p>R4:</p>
<pre class="config">router ospf 1
 network 192.168.0.0 0.0.255.255 area 0
!
ip bgp-community new-format
!
router bgp 2456
 neighbor 172.16.14.1 remote-as 1
 neighbor 172.16.14.1 send-community
 neighbor 192.168.0.2 remote-as 2456
 neighbor 192.168.0.2 update-source Loopback0
 neighbor 192.168.0.2 next-hop-self
 neighbor 192.168.0.2 send-community
 neighbor 192.168.0.5 remote-as 2456
 neighbor 192.168.0.5 update-source Loopback0
 neighbor 192.168.0.5 next-hop-self
 neighbor 192.168.0.5 send-community
 neighbor 192.168.0.6 remote-as 2456
 neighbor 192.168.0.6 update-source Loopback0
 neighbor 192.168.0.6 next-hop-self
 neighbor 192.168.0.6 send-community
!</pre>
<p>R5:</p>
<pre class="config">router ospf 1
 network 192.168.0.0 0.0.255.255 area 0
!
ip bgp-community new-format
!
router bgp 2456
 neighbor 192.168.0.2 remote-as 2456
 neighbor 192.168.0.2 update-source Loopback0
 neighbor 192.168.0.2 send-community
 neighbor 192.168.0.4 remote-as 2456
 neighbor 192.168.0.4 update-source Loopback0
 neighbor 192.168.0.4 send-community
 neighbor 192.168.0.6 remote-as 2456
 neighbor 192.168.0.6 update-source Loopback0
 neighbor 192.168.0.6 send-community
!</pre>
<p>R6:</p>
<pre class="config">interface Loopback6
 ip address 6.6.6.6 255.255.255.255
!
router ospf 1
 log-adjacency-changes
 network 192.168.0.0 0.0.255.255 area 0
!
ip bgp-community new-format
!
router bgp 2456
 network 6.6.6.6 mask 255.255.255.255
 network 192.168.0.6 mask 255.255.255.255
 neighbor 192.168.0.2 remote-as 2456
 neighbor 192.168.0.2 update-source Loopback0
 neighbor 192.168.0.2 send-community
 neighbor 192.168.0.4 remote-as 2456
 neighbor 192.168.0.4 update-source Loopback0
 neighbor 192.168.0.4 send-community
 neighbor 192.168.0.5 remote-as 2456
 neighbor 192.168.0.5 update-source Loopback0
 neighbor 192.168.0.5 send-community
!</pre>
<p>We can see in the above configurations that we are dealing with relatively simple iBGP full mesh configuration with OSPF as IGP in AS2456 and there is eBGP peering between edge routers. Router R1 is advertising its interfaces Loopback1 and Loopback11, while R6 is advertising Loopback0 and Loopback6. These should be visible and reachable from each other. Let&#8217;s make sure they are before we proceed!</p>
<p>R1:</p>
<pre>R1#<span style="background-color: gray;">show ip route bgp</span>
     6.0.0.0/32 is subnetted, 1 subnets
B       6.6.6.6 [20/0] via 172.16.12.2, 01:49:54
     192.168.0.0/32 is subnetted, 1 subnets
B       192.168.0.6 [20/0] via 172.16.12.2, 01:49:54

R1#<span style="background-color: gray;">ping 6.6.6.6 source Loopback1</span>

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 6.6.6.6, timeout is 2 seconds:
Packet sent with a source address of 1.1.1.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/2/4 ms
R1#<span style="background-color: gray;">ping 6.6.6.6 source Loopback11</span>

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 6.6.6.6, timeout is 2 seconds:
Packet sent with a source address of 11.11.11.11
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/4/4 ms
R1#<span style="background-color: gray;">ping 192.168.0.6 source Loopback1</span>

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.6, timeout is 2 seconds:
Packet sent with a source address of 1.1.1.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/3/4 ms
R1#<span style="background-color: gray;">ping 192.168.0.6 source Loopback11</span>

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.6, timeout is 2 seconds:
Packet sent with a source address of 11.11.11.11
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/3/4 ms</pre>
<p>We don&#8217;t need to verify anything on R6, but I will just briefly show you the BGP table there.</p>
<p>R6:</p>
<pre>R6#<span style="background-color: gray;">show ip bgp</span>
BGP table version is 14, local router ID is 192.168.0.6
Status codes: s suppressed, d damped, h history, * valid, &gt; best, i - internal,
              r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
* i1.1.1.1/32       192.168.0.4              0    100      0 1 i
*&gt;i                 192.168.0.2              0    100      0 1 i
*&gt; 6.6.6.6/32       0.0.0.0                  0         32768 i
* i11.11.11.11/32   192.168.0.4              0    100      0 1 i
*&gt;i                 192.168.0.2              0    100      0 1 i
*&gt; 192.168.0.6/32   0.0.0.0                  0         32768 i</pre>
<h2>RTBH Signaling Infrastructure</h2>
<p>As I mentioned in the introduction, RTBH relies on BGP for signaling. I neglected to mention what kind of signaling that is. When we decide that certain traffic needs to be discarded by edge routers, we need to let them know that. The simplest method is to advertise the route from one of the BGP routers in our network with a certain community attached. When edge routers receive the route with a community of our choice attached, they can then take steps to discard the traffic. Let&#8217;s put this in motion. Our signaling router will be R6.</p>
<p><strong>Please note:</strong> Any router in the network can be the &#8220;trigger&#8221; router. My choice of R6 versus R5 is because I will later use R5 to illustrate couple of caveats with RTBH implementation.</p>
<p>Signaling router will be configured to attach a black-hole community to static routes tagged with a specific tag. You are free to choose any values. In this example I will use static tag &#8220;2456&#8243; that will translate to BGP community &#8220;2456:2456&#8243;. Here is the configuration.</p>
<p>R6:</p>
<pre class="config">route-map RTBH-Trigger permit 10
 match tag 2456
 set community 2456:2456
!
route-map RTBH-Trigger permit 99
!
router bgp 2456
 redistribute static route-map RTBH-Trigger
!</pre>
<p>To test the solution, let&#8217;s add two static routes pointing to Null0 on R6. One will be 192.168.6.1/32 with tag 2456 and the other one 192.168.6.2/32 without a tag. We will then observe what happens in BGP.</p>
<p>R6:</p>
<pre class="config">ip route 192.168.6.1 255.255.255.255 Null0 tag 2456
ip route 192.168.6.2 255.255.255.255 Null0</pre>
<p>Let&#8217;s take a look at R1.</p>
<p>R1:</p>
<pre>R1#<span style="background-color: gray;">show ip bgp</span>
BGP table version is 6, local router ID is 172.16.0.1
Status codes: s suppressed, d damped, h history, * valid, &gt; best, i - internal,
              r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*&gt; 1.1.1.1/32       0.0.0.0                  0         32768 i
*  6.6.6.6/32       172.16.14.4                            0 2456 i
*&gt;                  172.16.12.2                            0 2456 i
*&gt; 11.11.11.11/32   0.0.0.0                  0         32768 i
<span style="background-color: yellow; color: black;">*  192.168.0.6/32   172.16.14.4                            0 2456 i
*&gt;                  172.16.12.2                            0 2456 i
*  192.168.6.1/32   172.16.14.4                            0 2456 ?
*&gt;                  172.16.12.2                            0 2456 ?</span></pre>
<p>We are receiving both of these routes. While this is perfectly OK when we are using Null0 routes to inject prefixes into BGP, we need to ensure that RTBH signaling routes do not &#8220;leak&#8221; into neighboring autonomous systems &#8211; unless, of course, we use inter-AS signaling for RTBH, which is not something I will touch on today. The easiest way to prevent leaks is to ensure that trigger routes are not exported outside our own autonomous system, using well-known &#8220;no-export&#8221; community.</p>
<p>R1:</p>
<pre class="config">route-map RTBH-Trigger permit 10
 match tag 2456
 set community 2456:2456 no-export
!</pre>
<p>Let&#8217;s verify the status on R1 again.</p>
<p>R1:</p>
<pre>R1#<span style="background-color: gray;">show ip bgp</span>
BGP table version is 9, local router ID is 172.16.0.1
Status codes: s suppressed, d damped, h history, * valid, &gt; best, i - internal,
              r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*&gt; 1.1.1.1/32       0.0.0.0                  0         32768 i
*  6.6.6.6/32       172.16.14.4                            0 2456 i
*&gt;                  172.16.12.2                            0 2456 i
*&gt; 11.11.11.11/32   0.0.0.0                  0         32768 i
*  192.168.0.6/32   172.16.14.4                            0 2456 i
*&gt;                  172.16.12.2                            0 2456 i
<span style="background-color: yellow; color: black;">*  192.168.6.2/32   172.16.14.4                            0 2456 ?
*&gt;                  172.16.12.2                            0 2456 ?</span></pre>
<p>We can see that now only the 2nd route is present on R1. Let&#8217;s see R2.</p>
<p>R2:</p>
<pre>R2#<span style="background-color: gray;">show ip bgp</span>
BGP table version is 17, local router ID is 192.168.0.2
Status codes: s suppressed, d damped, h history, * valid, &gt; best, i - internal,
              r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
* i1.1.1.1/32       192.168.0.4              0    100      0 1 i
*&gt;                  172.16.12.1              0             0 1 i
*&gt;i6.6.6.6/32       192.168.0.6              0    100      0 i
* i11.11.11.11/32   192.168.0.4              0    100      0 1 i
*&gt;                  172.16.12.1              0             0 1 i
r&gt;i192.168.0.6/32   192.168.0.6              0    100      0 i
<span style="background-color: yellow; color: black;">*&gt;i192.168.6.1/32   192.168.0.6              0    100      0 ?
*&gt;i192.168.6.2/32   192.168.0.6              0    100      0 ?</span>
R2#<span style="background-color: gray;">show ip bgp 192.168.6.1</span>
BGP routing table entry for 192.168.6.1/32, version 16
Paths: (1 available, best #1, table Default-IP-Routing-Table, not advertised to EBGP peer)
Flag: 0x880
  Not advertised to any peer
  Local
    192.168.0.6 (metric 66) from 192.168.0.6 (192.168.0.6)
      Origin incomplete, metric 0, localpref 100, valid, internal, best
      <span style="background-color: yellow; color: black;">Community: 2456:2456 no-export</span>
R2#show ip bgp 192.168.6.2
BGP routing table entry for 192.168.6.2/32, version 17
Paths: (1 available, best #1, table Default-IP-Routing-Table)
Flag: 0x820
  Advertised to update-groups:
        1
  Local
    192.168.0.6 (metric 66) from 192.168.0.6 (192.168.0.6)
      Origin incomplete, metric 0, localpref 100, valid, internal, best</pre>
<p>With that verified, we can remove our test routes from R6.</p>
<p>R6:</p>
<pre class="config">no ip route 192.168.6.1 255.255.255.255 Null0 tag 2456
no ip route 192.168.6.2 255.255.255.255 Null0</pre>
<p>Our signaling is now ready. The next step is to actually implement traffic drop. This is where things become somewhat different for destination-based and source-based RTBH. We will explore them separately.</p>
<h2>Destination-Based RTBH</h2>
<p>With destination-based black-hole we will be dropping the traffic going <strong>TO</strong> a particular destination. Therefore, our trigger router needs to indicate this. Our test destination (victim) is the Loopback6 on R6. Since this is directly connected interface on R6, we can&#8217;t use the static route as in the previous example, but we can simply add the community to the advertisement.</p>
<p>R6:</p>
<pre class="config">route-map Loopback6-RTBH
 set community 2456:2456
!
router bgp 2456
 network 6.6.6.6 mask 255.255.255.255 route-map Loopback6-RTBH
!</pre>
<p>We can now see that on R2 and R4 6.6.6.6/32 is received with the community.</p>
<p>R2:</p>
<pre>R2#<span style="background-color: gray;">show ip bgp 6.6.6.6</span>
BGP routing table entry for 6.6.6.6/32, version 20
Paths: (1 available, best #1, table Default-IP-Routing-Table)
Flag: 0x880
  Advertised to update-groups:
        1
  Local
    192.168.0.6 (metric 66) from 192.168.0.6 (192.168.0.6)
      Origin IGP, metric 0, localpref 100, valid, internal, best
      Community: 2456:2456</pre>
<p>Those with sharp eyes probably noticed that I didn&#8217;t add no-export. The reason for that is that 6.6.6.6/32 is considered to be part of AS2456. It&#8217;s perfectly OK to have it advertised to the outside world, even with the additional community set. At this moment we also want R1 to have the reachability to R6 so we can test if our black hole works. We will remove this route later on.</p>
<p>That said, we now have the route, again, but what do we do with it? Remember, the idea here is to drop the traffic going to this destination. In order to accomplish this task, we will need to somehow redirect the traffic on our enforcing routers (R2 and R4) and instead of sending it towards R6, drop it. We can do that by changing the next-hop attribute in BGP.</p>
<p>Next-hop is mandatory BGP attribute. We can see in the output above that next-hop for 6.6.6.6 is 192.168.0.6. To implement the drop, we will have to use a single Null0 static route and an imaginary address for next-hop. The usual address used for this purpose is part of the official test network, as defined by RFC-1918. This is any address from 192.0.2.0/24 subnet. I will use 192.0.2.1/32 and here is how.</p>
<p>R2 and R4:</p>
<pre class="config">ip route 192.0.2.1 255.255.255.255 Null0
!
ip community-list standard RTBH-Trigger permit 2456:2456
!
route-map UseRTBH permit 10
 match community RTBH-Trigger
 set ip next-hop 192.0.2.1
!
route-map UseRTBH permit 99
!
router bgp 2456
 neighbor 192.168.0.6 route-map UseRTBH in
!</pre>
<p>What I did there is I created a route-map to apply in the input direction from R6 on R2 and R4. This route-map will match the trigger community and for those routes that match, set the next-hop to 192.0.2.1. Unless I have static route (or other source) for this next-hop, route would be invalid. However, I <strong>do not</strong> want the route to be invalid, because then some other route, possible less-specific, route can take the traffic. What I want is the trigger route to be considered the best, so I can explicitly drop the traffic for the destination.</p>
<p>Let&#8217;s see if this works. First off, let&#8217;s see the next hop on R2.</p>
<p>R2:</p>
<pre>R2#<span style="background-color: gray;">show ip bgp 6.6.6.6</span>
BGP routing table entry for 6.6.6.6/32, version 23
Paths: (1 available, best #1, table Default-IP-Routing-Table)
Flag: 0x820
  Advertised to update-groups:
        1
  Local
    <span style="background-color: yellow; color: black;">192.0.2.1</span> from 192.168.0.6 (192.168.0.6)
      Origin IGP, metric 0, localpref 100, valid, internal, best
      Community: 2456:2456</pre>
<p>This worked. Let&#8217;s see the ping from R1.</p>
<p>R1:</p>
<pre>R1#<span style="background-color: gray;">ping 6.6.6.6 source Loopback11</span>

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 6.6.6.6, timeout is 2 seconds:
Packet sent with a source address of 11.11.11.11
<span style="background-color: yellow; color: black;">U.U.U</span>
Success rate is 0 percent (0/5)
R1#<span style="background-color: gray;">ping 192.168.0.6 source Loopback11</span>

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.6, timeout is 2 seconds:
Packet sent with a source address of 11.11.11.11
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/4/4 ms</pre>
<p>We can see that from R1 we cannot ping Loopback6 on R6, but we can easily access Loopback0. If Loopback6 was under attack, this would cause traffic to that destination to be dropped by R2 and R4, adding no additional workload for R5 and R6. However&#8230; there is one minor problem. You can see that border routers are generating ICMP unreachable messages. This is causing more work for them and increases their CPU load. One can be tempted to simply disable ICMP unreachable messages on interfaces facing R1, but that can break legitimate things like Path MTU Discovery. What we need is a way to stop sending unreachables for traffic redirected to Null0 interface. You may be surprised how easily that is done.</p>
<p>R2 and R4:</p>
<pre class="config">interface Null0
 no ip unreachables
!</pre>
<p>Let&#8217;s test again from R1.</p>
<p>R1:</p>
<pre>R1#<span style="background-color: gray;">ping 6.6.6.6 source Loopback11</span>

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 6.6.6.6, timeout is 2 seconds:
Packet sent with a source address of 11.11.11.11
.....
Success rate is 0 percent (0/5)</pre>
<p>Much better. Still, we&#8217;re indiscriminately dropping the traffic going to 6.6.6.6. Let&#8217;s see what we can do when we figure out who the attacker is.</p>
<h2>Source-Based RTBH</h2>
<p>We discovered that source of our attack is 11.11.11.11/32. We can now implement source-based RTBH. Method is very similar to the one used just before, except that we signal with the static route for 11.11.11.11/32 on R6. I will now remove the community from 6.6.6.6 and add the trigger for 11.11.11.11/32.</p>
<p>R6:</p>
<pre class="config">router bgp 2456
 no network 6.6.6.6 mask 255.255.255.255 route-map Loopback6-RTBH
 network 6.6.6.6 mask 255.255.255.255
!
ip route 11.11.11.11 255.255.255.255 Null0 tag 2456</pre>
<p>Since our infrastructure is already in place, we should see this prefix with the next-hop of 192.0.2.1 on R2.</p>
<p>R2:</p>
<pre>R2#<span style="background-color: gray;">show ip bgp 11.11.11.11</span>
BGP routing table entry for 11.11.11.11/32, version 28
Paths: (2 available, best #1, table Default-IP-Routing-Table, not advertised to EBGP peer)
Flag: 0x820
  Not advertised to any peer
  Local
    192.0.2.1 from 192.168.0.6 (192.168.0.6)
      Origin incomplete, metric 0, localpref 100, valid, internal, best
      Community: 2456:2456 no-export
  1
    172.16.12.1 from 172.16.12.1 (172.16.0.1)
      Origin IGP, metric 0, localpref 100, valid, external</pre>
<p>If I ping from Loopback11 of R1, no traffic should be reaching R6, while ping from Loopback1 should work. Let&#8217;s try.</p>
<p>R1:</p>
<pre>R1#<span style="background-color: gray;">ping 6.6.6.6 source Loopback11</span>

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 6.6.6.6, timeout is 2 seconds:
Packet sent with a source address of 11.11.11.11
.....
Success rate is 0 percent (0/5)
R1#<span style="background-color: gray;">ping 6.6.6.6 source Loopback1</span>

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 6.6.6.6, timeout is 2 seconds:
Packet sent with a source address of 1.1.1.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/3/4 ms</pre>
<p>This seems to work&#8230; or does it? Let&#8217;s enable some debug on R6 and re-run the ping.</p>
<p>R6:</p>
<pre class="config">access-list 100 permit icmp any any echo
access-list 100 permit icmp any any echo-reply</pre>
<pre>R6#<span style="background-color: gray;">debug ip packet 100</span></pre>
<p>R1:</p>
<pre>R1#<span style="background-color: gray;">ping 6.6.6.6 source Loopback11 repeat 1</span>

Type escape sequence to abort.
Sending 1, 100-byte ICMP Echos to 6.6.6.6, timeout is 2 seconds:
Packet sent with a source address of 11.11.11.11
.
Success rate is 0 percent (0/1)</pre>
<p>R6:</p>
<pre> IP: s=11.11.11.11 (FastEthernet0/0), d=6.6.6.6, len 100, input feature, MCI Check(64), rtype 0, forus FALSE, sendself FALSE, mtu 0, fwdchk FALSE
 IP: tableid=0, s=11.11.11.11 (FastEthernet0/0), d=6.6.6.6 (Loopback6), routed via RIB
 IP: s=11.11.11.11 (FastEthernet0/0), d=6.6.6.6, len 100, rcvd 4
 IP: s=11.11.11.11 (FastEthernet0/0), d=6.6.6.6, len 100, stop process pak for forus packet
 IP: s=6.6.6.6 (local), d=11.11.11.11 (Null0), len 100, sending</pre>
<p>We can see that R1 is not getting any <em>responses,</em> but R6 is still getting the traffic! We have <strong>NOT</strong> stopped the DoS attack. To do so, we need to verify if the source of the traffic is valid. We will use uRPF feature as mentioned earlier. To be more precise, we will use loose uRPF, which will only verify if the route to the destination is valid. Null0 route is <strong>not</strong> considered valid and uRPF will fail. Let&#8217;s configure that on R2 and R4 facing R1.</p>
<p>R2:</p>
<pre class="config">interface GigabitEthernet0/1
 ip verify unicast source reachable-via any
!</pre>
<p>R4:</p>
<pre class="config">interface FastEthernet0/0
 ip verify unicast source reachable-via any
!</pre>
<p>When we re-run the ping from R1, we should see no debugging output on R6. We have now stopped the attack from 11.11.11.11! There are still few possible design-related issues.</p>
<h2>Partial Implementation Caveats</h2>
<p>What happens in a case that for example filtering is done only by R2, but not R4? If the traffic reached R4, it would reach R5 and ultimately R6. One way to prevent this issue from happening is to force the next-hop change on the trigger router itself. In our case this is on R6. If we decide to go with that option, we may be creating yet another problem, which is not immediately obvious. Let&#8217;s change our network so that R5 is the route-reflector, with R2, R4 and R6 being clients. I will also change where the next-hop is changed. Here is the configuration.</p>
<p>R2:</p>
<pre class="config">router bgp 2456
 no neighbor 192.168.0.4
 no neighbor 192.168.0.6
!</pre>
<p>R4:</p>
<pre class="config">router bgp 2456
 no neighbor 192.168.0.2
 no neighbor 192.168.0.6
!</pre>
<p>R5:</p>
<pre class="config">router bgp 2456
 neighbor 192.168.0.2 route-reflector-client
 neighbor 192.168.0.4 route-reflector-client
 neighbor 192.168.0.6 route-reflector-client
!</pre>
<p>R6:</p>
<pre class="config">ip route 192.0.2.1 255.255.255.255 Null0
!
ip community-list standard RTBH-Trigger permit 2456:2456
!
route-map SetNH permit 10
 match community RTBH-Trigger
 set ip next-hop 192.0.2.1
!
route-map SetNH permit 99
!
router bgp 2456
 no neighbor 192.168.0.2
 no neighbor 192.168.0.4
 neighbor 192.168.0.5 route-map SetNH out
!</pre>
<p>Let&#8217;s see the trigger route on R5.</p>
<p>R5:</p>
<pre>R5#<span style="background-color: gray;">show ip bgp 11.11.11.11</span>
BGP routing table entry for 11.11.11.11/32, version 62
Paths: (1 available, best #1, table Default-IP-Routing-Table, not advertised to EBGP peer)
Flag: 0x800
  Advertised to update-groups:
        2
  Local, (Received from a RR-client)
    192.0.2.1 (metric 2) from 192.168.0.6 (192.168.0.6)
      Origin incomplete, metric 0, localpref 100, valid, internal, best
      Community: 2456:2456 no-export</pre>
<p>How can the route be valid, when there is no valid next-hop? Or is there a valid next-hop?</p>
<p>R5:</p>
<pre>R5#<span style="background-color: gray;">show ip route 192.0.2.1</span>
Routing entry for 192.0.2.1/32
  Known via "bgp 2456", distance 200, metric 0, type internal
  Last update from 192.168.0.6 00:01:20 ago
  Routing Descriptor Blocks:
  * 192.168.0.6, from 192.168.0.6, 00:01:20 ago
      Route metric is 0, traffic share count is 1
      AS Hops 0</pre>
<p>Router R6 is advertising the 192.0.2.1 route, which means that it may still attract the traffic if only one of the border routers are misconfigured! To fix this issue, we must prevent this route from being advertised by R6. Even more filtering!</p>
<p>R6:</p>
<pre class="config">ip prefix-list NO-TRIGGER permit 192.0.2.0/24 le 32
!
route-map RTBH-Trigger deny 20
 match ip address prefix-list NO-TRIGGER
!</pre>
<p>Now, the situation on R5 is completely different.</p>
<p>R5:</p>
<pre>R5#<span style="background-color: gray;">show ip bgp 11.11.11.11</span>
BGP routing table entry for 11.11.11.11/32, version 67
Paths: (3 available, best #3, table Default-IP-Routing-Table)
  Advertised to update-groups:
        2
  <span style="background-color: yellow; color: black;">Local, (Received from a RR-client)</span>
    <span style="background-color: yellow; color: black;">192.0.2.1 (inaccessible) from 192.168.0.6 (192.168.0.6)</span>
      <span style="background-color: yellow; color: black;">Origin incomplete, metric 0, localpref 100, valid, internal</span>
      <span style="background-color: yellow; color: black;">Community: 2456:2456 no-export</span>
  1, (Received from a RR-client)
    192.168.0.4 (metric 65) from 192.168.0.4 (192.168.0.4)
      Origin IGP, metric 0, localpref 100, valid, internal
  1, (Received from a RR-client)
    192.168.0.2 (metric 65) from 192.168.0.2 (192.168.0.2)
      Origin IGP, metric 0, localpref 100, valid, internal, best</pre>
<p>Since next-hop is no longer advertised, the trigger route is inaccessible. In turn, it will not be advertised to enforcing edge routers and will cause the attack traffic to be routed inside the infrastructure network. To fix this issue, we should add yet another static Null0 route, this time on R5.</p>
<p>R5:</p>
<pre class="config">ip route 192.0.2.1 255.255.255.255 Null0</pre>
<p>Again, here we need to be careful that R5 does not advertise this route, or misconfigured edge router may send the traffic towards the router-reflector! Let&#8217;s see what we have learned from this.</p>
<h2>Learned Lesson</h2>
<p>Hopefully this small exercise with next-hop and filtering illustrated an important issue with RTBH. It is an extremely powerful feature, but it requires careful planning and implementation. More importantly, if it&#8217;s not implemented on all of the border routers, unintended targets such as route-reflectors or trigger router may become victims of a DDoS, instead of a server or an end user. This is a potential disaster.</p>
<p>Also, while inviting as an idea, setting next-hop on the trigger router may cause deeper issues and require more configuration throughout the network. It&#8217;s better avoided if not required.</p>
<p>I hope you enjoyed this article. Happy studies!</p>
<p>&#8211;<br />
<a href="http://facebook.com/ccie18427" target="_blank">Marko Milivojevic</a> &#8211; CCIE #18427<br />
Senior Technical Instructor &#8211; <a href="http://www.ipexpert.com/" target="_blank">IPexpert</a><br />
Join our <a href="http://www.onlinestudylist.com/" target="_blank">Online Study List</a></p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="medium" count="1" href="http://blog.ipexpert.com/2010/11/24/remote-triggered-black-hole-filtering/"></g:plusone></div><div style="text-align:left; margin: 0px 0px 0px 0px;" ><a href="http://blog.ipexpert.com/2010/11/24/remote-triggered-black-hole-filtering/?pfstyle=wp" style="text-decoration: none; outline: none; color: #990000;"><img class="printfriendly" src="http://cdn.printfriendly.com/pf-icon.gif" alt="Print Friendly"/><span style="font-size:14px; margin-left:3px; color: #990000;">Print Friendly</span></a></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ipexpert.com/2010/11/24/remote-triggered-black-hole-filtering/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>BGP Peering and Default Routes</title>
		<link>http://blog.ipexpert.com/2010/11/08/bgp-peering-and-default-routes/</link>
		<comments>http://blog.ipexpert.com/2010/11/08/bgp-peering-and-default-routes/#comments</comments>
		<pubDate>Mon, 08 Nov 2010 14:03:24 +0000</pubDate>
		<dc:creator>Marko Milivojevic</dc:creator>
				<category><![CDATA[CCIE]]></category>
		<category><![CDATA[Routing & Switching]]></category>
		<category><![CDATA[Service Provider]]></category>
		<category><![CDATA[BGP]]></category>
		<category><![CDATA[CCIE Routing & Switching]]></category>
		<category><![CDATA[CCIE Service Provider]]></category>
		<category><![CDATA[default route]]></category>

		<guid isPermaLink="false">http://blog.ipexpert.com/?p=5277</guid>
		<description><![CDATA[One of the interesting restrictions of BGP is that neighbor will not establish BGP session with a peer if the only way to reach it is through the default route. Is there anything we can do in that scenario? First of all, let&#8217;s try to reproduce the problem. We will use the simple network shown [...]]]></description>
			<content:encoded><![CDATA[<p>One of the interesting restrictions of BGP is that neighbor will not establish BGP session with a peer if the only way to reach it is through the default route. Is there anything we can do in that scenario?<span id="more-5277"></span></p>
<p>First of all, let&#8217;s try to reproduce the problem. We will use the simple network shown on the diagram below for this purpose.</p>
<p><img src="http://blog.ipexpert.com/wp-content/uploads/2010/10/BGP-Default.png" alt="Diagram"/></p>
<p>In the network we will use, R2 is a hub to which other routers connect to. R1 and R2 are connected in OSPF NSSA area 12 and R2 originates the default route to R1. See below.</p>
<p>R1:
<pre class="config">router ospf 1
 area 12 nssa
 network 0.0.0.0 255.255.255.255 area 12
!</pre>
<pre>R1#<span style="background-color: gray">show ip route | begin Gateway</span>
Gateway of last resort is 12.12.12.2 to network 0.0.0.0

O*IA  0.0.0.0/0 [110/65] via 12.12.12.2, 00:35:15, Serial1/0
      1.0.0.0/32 is subnetted, 1 subnets
C        1.1.1.1 is directly connected, Loopback0
      12.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C        12.12.12.0/24 is directly connected, Serial1/0
L        12.12.12.1/32 is directly connected, Serial1/0</pre>
<p>R2:
<pre class="config">router ospf 12
 area 12 nssa no-summary
 network 2.2.2.2 0.0.0.0 area 0
 network 12.12.12.2 0.0.0.0 area 12
!</pre>
<pre>R2#<span style="background-color: gray">show ip route ospf | begin ^Gateway</span>
Gateway of last resort is 0.0.0.0 to network 0.0.0.0

      1.0.0.0/32 is subnetted, 1 subnets
O        1.1.1.1 [110/65] via 12.12.12.1, 00:35:54, Serial1/0</pre>
<p>R2 and R3 are using RIPv2. Again, R2 is the one originating the default route.</p>
<p>R3:
<pre class="config">router rip
 version 2
 passive-interface default
 no passive-interface Serial1/1
 network 0.0.0.0
 no auto-summary
!</pre>
<pre>R3#<span style="background-color: gray">show ip route | begin ^Gateway</span>
Gateway of last resort is 23.23.23.2 to network 0.0.0.0

R*    0.0.0.0/0 [120/1] via 23.23.23.2, 00:00:26, Serial1/1
      3.0.0.0/32 is subnetted, 1 subnets
C        3.3.3.3 is directly connected, Loopback0
      23.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C        23.23.23.0/24 is directly connected, Serial1/1
L        23.23.23.3/32 is directly connected, Serial1/1</pre>
<p>R2:
<pre class="config">router rip
 version 2
 passive-interface default
 no passive-interface Serial1/1
 network 23.0.0.0
 default-information originate
 no auto-summary
!</pre>
<pre>R2#<span style="background-color: gray">show ip route rip | begin ^Gateway</span>
Gateway of last resort is 0.0.0.0 to network 0.0.0.0

      3.0.0.0/32 is subnetted, 1 subnets
R        3.3.3.3 [120/1] via 23.23.23.3, 00:00:15, Serial1/1</pre>
<p>Finally, R2 and R4 are using EIGRP. You guessed right &#8211; R2 originates the default to R4.</p>
<p>R4:
<pre class="config">router eigrp 24
 network 0.0.0.0
 no auto-summary
!</pre>
<pre>R4#show ip route | begin ^Gateway
Gateway of last resort is 24.24.24.2 to network 0.0.0.0

D*    0.0.0.0/0 [90/2297856] via 24.24.24.2, 00:37:28, Serial1/2
      4.0.0.0/32 is subnetted, 1 subnets
C        4.4.4.4 is directly connected, Loopback0
      24.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C        24.24.24.0/24 is directly connected, Serial1/2
L        24.24.24.4/32 is directly connected, Serial1/2</pre>
<p>R2:
<pre class="config">router eigrp 24
 network 24.24.24.2 0.0.0.0
 no auto-summary
!
interface Serial1/2
 ip summary-address eigrp 24 0.0.0.0 0.0.0.0
!</pre>
<pre>R2#show ip route eigrp | begin ^Gateway
Gateway of last resort is 0.0.0.0 to network 0.0.0.0

D*    0.0.0.0/0 is a summary, 00:38:27, Null0
      4.0.0.0/32 is subnetted, 1 subnets
D        4.4.4.4 [90/2297856] via 24.24.24.4, 00:39:18, Serial1/2</pre>
<p>To sum this up, we can see that R2 has full visibility of all network, while other routers receive only default route from R2. We also have full reachability in the network. To preserve space, we&#8217;ll run the test only from R1, but it will work from all other routers as well.</p>
<p>R1:
<pre>R1#<span style="background-color: gray">tclsh</span>
R1(tcl)#<span style="background-color: gray">foreach ip {</span>
+>(tcl)#<span style="background-color: gray">1.1.1.1</span>
+>(tcl)#<span style="background-color: gray">2.2.2.2</span>
+>(tcl)#<span style="background-color: gray">3.3.3.3</span>
+>(tcl)#<span style="background-color: gray">4.4.4.4</span>
+>(tcl)#<span style="background-color: gray">} { ping $ip source Loopback0 repeat 3 timeout 1 }</span>

Type escape sequence to abort.
Sending 3, 100-byte ICMP Echos to 1.1.1.1, timeout is 1 seconds:
Packet sent with a source address of 1.1.1.1
!!!
Success rate is 100 percent (3/3), round-trip min/avg/max = 4/4/4 ms
Type escape sequence to abort.
Sending 3, 100-byte ICMP Echos to 2.2.2.2, timeout is 1 seconds:
Packet sent with a source address of 1.1.1.1
!!!
Success rate is 100 percent (3/3), round-trip min/avg/max = 8/9/12 ms
Type escape sequence to abort.
Sending 3, 100-byte ICMP Echos to 3.3.3.3, timeout is 1 seconds:
Packet sent with a source address of 1.1.1.1
!!!
Success rate is 100 percent (3/3), round-trip min/avg/max = 16/18/20 ms
Type escape sequence to abort.
Sending 3, 100-byte ICMP Echos to 4.4.4.4, timeout is 1 seconds:
Packet sent with a source address of 1.1.1.1
!!!
Success rate is 100 percent (3/3), round-trip min/avg/max = 16/17/20 ms
R1(tcl)#<span style="background-color: gray">tclquit</span></pre>
<h2>BGP Configuration</h2>
<p>To begin with, let&#8217;s configure BGP between R1 and R2 using Loopback0 as update-source. We will use iBGP.</p>
<p>R1:
<pre class="config">router bgp 1234
 bgp router-id 1.1.1.1
 neighbor 2.2.2.2 remote-as 1234
 neighbor 2.2.2.2 update-source Loopback0
!</pre>
<p>R2:
<pre class="config">router bgp 1234
 bgp router-id 2.2.2.2
 neighbor 1.1.1.1 remote-as 1234
 neighbor 1.1.1.1 update-source Loopback0
!</pre>
<p>If our premise is correct, nothing should happen, as BGP will not work from R1 to R2. However, after just couple of seconds, we should be seeing the following message on R1:</p>
<pre> %BGP-5-ADJCHANGE: neighbor 2.2.2.2 Up</pre>
<p>How is this possible when the only route to 2.2.2.2 is the default route? Well, let&#8217;s examine this session a little bit. To do that, we&#8217;ll use &#8220;show ip bgp neighbor&#8221; command. We don&#8217;t need all the output for what I&#8217;m trying to illustrate, so I will filter it out a little bit using regular expressions and wonderful &#8220;| include&#8221; command modifier.</p>
<p>R1:
<pre>R1#<span style="background-color: gray">show ip bgp neighbors 2.2.2.2 | include ^(Connection state|(Local|Foreign) host)</span>
Connection state is ESTAB, I/O status: 1, unread input bytes: 0
Local host: 1.1.1.1, Local port: 179
Foreign host: 2.2.2.2, Foreign port: 13877</pre>
<p>This looks normal, but there is one thing I&#8217;d like to especially point out. Look at the port numbers. Local port is 179 (BGP) and remote port is <i>random high number.</i> This means that it was R2 that initiated the session and R1 just accepted it. Let&#8217;s try to force the reverse.</p>
<p>R1:
<pre class="config">router bgp 1234
 neighbor 2.2.2.2 transport connection-mode active
!</pre>
<p>R2:
<pre class="config">router bgp 1234
 neighbor 1.1.1.1 transport connection-mode passive
!</pre>
<p>After clearing the sessions we don&#8217;t see the session being enabled. It&#8217;s time to call debug to assistance.</p>
<p>R1:
<pre>R1#<span style="background-color: gray">debug ip bgp ipv4 unicast</span></pre>
<p>Sure enough, after just few seconds, we&#8217;ll see the log message similar to the one below:</p>
<pre>BGP: 2.2.2.2 Active open failed - no route to peer, open active delayed 13312ms (35000ms max, 60% jitter)</pre>
<h3>Conclusions</h3>
<p>There are two important lessons we should learn here:</p>
<ol>
<li>It is true that BGP will not <strong>actively open</strong> (initiate) BGP session with a peer if the only route to it is the default route.
	</li>
<li>If at least one of the peers has a more specific route to its peer and it actively opens the session, peer that has the default route to it will <strong>passively open</strong> (accept) the session.
</li>
</ol>
<p>This doesn&#8217;t really help us for the situation in which both peers have only default routes to each other. What do we do then?</p>
<h2>Double Default</h2>
<p>Let&#8217;s now focus on R3 and R4. They both have only default routes, but they can surely ping each other.</p>
<p>R3:
<pre>R3#<span style="background-color: gray">ping 4.4.4.4 source Loopback0</span>

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 4.4.4.4, timeout is 2 seconds:
Packet sent with a source address of 3.3.3.3
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 16/17/20 ms</pre>
<p>Knowing what we learned in the last exercise, if we simply configure BGP between them, the session should not come up. Let&#8217;s put this knowledge to the test &#8211; with debug enabled.</p>
<p>R3:
<pre class="config">router bgp 1234
 bgp router-id 3.3.3.3
 neighbor 4.4.4.4 remote-as 1234
 neighbor 4.4.4.4 update-source Loopback0
!</pre>
<p>R4:
<pre class="config">router bgp 1234
 bgp router-id 4.4.4.4
 neighbor 3.3.3.3 remote-as 1234
 neighbor 3.3.3.3 update-source Loopback0
!</pre>
<p>After turning on the debug (using &#8220;debug ip bgp ipv4 unicast&#8221;), both routers will very soon let us know that they don&#8217;t have the routes to each other.  At first glance, a hopeless situation. </p>
<p>In a sense, it is, but it&#8217;s not an unsolvable problem. Remember, routers are reachable, which mwans we could trick them into thinking they are directly connected using GRE tunnel. Of course, that means running a routing protocol over the tunnel or using static routes. Let&#8217;s take a look at that solution.</p>
<p>R3:
<pre class="config">interface Tunnel34
 ip unnumbered Loopback0
 tunnel mode gre ip
 tunnel source Serial1/1
 tunnel destination 34.34.34.4
!
router ospf 1
 network 3.3.3.3 0.0.0.0 area 0
!</pre>
<p>R4:
<pre class="config">router ospf 1
 network 4.4.4.4 0.0.0.0 area 0
!
interface Tunnel34
 ip unnumbered Loopback0
 tunnel mode gre ip
 tunnel source Serial1/2
 tunnel destination 23.23.23.3
!</pre>
<p>In just couple of seconds, our BGP neighbors will come up and our problem has been solved.</p>
<p>Happy studies!</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="medium" count="1" href="http://blog.ipexpert.com/2010/11/08/bgp-peering-and-default-routes/"></g:plusone></div><div style="text-align:left; margin: 0px 0px 0px 0px;" ><a href="http://blog.ipexpert.com/2010/11/08/bgp-peering-and-default-routes/?pfstyle=wp" style="text-decoration: none; outline: none; color: #990000;"><img class="printfriendly" src="http://cdn.printfriendly.com/pf-icon.gif" alt="Print Friendly"/><span style="font-size:14px; margin-left:3px; color: #990000;">Print Friendly</span></a></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ipexpert.com/2010/11/08/bgp-peering-and-default-routes/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Peering With an Unknown Autonomous System</title>
		<link>http://blog.ipexpert.com/2010/06/28/peering-with-an-unknown-autonomous-system/</link>
		<comments>http://blog.ipexpert.com/2010/06/28/peering-with-an-unknown-autonomous-system/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 14:17:32 +0000</pubDate>
		<dc:creator>Marko Milivojevic</dc:creator>
				<category><![CDATA[CCIE]]></category>
		<category><![CDATA[Routing & Switching]]></category>
		<category><![CDATA[Service Provider]]></category>
		<category><![CDATA[BGP]]></category>
		<category><![CDATA[peering]]></category>

		<guid isPermaLink="false">http://blog.ipexpert.com/?p=3901</guid>
		<description><![CDATA[Per popular request, this post has the purpose to explain the solution of the problem of BGP peering with an an unknown AS. I would like to start by stating the obvious. This is a solution in a search of a problem. Popular as it may be with CCIE workbook vendors and rumor has it [...]]]></description>
			<content:encoded><![CDATA[<p>Per popular request, this post has the purpose to explain the solution of the problem of BGP peering with an an unknown AS. I would like to start by stating the obvious.</p>
<p>This is a solution in a search of a problem. Popular as it may be with CCIE workbook vendors and rumor has it with CCIE exam authors, real life has almost no use of this. When faced with a log message that you will read about in few paragraphs, solution is using the phone and not doing the other stuff I&#8217;m about to write. That said, it&#8217;s an interesting and fun problem.<br />
<span id="more-3901"></span><br />
Below is the network diagram that we&#8217;ll work with. It&#8217;s very simple and straightforward.</p>
<div align="center"><img src="http://blog.ipexpert.com/wp-content/uploads/2010/06/BGP-Unknown-1.png" alt="Diagram"/></div>
<p>Both R1 and R2 were emulated using Dynamips and were running 12.2(31)SB13 IOS (Service Provider train). I&#8217;m sure that any other relatively newer IOS should work just fine.</p>
<p>Here are the relevant startup configurations for R1 and R2.</p>
<p>R1:
<pre>hostname R1
!
interface Loopback0
 ip address 192.168.0.1 255.255.255.255
!
interface FastEthernet0/0
 ip address 192.168.12.1 255.255.255.0
 speed 100
 duplex full
!
router bgp 65001
 no synchronization
 bgp log-neighbor-changes
 network 192.168.0.1 mask 255.255.255.255
 no auto-summary
!</pre>
<p>R2:
<pre>hostname R2
!
interface Loopback0
 ip address 192.168.0.2 255.255.255.255
!
interface FastEthernet0/0
 ip address 192.168.12.2 255.255.255.0
 speed 100
 duplex full
!
router bgp 65002
 no synchronization
 bgp log-neighbor-changes
 network 192.168.0.2 mask 255.255.255.255
 no auto-summary
!</pre>
<p>I would like to introduce several scenarios at this point.</p>
<ul>
<li>R1 needs to configure BGP with R2, but it doesn&#8217;t know R2&#8242;s AS number.</li>
<li>R1 needs to configure BGP with R2, but R2 was configured to peer with another AS instead of 65001.</li>
</ul>
<p>In all of the above scenarios, R2&#8242;s admin is unavailable, or unwilling to help and you, administrator of R1, are on your own. Naturally, as we don&#8217;t have R2&#8242;s admin to preconfigure R2, you are again on your own to paste the configs and immediately forget them. Hopefully, it won&#8217;t be too much to ask.</p>
<h2>R1 needs to configure BGP with R2, but it doesn&#8217;t know R2&#8242;s AS number</h2>
<p>Paste the following BGP configuration to R2 and forget its AS number.</p>
<pre>router bgp 65002
 neighbor 192.168.12.1 remote-as 65001
!</pre>
<p>With this configuration in place you should proceed to configure R1. However, you don&#8217;t know what AS number to use. You have one in 65535 chances of getting it right if you just use random one. Let&#8217;s pick 2.</p>
<pre>R1(config)#router bgp 65001
R1(config-router)#nei 192.168.12.2 remote 2</pre>
<p>Unless you guessed the AS number, after few seconds, R1 will display the following log message:</p>
<pre>%BGP-3-NOTIFICATION: sent to neighbor 192.168.12.2 2/2 (peer in wrong AS) 2 bytes FDEA</pre>
<p>&#8230; followed by some &#8220;nonsense&#8221; chain of hex numbers. While you could also decode those, they are not relevant for this case. Everything we need is right here in this log message.</p>
<p>Last 4 characters of the log message above, FDEA, are hex digits of the remote AS. If you convert them to decimal, they are 65002. Let&#8217;s reconfigure R1 to peer with 65002.</p>
<pre>R1(config)#router bgp 65001
R1(config-router)#nei 192.168.12.2 remote 65002</pre>
<p>Sure enough, after few seconds, we get the goody:</p>
<pre>%BGP-5-ADJCHANGE: neighbor 192.168.12.2 Up

R1#ping 192.168.0.2 source lo0

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.2, timeout is 2 seconds:
Packet sent with a source address of 192.168.0.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 8/15/40 ms</pre>
<p>Really, it&#8217;s that simple. This is the easier of the two. Before we continue to the next scenario, make sure to reload routers into startup configurations (or undo the changes).</p>
<h2>R1 needs to configure BGP with R2, but R2 was configured to peer with another AS instead of 65001</h2>
<p>Paste the following BGP configuration to R2 and forget the AS number.</p>
<pre>router bgp 65002
 neighbor 192.168.12.1 remote-as 22
!</pre>
<p>Proceed and configure R1 to peer with R2.</p>
<pre>R1(config)#router bgp 65001
R1(config-router)#nei 192.168.12.2 remote 65002</pre>
<p>Just like in the previous scenario, in a few seconds, you will receive the following message on R1:</p>
<pre>%BGP-3-NOTIFICATION: received from neighbor 192.168.12.2 2/2 (peer in wrong AS) 2 bytes FDE9</pre>
<p>You can jump and decode the last four characters, but only to be disappointed &#8211; that is our own AS number. Devil is in the detail and you can use it to your own advantage.</p>
<p>First of all, although very similar, message from scenario one and this one are not the same. Here they are, side by side:</p>
<pre>%BGP-3-NOTIFICATION: sent to neighbor 192.168.12.2 2/2 (peer in wrong AS) 2 bytes FDEA
%BGP-3-NOTIFICATION: received from neighbor 192.168.12.2 2/2 (peer in wrong AS) 2 bytes FDE9</pre>
<p>Note that in the first case, R1 was sending notification and in this case it&#8217;s receiving it. In a nutshell, this means that when BGP router receives OPEN message with remote AS indicating something else than what it has locally configured to be remote neighbor, it will send back notification to remote peer that it received something else than what it expected, also indicating what it received. However, what it will not send is any indication on what it wanted to see. Unfortunately, there is no technical solution for this problem. Even if you &#8220;sniff&#8221; the wire, you will not be able to see that R2 was configured to expect AS22.</p>
<p>I know that this is not exactly the answer you expected to get, but the whole excercise was not in vain. It&#8217;s not completely useless. By being able to read those two log messages above and fully understand what they are communicating, you can at least know which end is somehow misconfigured. If we take our second example further and assume that you received the answer from R2&#8242;s admin &#8220;I configured remote-as as 22 and I can&#8217;t change it, because I&#8217;m in Fiji&#8221;, how do you solve the peering problem? Of course, you can change the AS of your local BGP router, but that may not be doable if you have more than just a few. Hopefully, Cisco has an ace up its sleeve for that.</p>
<pre>R1(config)#router bgp 65001
R1(config-router)#nei 192.168.12.2 local-as 22 no-prepend replace-as</pre>
<p>When configured like so, R2 will be completely unaware that R1 is actually AS65001:</p>
<pre>R2#sh ip bgp 192.168.0.1
BGP routing table entry for 192.168.0.1/32, version 5
Paths: (1 available, best #1, table Default-IP-Routing-Table)
Flag: 0x420
 Not advertised to any peer
 22
   192.168.12.1 from 192.168.12.1 (192.168.0.1)
     Origin IGP, metric 0, localpref 100, valid, external, best</pre>
<p>Also, R1 and its other BGP peers will not see AS22 in any updates:</p>
<pre>R1#sh ip bgp 192.168.0.2
BGP routing table entry for 192.168.0.2/32, version 7
Paths: (1 available, best #1, table Default-IP-Routing-Table)
Flag: 0x420
 Not advertised to any peer
 65002
   192.168.12.2 from 192.168.12.2 (192.168.0.2)
     Origin IGP, metric 0, localpref 100, valid, external, best</pre>
<p>Mandatory reachability test:</p>
<pre>R1#ping 192.168.0.2 so lo0

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.2, timeout is 2 seconds:
Packet sent with a source address of 192.168.0.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/13/40 ms</pre>
<p>I hope that this tutorial was of some use. If that&#8217;s the case, please leave some feedback.</p>
<blockquote style="margin-left: 2em; margin-right: 4em; font-style: italic;"><p>This article was originally posted on my <a href="http://cisco.markom.info/" target="_blank">personal blog</a> on October 8, 2009. It is reproduced here with permission.</p></blockquote>
<p>&#8211;<br />
<a href="http://facebook.com/ccie18427" target="_blank">Marko Milivojevic</a> &#8211; CCIE #18427<br />
Senior Technical Instructor &#8211; <a href="http://www.ipexpert.com/" target="_blank">IPexpert</a><br />
Join our <a href="http://www.onlinestudylist.com/" target="_blank">Online Study List</a></p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="medium" count="1" href="http://blog.ipexpert.com/2010/06/28/peering-with-an-unknown-autonomous-system/"></g:plusone></div><div style="text-align:left; margin: 0px 0px 0px 0px;" ><a href="http://blog.ipexpert.com/2010/06/28/peering-with-an-unknown-autonomous-system/?pfstyle=wp" style="text-decoration: none; outline: none; color: #990000;"><img class="printfriendly" src="http://cdn.printfriendly.com/pf-icon.gif" alt="Print Friendly"/><span style="font-size:14px; margin-left:3px; color: #990000;">Print Friendly</span></a></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ipexpert.com/2010/06/28/peering-with-an-unknown-autonomous-system/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>BGP Outbound Route Filtering</title>
		<link>http://blog.ipexpert.com/2009/10/07/bgp-outbound-route-filtering/</link>
		<comments>http://blog.ipexpert.com/2009/10/07/bgp-outbound-route-filtering/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 13:56:45 +0000</pubDate>
		<dc:creator>Bryan Bartik</dc:creator>
				<category><![CDATA[Ask the Expert]]></category>
		<category><![CDATA[Routing & Switching]]></category>
		<category><![CDATA[Techtorials]]></category>
		<category><![CDATA[BGP]]></category>
		<category><![CDATA[ccie lab]]></category>
		<category><![CDATA[CCIE Training]]></category>

		<guid isPermaLink="false">http://ipexpert.ccieblog.com/?p=1114</guid>
		<description><![CDATA[driymcg3h2 BGP Outbound Route Filtering R1 and R2 are EBGP Neighbors. R1 is receiving the following routes from R2: R1#sho ip bgp &#124; be Net Network          Next Hop            Metric LocPrf Weight Path *&#62; 200.0.0.0        192.168.12.2             0             0 200 i *&#62; 200.0.1.0        192.168.12.2             0             0 200 i *&#62; 200.0.2.0        192.168.12.2             0             0 200 i *&#62; 200.0.3.0        [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #ffffff">driymcg3h2</span></p>
<p><strong><span style="text-decoration: underline">BGP Outbound Route Filtering</span></strong></p>
<p>R1 and R2 are EBGP Neighbors. R1 is receiving the following routes from R2:</p>
<pre>R1#sho ip bgp | be Net
Network          Next Hop            Metric LocPrf Weight Path
*&gt; 200.0.0.0        192.168.12.2             0             0 200 i
*&gt; 200.0.1.0        192.168.12.2             0             0 200 i
*&gt; 200.0.2.0        192.168.12.2             0             0 200 i
*&gt; 200.0.3.0        192.168.12.2             0             0 200 i<span id="more-1114"></span>
R1#</pre>
<p>Suppose R1 wants to only allow the first 2 routes. We could do it with a prefix-list as follows:</p>
<pre>R1(config)#ip prefix-list FROMR2 permit 200.0.0.0/24
R1(config)#ip prefix-list FROMR2 permit 200.0.1.0/24
R1(config)#router bgp 100
R1(config-router)#neighbor 192.168.12.2 prefix-list FROMR2 in</pre>
<p>When debugging, we can see that the last two prefixes get denied at R1:</p>
<pre>R1#debug ip bgp updates in
BGP updates debugging is on (inbound) for address family: IPv4 Unicast
R1#cle ip bgp *
R1#
*Mar  1 00:06:21.491: %BGP-5-ADJCHANGE: neighbor 192.168.12.2 Down User reset
*Mar  1 00:06:22.627: %BGP-5-ADJCHANGE: neighbor 192.168.12.2 Up
*Mar  1 00:06:22.683: BGP(0): 192.168.12.2 rcvd UPDATE w/ attr: nexthop 192.168.12.2, origin i, metric 0, path 200
*Mar  1 00:06:22.687: BGP(0): 192.168.12.2 rcvd 200.0.3.0/24 -- DENIED due to: distribute/prefix-list;
*Mar  1 00:06:22.695: BGP(0): 192.168.12.2 rcvd 200.0.2.0/24 -- DENIED due to: distribute/prefix-list;
*Mar  1 00:06:22.699: BGP(0): 192.168.12.2 rcvd 200.0.1.0/24
*Mar  1 00:06:22.699: BGP(0): 192.168.12.2 rcvd 200.0.0.0/24</pre>
<p>Wouldn&#8217;t it be nice if R1 could somehow tell R2 not to send those prefixes anyway, since R1 will just deny them? Well that&#8217;s what outbound route filterin(ORF) does. Configuration is simple. Since R1 is the one sending the prefix-list to R2, it will have the send keyword:</p>
<pre>R1(config)#router bgp 100
R1(config-router)#neighbor 192.168.12.2 capability orf prefix-list send
R2(config)#router bgp 200
R2(config-router)#neighbor 192.168.12.1 capability orf prefix-list receive</pre>
<p>Let&#8217;s clear ip bgp again:</p>
<pre>R1#cle ip bgp *
R1#
*Mar  1 00:12:21.755: %BGP-5-ADJCHANGE: neighbor 192.168.12.2 Down User reset
*Mar  1 00:12:23.571: %BGP-5-ADJCHANGE: neighbor 192.168.12.2 Up
*Mar  1 00:12:23.627: BGP(0): 192.168.12.2 rcvd UPDATE w/ attr: nexthop 192.168.12.2, origin i, metric 0, path 200
*Mar  1 00:12:23.631: BGP(0): 192.168.12.2 rcvd 200.0.1.0/24
*Mar  1 00:12:23.635: BGP(0): 192.168.12.2 rcvd 200.0.0.0/24
*Mar  1 00:12:23.723: BGP(0): Revise route installing 1 of 1 routes for 200.0.0.0/24 -&gt; 192.168.12.2(main) to main IP table
*Mar  1 00:12:23.727: BGP(0): Revise route installing 1 of 1 routes for 200.0.1.0/24 -&gt; 192.168.12.2(main) to main IP table</pre>
<p>We don&#8217;t see any message about R1 denying pre fixes because R2 is now doing the filtering.  How can we verify on R2? With the sho ip bgp neighbors command. For brevity, this is only a partial output:</p>
<pre>R2#sho ip bgp neighbors
AF-dependant capabilities:
Outbound Route Filter (ORF) type (128) Prefix-list:
Send-mode: received
Receive-mode: advertised
Outbound Route Filter (ORF): received (2 entries)
Sent       Rcvd
Prefix activity:               ----       ----
Prefixes Current:                 2          0
Prefixes Total:                   2          0
Implicit Withdraw:                0          0
Explicit Withdraw:                0          0
Used as bestpath:               n/a          0
Used as multipath:              n/a          0
Outbound    Inbound
Local Policy Denied Prefixes:    --------    -------
ORF prefix-list:                        2        n/a
Total:                                  2          0</pre>
<p>From the above output we can also see that R2 is advertising itself in receive mode (accepts the ORF) while the neighbor is in send-mode (sends the ORF to R2). Also the ORF permits 2 entries which is the value next to &#8220;Prefixes Current&#8221; and &#8220;Prefixes Total.&#8221; In the bottom section we see that R2 has 2 locally denied prefixes due to &#8220;ORF prefix-list.&#8221;</p>
<p>Regards, Bryan <em>(Post by Bryan Bartik)</em></p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="medium" count="1" href="http://blog.ipexpert.com/2009/10/07/bgp-outbound-route-filtering/"></g:plusone></div><div style="text-align:left; margin: 0px 0px 0px 0px;" ><a href="http://blog.ipexpert.com/2009/10/07/bgp-outbound-route-filtering/?pfstyle=wp" style="text-decoration: none; outline: none; color: #990000;"><img class="printfriendly" src="http://cdn.printfriendly.com/pf-icon.gif" alt="Print Friendly"/><span style="font-size:14px; margin-left:3px; color: #990000;">Print Friendly</span></a></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ipexpert.com/2009/10/07/bgp-outbound-route-filtering/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Seting Route Tags with BGP table-map</title>
		<link>http://blog.ipexpert.com/2009/06/01/seting-route-tags-with-bgp-table-map/</link>
		<comments>http://blog.ipexpert.com/2009/06/01/seting-route-tags-with-bgp-table-map/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 15:33:25 +0000</pubDate>
		<dc:creator>Wayne Lawson II</dc:creator>
				<category><![CDATA[Routing & Switching]]></category>
		<category><![CDATA[Service Provider]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[BGP]]></category>
		<category><![CDATA[ccie lab]]></category>
		<category><![CDATA[CCIE R&S]]></category>
		<category><![CDATA[ipexpert]]></category>

		<guid isPermaLink="false">http://ipexpert.ccieblog.com/?p=948</guid>
		<description><![CDATA[The table-map command is a lesser known and sometimes misunderstood BGP configuration command that can be used to set metrics or route-tags on routes. Here we use it to set a route-tag and verify that the tag stays after redistribution into OSPF. R2 (AS #2) and R3 (AS #3) are BGP Peers. R3 and R4 [...]]]></description>
			<content:encoded><![CDATA[<p>The table-map command is a lesser known and sometimes misunderstood BGP configuration command that can be used to set metrics or route-tags on routes. Here we use it to set a route-tag and verify that the tag stays after redistribution into OSPF.</p>
<p class="MsoNormal"><a href="http://ipexpert.ccieblog.com/files/2009/05/blog.jpg"><img class="alignnone size-medium wp-image-949" src="/wp-content/uploads/2009/05/blog-300x116.jpg" alt="" width="300" height="116" /></a></p>
<p class="MsoNormal">R2 (AS #2) and R3 (AS #3) are BGP Peers. R3 and R4 are OSPF neighbors. R2 is advertising 192.168.12.0 and R3 is redistributing it into OSPF.</p>
<p class="MsoNormal"><span id="more-948"></span></p>
<p class="MsoNormal">After initial configuration R4 has the following entry. Notice the tag is equal to the AS number that originated the route:</p>
<pre>
R4#sho ip route 192.168.12.0
Routing entry for 192.168.12.0/24
Known via "ospf 1", distance 110, metric 1
Tag 2, type extern 2, forward metric 64
Last update from 192.168.34.3 on Serial1/0, 00:00:36 ago
Routing Descriptor Blocks:
* 192.168.34.3, from 3.3.3.3, 00:00:36 ago, via Serial1/0
Route metric is 1, traffic share count is 1
Route tag 2</pre>
<p>We can alter this tag a couple ways. We can use a route-map during redistribution or use a table-map. The table-map is easy to configure:</p>
<pre>
R3(config)#route-map TABLE
R3(config-route-map)#set tag 500
R3(config-route-map)#exit
R3(config)#router bgp 3
R3(config-router)#table-map TABLE
R3(config-router)#exit
R3(config)#exit
R3#clear ip rou *</pre>
<p>Make sure to clear the route table to see the changes. Since this command takes effect between the BGP table and Route table, we don’t need to clear BGP. Now let’s look on R4:</p>
<pre>
R4#sho ip route 192.168.12.0
Routing entry for 192.168.12.0/24
Known via "ospf 1", distance 110, metric 1
Tag 500, type extern 2, forward metric 64
Last update from 192.168.34.3 on Serial1/0, 00:01:09 ago
Routing Descriptor Blocks:
* 192.168.34.3, from 3.3.3.3, 00:01:09 ago, via Serial1/0
Route metric is 1, traffic share count is 1
Route tag 500</pre>
<p>The tag is now set to 500. It’s always good know more than one way to do things. :)</p>
<p><em>Regards, Bryan (Blog Post by Bryan Bartik)</em></p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="medium" count="1" href="http://blog.ipexpert.com/2009/06/01/seting-route-tags-with-bgp-table-map/"></g:plusone></div><div style="text-align:left; margin: 0px 0px 0px 0px;" ><a href="http://blog.ipexpert.com/2009/06/01/seting-route-tags-with-bgp-table-map/?pfstyle=wp" style="text-decoration: none; outline: none; color: #990000;"><img class="printfriendly" src="http://cdn.printfriendly.com/pf-icon.gif" alt="Print Friendly"/><span style="font-size:14px; margin-left:3px; color: #990000;">Print Friendly</span></a></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ipexpert.com/2009/06/01/seting-route-tags-with-bgp-table-map/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>External BGP Links and Next Hop Self</title>
		<link>http://blog.ipexpert.com/2009/01/05/external-bgp-links-and-next-hop-self/</link>
		<comments>http://blog.ipexpert.com/2009/01/05/external-bgp-links-and-next-hop-self/#comments</comments>
		<pubDate>Tue, 06 Jan 2009 01:25:30 +0000</pubDate>
		<dc:creator>Jared Scrivener</dc:creator>
				<category><![CDATA[Techtorials]]></category>
		<category><![CDATA[BGP]]></category>
		<category><![CDATA[EBGP]]></category>
		<category><![CDATA[External BGP links]]></category>
		<category><![CDATA[jared]]></category>
		<category><![CDATA[Next Hop Self]]></category>

		<guid isPermaLink="false">http://ipexpert.ccieblog.com/?p=456</guid>
		<description><![CDATA[One of my students was talking to me today about BGP and various methods with which we can allow connectivity from within an IBGP cloud to external networks. Generally speaking, for EBGP peering using the BGP standards, we peer based on the IP address of the BGP neighbors&#8217; local interfaces. However, that brings up some [...]]]></description>
			<content:encoded><![CDATA[<p>One of my students was talking to me today about BGP and various methods with which we can allow connectivity from within an IBGP cloud to external networks.</p>
<p>Generally speaking, for EBGP peering using the BGP standards, we peer based on the IP address of the BGP neighbors&#8217; local interfaces. However, that brings up some challenging permutations. When peering is done via the external network of a BGP edge router within an AS, a BGP edge router will not change the next hop of for the route from the advertising AS when it receives it but rather will pass it on unchanged to its IBGP neighbors.</p>
<p>If the external network connecting the two AS&#8217;s is not advertised into the IGP of the receiving AS, the next hop of the route will presumably be unreachable.</p>
<p><span id="more-456"></span></p>
<p><strong>So this presents us with a few options&#8230;</strong></p>
<ol>
<li>We can redistribute the external network into the IGP.</li>
<li>We can advertise the external network into the IGP (presumably as a passive interface).</li>
<li>We can configure the next hop self parameter on the edge router on the receiving AS&#8217;s internal neighbor relationships.</li>
</ol>
<p>Being aware of all three methods is important to understanding the options available to you should you need to configure &#8220;RFC-compliant&#8221; BGP. My personal preference is setting the next-hop-self parameter on each of the edge router&#8217;s IBGP connections, thus ensuring a reachable next hop without increasing the size of the IGP table. It is not necessarily going to maintain the most optimal routing path to exit the AS (due to the default BGP path selection process being inferior to that of an IGP) but it consistently works to establish connectivity.</p>
<p><strong>What is your preference? </strong>I welcome your comments!</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="medium" count="1" href="http://blog.ipexpert.com/2009/01/05/external-bgp-links-and-next-hop-self/"></g:plusone></div><div style="text-align:left; margin: 0px 0px 0px 0px;" ><a href="http://blog.ipexpert.com/2009/01/05/external-bgp-links-and-next-hop-self/?pfstyle=wp" style="text-decoration: none; outline: none; color: #990000;"><img class="printfriendly" src="http://cdn.printfriendly.com/pf-icon.gif" alt="Print Friendly"/><span style="font-size:14px; margin-left:3px; color: #990000;">Print Friendly</span></a></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ipexpert.com/2009/01/05/external-bgp-links-and-next-hop-self/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Why CCIE Service Provider???</title>
		<link>http://blog.ipexpert.com/2008/11/07/why-ccie-service-provider/</link>
		<comments>http://blog.ipexpert.com/2008/11/07/why-ccie-service-provider/#comments</comments>
		<pubDate>Fri, 07 Nov 2008 14:49:00 +0000</pubDate>
		<dc:creator>Jared Scrivener</dc:creator>
				<category><![CDATA[Ask the Expert]]></category>
		<category><![CDATA[CCIE]]></category>
		<category><![CDATA[Service Provider]]></category>
		<category><![CDATA[Strategy]]></category>
		<category><![CDATA[BGP]]></category>
		<category><![CDATA[jared]]></category>
		<category><![CDATA[MPLS]]></category>
		<category><![CDATA[scrivener]]></category>
		<category><![CDATA[sp]]></category>
		<category><![CDATA[VPN]]></category>

		<guid isPermaLink="false">http://ipexpert.ccieblog.com/?p=247</guid>
		<description><![CDATA[The Service Provider CCIE track offers a number of enticements to CCIE candidates. However, it is one of the most overlooked tracks, comprising only about 6% of CCIE numbers (about half as many as Security) and only 2% of R&#38;S CCIEs undertake it successfully. Looking at these numbers, I find that quite an oddity. Obviously, [...]]]></description>
			<content:encoded><![CDATA[<p>The Service Provider CCIE track offers a number of enticements to CCIE candidates. However, it is one of the most overlooked tracks, comprising only about 6% of CCIE numbers (about half as many as Security) and only 2% of R&amp;S CCIEs undertake it successfully.</p>
<p>Looking at these numbers, I find that quite an oddity. Obviously, R&amp;S is by far the most popular track and, like most people, it was the first that I undertook. By far the greatest intellectual achievement of my lifetime was obtaining my first CCIE. However, having done so like many people with the study bug, it is worth considering what to study next.</p>
<p><span id="more-247"></span></p>
<p>I observe two different paths to a SP CCIE. The first is for those who choose to take it as their first track (a bit over half of SP candidates). This category is presumably comprised of students who work with SP technologies on a daily basis &#8211; BGP, MPLS and MPLS VPNs. For this class of student, it seems like the most obvious choice to take as the technologies of the SP track are fairly well focused on building and establishing SP networks with intense protocol dependencies. For those who take this path, the rationale is clear.</p>
<p>The second path, the path that I took and that I&#8217;d like to advocate to many others is for R&amp;S CCIEs to expand their level of knowledge and, in my opinion, complete what you started by fully demonstrating your expertise with Cisco routers in any environment.</p>
<p>The R&amp;S track requires you to learn many IGP routing protocols, but in recent times it leaves you with missing a few key technologies required to move from the enterprise to the service provider space. How many job advertisements request an R&amp;S CCIE but also specify MPLS and BGP expertise as well? From my own observations, quite a few.</p>
<p>Having learned to study and achieve your R&amp;S goals, the incremental level of study and knowledge required to obtain the SP CCIE is relatively small. The additional technologies can be learned relatively easily by virtue of analogy and be slotting them into the mental framework you have already established in learning R&amp;S.</p>
<p>Learning ATM is simple by analogy with Frame Relay. Learning IS-IS is straightforward by contrast with OSPF and the ideas of IPv6 (with respect to multiple protocols running over a network as CLNS does). BGP, which is covered well in the R&amp;S track, needs only to be expanded on for other protocols to meet the SP requirements and, after having done so, certain vagaries that were enough to achieve R&amp;S status become clearer.</p>
<p>Which leaves MPLS, VPNs and MPLS Traffic Engineering. These technologies, some of the cleverest innovations in the recent history of networking are the technologies of the future both in service provider networks and large enterprises. Put simply, MPLS takes a whole set of discontiguous routes (or other FECs) and labels them, thus reducing the overhead on routers of routing table lookups and switches the labels throughout the network. Traffic Engineering gives you the ability integrate QOS requirements into the MPLS process to fully control your network.</p>
<p>To me, understanding routers and switches was the goal of my study for R&amp;S. Having completed the R&amp;S CCIE, it irked me that whilst in a sense I had finished, the more I knew, the more I knew I didn&#8217;t know! Service Provider provided, in many ways, a feeling of completion to my studies.</p>
<p>For those of you who have or are about to complete your R&amp;S track, I urge you to consider SP as your second. Voice is another beast entirely (one that I&#8217;m still in the process of attaining) and Security builds on R&amp;S in a different manner by applying the protocols on a different set of platforms (amongst other things).</p>
<p>SP is unique in that, with R&amp;S in hand, you already know half of what you need to succeed and on learning the final half you gain a better perspective around both your enterprise and service provider technological understanding. If you are looking to distinguish yourself from others, this is the best return on investment in terms of time required to study to achieve a second CCIE of any of the options available.</p>
<p>In my opinion, when you achieve it, that takes you from one of 16000 R&amp;S CCIEs without recognition of that knowledge, to one of the 440 with it. Surely, that must be worth something, be it intellectual satisfaction or remunerative opportunities.</p>
<p><strong>What are your thoughts?</strong></p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="medium" count="1" href="http://blog.ipexpert.com/2008/11/07/why-ccie-service-provider/"></g:plusone></div><div style="text-align:left; margin: 0px 0px 0px 0px;" ><a href="http://blog.ipexpert.com/2008/11/07/why-ccie-service-provider/?pfstyle=wp" style="text-decoration: none; outline: none; color: #990000;"><img class="printfriendly" src="http://cdn.printfriendly.com/pf-icon.gif" alt="Print Friendly"/><span style="font-size:14px; margin-left:3px; color: #990000;">Print Friendly</span></a></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ipexpert.com/2008/11/07/why-ccie-service-provider/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
	</channel>
</rss>

