VRF-Lite

Toen een vriend van me laatst tot de ontdekking kwam dat ik tegenwoordig mezelf bezig houd met netwerkbeheer had hij een leuke vraag voor me.

Situatie: Meerdere VPN tunnels vanuit verschillende plekken naar 1 centraal datacenter. Deze VPN verbindingen moeten een eindpunt hebben op 1 router, maar de netwerken (iedere VPN tunnel en een apart vlan segment) moeten compleet gescheiden blijven van elkaar.

Hoe los je dat op zonder een gigantische lijst van ACL’s te moeten onderhouden?

Een leuk excuus om eens een weekend aan de slag te gaan met de recente aanwinsten (de Cisco routers). Ik had op het werk bij verschillende projecten al gehoord van “VRF’s” maar die afkorting zei me niet zoveel. Het had wel  te maken met het scheiden van netwerken dus ik had een aanknopingspunt. Ook het begrip MPLS vloog me wel eens om de oren maar hierbij had ik nog geen geweldige voorstelling kunnen maken.

De hoogste tijd dus om hier verandering in te brengen!

MPLS

Al googlend kwam ik tot de conclusie dat een VRF in essentie niet veel meer was dan een soort virtuele router. Ook werd vrijwel altijd het begrip MPLS gebruikt als magische oplossing voor al je problemen. Dus een e-book uit mijn collectie getrokken over de ‘MPLS Fundamentals’ en lezen maar… Tot ik aankwam bij hoofdstuk 3 ofzo, ik kreeg steeds meer het idee dat MPLS zware overkill was.

Even voor de beeldvorming, MPLS is bedoeld als protocol/systeem voor backbone netwerken. Het maakt grote netwerken beter beheersbaar en zorgt voor een andere verdeling van de router-load; in een normaal gerouteerd netwerk moeten alle routers een volledige route tabel hebben, bij MPLS hebben de core routers geen idee van de netwerken die achter de ‘edge-routers’ hangen. De Core routeerd dan niet meer echt, maar switcht eigenlijk op labels. Het mooie van dit systeem is dat je ip niet de unieke identifier is maar het label. Je kan zo dus meerdere keren een zelfde ip reeks in dit netwerk gebruiken (dit zijn uiteraard dan wel virtueel gescheiden netwerken want zonder uniek ip kan je geen ip-connectiviteit hebben met elkaar).

Maar die VRF’s leken zo mooi!?

Opstelling

Gelukkig kwam google met een alternatief gebruik (zonder MPLS) voor VRF’s, het  zogenaamde VRF-Lite. Een VRF op een Cisco router heeft namelijk een eigen route tabel die los staat van de ‘normale’ route tabel. Per interface (of sub-interface als je vlans gebruikt) kan je aangeven of deze  in een VRF zit.

VRF_Lite

In bovenstaande tekening is het test-scenario schematisch weergegeven. Op beide routers zijn 2 Loopback adapters aangemaakt, deze kunnen we later gebruiken om vanaf/naar te pingen, deze simuleren aangesloten PC’s/netwerken.

Configuratie

Op beide routers zijn 2 VRF’s gemaakt, VRF_A en VRF_B. Aan beide kanten van de trunk tussen de routers, zijn 1 vlan sub-interfaces gemaakt. vlan 10 zit aan beide kanten in VRF_A en vlan 20 zit aan beide kanten in VRF_B. Op deze manier kunnen we de VRF_A van de c1712 en  de c1841 met elkaar laten communiceren.

Naast de vlan sub-interface, zit er aan beide zijden ook een Loopback adapter in de VRF. In deze opstelling is dat de vervanger voor een echte interface waaraan een netwerk gekoppeld kan worden.

Tenslotte zijn op beide routers 2 ospf processen gemaakt, 1 per VRF. Deze zorgen voor de dynamische routering binnen de VRF’s.

Resultaten

De routing ziet er dan uit als volgt:

GLOBAL
Hier zien we helemaal geen routering, omdat alle interfaces in een VRF zitten is er geen interface meer over welke in de globale route tabel zit.

c1841#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

VRF_A
Hier zitten Lo1 en Fa0/0.1 in

c1841#sh ip route vrf vrf_a

Routing Table: vrf_a
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, 3 subnets, 2 masks
C       10.0.0.2/32 is directly connected, Loopback1
C       10.0.1.0/30 is directly connected, FastEthernet0/0.1
O       10.0.0.1/32 [110/2] via 10.0.1.1, 08:21:48, FastEthernet0/0.1

VRF_B
Hier zitten Lo2 en Fa0/0.2 in

c1841#sh ip route vrf vrf_b

Routing Table: vrf_b
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, 3 subnets, 2 masks
O       10.0.0.3/32 [110/2] via 10.1.1.1, 08:21:25, FastEthernet0/0.2
C       10.0.2.0/30 is directly connected, FastEthernet0/0.2
C       10.0.0.4/32 is directly connected, Loopback2

Merk op dat in de “globale” route-tabel geen entries staan, er zijn geen interfaces welke niet een VRF zitten en dus wordt deze tabel niet gebruikt.

Als we nu van Lo1 op de c1841 naar Lo1 op de c1712 willen pingen zal dit geen problemen zijn. Willen we  echter pingen van een Lo1 naar een Lo2 dan zal dit niet gaan. Er bestaat geen routering en ze hangen in “verschillende routers”.

c1841#ping vrf vrf_a 10.0.0.1

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

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.0.3, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)
c1841#ping vrf vrf_b 10.0.0.3

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

Config: c1712 c1841

Tags: , , , ,

Leave a Reply

You must be logged in to post a comment.