<?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>Blog sur les technologies réseau et sécurité &#187; BGP</title>
	<atom:link href="http://bmigette.fr/tag/bgp/feed/" rel="self" type="application/rss+xml" />
	<link>http://bmigette.fr</link>
	<description>Blog de Bastien Migette sur les technologies réseau et sécurité, particulièrement cisco.</description>
	<lastBuildDate>Mon, 21 Nov 2011 22:12:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>ISCW Lab: MPLS VPNs, BGP, PPPoE, PPPoA, IPSec Site To Site/Remote access,&#8230;</title>
		<link>http://bmigette.fr/2009/12/13/iscw-lab-mpls-vpns-bgp-pppoe-pppoa-ipsec-site-to-siteremote-access/</link>
		<comments>http://bmigette.fr/2009/12/13/iscw-lab-mpls-vpns-bgp-pppoe-pppoa-ipsec-site-to-siteremote-access/#comments</comments>
		<pubDate>Sun, 13 Dec 2009 17:20:39 +0000</pubDate>
		<dc:creator>Bastien Migette</dc:creator>
				<category><![CDATA[CCNP]]></category>
		<category><![CDATA[ISCW]]></category>
		<category><![CDATA[Réseau Avancé]]></category>
		<category><![CDATA[BGP]]></category>
		<category><![CDATA[IPSec Site To Site]]></category>
		<category><![CDATA[MPLS]]></category>
		<category><![CDATA[PPPoA]]></category>
		<category><![CDATA[PPPoE]]></category>
		<category><![CDATA[Remote access]]></category>
		<category><![CDATA[VPN]]></category>
		<category><![CDATA[VRF]]></category>

		<guid isPermaLink="false">http://bmigette.fr/?p=399</guid>
		<description><![CDATA[PE2(config)#ip route vrf VRF1 0.0.0.0 0.0.0.0 10.254.0.2 global PE2(config)#router OSPF 1 vrf VRF1 PE2(config-router)#default-information originate PE2(config-router)#exit PE2(config)# Comme vu sur le précédent billet, un bon gros lab ISCW, et même plus (partie FAI abordée pour PPPoX), je vous fournis une archive avec dynagen et les fichiers de configs de base (juste les IPs(sauf pour PPPoX, [...]]]></description>
			<content:encoded><![CDATA[<div style="overflow: hidden; position: absolute; left: -10000px; top: 6681px; width: 1px; height: 1px;">PE2(config)#ip route vrf VRF1 0.0.0.0 0.0.0.0 10.254.0.2 global</div>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 6681px; width: 1px; height: 1px;">PE2(config)#router OSPF 1 vrf VRF1</div>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 6681px; width: 1px; height: 1px;">PE2(config-router)#default-information originate</div>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 6681px; width: 1px; height: 1px;">PE2(config-router)#exit</div>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 6681px; width: 1px; height: 1px;">PE2(config)#</div>
<p>Comme vu sur le précédent billet, un bon gros lab ISCW, et même plus (partie FAI abordée pour PPPoX), je vous fournis une archive avec dynagen et les fichiers de configs de base (juste les IPs(sauf pour PPPoX, on y reviendra, et les hostnames, on va pas s&#8217;étaler dessus), pour attaquer la suite directement.</p>
<p style="text-align: center;">
<div id="attachment_442" class="wp-caption aligncenter" style="width: 310px"><a href="http://bmigette.fr/wp-content/uploads/2009/12/topo.png"><img class="size-medium wp-image-442" title="Topologie" src="http://bmigette.fr/wp-content/uploads/2009/12/topo-300x259.png" alt="Topologie" width="300" height="259" /></a><p class="wp-caption-text">Topologie</p></div>
<p>Topologie format visio 2007: <a href="http://bmigette.fr/wp-content/uploads/2009/12/topo.vsd">topo</a></p>
<h2><span id="more-399"></span>Informations introductives</h2>
<p>A noter que dans la topologie dynagen, j&#8217;utilise 4 hyperviseurs locaux pour tirer partie de mon quadcore, à vous de voir si vous voulez le modifier, mais en tous les cas il n&#8217;est pas gênant d&#8217;avoir plusieurs process dynamips même avec 1 ou deux coeurs (et sur le billet précédent, j&#8217;étais sur le laptop, donc dualcore <img src='http://bmigette.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ).  pour lancer les hyperviseurs, j&#8217;utilise la commande (en root &#8211; sudo su)</p>
<pre>dynamips -H 7200 &amp; dynamips -H 7201 &amp; dynamips -H 7202 &amp; dynamips -H 7203</pre>
<p>Note: pour importer les configs dans les routeurs, tapez, dans la console dynagen, import /all ./configs (il faut bien entendu que les fichiers de configs soient dans le dossier configs du fichier de topo).  Le fichier .net est ici: <a href="http://bmigette.fr/wp-content/uploads/2009/12/topo.net">topo.net</a> Les configurations initiales ici: <a href="http://bmigette.fr/wp-content/uploads/2009/12/configs_initial.tar.gz">configs_initial.tar</a></p>
<p>Je fournirais les configs des différents équipements aux diverses étapes de l&#8217;article, les configurations finales étant disponible dans la conclusion.</p>
<h2>Configuration du backbone MPLS</h2>
<p>cette partie (ainsi que certaines des parties suivantes) ne change pas vraiment de ce que j&#8217;ai déjà abordé dans <a href="http://bmigette.fr/2008/12/10/mpls-vrfs-bgp-pour-sammuser/" target="_blank">mon article sur les MPLS VPNs</a> sauf qu&#8217;on mets du ISIS pour l&#8217;IGP (ça me permets de réviser pour BSCI <img src='http://bmigette.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ).  Bon pour faire très simple (surtout que j&#8217;ai pas encore taffé à fond IS-IS, pas bien!, mais ça viendra&#8230;):</p>
<ul>
<li>IS-IS = Intermediate System to Intermediate System (router to router quoi)</li>
<li>Séparation des networks en level (comparable aux aires OSPF), en gros, un routeur level 1 communique avec les routeur level 1, et un routeur level 2 avec un routeur level 2, et il y a des level 1 + 2 pour le routage entre aires. Les aires Level 1 sont destinées au routage interne, et les Level 2 au routage externe (à l&#8217;aire)</li>
<li>Les areas sont définies dans l&#8217;adresse NSAP, ce qui est l&#8217;adresse du protocole CLNS, qui est en fait le protocole de niveau 3 du modèle OSI (à ce propos, j&#8217;ai appris récément qu&#8217;en fait si OSI avait été implémenté, mais que TCP/IP l&#8217;ayant devancé et étant rapidement devenu populaire, OSI à été mis un peu de coté). Pour revenir à NSAP, c&#8217;est définit à un niveau global sur le routeur, pas interfaces par interfaces comme c&#8217;est le cas avec une adresse IP.</li>
<li>Voici la structure d&#8217;une adresse NSAP area.system_id.NSEL<br />
-area, de 1 à 13 octets (il est courrant d&#8217;en utiliser 3), représente l&#8217;area. On l&#8217;écriras 49.XXXX (49 signifiant l&#8217;adressage privé).<br />
-System ID, 6 octets: l&#8217;identifiant du système dans son aire, on utilise souvent la mac ou une IP de loopback précédée de 0. Ici, pour faire simple, je vais utiliser 0000.0000.00XX ou XX est l&#8217;ID définit dans le schéma).<br />
-NSEL, 1 octet = NSAP Selector : Identifie le processus avec lequel on veux communiquer, pour le routage, c&#8217;est toujours 00.<br />
Exemple de NSSAP pour LSR1: 49.0001.0000.0000.0010.00</li>
<li>la configuration se fait de la sorte:
<pre>router isis
net NSAP !replacer par le NSAP du router, net != network
!net = Network Entity Title = NSAP du router pour le routage (NSEL = 00)
is-type level-1|level-1-2 | level-2-only</pre>
<p>puis</p>
<pre>interface X/X
ip router isis</pre>
</li>
</ul>
<p><strong><span style="color: #ff0000;">Voilà les configs sur les routeurs LSR1 et PEx : NE PAS OUBLIER DE ROUTER LES LOOPBACK, sans quoi LDP ne pourrait creer d&#8217;adjacence avec ses voisins (si il ne connait pas ses loopbacks)</span></strong></p>
<p>LSR1:</p>
<pre>LSR1(config)#router ISIS
LSR1(config-router)#net 49.0001.0000.0000.0010.00
LSR1(config-router)#is-type level-1
LSR1(config-router)#interface F0/0
LSR1(config-if)#ip router ISIS
LSR1(config-if)#int F0/1
LSR1(config-if)#ip router ISIS
LSR1(config-if)#int F1/0
LSR1(config-if)#ip router ISIS
LSR1(config-if)#int F1/1
LSR1(config-if)#ip router ISIS
LSR1(config-if)#int loop0
LSR1(config-if)#ip router isis
LSR1(config-if)#exit</pre>
<p>et pour les PE (on ne mets pas dans le routage le réseau qui sera dans la VRF, <span style="color: #ff0000;"><strong>à noter que je l&#8217;ai fait sans faire gaffe, et que cela permets d&#8217;apprendre les routes des VRFs dans la table globale du routeur !!!!</strong></span>) Pour PE4, mettre le réseau qui relie vers BBR1, sans quoi, vu que son IP sera en nexthop pour les réseaux de l&#8217;AS 1001 appris via BGP, les routeurs de l&#8217;AS 1000 ne pourraient communiquer.</p>
<pre>LSR1(config)#router ISIS
LSR1(config-router)#net 49.0001.0000.0000.00<strong><span style="color: #ff0000;">XX</span></strong>.00
LSR1(config-router)#is-type level-1
LSR1(config-router)#interface F0/0
LSR1(config-if)#ip router ISIS
LSR1(config-if)#int loop0
LSR1(config-if)#ip router isis</pre>
<p>Ce qui à la fin nous donne (SNPA = Adresse L2 OSI (MAC, DLCI, &#8230;), et show clns car clns transporte ISIS, mais ça on l&#8217;a déjà dit&#8230;):</p>
<pre>LSR1#show clns neighbors 

System Id      Interface   SNPA                State  Holdtime  Type Protocol
PE3            Fa1/0       cc03.0bf4.0000      Up     8         L1   IS-IS
PE4            Fa1/1       cc04.0bf4.0000      Up     9         L1   IS-IS
PE2            Fa0/1       cc02.0be6.0000      Up     7         L1   IS-IS
PE1            Fa0/0       cc01.0be6.0000      Up     9         L1   IS-IS</pre>
<p>Et (à ce moment j&#8217;avais oublié les loopbacks dans ISIS)</p>
<pre>PE1#sh ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
 D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
 N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
 E1 - OSPF external type 1, E2 - OSPF external type 2
 i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
 ia - IS-IS inter area, * - candidate default, U - per-user static route
 o - ODR, P - periodic downloaded static route

Gateway of last resort is not set

 10.0.0.0/8 is variably subnetted, 6 subnets, 2 masks
C       10.1.0.11/32 is directly connected, Loopback0
i L1    10.0.2.0/30 [115/20] via 10.0.0.1, FastEthernet0/0
i L1    10.0.3.0/30 [115/20] via 10.0.0.1, FastEthernet0/0
C       10.0.0.0/30 is directly connected, FastEthernet0/0
i L1    10.0.1.0/30 [115/20] via 10.0.0.1, FastEthernet0/0
i L1    10.254.0.0/30 [115/30] via 10.0.0.1, FastEthernet0/0
C       192.168.0.0 is directly connected, FastEthernet0/1</pre>
<p>Et c&#8217;est tout ! la commande ip router isis sur les interfaces à permis d&#8217;indiquer que l&#8217;on voulait inclure les routes IP de l&#8217;interface en question dans ISIS. On aurait pu rajouter du redistribute xxx dans le mode router isis global, mais on s&#8217;écarte un peu du sujet. Une petite vérif pour la route et tout roule:</p>
<pre>PE1#ping 10.0.0.2

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.0.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/2/4 ms
PE1#ping 10.0.1.2

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.1.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/24/48 ms
PE1#ping 10.0.2.2

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.2.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 12/32/76 ms
PE1#ping 10.0.3.2

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.3.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 16/20/32 ms
PE1#</pre>
<p>Voilà, mon routage Interne dans le backbone MPLS est OKAY, mais, une petite minute, est-ce un backbone MPLS ? Bah non, on a pas encore mis le MPLS <img src='http://bmigette.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />   Je vous renvoi à mon article sur les MPLS VPNs pour le détail de la config MPLS, mais voici comment ça fonctionne:  LSR1:</p>
<pre>LSR1(config)#mpls ldp advertise-labels
LSR1(config)#mpls ldp router-id loop 0
LSR1(config)#int f0/0
LSR1(config-if)#mpls ip
LSR1(config-if)#int f0/1
LSR1(config-if)#mpls ip
LSR1(config-if)#int f1/0
LSR1(config-if)#mpls ip
LSR1(config-if)#int f1/1
LSR1(config-if)#mpls ip
LSR1(config-if)#exit</pre>
<p>puis même chose sur les PE &#8230; Uniquement sur les F0/0 (reliées au LSR1), on va pas envoyer du MPLS sur le client.</p>
<pre>LSR1#sh mpls ldp neighbor | i IP
 FastEthernet0/1, Src IP addr: 10.0.1.2
 FastEthernet1/0, Src IP addr: 10.0.2.2
 FastEthernet0/0, Src IP addr: 10.0.0.2
 FastEthernet1/1, Src IP addr: 10.0.3.2
LSR1#sh mpls forwarding-table
Local  Outgoing    Prefix            Bytes tag  Outgoing   Next Hop
tag    tag or VC   or Tunnel Id      switched   interface
16     Pop tag     10.254.0.0/30     0          Fa1/1      10.0.3.2
17     Pop tag     192.168.0.8/30    0          Fa1/0      10.0.2.2
18     Pop tag     192.168.0.0/30    0          Fa0/0      10.0.0.2
19     Pop tag     192.168.0.4/30    0          Fa0/1      10.0.1.2
20     Pop tag     10.1.0.12/32      0          Fa0/1      10.0.1.2
21     Pop tag     10.1.0.11/32      0          Fa0/0      10.0.0.2
22     Pop tag     10.1.0.13/32      0          Fa1/0      10.0.2.2
23     Pop tag     10.1.0.14/32      0          Fa1/1      10.0.3.2</pre>
<p>Voilà tout est Ok, on fera un petit ping tout de même entre deux PE pour s&#8217;en assurer, mais le backbone est OK.</p>
<h2>Création de la VRF et routage BGP</h2>
<p>bon, vous vous rappelez des VRFs ? pour ceux qui n&#8217;ont pas lu mon article précédent, ça permets de faire une table de routage virtuelle pour un client, qui est donc indépendante de la table globale du routeur, et qui ce qui est génial c&#8217;est que l&#8217;on peux définir une route distinguisher pour identifier cette VRFs et transformer ses routes IPv4 en routes VPNv4 via l&#8217;utilisation de BGP en mode multi protocoles (MP-BGP) que l&#8217;ont peut transporter au sein du backbone et redistribuer ces routes dans la VRF d&#8217;un router distant, ce qui permets de faire un VPN en utilisant MPLS (chaque VRF est en fait double labélisée, et un label correspond à la VRF). Note: On peux faire des VRFs lite qui utilisent, au lieu des labels MPLS, un tag VLAN, l&#8217;avantage c&#8217;est qu&#8217;on peux le faire du des 3550 et pas besoin de MPLS.  La VRF sera à créer sur les PE 1, 2 et 3, le PE 4 étant relié à un FAI (on avait pas vu le routage eBGP dans mon précédent article, on va corriger cela, et on va même mettre des route reflector <img src='http://bmigette.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  )  Pour créer la VRF on utilisera ces commandes:</p>
<pre>ip vrf VRF1
rd 1000:1
route-target both 1000:1
interface F0/1
ip vrf forwarding VRF1 ! et la ça fait sauter l'IP
ip address 192.168.0.<strong><span style="color: #ff0000;">X</span></strong> 255.255.255.252
exit</pre>
<p>Ensuite, on active BGP. Ici, on vas utiliser la fonction de route reflector, en gros, au lieux que tous les routeurs soient voisins iBGP entre eux, ils seront voisins avec PE4 (qui fera aussi de l&#8217;eBGP), qui centralisera les routes et les &laquo;&nbsp;réfléchira&nbsp;&raquo;, ce qui veux dire les renverra à ses autres voisins.  On notera que LSR1 n&#8217;utilisera pas BGP (il faut simplement transiter le trafic au sein de l&#8217;AS).  pour activer BGP (avec le support des VRFs, soient des adresses VPNv4), dans un premier temps au sein de l&#8217;AS (on verra eBGP après):  Sur PE 1,2,3:</p>
<pre>router bgp 1000
neighbor 10.1.0.14 remote-as 1000
neighbor 10.1.0.14 update-source loop0
address-family vpnv4
neighbor 10.1.0.14 activate
neighbor 10.1.0.14 send-community both</pre>
<p>sur PE4</p>
<pre>router bgp 1000
neighbor 10.1.0.11 remote-as 1000
neighbor 10.1.0.11 update-source loop0
neighbor 10.1.0.11 <span style="color: #ff0000;"><strong>route-reflector-client</strong></span>
address-family vpnv4
neighbor 10.1.0.11 activate
neighbor 10.1.0.11 send-community both
neighbor 10.1.0.11 <span style="color: #ff0000;"><strong>route-reflector-client</strong></span>
exit
neighbor 10.1.0.12 remote-as 1000
neighbor 10.1.0.12 update-source loop0
neighbor 10.1.0.12 <span style="color: #ff0000;"><strong>route-reflector-client</strong></span>
address-family vpnv4
neighbor 10.1.0.12 activate
neighbor 10.1.0.12 send-community both
neighbor 10.1.0.12 <span style="color: #ff0000;"><strong>route-reflector-client</strong></span>
exit
neighbor 10.1.0.13 remote-as 1000
neighbor 10.1.0.13 update-source loop0
neighbor 10.1.0.13 <span style="color: #ff0000;"><strong>route-reflector-client</strong></span>
address-family vpnv4
neighbor 10.1.0.13 activate
neighbor 10.1.0.13 send-community both
neighbor 10.1.0.13 <span style="color: #ff0000;"><strong>route-reflector-client</strong></span>
exit</pre>
<p>Il faut maintenant activer ospf sur les PE 1,2 et 3 pour la VRF VRF1. Ceci se fait de la sorte:</p>
<pre>PE1(config)#router ospf 1 vrf VRF1
PE1(config-router)#network 192.168.0.0 0.0.0.255 area 0 ! j'ai mis le subnet /24 pour pouvoir faire copier/coller entre PE</pre>
<p>et sur les routeurs RMO1, 2, ainsi que sur RTRDT, config classique:</p>
<pre>RMO2(config)#router ospf 1
RMO2(config-router)#network 192.168.0.0 0.0.0.255 area 0 !idem pour les masques
RMO2(config-router)#network 10.0.0.0 0.255.255.255 area 0 !idem pour les masques
RMO2(config-router)#exit</pre>
<p>petite vérif pour la route:</p>
<pre>PE2#sh ip route <strong><span style="color: #ff0000;">vrf VRF1</span></strong>

Routing Table: VRF1
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
 D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
 N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
 E1 - OSPF external type 1, E2 - OSPF external type 2
 i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
 ia - IS-IS inter area, * - candidate default, U - per-user static route
 o - ODR, P - periodic downloaded static route

Gateway of last resort is not set

 10.0.0.0/32 is subnetted, 1 subnets
<strong><span style="color: #ff0000;">O       10.1.0.1 [110/2] via 192.168.0.6, 00:04:32, FastEthernet0/1</span></strong>
 192.168.0.0/30 is subnetted, 1 subnets
C       192.168.0.4 is directly connected, FastEthernet0/1</pre>
<p>Et maintenant on redistribue OSPF dans BGP, et BGP dans ospf <img src='http://bmigette.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />   Config sur les PE 1,2 et 3:</p>
<pre>PE2(config)#router ospf 1 vrf VRF1
PE2(config-router)#redistribute BGP 1000 subnets
PE2(config-router)#exit
PE2(config)#router bgp 1000
PE2(config-router)#address-family ipv4 vrf VRF1
PE2(config-router-af)#redistribute ospf 1
PE2(config-router-af)#exit
PE2(config-router)#exit</pre>
<p>vérifications:</p>
<pre><span style="color: #ff0000;"><strong>PE4#</strong></span>sh bgp vpnv4 unicast all
BGP table version is 6, local router ID is 10.1.0.14
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
Route Distinguisher: 1000:1
*&gt;i10.1.0.1/32      10.1.0.12                2    100      0 ?
*&gt;i10.2.0.1/32      10.1.0.13                2    100      0 ?
*&gt;i192.168.0.0/30   10.1.0.11                0    100      0 ?
*&gt;i192.168.0.4/30   10.1.0.12                0    100      0 ?
*&gt;i192.168.0.8/30   10.1.0.13                0    100      0 ?
PE4#
<span style="color: #ff0000;"><strong>PE2#</strong></span>sh ip route vrf VRF1

Routing Table: VRF1
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
 D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
 N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
 E1 - OSPF external type 1, E2 - OSPF external type 2
 i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
 ia - IS-IS inter area, * - candidate default, U - per-user static route
 o - ODR, P - periodic downloaded static route

Gateway of last resort is not set

 10.0.0.0/32 is subnetted, 2 subnets
B       10.2.0.1 [200/2] via 10.1.0.13, 00:01:45
O       10.1.0.1 [110/2] via 192.168.0.6, 00:03:11, FastEthernet0/1
 192.168.0.0/30 is subnetted, 3 subnets
B       192.168.0.8 [200/0] via 10.1.0.13, 00:01:45
B       192.168.0.0 [200/0] via 10.1.0.11, 00:01:45
C       192.168.0.4 is directly connected, FastEthernet0/1
<span style="color: #ff0000;"><strong>RMO1#</strong></span>ping 10.2.0.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.2.0.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 36/48/68 ms</pre>
<p>Voilà le le backbone MPLS et le VPN MPLS sont OK, on va attaquer la partie eBGP et la redistribution de route statique pour l&#8217;accès internet dans une VRF <img src='http://bmigette.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />   une petite archive avec les configs jusqu&#8217;a présent: <a href="http://bmigette.fr/wp-content/uploads/2009/12/configs_backbone.tar.gz">configs_backbone.tar</a></p>
<h2>Routage internet eBGP</h2>
<p>Tout d&#8217;abord, en regardant la topologie, on voit que le routeur du datacenter a déjà une connexion internet, le FAI fournissant le service de VPN MPLS ne s&#8217;occupera pas d&#8217;internet pour ce routeur. Pour les autres (RMO1 et RMO2), le FAI va fournir internet, internet étant ici représenté comme l&#8217;AS 1001, bref, ce qui est important c&#8217;est de voir les options dont l&#8217;ont dispose pour amener une connectivité internet dans une VRF:</p>
<ul>
<li>Copier la table de routage internet globale dans une VRF : Idiot, qui va s&#8217;ammuser à recopier plusieurs fois les quelques 150 000 Routes internet dans ses VRFs ?</li>
<li>Avoir deux interfaces vers le FAI : Une dans une VRF, une dans la table de routage : Implique d&#8217;avoir 2 liens (possibilité d&#8217;utiliser des liens virtuels), et que le FAI à dans sa table de routage globale les routes vers internet, ce qui n&#8217;est pas toujours souhaité pour des raisons de sécurités</li>
<li>Route statique vers la table globale:  cela implique aussi que le FAI à mis sa table de routage internet dans sa table de routage globale. Cela est possible via la commande ip route vrf {vrf} {net}  {mask} global (voir ici:  <a href="http://www.cisco.com/en/US/tech/tk436/tk428/technologies_configuration_example09186a00801445fb.shtml" target="_blank">Internet Access from an MPLS VPN Using a Global Routing Table</a></li>
<li>Utiliser la connexion internet du datacenter : On aurait pu, mais si elle tombe, plus personne n&#8217;a le net&#8230;</li>
<li>chaque site distant à une connexion internet séparée : pourquoi pas&#8230;</li>
<li>Utiliser une VRF dédiée pour internet, et redistribuer ses routes dans la VRF du client: Bonne pratique d&#8217;un point de vue sécurité, car le routage internet est séparé du routage interne du FAI, cependant, si la VRF internet contient toutes les routes internet, cela peut poser des problèmes&#8230; Cependant, la table de routage internet peux inclure une route par défaut, et l&#8217;on peut filtrer les routes redistribuée d&#8217;une VRF à une autre. Par contre, il faut prendre en compte que les routes d&#8217;une VRFs utilisent beaucoup plus de mémoire qu&#8217;une route dans la table globale&#8230; A noter aussi dans ce cas le routeur du FAI est vu comme le routeur d&#8217;un client (customer edge), mais qu&#8217;il est possible d&#8217;établir un peering BGP avec un router dans une VRF.</li>
<li>&#8230; il y a pas mal d&#8217;autres scénarios possibles, viennent ensuite les problématique du NAT, qui le fait ? Le client ? dans ce cas il faut une IP publique par site client&#8230; Le FAI ? dans ce cas il doit gérer les translations de port du client etc, cela peut être un peut lourd&#8230;</li>
</ul>
<p>un peu de lecture:</p>
<p><a href="http://fengnet.com/book/MPLS%20VPN%20Security/ch04lev1sec1.html">http://fengnet.com/book/MPLS%20VPN%20Security/ch04lev1sec1.html</a></p>
<p><a href="http://www.cisco.com/en/US/tech/tk436/tk428/technologies_white_paper09186a00801281f1.shtml">http://www.cisco.com/en/US/tech/tk436/tk428/technologies_white_paper09186a00801281f1.shtml</a></p>
<p>Vous l&#8217;aurez compris, tout cela sont des notions de design MPLS, et il y a des bouquins de plusieurs centaines de pages la dessus, et bien que cela soit très intéressant, nous allons ici faire, dans la mesure du possible, ce qui est le plus simple.  Ce que l&#8217;on va donc faire ici, c&#8217;est nater au niveau du client, en utilisant une route statique vers la table globale au niveau du PE. Cela est un peu subtile, car il faut redistribuer les routes des PE via BGP (sur PE4, qui va faire un peering avec le router de l&#8217;AS 1001), puis faire des routes statiques que l&#8217;on va inclure dans l&#8217;IGP qui auront 2 fonctions: Permettre aux routeurs du backbone comment joindre ces IPs, car ils ne sont pas dans la bonne VRF vous noterez qu&#8217;il faut spécifier manuellement l&#8217;interface <span style="color: #ff0000;"><strong>et</strong></span> le next-hop pour forcer à passer dans une VRF.  Je vais affecter des IP publiques. Sur PE1, cela donnerai ceci (192.0.0.2 serait l&#8217;IP publique affectée au routeur, on pourrais aussi faire la même chose avec ses IPs privées, mais on ne va pas envoyer d&#8217;ip privées via BGP à un autre FAI&#8230;):</p>
<pre>ip route 192.0.0.2 255.255.255.255 F0/1 192.168.0.2
router ISIS
redistribute static ip level-1</pre>
<p>Le principe est de router ces IPs publiques dans le backbone via ISIS et de les réinjecter dans BGP via la redistribution depuis ISIS avec une route map.  Première étape, configuration eBGP: même chose qu&#8217;iBGP, mais avec un remote-as différent (par contre on échangeras pas de routes vpnv4)  sur PE4 (on fait une route map pour ne réinjecter que les IPs publiques, pas les IPs du subnet backbone):</p>
<pre>PE4(config)#ip access-list sta PUBIPs
PE4(config-std-nacl)#permit host 192.0.0.2
PE4(config-std-nacl)#permit host 192.0.0.6
PE4(config-std-nacl)#permit host 192.0.0.10
PE4(config-std-nacl)#exit
PE4(config)#route-map RMPUBIPs permit 10
PE4(config-route-map)#match ip address PUBIPs
PE4(config-route-map)#set metric 100
PE4(config-route-map)#exit
PE4(config)#router bgp 1000
PE4(config-router)#neighbor 10.254.0.2 remote-as 1001
PE4(config-router)#redistribute isis level-1 route-map RMPUBIPs</pre>
<p>et sur BBR (ici juste un redistribute connected)</p>
<pre>BBR1(config)#router bgp 1001
BBR1(config-router)#neighbor 10.254.0.1 remote-as 1000
BBR1(config-router)#redistribute connected metric 100</pre>
<p>vérifications</p>
<pre><span style="color: #ff0000;"><strong>PE1#</strong></span>sh ip route 100.0.0.0
Routing entry for 100.0.0.0/30, 3 known subnets

B       100.0.0.4 [200/100] via 10.254.0.2, 00:06:20
B       100.0.0.0 [200/100] via 10.254.0.2, 00:06:20
B       100.0.0.12 [200/100] via 10.254.0.2, 00:06:20
<strong><span style="color: #ff0000;">BBR1#</span></strong>sh ip route 192.0.0.0
Routing entry for 192.0.0.0/32, 3 known subnets

B       192.0.0.2 [20/100] via 10.254.0.1, 00:07:46
B       192.0.0.6 [20/100] via 10.254.0.1, 00:07:47
B       192.0.0.10 [20/100] via 10.254.0.1, 00:07:47
<span style="color: #ff0000;"><strong>BBR1#</strong></span>deb ip icmp
<strong><span style="color: #ff0000;">PE1#</span></strong>ping ip 100.0.0.1
ICMP packet debugging is on
<span style="color: #ff0000;"><strong>BBR1#</strong></span>
*Dec 17 00:01:24.083: ICMP: echo reply sent, src 100.0.0.1, dst <span style="text-decoration: underline;">10.0.0.2</span></pre>
<p>sur l&#8217;exemple de ping au dessus, la réponse ne pourra arriver à PE1, car celui-ci utilise son IP privée que l&#8217;on a délibérément pas routée dans BGP  Maintenant, on va créer une route statique par défaut dans la vrf VRF1  que l&#8217;on va faire pointer sur la passerelle internet (on va utiliser l&#8217;IP de BBR1), en indiquant que cette passerelle se trouve dans la table globale. Cela ce fait via l&#8217;utilisation du mot clé &laquo;&nbsp;global&nbsp;&raquo; dans la commande ip route. Ensuite, on va redistribuer cette route par défaut via OSPF. Note: On ne va faire cette manip que sur PE 2 et 3, car le router RTRDT dispose d&#8217;une connexion internet externe.</p>
<pre>PE2(config)#ip route vrf VRF1 0.0.0.0 0.0.0.0 10.254.0.2 global
PE2(config)#router OSPF 1 vrf VRF1
PE2(config-router)#default-information originate
PE2(config-router)#exit
PE2(config)#</pre>
<p>petite vérification:  <span style="color: #ff0000;"><strong> </strong></span></p>
<pre><strong><span style="color: #ff0000;">RMO1#</span></strong>sh ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route

Gateway of last resort is 192.168.0.5 to network 0.0.0.0

     10.0.0.0/8 is variably subnetted, 3 subnets, 2 masks
O IA    10.2.0.1/32 [110/3] via 192.168.0.5, 00:02:42, FastEthernet0/0
C       10.1.0.0/16 is directly connected, Loopback0
O IA    10.0.0.1/32 [110/3] via 192.168.0.5, 00:02:42, FastEthernet0/0
     192.168.0.0/30 is subnetted, 3 subnets
O IA    192.168.0.8 [110/2] via 192.168.0.5, 00:02:42, FastEthernet0/0
O IA    192.168.0.0 [110/2] via 192.168.0.5, 00:02:42, FastEthernet0/0
C       192.168.0.4 is directly connected, FastEthernet0/0
<span style="color: #ff0000;"><strong>O*E2 0.0.0.0/0 [110/1] via 192.168.0.5, 00:01:40, FastEthernet0/0</strong></span>
<span style="color: #ff0000;"><strong>Dummy1#</strong></span>deb ip icmp
ICMP packet debugging is on
<strong><span style="color: #ff0000;">RMO1#</span></strong>ping 100.0.0.14

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 100.0.0.14, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)
<strong><span style="color: #ff0000;">Dummy1#</span></strong>
*Mar  1 00:06:07.207: ICMP: echo reply sent, src 100.0.0.14, dst <span style="color: #ff0000;"><strong>192.168.0.6</strong></span></pre>
<div><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px; white-space: normal; font-size: 13px;">Evidemment le ping est reçu mais la réponse ne peut aboutir, puisque au niveau de RMO1 on a pas fait le NAT, donc le routeur distant voit son IP privée.</span></div>
<div><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px; white-space: normal; font-size: 13px;">On va donc mettre le NAT en place. Ici, il y a une petite subtilité, car il faut bien sur pas nater ce qui est à destination des IP privées, ni le traffic OSPF, j&#8217;ai donc utilisé une route map.</span></div>
<div><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px; white-space: normal; font-size: 13px;">Avant toute chose, ne pas oublié de faire une route sur DUMMY1 (on pourrait mettre de l&#8217;OSPF entre BBR1 et DUMMY1 et redistribuer BGP dans OSPF, mais on l&#8217;a déjà fait au dessus, on va faire au plus simple donc)</span></div>
<pre><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px; white-space: normal; font-size: 13px;"><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;">Dummy1(config)#ip route 0.0.0.0 0.0.0.0 100.0.0.13</span></span></pre>
<div>Et au niveau du nat, voici ce que j&#8217;ai fait:</div>
<div>
<ul>
<li><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: small;"><span style="line-height: 19px; white-space: normal;">Le but est de ne pas natter le trafic OSPF ni le trafic à destination des sites des VPN MPLS, et j&#8217;ai testé avec des deny sur une access-list, et ip nat inside source list, mais ça ne marche pas (ou j&#8217;ai loupé quelque chose)<br />
</span></span></li>
<li><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: small;"><span style="line-height: 19px; white-space: normal;">j&#8217;ai donc défini 2 ACLs, une qui correspond au trafic à natter, l&#8217;autre à exclure (les noms sont explicites je penses), petite subtilité pour ceux qui n&#8217;ont pas l&#8217;habitude de matcher via des ACLs, l&#8217;ACL NONAT, bien que son but est d&#8217;empêcher du trafic d&#8217;être natter, va faire des permit sur le trafic à exclure, cela va permettre d&#8217;identifier ce trafic, et la route-map va l&#8217;interdire.<br />
</span></span></li>
<li><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: small;"><span style="line-height: 19px; white-space: normal;">défini une route map avec 2 entrée qui font un match sur les ACL précédemment définie pour indiquer ce qui doit être natter ou non</span></span></li>
<li><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: small;"><span style="line-height: 19px; white-space: normal;">appliquer la route map dans la commande IP NAT SOURCE</span></span></li>
<li><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: small;"><span style="line-height: 19px; white-space: normal;">ne pas oublier les ip nat inside/outside</span></span></li>
</ul>
</div>
<pre>RMO2(config)#ip access-list extended NONAT
RMO2(config-ext-nacl)#permit ospf ANY ANY
RMO2(config-ext-nacl)#permit ip any 10.0.0.0 0.255.255.255
RMO2(config-ext-nacl)#permit ip any 192.168.0.0 0.0.255.255
RMO2(config-ext-nacl)#exit
RMO2(config)#ip access-list standard NAT
RMO2(config-std-nacl)#permit 10.0.0.0 0.255.255.255
RMO2(config-std-nacl)#exit
RMO2(config)#route-map NATMAP deny 10
RMO2(config-route-map)#match ip address NONAT
RMO2(config-route-map)#route-map NATMAP permit 20
RMO2(config-route-map)#match ip address NAT
RMO2(config-route-map)#exit
RMO2(config)#ip nat pool MyIP 192.0.0.10 192.0.0.10 netmask 255.255.255.252
RMO2(config)#ip nat inside source route-map NATMAP pool MyIP overload</pre>
<div>On fait la même config sur RMO1 (en changeant les IPs)</div>
<div>Vérifications</div>
<pre><span style="color: #ff0000;"><strong>RMO1#</strong></span>ping 100.0.0.14 source loop0

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 100.0.0.14, timeout is 2 seconds:
Packet sent with a source address of 10.1.0.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 248/272/304 ms
<span style="color: #ff0000;"><strong>Dummy1#</strong></span>
*Mar  1 00:09:03.859: ICMP: echo reply sent, src 100.0.0.14, dst 192.0.0.6
<span style="color: #ff0000;"><strong>RMO1#</strong></span>ping 10.2.0.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.2.0.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 144/192/256 ms</pre>
<div>
<div>Et voilà nos routeurs ont un VPN MPLS <span style="color: #ff0000;"><strong>ET</strong></span> un accès internet, c&#8217;est pas beau ça ?</div>
<div>Voici les configs jusqu&#8217;ici : <a href="http://bmigette.fr/wp-content/uploads/2009/12/configs_NAT.tar.gz">configs_NAT.tar</a></div>
<div>Sur RTRDT, une simple route statique suffit pour internet. A noter qu&#8217;on aurait pu redistribuer cette route statique dans OSPF avec une métrique forte pour qu&#8217;au cas où la connexion internet des sites distants tombe, ces derniers pourraient utiliser celle du datacenter, mais tout de manière dans notre cas ici, vu que le net et le vpn passe par le même FAI, si le net est HS, le VPN le sera aussi probablement.</div>
<div>Note: Je ne vais pas mettre de NAT sur le routeur du datacenter vu qu&#8217;il n&#8217;est pas censé y avoir d&#8217;utilisateurs.</div>
<div>
<pre>RTRDT(config)#ip route 0.0.0.0 0.0.0.0 100.0.0.1
RTRDT#ping 100.0.0.14

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 100.0.0.14, timeout is 2 seconds:
!!!!!</pre>
<p><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; font-size: small;"><span style="line-height: 18px; white-space: pre;"> </span></span></p>
</div>
<div>
<div><strong>Configuration PPPoE + Site To Site VPN</strong></div>
</div>
<p>Pour la partie PPPoE, je me suis inspiré de l&#8217;article <a href="http://packetlife.net/blog/2009/apr/20/configuring-pppoe/" target="_blank">http://packetlife.net/blog/2009/apr/20/configuring-pppoe/</a> (très bon blog au passage, en anglais)  Pour la partie FAI (ce n&#8217;est pas au programme ISCW mais bon toujours utile de savoir comment ça marche non ?), il faut, en gros, créer un group &laquo;&nbsp;broad band access aggregation&nbsp;&raquo;, auquel on rattache une interface virtual-template qui va contenir les paramètres PPP (pool d&#8217;adresse notement), puis activer ce group BBA sur l&#8217;interface qui reçoit les connexions PPPoE. Il est possible de configurer pas mal de chose dans le groupe BBA, comme le nombre de sessions par adresses mac &#8230;</p>
<pre>BBR1(config)#bba-group pppoe <span style="color: #ff0000;"><strong>clients_pppoe</strong></span>
BBR1(config-bba-group)#virtual-template <span style="color: #ffcc00;"><strong>1</strong></span>
BBR1(config-bba-group)#sessions per-mac limit 2
BBR1(config-bba-group)#exit
BBR1(config)#interface virtual-template <span style="color: #ffcc00;"><strong>1</strong></span>
BBR1(config-if)#ip add 100.0.1.1 255.255.255.0
BBR1(config-if)#peer default ip address pool <span style="color: #00ccff;"><strong>pool_pppoe</strong></span>
BBR1(config-if)#exit
BBR1(config)#ip local pool <strong><span style="color: #00ccff;">pool_pppoe</span></strong> 100.0.1.2 100.0.1.100
BBR1(config)#int F0/1
BBR1(config-if)#pppoe enable group <span style="color: #ff0000;"><strong>clients_pppoe
</strong></span>BBR1(config-if)#no ip address
BBR1(config-if)#exit</pre>
<div>Sur le client, il faut créer une interface Dialer qui contient les paramètres PPP et associer un dialer pool à cette interface dialer, que l&#8217;on va appliquer sur l&#8217;interface physique.</div>
<pre>RBO1(config)#interface dialer1
RBO1(config-if)#dialer pool <span style="color: #ff0000;"><strong>1</strong></span>
RBO1(config-if)#encapsulation ppp
RBO1(config-if)#ip address negotiated !negociée via IPCP
RBO1(config-if)#mtu 1492 !1500 - 8 header ppp
RBO1(config-if)#int f0/0
RBO1(config-if)#no ip address
RBO1(config-if)#pppoe enable
RBO1(config-if)#pppoe-client dial-pool-number <span style="color: #ff0000;"><strong>1</strong></span>
RBO1(config-if)#exit
RBO1(config)#</pre>
<div>vérifications:</div>
<pre><span style="color: #ff0000;"><strong>RBO1#</strong></span>sh ip route | i 100
     100.0.0.0/32 is subnetted, 2 subnets
C       100.0.1.1 is directly connected, Dialer1
C       <span style="color: #00ffff;">100.0.1.3</span> is directly connected, Dialer1
RBO1#sh ip int br dialer 1
Interface                  IP-Address      OK? Method Status                Protocol
Dialer1                    <span style="color: #00ffff;">100.0.1.3</span>       YES IPCP   up                    up
RBO1#ping 100.0.1.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 100.0.1.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 20/84/160 ms

<strong><span style="color: #ff0000;">BBR1#</span></strong>sh pppoe session
     1 session  in LOCALLY_TERMINATED (PTA) State
     1 session  total

Uniq ID  PPPoE  RemMAC          Port                    VT  VA         State
           SID  LocMAC                                      VA-st
      2      2  cc09.0ba0.0000  Fa0/1                    1  <span style="color: #ffff00;">Vi1.1</span>      PTA
                ca0b.0ba1.0006                              UP
BBR1#sh ip route | i 100.0.1
C       100.0.1.0/24 is directly connected, Virtual-Access1.1
C       <span style="color: #00ffff;">100.0.1.6/32</span> is directly connected, <span style="color: #ffff00;">Virtual-Access1.1</span></pre>
<address><span style="font-style: normal;">Voilà pour du PPPoE simple, mais on va rajouter un peut d&#8217;authentification, sinon c&#8217;est pas marrant&#8230; Sur le routeur FAI: </span></address>
<pre>BBR1(config)#int virtual-template 1
BBR1(config-if)#ppp authentication chap
BBR1(config)#username pppoeuser password p4$$w0rd<span style="font-style: normal;">
</span></pre>
<div><span style="font-style: normal;">et sur le client (noter le callin qui indique que l&#8217;on ne va pas authentifier le pair distant sur le client, en général les FAI utilisent l&#8217;authentification unidirectionnelle, le client s&#8217;authentifie, mais le FAI ne s&#8217;authentifie pas sur le client. Pour être pointilleux, le paramètre callin indique que l&#8217;on vas authentifier le pair distant que s&#8217;il initie la session, et vu qu&#8217;en l&#8217;occurence cela n&#8217;arrivera pas, quand le client initie la session il n&#8217;essaie pas d&#8217;authentifier le FAI)</span></div>
<pre>RBO1(config)#int dialer1
RBO1(config-if)#ppp chap hostname pppoeuser
RBO1(config-if)#ppp chap password p4$$w0rd
RBO1(config-if)#ppp authentication chap <strong><span style="color: #ff0000;">callin</span></strong></pre>
<p>et on relance la machine <img src='http://bmigette.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<pre>BBR1#clear pppoe all
!attendre que l'interface du client redevienne "up"
BBR1#sh user | b Interface
  Interface    User               Mode         Idle     Peer Address
  Vi1.1        <span style="color: #ff0000;"><strong>pppoeuser</strong></span>          PPPoE        -        <span style="color: #ff0000;"><strong>100.0.1.6 !l'ip a changée</strong></span></pre>
<div>Voilà, un petit coup de NAT (on utilisera pas le NAT) et route par défaut sur le routeur RBO1, et on attaque le Site-to-site, et pour le FUN, je vais mettre une crypto map sur le RBO et une interface VTI sur le router RTRDT, et le tout en GREoIPSEC</div>
<pre>RBO1(config)#int loop 0
RBO1(config-if)#ip nat inside
RBO1(config-if)#int dialer 1
RBO1(config-if)#ip nat outside
RBO1(config-if)#exit
RBO1(config)#ip access-list standard NAT
RBO1(config-std-nacl)#permit 10.2.0.0 0.0.255.255
RBO1(config-std-nacl)#exit
RBO1(config)#ip nat inside source list NAT interface dialer1 overload
RBO1(config)#ip route 0.0.0.0 0.0.0.0 100.0.1.1
RBO1#ping 100.0.0.2 !on ping le datacenter sinon pas la peine de faire du VPN :p

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 100.0.0.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 84/94/124 ms</pre>
<div>Donc pour le site to site, ici on va considérer que l&#8217;IP du routeur RBO1 est statique, sinon il aurait fallu faire de l&#8217;<a href="http://bmigette.fr/2009/03/03/easy-vpn-server-avec-dvti-dynamic-vpn-tunnel-interfaces/" target="_blank">easy-vpn</a>, ce qui aurait été possible, mais je n&#8217;avais pas envie.  Pour le site-to-site je vais vous passer les détails de la conf, je penses qu&#8217;il y a assez d&#8217;<a href="http://bmigette.fr/tag/vpn/">exemples</a> sur mon blog.  Coté client:</p>
<pre>RBO1(config)#int tunnel0 !creation tunnel
RBO1(config-if)#tunnel source <strong><span style="color: #ff99cc;">dialer1</span></strong> !prends l'ip de Dialer1 en source
RBO1(config-if)#tunnel destination <span style="color: #ff0000;"><strong>100.0.0.2</strong></span>
RBO1(config-if)#tunnel mode gre ip
RBO1(config-if)#ip add 10.10.0.2 255.255.255.0 !'lip du tunnel
RBO1(config)#crypto isakmp policy 10 !isakmp policy
RBO1(config-isakmp)#auth pre
RBO1(config-isakmp)#hash sha
RBO1(config-isakmp)#group 5
RBO1(config-isakmp)#encr aes
RBO1(config)#crypto isakmp key ipsecp4$$ address <span style="color: #ff0000;">100.0.0.2</span> !password isakmp
RBO1(config)#ip access-list extended <span style="color: #ccffff;"><strong>CRYPTOACL</strong></span>
RBO1(config-ext-nacl)#permit gre host <span style="color: #ff99cc;"><strong>100.0.1.6</strong></span> host <span style="color: #ff0000;"><strong>100.0.0.2</strong></span>
RBO1(config-ext-nacl)#remark Voir note
RBO1(config-ext-nacl)#exit
RBO1(config)#crypto ipsec transform-set <span style="color: #ffff00;"><strong>TSET</strong></span> esp-aes esp-sha-hmac
RBO1(cfg-crypto-trans)#mode transport !transport car tunneling par GRE
RBO1(cfg-crypto-trans)#exit
RBO1(config)#crypto map <span style="color: #00ff00;"><strong>TUNNELDT</strong></span> 10 ipsec-isakmp !la crypto map
% NOTE: This new crypto map will remain disabled until a peer
	and a valid access list have been configured.
RBO1(config-crypto-map)#set peer <span style="color: #ff0000;"><strong>100.0.0.2</strong></span>
RBO1(config-crypto-map)#match address <span style="color: #ccffff;"><strong>CRYPTOACL</strong></span>
RBO1(config-crypto-map)#set transform-set <strong><span style="color: #ffff00;">TSET</span></strong>
RBO1(config-crypto-map)#exit
RBO1(config)#interface dialer1
RBO1(config-if)#crypto map <span style="color: #00ff00;"><strong>TUNNELDT</strong></span>
RBO1(config-if)#exit
RBO1(config)#</pre>
<p>Note: Bien mettre les IP des hosts sur la crypto ACL, sans quoi vous aurez cette erreur:</p>
<pre>*Mar  1 01:39:26.391: ISAKMP:(0:1:SW:1): IPSec policy invalidated proposal
*Mar  1 01:39:26.395: ISAKMP:(0:1:SW:1): phase 2 SA policy not acceptable! (local 100.0.0.2 remote 100.0.1.6)</pre>
<div>Pour le coup j&#8217;avais mis permit gre any any.</div>
<p>Coté datacenter:</p>
<pre>RTRDT(config)#crypto isakmp policy 10
RTRDT(config-isakmp)#auth pre
RTRDT(config-isakmp)#hash sha
RTRDT(config-isakmp)#group 5
RTRDT(config-isakmp)#encr aes
RTRDT(config)#crypto isakmp key ipsecp4$$ address <span style="color: #ff0000;"><strong>100.0.1.6</strong></span>
RTRDT(config)#crypto ipsec transform-set <span style="color: #ffff99;"><strong><span style="color: #ffff00;">TSET </span></strong></span>esp-aes esp-sha-hmac
RTRDT(cfg-crypto-trans)#mode transport
RTRDT(cfg-crypto-trans)#exit
RTRDT(config)#crypto ipsec profile <span style="color: #ffcc99;"><strong>RBO1</strong></span>
RTRDT(ipsec-profile)#set transform-set <span style="color: #ffff99;"><strong><span style="color: #ffff00;">TSET
</span></strong></span><strong>R</strong>TRDT(ipsec-profile)#exit
RTRDT(config)#int tunnel0
RTRDT(config-if)#tunnel mode gre ip
RTRDT(config-if)#tunnel source F0/1
RTRDT(config-if)#tunnel dest <span style="color: #ff0000;">100.0.1.6</span>
RTRDT(config-if)#ip address 10.10.0.1 255.255.255.0
RTRDT(config-if)#tunnel protection ipsec profile <strong><span style="color: #ffcc99;">RBO1</span></strong>
RTRDT(config-if)#exit</pre>
<div>Vérifs et Routage OSPF</div>
<pre>RBO1#ping 10.10.0.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.10.0.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 48/106/164 ms
RBO1#sh crypto isakmp sa
dst             src             state          conn-id slot status
100.0.0.2       100.0.1.6       <strong><span style="color: #ff0000;">QM_IDLE </span></strong>             1    0 <span style="color: #ff0000;"><strong>ACTIVE</strong></span>
RBO1#sh crypto session
Crypto session current status

Interface: Dialer1
Session status: UP-ACTIVE
Peer: 100.0.0.2 port 500
  IKE SA: local 100.0.1.6/500 remote 100.0.0.2/500 <span style="color: #ff0000;"><strong>Active </strong></span>
  IPSEC FLOW: permit 47 host 100.0.1.6 host 100.0.0.2
        Active SAs: 2, origin: crypto map
  IPSEC FLOW: permit 47 host 100.0.1.6 host 100.0.0.2
        Active SAs: 2, origin: crypto map</pre>
<p>Je rappelle que QM_IDLE signifie que la phase 1 IKE est terminée, donc plus de négociation, du coup la SA de la phase 1 est &laquo;&nbsp;IDLE&nbsp;&raquo; et &laquo;&nbsp;ACTIVE&nbsp;&raquo;  Pour OSPF, il est déjà configuré sur RTRDT, on va donc configurer sur RBO1</p>
<pre>RBO1(config)#router ospf 1
RBO1(config-router)#network 10.3.0.0 0.0.255.255 area 0
RBO1(config-router)#network 10.10.0.0 0.0.255.255 area 0
RBO1(config-router)#exit</pre>
<div>et la ça marche pas. J&#8217;aurai pu faire la modif discretos pour mla jouer roxor, mais c&#8217;est un point il me semble important. Je n&#8217;ai pas pour habitude dans mes exemples de modifier le MTU sur les tunnels IPSEC, car je fait essentiellement du PING donc pas besoin, mais du coup ce sont autant de bons reflexes qu&#8217;on ne prend pas. Dans le cas présent, voici les erreurs que j&#8217;ai eues:</div>
<pre>*Mar  1 02:05:14.023: %OSPF-5-ADJCHG: Process 1, Nbr 10.0.0.1 on Tunnel0 from EXSTART to DOWN, Neighbor Down: Too many retransmissions
RBO1#
*Mar  1 02:05:17.851: OSPF: Rcv hello from 10.0.0.1 area 0 from Tunnel0 10.10.0.1
*Mar  1 02:05:17.851: OSPF:
OSPF: Nbr 10.0.0.1 10.10.0.1 Tunnel0 is currently ignored
*Mar  1 02:06:14.187: OSPF: Rcv DBD from 10.0.0.1 on Tunnel0 seq 0x1014 opt 0x52 flag 0x7 len 32  mtu 1476 state EXSTART
*Mar  1 02:06:14.191: OSPF: Nbr 10.0.0.1 <span style="color: #ff0000;"><strong>has larger interface MTU</strong></span></pre>
<div>Donc en gros les mises à jour OSPF ne passaient pas dans le tunnel, et le voisin finissait par banir temporairement le neighbor.</div>
<div>Un petit ip mtu 1460 sur les interfaces tunnels des deux cotés et tout roulait.</div>
<p>Je vous mets en prime 2 petits liens sur le MTU et la commande tcp adjust-mss (importante pour s&#8217;assurer que les hosts n&#8217;outrepassent pas la limite MTU du routeu, en gros, il fait proxy et modifie le MSS lors des négocations TCP, donc si le MSS baisse, le MTU aussi, logique):</p>
<p><a href="http://www.iphelp.ru/doc/3/Cisco.Press.Comparing.Designing.and.Deploying.VPNs.Apr.2006/1587051796/ch07lev1sec4.html" target="_blank">http://www.iphelp.ru/doc/3/Cisco.Press.Comparing.Designing.and.Deploying.VPNs.Apr.2006/1587051796/ch07lev1sec4.html</a></p>
<p><a href="http://www.cisco.com/en/US/tech/tk827/tk369/technologies_white_paper09186a00800d6979.shtml" target="_blank">http://www.cisco.com/en/US/tech/tk827/tk369/technologies_white_paper09186a00800d6979.shtml</a></p>
<p><a href="http://www.cisco.com/en/US/tech/tk827/tk369/technologies_white_paper09186a00800d6979.shtml" target="_blank"></a> petite vérif:</p>
<pre>RBO1#un all
All possible debugging has been turned off
RBO1#sh ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route

Gateway of last resort is 100.0.1.1 to network 0.0.0.0

     100.0.0.0/32 is subnetted, 2 subnets
C       100.0.1.6 is directly connected, Dialer1
C       100.0.1.1 is directly connected, Dialer1
     10.0.0.0/8 is variably subnetted, 5 subnets, 2 masks
C       10.10.0.0/24 is directly connected, Tunnel0
C       10.3.0.0/24 is directly connected, Loopback0
O IA    10.2.0.1/32 [110/11114] via 10.10.0.1, 00:09:10, Tunnel0
O IA    10.1.0.1/32 [110/11114] via 10.10.0.1, 00:09:10, Tunnel0
O       10.0.0.1/32 [110/11112] via 10.10.0.1, 00:09:10, Tunnel0
     192.168.0.0/30 is subnetted, 3 subnets
O IA    192.168.0.8 [110/11113] via 10.10.0.1, 00:09:10, Tunnel0
O       192.168.0.0 [110/11112] via 10.10.0.1, 00:09:10, Tunnel0
O IA    192.168.0.4 [110/11113] via 10.10.0.1, 00:09:10, Tunnel0
S*   0.0.0.0/0 [1/0] via 100.0.1.1
RBO1#ping 10.1.0.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.1.0.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 248/313/404 ms</pre>
<div>Voilà, j&#8217;ai ma table de routage, je peux pinger un autre site via mon VPN, tout est OK. Je vous mets les configs, et je vais reposer un peu mon pauvre PC portable qui commence à chauffer à être à 100% de CPU pendant des heures :p</div>
<div>Configs: <a href="http://bmigette.fr/wp-content/uploads/2009/12/configs_pppoe.tar.gz">configs_pppoe.tar</a></div>
<h2>Configuration PPPoA + Remote VPN</h2>
</div>
<p>Aller, on arrive à la fin !</p>
<p>Au niveau de PPPoA, la conf est quasi identique coté FAI et client (on aurait pu utilisé la même interface virtual template pour les deux d&#8217;ailleurs). Juste quelques notions d&#8217;ATM, en gros, les VPI (virtual path identifier) identifient un chemin, et les VCI (Virtual Circuit Identifier) identifient un Circuit au sein d&#8217;un VPI. Les switchs ATM commutent un couple VPI/VCI vers un autre VPI/VCI. Puisqu&#8217;on va l&#8217;utiliser, très rapidement, l&#8217;encapsulation AAL5 (ATM Adaptation Layer), ajoute des infos à la trame (longueur et CRC), puis du padding pour obtenir un multiple de 48 (rappelez vous qu&#8217;ATM utilise des cellules de 53 octets, 5 pour l&#8217;entête et 48 pour les données). Cela permets donc, lorsque la trame est reconsituée, de vérifier son intégrité.</p>
<p>Bref, attaquons la config coté FAI:</p>
<pre>BBR1(config)#interface virtual-template <span style="color: #ffff00;">2</span> !la 1 est pour pppoe
BBR1(config-if)#ip address 100.0.2.1 255.255.255.0
BBR1(config-if)#peer default ip address pool <span style="color: #ff0000;"><strong>pool_pppoa</strong></span> !le pool d'ip clients
BBR1(config-if)#ppp authentication chap
BBR1(config-if)#exit
BBR1(config)#ip local pool <strong><span style="color: #ff0000;">pool_pppoa</span></strong> 100.0.2.2 100.0.2.254
BBR1(config)#interface atm2/0
BBR1(config-if)#no sh
BBR1(config-if)#pvc 10/100 !pvc choisi arbitrairement, voir switch atm topo.net
BBR1(config-if-atm-vc)#encapsulation aal5snap
BBR1(config-if-atm-vc)#protocol ppp virtual-Template <span style="color: #ffff00;"><strong>2</strong></span> !on associe la template pour ppp
BBR1(config-if-atm-vc)#exit
BBR1(config-if)#exit
BBR1(config)#username pppoauser password p4$$w0rd !création d'un autre utilisateur, pour la forme</pre>
<p>Au niveau du client:</p>
<pre><code>!RTL1
interface ATM1/0
 no ip address
 no atm ilmi-keepalive
!
interface ATM1/0.1 point-to-point
 no snmp trap link-status
 pvc 20/200
  encapsulation aal5snap
  protocol ppp dialer
  dialer pool-member 1
 !
!
interface Dialer1
 ip address negotiated
 encapsulation ppp
 dialer pool 1
 dialer-group 1
 ppp authentication chap
 ppp chap hostname pppoauser
 ppp chap password 0 p4$$w0rd
!
</code></pre>
<p><span style="color: #ff0000;">Par contre la configuration ci dessus, malgré qu&#8217;elle me semble bonne, ne fonctionne pas, et après plusieurs tests, je n&#8217;ai pas réeussi à faire fonctionner pppoa sur dynamips, peux être un problème de version d&#8217;IOS, je me renseigne sur ça, et sinon tanpis pour la partie pppoa&#8230;</span></p>
<p>Pour continuer l&#8217;article, je vais utiliser ces configs :</p>
<pre><code>!RTL1
interface ATM1/0
 ip address 100.0.2.2 255.255.255.0
 pvc 20/200
  encapsulation aal5snap
!
</code><code>!BBR1
interface ATM2/0
 ip address 100.0.2.1 255.255.255.0
 pvc 10/100
  encapsulation aal5snap
!</code></pre>
<p>Un petit mot rapidement, j&#8217;ai mis la configuration du PVC directement sur l&#8217;interface ATM, vous verrez souvent que la config des PVC est appliquée sur une sous interface ATM, cela permets d&#8217;avoir plusieurs IP et plusieurs circuits, moi je n&#8217;ai qu&#8217;une IP et qu&#8217;un circuit, donc pas besoin de sous interfaces. A noter aussi que l&#8217;on doit obligatoirement spécifier les VPI/VCI pour que cela fonctionne.</p>
<p>Au niveau de la config du routeur RTL1, il manque le default-router dans le pool DHCP (un petit oubli). Pensez à le rajouter:</p>
<pre>!
ip dhcp pool private_lan
  default-router 192.168.0.254
!</pre>
<p>Ne pas oublier le nat et la route par défaut non plus:</p>
<pre>RTL1(config-if)#int atm1/0
RTL1(config-if)#ip nat outside
RTL1(config-if)#int f0/0
RTL1(config-if)#ip nat inside
RTL1(config-if)#exit
RTL1(config)#access-list 1 permit 192.168.0.0 0.0.0.255
RTL1(config)#ip nat inside source list 1 int atm1/0 overload</pre>
<p>Aller, on passe au Remote VPN. Pour ce faire, on vas utiliser des interfaces Virtual Template et des profiles ISAKMP/IPSEC, d&#8217;une part parce que la gestion des clients en est facilitée, et d&#8217;autre part, il semble qu&#8217;il ne soit pas possible d&#8217;avoir une même crypto map pour du remote VPN et du site to site (même si on peut avoir plusieurs entrées via les séquences pour une même crypto map), et vu qu&#8217;on ne peux avoir qu&#8217;une crypto map par interface, on aurait pas pu avoir les 2 sur BBR1, mais je n&#8217;ai pas testé cela.</p>
<p>Première chose, ne pas oublier la liste AAA avec les profiles VPN (c&#8217;était l&#8217;objet du <a href="http://bmigette.fr/2009/10/20/contest-1-ipsec-troubleshooting-%e2%80%93-2-remote-vpn/" target="_blank">dernier contest</a>).</p>
<p>Donc dans l&#8217;ordre, au niveau du routeur qui va recevoir les connexions VPN</p>
<ul>
<li>Configurer la liste pour l&#8217;authorization isakmp (password group, pool,&#8230;)</li>
<li>Configurer la liste pour l&#8217;authentication (optionnel, mais on va mettre du XAUTH, penser à créer un user local)</li>
<li>Créer le groupe VPN (on choisira le nom remote_users, on crééra ausis le pool pool_remote_vpn), et un utilisateur</li>
<li>Créer l&#8217;ACL pour le split tunneling (on veux que le VPN serve uniquement pour accéder au réseau 10.0.0.0/8 &#8211; réseau de l&#8217;entreprise).</li>
<li>Créer transform set et profile IPSEC</li>
<li>Créer profile ISAKMP pour le groupe VPN</li>
<li>Créer une policy ISAKMP en accord avec celle disponible sur le client VPN (on avait pas créé de policy pour le site to site, les paramètres par défaut entre les routeurs étant compatibles).</li>
<li>Créer une interface tunnel et y appliquer le profile IPSEC</li>
</ul>
</div>
<pre>!aaa
RTRDT(config)#aaa new-model
RTRDT(config)#aaa authorization network <span style="color: #ff0000;"><strong>remote_vpn</strong></span> local
RTRDT(config)#aaa authentication login <span style="color: #ff99cc;"><strong>remote_vpn</strong></span> local
!IPSEC transform set et profile
RTRDT(config)#crypto ipsec transform-set <span style="color: #00ff00;"><strong>rvpn_tset</strong></span> esp-aes esp-sha-hmac
RTRDT(cfg-crypto-trans)#exit
RTRDT(config)#crypto ipsec profile <span style="color: #00ffff;"><strong>rvpn_ipsec_profile</strong></span>
RTRDT(ipsec-profile)#set transform-set <span style="color: #00ff00;"><strong>rvpn_tset</strong></span>
RTRDT(ipsec-profile)#set isakmp-profile rvpn_profile ! optionnel
!group VPN
RTRDT(config)#crypto isakmp client configuration group <span style="color: #cc99ff;"><strong>remote_users</strong></span>
RTRDT(config-isakmp-group)#key vpnp4$$
RTRDT(config-isakmp-group)#pool <span style="color: #ccffcc;"><strong>remote_vpn_pool</strong></span>
RTRDT(config-isakmp-group)#domain corp.lan
RTRDT(config-isakmp-group)#acl <strong><span style="color: #3366ff;">splitacl</span></strong>
RTRDT(config-isakmp-group)#netmask 255.255.255.0 !masque associé au pool
RTRDT(config-isakmp-group)#exit
!ACL
RTRDT(config)#ip access-list extended <span style="color: #3366ff;"><strong>splitacl</strong></span> !utiliser ACL étendue, standard ne marche pas
RTRDT(config-std-nacl)#permit ip 10.0.0.0 0.255.255.255 any
RTRDT(config-std-nacl)#exit
!user
RTRDT(config)#username remote_user password cisco
!pool
RTRDT(config)#ip local pool <strong><span style="color: #ccffcc;">remote_vpn_pool</span></strong> 10.11.0.1 10.11.0.254
!Profile ISAKMP
RTRDT(config)#crypto isakmp profile rvpn_profile
% A profile is deemed incomplete until it has match identity statements
RTRDT(conf-isa-prof)#match identity group <strong><span style="color: #cc99ff;">remote_users</span></strong>
RTRDT(conf-isa-prof)#client configuration address respond
RTRDT(conf-isa-prof)#virtual-template <span style="color: #ffff00;"><strong>1</strong></span>
RTRDT(conf-isa-prof)#client authentication list <strong><span style="color: #ff99cc;">remote_vpn</span></strong>
RTRDT(conf-isa-prof)#isakmp authorization list <span style="color: #ff0000;"><strong>remote_vpn</strong></span>
RTRDT(conf-isa-prof)#exit
!policy isakmp, correspond à une policy du client VPN
RTRDT(config)#crypto isakmp policy 1
RTRDT(config-isakmp)#auth pre-share
RTRDT(config-isakmp)#hash sha
RTRDT(config-isakmp)#encr aes
RTRDT(config-isakmp)#group 2
RTRDT(config-isakmp)#exit
!création du template de tunnel
RTRDT(config)#interface virtual-template <strong><span style="color: #ffff00;">1</span></strong> type tunnel
RTRDT(config-if)#tunnel mode ipsec ipv4
RTRDT(config-if)#tunnel protection ipsec profile  <span style="color: #00ffff;"><strong>rvpn_ipsec_profile</strong></span>
RTRDT(config-if)#ip mtu 1460
RTRDT(config-if)#ip unnumbered F0/1 <strong><span style="text-decoration: underline;"><span style="color: #ff0000;">!l'oubli de cette commande m'a valu 2h de deboggage...</span></span></strong>
RTRDT(config-if)#tunnel source F0/1 <strong><span style="text-decoration: underline;">!mettre l'interface qui reçoit les connexions</span></strong></pre>
<p>Configuration du client:</p>
<div id="attachment_450" class="wp-caption aligncenter" style="width: 310px"><a href="http://bmigette.fr/wp-content/uploads/2009/12/config_client.PNG"><img class="size-medium wp-image-450" title="configuration client" src="http://bmigette.fr/wp-content/uploads/2009/12/config_client-300x275.PNG" alt="configuration client" width="300" height="275" /></a><p class="wp-caption-text">configuration client</p></div>
<p>Un ping vers la loopback du routeur RTRDT (10.0.0.1) doit aboutir. Pour l&#8217;instant on a pas redistribuer les routes des clients VPNs dans le backbone, donc ça ne va pas marcher vers les autres routeurs.</p>
<p>Un petit avant après de la table de routage du PC:</p>
<pre>C:\Documents and Settings\bastien&gt;route print
===========================================================================
===========================================================================
===========================================================================
Itinéraires actifs :
Destination réseau    Masque réseau  Adr. passerelle   Adr. interface Métrique
          0.0.0.0          0.0.0.0    192.168.0.254     192.168.0.1       20
        127.0.0.0        255.0.0.0        127.0.0.1       127.0.0.1       1
      192.168.0.0    255.255.255.0      192.168.0.1     192.168.0.1       20
      192.168.0.1  255.255.255.255        127.0.0.1       127.0.0.1       20
    192.168.0.255  255.255.255.255      192.168.0.1     192.168.0.1       20
        224.0.0.0        240.0.0.0      192.168.0.1     192.168.0.1       20
  255.255.255.255  255.255.255.255      192.168.0.1     192.168.0.1       1
  255.255.255.255  255.255.255.255      192.168.0.1               3       1
Passerelle par défaut :     192.168.0.254
===========================================================================
<span style="color: #ff0000;"><strong>#après</strong></span>
C:\Documents and Settings\bastien&gt;route print
===========================================================================
===========================================================================
===========================================================================
Itinéraires actifs :
Destination réseau    Masque réseau  Adr. passerelle   Adr. interface Métrique
<span style="color: #ff0000;">          0.0.0.0          0.0.0.0    192.168.0.254     192.168.0.1       20 Passerelle par défaut pas par le VPN</span>
         <span style="color: #ff0000;">10.0.0.0        255.0.0.0        10.11.0.4       10.11.0.4       1  Uniqument 10.0.0.0 (ACL Split tunneling)</span>
        10.11.0.0   <span style="color: #00ffff;"> 255.255.255.0 </span>       10.11.0.4       10.11.0.4       20 <span style="color: #00ffff;">Commande netmask dans le groupe isakmp</span>
        10.11.0.4  255.255.255.255        127.0.0.1       127.0.0.1       20
<span style="color: #ff0000;">   10.255.255.255  255.255.255.255        10.11.0.4       10.11.0.4       20</span>
        100.0.0.2  255.255.255.255    192.168.0.254     192.168.0.1       1
        127.0.0.0        255.0.0.0        127.0.0.1       127.0.0.1       1
      192.168.0.0    255.255.255.0      192.168.0.1     192.168.0.1       20
      192.168.0.1  255.255.255.255        127.0.0.1       127.0.0.1       20
    192.168.0.254  255.255.255.255      192.168.0.1     192.168.0.1       1
    192.168.0.255  255.255.255.255      192.168.0.1     192.168.0.1       20
        224.0.0.0        240.0.0.0        10.11.0.4       10.11.0.4       20
        224.0.0.0        240.0.0.0      192.168.0.1     192.168.0.1       20
  255.255.255.255  255.255.255.255        10.11.0.4               3       1
  255.255.255.255  255.255.255.255        10.11.0.4       10.11.0.4       1
  255.255.255.255  255.255.255.255      192.168.0.1     192.168.0.1       1
Passerelle par défaut :     192.168.0.254
===========================================================================</pre>
<p>Vérifications:</p>
<pre>RTRDT#sh ip route | i 10.11.0
S       10.11.0.4/32 [1/0] via 0.0.0.0, Virtual-Access2 <strong>!Route statique vers le client</strong>
RTRDT#sh crypto ipsec sa | i peer
   current_peer 100.0.1.6 port 500 !site to site
   current_peer 100.0.2.2 port 3550 !mon client remote vpn
RTRDT#sh crypto isakmp sa
dst             src             state          conn-id slot status
100.0.1.6       100.0.0.2       QM_IDLE              1    0 ACTIVE
100.0.0.2       100.0.2.2       QM_IDLE              2    0 ACTIVE
RTRDT#sh crypto ipsec sa interface virtual-access 2 | i settings
        in use settings ={Tunnel UDP-Encaps, } <strong><span style="text-decoration: underline;">!utilisation du nat transparency</span></strong></pre>
<p>Bon on y est presque, il faut redistribuer ces routes statiques au sein du backbone.</p>
<p>Ici, un redistribute static subnets dans OSPF fait que les routes sont de types external E2, et ne seraient donc pas redistribuées dans BGP (voir configuration BGP). De plus, cela redistriburait toutes les routes statiques.</p>
<p>On va donc modifier la configuration sur PE1 (et accessoirement sur les PE2 et 3 pour être logique), de la sorte:</p>
<pre>PE1#sh ip route vrf VRF1 | i 10.11.0
O <strong><span style="color: #ff0000;">E2</span></strong>    10.11.0.2/32 [110/20] via 192.168.0.2, 00:02:00, FastEthernet0/1
PE1(config)#router bgp 1000
PE1(config-router)# address-family ipv4 vrf VRF1
PE1(config-router-af)#redistribute OSPF 1 vrf VRF1 <strong><span style="color: #ff0000;">match internal external</span></strong>
PE1(config-router-af)#exit
PE1(config-router)#exit
</pre>
<p>petite vérification</p>
<pre>RMO1#sh ip route | i 10.11.0
O E2    10.11.0.3/32 [110/20] via 192.168.0.5, 00:00:34, FastEthernet0/0
</pre>
<p>Et du PC connecté en VPN, je peux pinger les réseaux distants (exemple la loopback RMO1 &#8211; 10.1.0.1)</p>
<h2>Conclusion</h2>
<p>Voilà, bravo à ceux qui ont suivi l&#8217;article en entier, il y a sans doute des points qui pourraient être améliorés, mais ici le but était plus de manipuler le plus de technologies possibles, et bien que cela s&#8217;intitule ISCW Lab, beaucoup de notions ne sont pas à savoir pour ISCW, comme les routes-map, le routage BGP, la configuration PPPoE coté FAI, &#8230;</p>
<p>Configuration finales: <a href="http://bmigette.fr/wp-content/uploads/2009/12/configs_finales.tar.gz">configs_finales.tar</a></p>
<p>Je crois que c&#8217;est sans conteste l&#8217;article le plus long que j&#8217;ai fait à ce jour, aussi n&#8217;hésitez pas à laisser vos commentaires.</p>
<p>Si certains ont réussi à faire du PPPoA sur dynamips, je suis preneur <img src='http://bmigette.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://bmigette.fr/2009/12/13/iscw-lab-mpls-vpns-bgp-pppoe-pppoa-ipsec-site-to-siteremote-access/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MPLS, VRFs, BGP pour s&#8217;ammuser</title>
		<link>http://bmigette.fr/2008/12/10/mpls-vrfs-bgp-pour-sammuser/</link>
		<comments>http://bmigette.fr/2008/12/10/mpls-vrfs-bgp-pour-sammuser/#comments</comments>
		<pubDate>Wed, 10 Dec 2008 16:33:43 +0000</pubDate>
		<dc:creator>Bastien Migette</dc:creator>
				<category><![CDATA[Réseau Avancé]]></category>
		<category><![CDATA[BGP]]></category>
		<category><![CDATA[dynagen]]></category>
		<category><![CDATA[MP-BGP]]></category>
		<category><![CDATA[MPLS]]></category>
		<category><![CDATA[VPN]]></category>
		<category><![CDATA[VRF]]></category>
		<category><![CDATA[VRFS]]></category>

		<guid isPermaLink="false">http://bmigette.fr/?p=90</guid>
		<description><![CDATA[[caption id="attachment_93" align="aligncenter" width="500" caption="Topologie du lab"]<a href="http://bmigette.fr/wp-content/uploads/2008/12/mpls.png"><img class="size-full wp-image-93" title="mpls" src="http://bmigette.fr/wp-content/uploads/2008/12/mpls.png" alt="Topologie du lab" width="500" height="595" /></a>[/caption]
Nous allons voir comment monter une petite topologie avec des VRFs, du BGP, et le tout sur un réseau MPLS.]]></description>
			<content:encoded><![CDATA[<div id="attachment_93" class="wp-caption aligncenter" style="width: 510px"><a href="http://bmigette.fr/wp-content/uploads/2008/12/mpls.png"><img class="size-full wp-image-93" title="mpls" src="http://bmigette.fr/wp-content/uploads/2008/12/mpls.png" alt="Topologie du lab" width="500" height="595" /></a><p class="wp-caption-text">Topologie du lab</p></div>
<p>Nous allons voir comment monter une petite topologie avec des VRFs, du BGP, et le tout sur un réseau MPLS.<span id="more-90"></span><br />
Pour les PC Client, j’ai utilisé deux loopback sur ma machine (il faudra donc penser à modifier sur votre PC)</p>
<h2><a href="http://bmigette.fr/files/MPLS.zip">Télécharger le fichier dynagen et les configurations</a></h2>
<p>Voici la topologie dynagen utilisée:</p>
<pre>ghostios   = True
sparsemem  = True
#workingdir = c:temp

[localhost]

    [[3660]]
        image = ..imagesC3660-JK.BIN
        ram = 128
        idlepc = 0x604eb02c
    [[7200]]
        image = ..imagesC7200-AD.BIN
        ram = 160
        npe = npe-400
        idlepc= 0x62b4aa30

    [[ROUTER CORE]]
        model=7200
        F0/0=PE1 F0/0
        F0/1=PE2 F0/0

    [[ROUTER PE1]]
        model = 3660
        F0/1 = CE1 F0/0

    [[ROUTER CE1]]
        model = 3660
        F0/1 = NIO_gen_eth:DeviceNPF_{XXXX} #my loopback = CPC1    

    [[ROUTER PE2]]
        model = 3660
        F0/1 = CE2 F0/0

    [[ROUTER CE2]]
        model = 3660
        F0/1 = NIO_gen_eth:DeviceNPF_{XXX} #my 2nd loopback = CPC2</pre>
<h1>Configurations interfaces</h1>
<p>Pour clarifier les choses, si vous ne comprenez pas les lignes qui suivent, je vous conseille d&#8217;arrêter la lecture de l&#8217;article :p</p>
<h3>Core:</h3>
<pre>En
Conf t
Hostn Core
interface loopback 100
ip address 10.0.2.1 255.255.255.255
no shutdown
interface F0/0
ip address 10.0.10.2 255.255.255.0
no shutdown
interface f0/1
ip address 10.0.20.2 255.255.255.0
no shutdown</pre>
<h3>PE1:</h3>
<pre>En
Conf t
Hostn PE1
interface loopback 0
ip address 10.0.1.1 255.255.255.255
interface F0/0
ip address 10.0.10.1 255.255.255.0
no shutdown
interface fastethernet 0/1
ip address 172.16.100.254 255.255.255.0
no shutdown</pre>
<h3>PE2</h3>
<pre>En
Conf t
Hostn PE2
interface loopback 0
ip address 10.0.3.1 255.255.255.255
interface F0/0
ip address 10.0.20.1 255.255.255.0
no shutdown
interface F0/1
ip address 172.16.200.254 255.255.255.0
no shutdown</pre>
<h3>CE1</h3>
<pre>En
Conf t
Hostn CE1
interface loop0
ip address 172.16.10.1 255.255.255.0
interface fastethernet 0/0
ip address 172.16.100.1 255.255.255.0
no shutdown
interface fastethernet 0/1
ip address 192.168.1.1 255.255.255.0
no shutdown</pre>
<h3>CE2</h3>
<pre>En
Conf t
Hostn CE2
interface loop0
ip address 172.16.20.1 255.255.255.0
interface f0/0
ip address 172.16.200.1 255.255.255.0
no shutdown
interface fastethernet 0/1
ip address 192.168.2.1 255.255.255.0
no shutdown</pre>
<p><span style="color: #ff0000;"><span style="text-decoration: underline;">Ici : penser à effectuer des pings pour tester la connectivité :</span></span></p>
<pre>CE1#ping 192.168.1.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.2, timeout is 2 seconds:
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 12/32/84 ms

CE2#ping 192.168.2.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.2.2, timeout is 2 seconds:
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 12/32/84 ms

CE1#ping 172.16.100.254
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 172.16.100.254, timeout is 2 seconds:
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 16/51/76 ms

CE2#ping 172.16.200.254
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 172.16.200.254, timeout is 2 seconds:
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 20/54/124 ms

Core#ping 10.0.10.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.10.1, timeout is 2 seconds:
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 12/40/72 ms

Core#ping 10.0.20.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.20.1, timeout is 2 seconds:
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 8/37/68 ms</pre>
<p>Les pings sont OK, passons à la suite</p>
<h1>Routage interne FAI</h1>
<p>On va maintenant configurer le routage interne du fournisseur, car BGP est un protocole EGP (Exterior Gateway Protocol), et son but n’est pas le routage au sein de l’AS mais entre les AS. Ses neighbors ne seront pas forcément dans les mêmes sous réseaux, et il faut donc qu’ils puissent communiquer, ce qui implique une table de routage valide pour chaque routeur.<br />
Pour aller plus vite on agrégeras les différents réseaux de chaque router.</p>
<h3>Core</h3>
<pre>router ospf 1
network 10.0.0.0 0.255.255.255 area 0</pre>
<h3>PE1</h3>
<pre>router ospf 1
network 10.0.0.0 0.255.255.255 area 0</pre>
<h3>PE2</h3>
<pre>router ospf 1
network 10.0.0.0 0.255.255.255 area 0</pre>
<p>On doit avoir ça :</p>
<pre>Core#
Jun  6 15:03:57.174: %OSPF-5-ADJCHG: Process 10, Nbr 10.0.1.1 on GigabitEthernet2/35 from LOADING to FULL, Loading Done
Jun  6 15:24:58.342: %OSPF-5-ADJCHG: Process 10, Nbr 10.0.3.1 on GigabitEthernet2/36 from LOADING to FULL, Loading Done
Core#sh ip ospf neighbor
Neighbor ID     Pri   State           Dead Time   Address         Interface
10.0.3.1          1   EXSTART/DR      00:00:34    10.0.20.1       FastEthernet0/1
10.0.1.1          1   EXSTART/BDR     00:00:39    10.0.10.1       FastEthernet0/0</pre>
<p>Et PE1 doit pouvoir pinger PE2 :</p>
<pre>PE1#ping 10.0.20.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.20.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 64/79/112 ms</pre>
<p>Ok tout est bon, passons aux choses sérieuses <img src='http://bmigette.fr/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<h1>Configuration MPLS</h1>
<p>Les protocoles de distribution de labels servent au routeur à échanger leurs labels afin de pouvoir router correctement. Chaque label est local, un peu à la manière des DLCI Frame relay, et est inséré entre les entêtes de couche 2 et 3. Pour le routage MPLS, le routeur doit obligatoirement utiliser le CEF, qui construit la FIB (Forwarding Information Base), qui contient le cache pour les trames en fonction de la table de routage (pour chaque route on a une entrée en cache qui contient les informations de couche 2 pour générer la trame).<br />
MPLS utilise la FIB pour générer la LFIB (Labeled FIB), qui a le même rôle que la FIB mais sur laquelle on ajoute les correspondances Label local, label averti par le voisin.<br />
Les labels locaux sont stockés dans la LIB (Label Information Base).<br />
Pour faire simple, le routeur MPLS attribue un label à chaque route, qu’il garde dans sa LIB, et lorsqu’un de ses voisin l’informe d’un label pour une même route, il rempli la LFIB pour faire correspondre les labels, ce qui permettra le switching.<br />
Chaque routeur informe ses voisins des labels pour chacune de ses routes (Il envoi sa LIB) via LDP  (ou TDP).<br />
Ici, nous allons utiliser LDP (les deux protocoles actuels sont LDP et TDP).</p>
<p>Note : Les routeurs MPLS sont souvent appelés LSR pour Label Switching Routeur.</p>
<p>Définition de l’interface source: Optionnel mais conseillé: Dans mon cas le router Core a plusieurs interfaces loopback =&gt; résultat non prévisible.</p>
<h3>PE1</h3>
<pre>mpls ldp advertise-labels
mpls ldp router-id loopback0 force
interface f0/0
mpls ip</pre>
<h3>Core</h3>
<pre>mpls ldp advertise-labels
mpls ldp router-id loopback100 force
interface F0/0
mpls ip
interface F0/1
mpls ip</pre>
<h3>PE2</h3>
<pre>mpls ldp advertise-labels
mpls ldp router-id loopback0 force
interface f0/0
mpls ip</pre>
<p>On doit avoir ça :</p>
<pre>Core(config-if)#
Jun  6 15:39:37.390: %LDP-5-NBRCHG: LDP Neighbor 10.0.1.1:0 is UP
Jun  6 15:40:51.806: %LDP-5-NBRCHG: LDP Neighbor 10.0.3.1:0 is UP</pre>
<h3>Vérification :</h3>
<pre>Core#sh mpls ldp neighbor
    Peer LDP Ident: 10.0.1.1:0; Local LDP Ident 10.0.2.1:0
        TCP connection: 10.0.1.1.646 - 10.0.2.1.25314
        State: Oper; Msgs sent/rcvd: 9/10; Downstream        Up time: 00:01:35
        LDP discovery sources:
          FastEthernet0/0, Src IP addr: 10.0.10.1
        Addresses bound to peer LDP Ident:
          10.0.10.1       172.16.100.254  10.0.1.1
    Peer LDP Ident: 10.0.3.1:0; Local LDP Ident 10.0.2.1:0
        TCP connection: 10.0.3.1.63640 - 10.0.2.1.646
        State: Oper; Msgs sent/rcvd: 9/10; Downstream
        Up time: 00:01:17
        LDP discovery sources:
          FastEthernet0/1, Src IP addr: 10.0.20.1
        Addresses bound to peer LDP Ident:
          10.0.20.1       172.16.200.254  10.0.3.1</pre>
<h1>Configuration des VRF (Virtual Routing and Forwarding : L3 VPN)</h1>
<p>Une VRF permet de virtualiser une partie du routeur. Par exemple, un routeur qui doit traiter le traffic de plusieurs AS ayant le même adressage, afin de ne pas les mélanger, mettra chaque AS dans une VRF.<br />
Chaque VRF a sa proper Routing Information Base (RIB, Table de routage) et table Cisco Express Forwarding (doit être activé avec ip cef).<br />
Le routage se fera grâce à BGP et son extension multi protocole (MP BGP) : Un routeur en cœur de réseau pouvant avoir plusieurs clients ayant les mêmes adresses privées, on assignera à chaque VRF une route distinguisher, qui, préfixé a une adresse IPv4 donnera une adresse VPNv4 unique dans tout le réseau (on aura donc une RD par VRF). Les routes des VRFs pouvant être injectées dans d’autres VRF (VPN Multi Sites), on utilisera les Route Target (RT) qui permettront de définir un nom d’export à la table de routage de notre VRF, et d’indiquer quelles tables importer. Les RT seront transportées via MP BGP.<br />
Chaque VRF doit avoir une RD (unique) et une ou plusieurs RT en import et/ou export.</p>
<p>Convention RD :<br />
Numero_as :nombre_aleatoire<br />
ou<br />
IPv4 :nombre_aleatoire</p>
<p>Convention RT :<br />
Numero_as :nombre_aleatoire<br />
ou<br />
IPv4 :nombre_aleatoire</p>
<p>Les RD et RT peuvent ou non avoir la mêmes valeur, cela n’a rien à voir, mais doivent être les mêmes sur tous les routeurs pour la même VRF. Le mot clef both indique que les routes de la vrf crf_client seront exportées et importées sur chaque routeur, ce qui veut dire que si un des routeurs reçoit une màj BGP avec la RT 1:123 il l’injectera dans la table de routage de cette VRF. Le routeur Core n’a pas besoin d’avoir cette VRF de configurée puisqu’il n’a pas d’interfaces configurée dans cette VRF.</p>
<p>On remarque aussi que le client ne sait pas qu’il est dans une VRF, cela est défini uniquement coté FAI.</p>
<h3>PE1 :</h3>
<pre>ip vrf vrf_client
rd 65000:123
route-target both 65000:123</pre>
<h3>PE2 :</h3>
<pre>ip vrf vrf_client
rd 65000:123
route-target both 65000:123</pre>
<h2>Définition des interfaces dans la VRF:</h2>
<h3>PE1 :</h3>
<pre>interface fastethernet 0/1
ip vrf forwarding vrf_client
ip address 172.16.100.254 255.255.255.0
no shut</pre>
<h3>PE2 :</h3>
<pre>interface fastethernet 0/1
ip vrf forwarding vrf_client
ip address 172.16.200.254 255.255.255.0
no shutdown</pre>
<p>Attention de rentrer la commande IP vrf forwarding avant la commande ip address, car les routeurs cisco suppriment la configuration IP lors de l’affectation d’une interface à une vrf.</p>
<pre>PE1(config-if)#ip vrf forwarding vrf_client
% Interface FastEthernet0/1 IP address 172.16.100.254 removed due to enabling VRF vrf_client</pre>
<p>Test ping:<br />
Pout pinger dans une VRF, il vous faut utiliser la commande ping vrf :</p>
<pre>PE1#ping vrf vrf_client 172.16.100.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 172.16.100.1, timeout is 2 seconds:
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 12/33/56 ms</pre>
<h2>Configuration EIGRP</h2>
<p>Au sein de l’AS du client, nous allons utiliser EIGRP. Nous aurions tout aussi pu utiliser OSPF, ou mettre EIGRP dans l’AS fournisseur, mais ça fait un petit rappel ?<br />
Client : AS 65000<br />
FAI : AS 1</p>
<h3>CE1</h3>
<pre>router eigrp 65000
no auto-summary
network 172.16.0.0
network 192.168.1.0</pre>
<h3>CE2</h3>
<pre>router eigrp 65000
no auto-summary
network 172.16.0.0
network 192.168.2.0</pre>
<p>A ce point, on ne voit pas encore de relation de voisinage EIGRP. Chaque IGP à une configuration propre pour les VRFs. Pour EIGRP, dans le processus de routage principal, dans l’AS 1, on peut spécifier d’autres AS pour des VRFs particulières :<br />
Ici, il faut comprendre que les PE sont dans l’AS 1, mais qu’ils vont accepter les routes de l’AS 65000 et les convertir en route VPNV4, qui seront transportées d’un PE à l’autre par BGP.</p>
<h3>PE1 :</h3>
<pre>router eigrp 1
address-family ipv4 vrf vrf_client
autonomous-system 65000
no auto-summary
network 172.16.0.0</pre>
<h3>PE2 :</h3>
<pre>router eigrp 1
address-family ipv4 vrf vrf_client
autonomous-system 65000
no auto-summary
network 172.16.0.0</pre>
<p>On remarque que on ne mélangeras pas les adresses IPv4 et VPNv4, leur configuration sera donc séparée dans la configuration du protocole de routage.<br />
De même que pour la commande ping, il faut spécifier la vrf pour afficher sa table de routage. Si tout s’est bien passé vous devriez avoir quelque chose comme cela :</p>
<pre>*Mar  1 00:46:14.751: %DUAL-5-NBRCHANGE: IP-EIGRP(1) 65000: Neighbor 172.16.200.1 (FastEthernet0/1) is up: new adjacency
PE1#sh ip route vrf vrf_client
Routing Table: vrf_client
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route
Gateway of last resort is not set
     172.16.0.0/24 is subnetted, 2 subnets
D       172.16.10.0 [90/30720] via 172.16.100.1, 00:01:14, FastEthernet0/1
C       172.16.100.0 is directly connected, FastEthernet0/1</pre>
<h2>Configuration BGP</h2>
<p>Bien, nous avons maintenant activé le support du MPLS, le routage interne au cœur du réseau, le routage entre les routeurs d’extrémité et les routeurs client, il ne nous reste plus qu’a configurer BGP afin qu’il transporte les routes d’un point de la VRF à l’autre. Le paramètre après router BGP est le numero d&#8217;AS.</p>
<h3>PE1</h3>
<pre>router bgp 1
neighbor 10.0.3.1 remote-as 1
neighbor 10.0.3.1 update-source loopback0</pre>
<h3>PE2</h3>
<pre>router bgp 1
neighbor 10.0.1.1 remote-as 1
neighbor 10.0.1.1 update-source loopback0</pre>
<p>Il est important de prendre l’habitude de spécifier une adresse source pour les mises à jours BGP, car BGP refuse les mises à jours de voisins dont l’IP n’est pas configurée avec la commande neighbor, ce qui pourrait poser des problème en cas de lien redondant.<br />
On remarque que les voisins ne sont pas directement connectés, d’où l’utilisation d’un protocole de routage en interne au cœur de réseau.</p>
<p>On aura pas d’ailleurs à configurer BGP sur le Core Routeur, les PE vont échanger leur route directement entre eux.<br />
Par défaut, BGP ne transporte et ne reçoit que des routes IPv4, pour transporter les routes des VRFs, BGP enverra des routes VPNv4, il faudra donc activer le support de cette famille d’adresse et définir les voisins avec qui on échangera de type de routes.<br />
Les RT sont translatée comme étant des communautées étendue, il faut donc activer leur support.<br />
En mode de configuration BGP, tapez les commandes suivantes :</p>
<h3>PE1</h3>
<pre>address-family vpnv4
neighbor 10.0.3.1 activate
neighbor 10.0.3.1 send-community both
exit</pre>
<h3>PE2</h3>
<pre>address-family vpnv4
neighbor 10.0.1.1 activate
neighbor 10.0.1.1 send-community both
exit</pre>
<p>Vous devriez observe quelque chose de la sorte:</p>
<pre>*Mar  1 02:14:45.067: %BGP-5-ADJCHANGE: neighbor 10.0.3.1 Up
*Mar  1 02:15:36.291: %BGP-5-ADJCHANGE: neighbor 10.0.3.1 Down Peer closed the session
*Mar  1 02:15:38.543: %BGP-5-ADJCHANGE: neighbor 10.0.3.1 Up</pre>
<p>Il est normal que la relation de voisinage se termine et se réactive.<br />
Maintenant que BGP est configuré pour transporter les routes entre nos deux routeurs PE, il faut lui indiquer ou trouver ces routes. Dans notre cas, elles seront importées depuis EIGRP. Il faudra donc taper ces commandes en mode de configuration BGP:</p>
<h3>PE1</h3>
<pre>address-family ipv4 vrf vrf_client
redistribute eigrp 65000
exit
exit</pre>
<h3>PE2</h3>
<pre>address-family ipv4 vrf vrf_client
redistribute eigrp 65000
exit
exit</pre>
<p>Maintenant, il ne reste plus qu’a dire aux routeurs PE d’injecter les routes apprises par BGP dans l’EIGRP du client (attention, les métriques BGP et EIGRP ne sont pas compatibles, il faut définir leur paramètres):</p>
<h3>PE1</h3>
<pre>router eigrp 1
address-family ipv4 vrf vrf_client
redistribute bgp 1 metric 64 1000 255 1 1500</pre>
<h3>PE2</h3>
<pre>router eigrp 1
address-family ipv4 vrf vrf_client
redistribute bgp 1 metric 64 1000 255 1 1500</pre>
<h2>Vérifications:</h2>
<pre>CE1#sh ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route

Gateway of last resort is not set

     172.16.0.0/24 is subnetted, 4 subnets
D       172.16.200.0 [90/30720] via 172.16.100.254, 00:02:32, FastEthernet0/0
D       172.16.20.0 [90/158720] via 172.16.100.254, 00:02:32, FastEthernet0/0
C       172.16.10.0 is directly connected, Loopback0
C       172.16.100.0 is directly connected, FastEthernet0/0
C    192.168.1.0/24 is directly connected, FastEthernet0/1
D    192.168.2.0/24 [90/33280] via 172.16.100.254, 00:00:10, FastEthernet0/0

CE1#ping 192.168.2.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.2.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 144/212/264 ms

Core#show mpls forwarding-table
Local  Outgoing    Prefix            Bytes tag  Outgoing   Next Hop
tag    tag or VC   or Tunnel Id      switched   interface
16     Pop tag     10.0.3.1/32       4013       Fa0/1      10.0.20.1
17     Pop tag     10.0.1.1/32       4697       Fa0/0      10.0.10.1    

PE1#sh mpls ip binding
  10.0.1.1/32
        in label:     imp-null
        out label:    17        lsr: 10.0.2.1:0
  10.0.2.1/32
        in label:     17
        out label:    imp-null  lsr: 10.0.2.1:0       inuse
  10.0.3.1/32
        in label:     16
        out label:    16        lsr: 10.0.2.1:0       inuse
  10.0.10.0/24
        in label:     imp-null
        out label:    imp-null  lsr: 10.0.2.1:0
  10.0.20.0/24
        in label:     18
        out label:    imp-null  lsr: 10.0.2.1:0       inuse</pre>
<p>C’est pas beau ?</p>
]]></content:encoded>
			<wfw:commentRss>http://bmigette.fr/2008/12/10/mpls-vrfs-bgp-pour-sammuser/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

