Uploaded by adamcalu

What is a VRF

advertisement
What is a VRF ?
VRF stands for Virtual Routing and Forwarding, the goal of a VRF is to build
separate routing table that is independent of the main one. VRFs are the same
methods of network isolation/virtualization as VLANs, VLANs are used at the
L2 and VRFs are L3 tools.
A VRF is called different ways across the different vendors and sometimes
even in the same vendor . Cisco calls this VRF, Huawei/HP/H3C call this
vpn routing and Juniper often refers to this as routing instances. In any case the
concept is always the same : We wan to create another routing table which is
independent from the main one and also from the other virtual routing table.
Eventually, VRFs are used to obtain the virtualisation of L3 networks, very
much like this :
There is two main modes of implementation, the first one is called VRF-Lite
and the second one is used for MPLS VPN technologies.
VRF-Lite is the process of linking a VLAN to a VRF, this is most commonly
used on L3 switches where you need to reach the SVI interface to be routed.
In this case we just move the SVIs into the VRFs we want to enter. This is
reprensented like this :
For more advanced scenarii, most L3 protocols “VRF aware”, this means they
can run inside a VRF and only for one.
Scenario
Here we just want to simulate the basic usage of VRFs. Let’s say the network
is divided into department that have strong security concerns, they do not want
to be able to see each other and they have colliding IP address space.
Here is the topology
First we’ll do the basic addressing on R1 and R2 that we’ll name VRF_R1 and
VRF_R2. Then we3’ll create two VRFs on R3 with each interface tied to the
corresponding VRF
On R1,
Interface FastEthernet0/0
ip address 192.168.1.1 255.255.255.0
duplex auto
speed auto
end
interface Loopback0
ip address 1.1.1.1 255.255.255.0
end
On R2,
interface FastEthernet0/0
ip address 192.168.1.2 255.255.255.0
duplex auto
speed auto
end
interface Loopback0
ip address 2.2.2.2 255.255.255.0
end
Now it’s time to configure R3. As you already know, two layer 3 interfaces
of a router cannot be addressed in the same IP space. But with VRFs the fact
is…. it’s not the same IP address space.
So first we configure the VRFs. VRFs are identified by a name. In some
Implementation of the IOS you also need to define a RD which is a Route
Distinguisher (we will see more on this with MPLS VPN) :
On R3
ip vrf VRF_R1
rd 1:1
!
ip vrf VRF_R2
rd 2:2
This is how VRFs are created and we can use the show ip route vrf
VRF_NAME to see it :
R3#show ip route vrf VRF_R1
Routing Table: VRF_R1
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
Now we need to move interfaces into the VRFs, this means that any L3
configuration that will be done on one interface is only going to affect the
VRF it belongs. Most interfaces can be moved into a VRFs (Ethernet,
Loopback, Tunnels…)
On R3,
interface FastEthernet0/0
ip vrf forwarding VRF_R1
no ip address
shutdown
duplex auto
speed auto
!
interface FastEthernet0/1
ip vrf forwarding VRF_R2
no ip address
shutdown
duplex auto
speed auto
Now we can make the L3 configuration on these interfaces and it doesn’t
matter is this is overlapping :
On R3,
interface FastEthernet0/0
ip vrf forwarding VRF_R1
ip address 192.168.1.3 255.255.255.0
shutdown
duplex auto
speed auto
!
interface FastEthernet0/1
ip vrf forwarding VRF_R2
ip address 192.168.1.3 255.255.255.0
shutdown
duplex auto
speed auto
!
Now if we check the routing table of each VRF, we will see information for
each one, take a look at the interfaces :
R3#show ip route vrf VRF_R1
Routing Table: VRF_R1
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
C 192.168.1.0/24 is directly connected, FastEthernet0/0
R3#show ip route vrf VRF_R2
Routing Table: VRF_R2
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
C 192.168.1.0/24 is directly connected, FastEthernet0/1
Each department is able to ping R3 :
R1#ping 192.168.1.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.3, timeout is 2 seconds:
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 20/25/32 ms
R2#ping 192.168.1.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.3, timeout is 2 seconds:
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 20/25/36 ms
Now to ping from R3 to R1 or R2 we need to specify on which VRF we are
located :
R3#ping vrf VRF_R1 192.168.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 12/20/28 ms
R3#ping vrf VRF_R2 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 100 percent (5/5), round-trip min/avg/max = 20/27/36 ms
To route inside a VRF, you need to specify the VRF where you want to add
L3 information. To test this, we need to create a route on R3 to reach the
Loopback on R1 and R2 from within their respective VRFs :
R3(config)#ip route vrf VRF_R1 1.1.1.1 255.255.255.255 192.168.1.1
R3(config)#ip route vrf VRF_R2 2.2.2.2 255.255.255.255 192.168.1.2
R3#ping vrf VRF_R1 1.1.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 1.1.1.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 20/28/44 ms
R3#ping vrf VRF_R2 2.2.2.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 16/30/44 ms
So for everything you want to do inside a VRFs you need to specify the VRF
in which you want to work.
Now let’s push the scenario a little further.
What if the network 1.1.1.0/24 on R1 and the network 2.2.2.0/24 wants to
communicate together despite of the fact they aren’t in the same VRFs ?
Technically there is one way to do this inside R3 to have inter-VRFs
communication but the goal of the VRFs is to enforce the isolation. We need
to route through another L3 device to do so and if we want to enforce security
at this point, the L3 device doing the routing should be a firewall.
R4 is going to take the role of the firewall here, we want to validate the
concept of inter-VRF routing
InterVRF Routing
If we want to do two subinterfaces, we need to route outside of R3 to R4 by
using subinterfaces on R3.
These subinterfaces will belong to their respective VRFs on R3 however
there will be no VRFs configured on R4 so that traffic can enter one
subinterface on R4 and go out the other one linked to the destination VRFs.
Let’s take a look at this :
On R3, we define two subinterfaces going to R4. Each one will be doing
tagging in a different VLAN and placed in a VRF. VLAN tagging is used to
discriminate at Layer 2 between one interface or the other
interface FastEthernet1/0.10
encapsulation dot1Q 10
ip vrf forwarding VRF_R1
ip address 100.1.1.3 255.255.255.0
!
interface FastEthernet1/0.20
encapsulation dot1Q 20
ip vrf forwarding VRF_R2
ip address 100.2.2.3 255.255.255.0
R4 is also configured with subinterfaces but no VRFs :
interface FastEthernet0/0
no ip address
speed 100
full-duplex
!
interface FastEthernet0/0.10
encapsulation dot1Q 10
ip address 100.1.1.4 255.255.255.0
!
interface FastEthernet0/0.20
encapsulation dot1Q 20
ip address 100.2.2.4 255.255.255.0
Now the routing needs to be configured, R1 and R2 will have their default
gateway pointing to R3. As they are not aware of the VRF, the route are only
configured in the global routing table :
On R1 and R2,
ip route 0.0.0.0 0.0.0.0 192.168.1.3
On R3 we also need to configure the default route except here R3 is VRF
aware so we need to specify the next hop in each VRF to the correct
subinterface on R4
On R3,
ip route vrf VRF_R1 0.0.0.0 0.0.0.0 100.1.1.4
ip route vrf VRF_R2 0.0.0.0 0.0.0.0 100.2.2.4
Last but not least, R4 needs to indicate the routes for 1.1.1.0/24 and
2.2.2.0/24.
On R4,
ip route 1.1.1.0 255.255.255.0 100.1.1.3
ip route 2.2.2.0 255.255.255.0 100.2.2.3
Now let’s test the interVRF routing :
R1#ping 2.2.2.2 so lo0
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds:
Packet sent with a source address of 1.1.1.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 76/88/108 ms
Let’s take a look at the traceroute to see the packet path :
R1#traceroute 2.2.2.2 source lo0
Type escape sequence to abort.
Tracing the route to 2.2.2.2
1 192.168.1.3 28 msec 20 msec 20 msec
2 100.1.1.4 36 msec 40 msec 40 msec
3 100.2.2.3 68 msec 52 msec 64 msec
4 192.168.1.2 92 msec * 92 msec
The packet goes through R3 to go out of the VRF by R4 and back to R3 in
the other VRF.
Now if we want to have the overlapping networks to communicate, we need
to use VRF Aware NAT. Each of the VRF will be mapped to another address
that could be taken from a pool or an interface.
First we need to configure two pools for each VRF :
On R3,
ip nat pool VRF1 11.11.11.0 11.11.11.254 netmask 255.255.255.0
ip nat pool VRF2 22.22.22.0 22.22.22.254 netmask 255.255.255.0
Next we need to define which interfaces are going to be part of the NAT, on
R3 we have F0/0, F0/1, F1/0.10 and F1/0.20 :
On R3,
interface range f0/0 , f0/1 , f1/0.10 , f1/0.20
ip nat enable
end
As in standard NAT we can define an ACL that will select which traffic can
be NATed or not :
On R3,
ip access-list standard VRF_R1
permit 192.168.1.0 0.0.0.255
ip access-list standard VRF_R2
permit 192.168.1.0 0.0.0.255
Define two NAT rules, there rules need to be VRF aware :
ip nat source list VRF_R1 pool VRF1 vrf VRF_R1
ip nat source list VRF_R2 pool VRF2 vrf VRF_R2
R4 should have the routes to the NATed destination :
ip route 11.11.11.0 255.255.255.0 100.1.1.3
ip route 22.22.22.0 255.255.255.0 100.2.2.3
And now you can join the loopback by using the ping source from the
192.168.1.x network in each VRFs :
R1#ping 2.2.2.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 40/47/72 ms
R2#
*Mar
*Mar
*Mar
*Mar
*Mar
1 01:16:26.155: ICMP: echo reply sent, src 2.2.2.2, dst 11.11.11.1
1 01:16:26.227: ICMP: echo reply sent, src 2.2.2.2, dst 11.11.11.1
1 01:16:26.247: ICMP: echo reply sent, src 2.2.2.2, dst 11.11.11.1
1 01:16:26.287: ICMP: echo reply sent, src 2.2.2.2, dst 11.11.11.1
1 01:16:26.331: ICMP: echo reply sent, src 2.2.2.2, dst 11.11.11.1
R3#sh ip nat nvi translations vrf VRF_R1
Pro Source global Source local Destin local Destin global
icmp 2.2.2.2:19 2.2.2.2:19 11.11.11.2:19 192.168.1.1:19
icmp 11.11.11.2:19 192.168.1.1:19 2.2.2.2:19 2.2.2.2:19
— 11.11.11.2 192.168.1.1 — —
Of course if you want to join the loopback from the outside you need to make
a static NAT entry, this is a common scenario when hosting services on site.
Enjoy !
Download