From b51b7ad1f321cf77dddd06bb597442619ca836ff Mon Sep 17 00:00:00 2001 From: "L. Repetto" Date: Wed, 20 Apr 2022 15:32:03 -0300 Subject: [PATCH] add apendix-b and topology image --- .../images/inter-vrf-routing-vrf-lite.png | Bin 0 -> 104622 bytes docs/configexamples/index.rst | 1 + .../inter-vrf-routing-vrf-lite.rst | 836 ++++++++++++++++++ 3 files changed, 837 insertions(+) create mode 100644 docs/_static/images/inter-vrf-routing-vrf-lite.png create mode 100644 docs/configexamples/inter-vrf-routing-vrf-lite.rst diff --git a/docs/_static/images/inter-vrf-routing-vrf-lite.png b/docs/_static/images/inter-vrf-routing-vrf-lite.png new file mode 100644 index 0000000000000000000000000000000000000000..3acefee6c244e83cb04a581116c422bf7c8b6af2 GIT binary patch literal 104622 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
Y5^URyMIp?mWvBz_N`u&%ynb` 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 z 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 R0tGnaUMfo$zcBp#zW`^zfEfS) literal 0 HcmV?d00001 diff --git a/docs/configexamples/index.rst b/docs/configexamples/index.rst index aecc3bdd..b90f25ad 100644 --- a/docs/configexamples/index.rst +++ b/docs/configexamples/index.rst @@ -17,6 +17,7 @@ This chapter contains various configuration examples: wan-load-balancing pppoe-ipv6-basic l3vpn-hub-and-spoke + inter-vrf-routing-vrf-lite Configuration Blueprints (autotest) diff --git a/docs/configexamples/inter-vrf-routing-vrf-lite.rst b/docs/configexamples/inter-vrf-routing-vrf-lite.rst new file mode 100644 index 00000000..d5c13e35 --- /dev/null +++ b/docs/configexamples/inter-vrf-routing-vrf-lite.rst @@ -0,0 +1,836 @@ +################################ +Inter-VRF Routing over VRF Lite +################################ + +**Virtual Routing and Forwarding** is a technology that allow multiple instance +of a routing table to exist within a single device. One of the key aspect of +**VRFs** is that do not share the same routes or interfaces, therefore packets +are forwarded between interfaces that belong to the same VRF only. + +Any information related to a VRF is not exchanged between devices -or in the +same device- by default, this is a technique called **VRF-Lite**. + +Keep networks isolated is -in general- a good principle, but there are cases +where you might need that some network can access other in a different VRF. + +The scope of this document is to cover such cases in a dynamic way without the +use of MPLS-LDP. + +******** +Overview +******** + +Let’s say we have a requirement to have multiple networks. + +* LAN 1 +* LAN 2 +* Management +* Internet + +Both LANs have to be able to route between each other, both will have managed +devices through a dedicated management network and both will need Internet +access yet the LAN2 will need access to some set of outside networks, not all. +The management network will need access to both LANs but cannot have access +to/from the outside. + +This scenario could be a nightmare applying regular routing and might need +filtering in multiple interfaces. + +A simple solution could be using different routing tables, or VRFs +for all the networks so we can keep the routing restrictions. +But for us to route between the different VRFs we would need a cable or a +logical connection between each other: + +* One cable/logical connection between LAN1 and LAN2 +* One cable/logical connection between LAN1 and Internet +* One cable/logical connection between LAN2 and Internet +* One cable/logical connection between LAN1 and Management +* One cable/logical connection between LAN2 and Management + +As we can see this is unpractical. + +To address this scenario we will use to our advantage an extension of the BGP +routing protocol that will help us in the “Export” between VRFs without the +need for MPLS. + +MP-BGP or MultiProtocol BGP introduces two main concepts to solve this +limitation: +- Route Distinguisher (RD): Is used to distinguish between different VRFs +–called VPNs- inside the BGP Process. The RD is appended to each IPv4 Network +that is advertised into BGP for that VPN making it a unique VPNv4 route. +- Route Target (RT): This is an extended BGP community append to the VPNv4 route +in the Import/Export process. When a route passes from the VRF routing table +into the BGP process it will add the configured export extended community(ies) +for that VPN. When that route needs to go from BGP into the VRF routing table +will only pass if that given VPN import policy matches any of the appended +community(ies) into that prefix. + +******** +Topology +******** + +.. image:: /_static/images/inter-vrf-routing-vrf-lite.png + :width: 70% + :align: left + :alt: Network Topology Diagram + +IP Schema +========= + ++----------+------------+----------------+------------------+ +| Device-A | Device-B | IPv4 Network | IPv6 Network | ++----------+------------+----------------+------------------+ +| Core | LAN1 | 10.1.1.0/30 | 2001:db8::/127 | ++----------+------------+----------------+------------------+ +| Core | LAN2 | 172.16.2.0/30 | 2001:db8::2/127 | ++----------+------------+----------------+------------------+ +| Core | Management | 192.168.3.0/30 | 2001:db8::4/127 | ++----------+------------+----------------+------------------+ +| Core | ISP | 10.2.2.0/30 | 2001:db8::6/127 | ++----------+------------+----------------+------------------+ + +RD & RT Schema +============== + ++------------+-----------+-----------+ +| VRF | RD | RT | ++------------+-----------+-----------+ +| LAN1 | 64496:1 | 64496:1 | ++------------+-----------+-----------+ +| LAN2 | 64496:2 | 64496:2 | ++------------+-----------+-----------+ +| Management | 64496:50 | 64496:50 | ++------------+-----------+-----------+ +| Internet | 64496:100 | 64496:100 | ++------------+-----------+-----------+ + +************** +Configurations +************** + +.. note:: We use a static route configuration in between the Core and each + LAN and Management router, and BGP between the Core router and the ISP router + but any dynamic routing protocol can be used. + +Remote Networks +=============== + +The following template configuration can be used in each remote router based +in our topology. + +.. code-block:: none + + # Interface Configuration + set interface eth eth address + + # Static default route back to Core + set procotols static route 0.0.0.0/0 next-hop + +Core Router +=========== + +Step 1: VRF and Configurations to remote networks +------------------------------------------------- + +- Configuration +^^^^^^^^^^^^^^^ + +Set the VRF name and Table ID, set interface address and bind it to the VRF. +Last add the static route to the remote network. + +.. code-block:: none + + # VRF name and table ID (MANDATORY) + set vrf name table + + # Interface Configuration + set interface eth eth address + + # Assign interface to VRF + set interface eth eth vrf + + # Static route to remote Network + set vrf name protocols static route next-hop + +- Verification +^^^^^^^^^^^^^^ + +Checking the routing table of the VRF should reveal both static and connected +entries active. A PING test between the Core and remote router is a way to +validate connectivity within the VRF. + +.. code-block:: none + + # show ip route vrf + # show ipv6 route vrf + + vyos@Core:~$ show ip route vrf LAN1 + Codes: K - kernel route, C - connected, S - static, R - RIP, + O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP, + T - Table, v - VNC, V - VNC-Direct, A - Babel, F - PBR, + f - OpenFabric, + > - selected route, * - FIB route, q - queued, r - rejected, b - backup + t - trapped, o - offload failure + + VRF LAN1: + S>* 10.0.0.0/24 [1/0] via 10.1.1.2, eth0, weight 1, 00:05:41 + C>* 10.1.1.0/30 is directly connected, eth0, 00:05:44 + + vyos@Core:~$ show ipv6 route vrf LAN1 + Codes: K - kernel route, C - connected, S - static, R - RIPng, + O - OSPFv3, I - IS-IS, B - BGP, N - NHRP, T - Table, + v - VNC, V - VNC-Direct, A - Babel, F - PBR, + f - OpenFabric, + > - selected route, * - FIB route, q - queued, r - rejected, b - backup + t - trapped, o - offload failure + + VRF LAN1: + C>* 2001:db8::/127 is directly connected, eth0, 00:18:43 + S>* 2001:db8:0:1::/64 [1/0] via 2001:db8::1, eth0, weight 1, 00:16:03 + C>* fe80::/64 is directly connected, eth0, 00:18:43 + + # ping vrf + + vyos@Core:~$ ping 10.1.1.2 vrf LAN1 + PING 10.1.1.2 (10.1.1.2) 56(84) bytes of data. + 64 bytes from 10.1.1.2: icmp_seq=1 ttl=64 time=1.52 ms + 64 bytes from 10.1.1.2: icmp_seq=2 ttl=64 time=0.830 ms + ^C + --- 10.1.1.2 ping statistics --- + 2 packets transmitted, 2 received, 0% packet loss, time 1002ms + rtt min/avg/max/mdev = 0.830/1.174/1.518/0.344 ms + vyos@Core:~$ ping 10.0.0.1 vrf LAN1 + PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data. + 64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.785 ms + 64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.948 ms + ^C + --- 10.0.0.1 ping statistics --- + 2 packets transmitted, 2 received, 0% packet loss, time 1002ms + rtt min/avg/max/mdev = 0.785/0.866/0.948/0.081 ms + + vyos@Core:~$ ping 2001:db8:0:1::1 vrf LAN1 + PING 2001:db8:0:1::1(2001:db8:0:1::1) 56 data bytes + 64 bytes from 2001:db8:0:1::1: icmp_seq=1 ttl=64 time=3.04 ms + 64 bytes from 2001:db8:0:1::1: icmp_seq=2 ttl=64 time=1.04 ms + 64 bytes from 2001:db8:0:1::1: icmp_seq=3 ttl=64 time=0.925 ms + ^C + --- 2001:db8:0:1::1 ping statistics --- + 3 packets transmitted, 3 received, 0% packet loss, time 2004ms + rtt min/avg/max/mdev = 0.925/1.665/3.035/0.969 ms + +Step 2: BGP Configuration for VRF-Lite +-------------------------------------- + +- Configuration +^^^^^^^^^^^^^^^ + +Setting BGP global local-as as well inside the VRF. Redistribute static routes +to inject configured networks into the BGP process but still inside the VRF. + + +.. code-block:: none + + # set BGP global local-as + set protocols bgp local-as + + # set BGP VRF local-as and redistribution + set vrf name protocols bgp local-as + set vrf name protocols bgp address-family redistribute static + +- Verification +^^^^^^^^^^^^^^ + +Check the BGP VRF table and verify if the static routes are injected showing +the correct next-hop information. + +.. code-block:: none + + # show ip bgp vrf + # show bgp vrf ipv6 + + vyos@Core:~$ show ip bgp vrf LAN1 + BGP table version is 3, local router ID is 10.1.1.1, vrf id 8 + Default local pref 100, local AS 64496 + Status codes: s suppressed, d damped, h history, * valid, > best, = multipath, + i internal, r RIB-failure, S Stale, R Removed + Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self + Origin codes: i - IGP, e - EGP, ? - incomplete + RPKI validation codes: V valid, I invalid, N Not found + + Network Next Hop Metric LocPrf Weight Path + *> 10.0.0.0/24 10.1.1.2 0 32768 ? + + vyos@Core# run show bgp vrf LAN1 ipv6 + BGP table version is 13, local router ID is 10.1.1.1, vrf id 8 + Default local pref 100, local AS 64496 + Status codes: s suppressed, d damped, h history, * valid, > best, = multipath, + i internal, r RIB-failure, S Stale, R Removed + Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self + Origin codes: i - IGP, e - EGP, ? - incomplete + RPKI validation codes: V valid, I invalid, N Not found + + Network Next Hop Metric LocPrf Weight Path + *> 2001:db8:0:1::/64 + 2001:db8::1 0 32768 ? + + +Step 3: VPN Configuration +------------------------- + +- Configuration +^^^^^^^^^^^^^^^ + +Within the VRF we set the Route-Distinguisher (RD) and Route-Targets (RT), then +we enable the export/import VPN. + + +.. code-block:: none + + # set Route-distinguisher + set vrf name protocols bgp address-family rd vpn export '' + + # set route-target for import/export + # Note: RT are a list that can be more than one community between apostrophe + # and separated by blank space. Ex: ' ' + set vrf name protocols bgp address-family route-target vpn export '' + set vrf name protocols bgp address-family route-target vpn import '' + + # Enable VPN export/import under this VRF + set vrf name protocols bgp address-family export vpn + set vrf name protocols bgp address-family import vpn + +A key point to understand is that if we need two VRFs to communicate between +each other EXPORT rt from VRF1 has to be in the IMPORT rt list from VRF2. But +this is only in ONE direction, to complete the communication the EXPORT rt from +VRF2 has to be in the IMPORT rt list from VRF1. + +There are some cases where this is not needed -for example, in some +DDoS appliance- but most inter-vrf routing designs use the above configurations. + +- Verification +^^^^^^^^^^^^^^ + +After configured all the VRFs involved in this topology we take a deeper look +at both BGP and Routing table for the VRF LAN1 + +.. code-block:: none + + # show ip bgp vrf + # show bgp vrf ipv6 + + vyos@Core# run show ip bgp vrf LAN1 + BGP table version is 53, local router ID is 10.1.1.1, vrf id 8 + Default local pref 100, local AS 64496 + Status codes: s suppressed, d damped, h history, * valid, > best, = multipath, + i internal, r RIB-failure, S Stale, R Removed + Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self + Origin codes: i - IGP, e - EGP, ? - incomplete + RPKI validation codes: V valid, I invalid, N Not found + + Network Next Hop Metric LocPrf Weight Path + *> 0.0.0.0/0 10.2.2.2@7< 0 64497 i + *> 10.0.0.0/24 10.1.1.2 0 32768 ? + *> 10.2.2.0/30 10.2.2.2@7< 0 0 64497 ? + *> 192.0.2.0/24 10.2.2.2@7< 0 0 64497 ? + *> 192.168.0.0/24 192.168.3.2@11< 0 32768 ? + *> 198.51.100.0/24 10.2.2.2@7< 0 0 64497 ? + *> 203.0.113.0/24 10.2.2.2@7< 0 0 64497 ? + + vyos@Core# run show bgp vrf LAN1 ipv6 + BGP table version is 13, local router ID is 10.1.1.1, vrf id 8 + Default local pref 100, local AS 64496 + Status codes: s suppressed, d damped, h history, * valid, > best, = multipath, + i internal, r RIB-failure, S Stale, R Removed + Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self + Origin codes: i - IGP, e - EGP, ? - incomplete + RPKI validation codes: V valid, I invalid, N Not found + + Network Next Hop Metric LocPrf Weight Path + *> ::/0 fe80::5200:ff:fe02:3@7< + 0 64497 i + *> 2001:db8::6/127 fe80::5200:ff:fe02:3@7< + 0 0 64497 ? + *> 2001:db8:0:1::/64 + 2001:db8::1 0 32768 ? + *> 2001:db8:0:3::/64 + 2001:db8::5@11< 0 32768 ? + *> 2001:db8:1::/48 fe80::5200:ff:fe02:3@7< + 0 0 64497 ? + *> 2001:db8:2::/48 fe80::5200:ff:fe02:3@7< + 0 0 64497 ? + *> 2001:db8:3::/48 fe80::5200:ff:fe02:3@7< + 0 0 64497 ? + + + # show ip route vrf + # show ipv6 route vrf + + vyos@Core:~$ show ip route vrf LAN1 + Codes: K - kernel route, C - connected, S - static, R - RIP, + O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP, + T - Table, v - VNC, V - VNC-Direct, A - Babel, F - PBR, + f - OpenFabric, + > - selected route, * - FIB route, q - queued, r - rejected, b - backup + t - trapped, o - offload failure + + VRF LAN1: + B>* 0.0.0.0/0 [20/0] via 10.2.2.2, eth3 (vrf Internet), weight 1, 00:00:38 + S>* 10.0.0.0/24 [1/0] via 10.1.1.2, eth0, weight 1, 00:29:57 + C>* 10.1.1.0/30 is directly connected, eth0, 00:29:59 + B 10.2.2.0/30 [20/0] via 10.2.2.2 (vrf Internet) inactive, weight 1, 00:00:38 + B>* 172.16.0.0/24 [20/0] via 172.16.2.2, eth1 (vrf LAN2), weight 1, 00:00:38 + B>* 192.0.2.0/24 [20/0] via 10.2.2.2, eth3 (vrf Internet), weight 1, 00:00:38 + B>* 198.51.100.0/24 [20/0] via 10.2.2.2, eth3 (vrf Internet), weight 1, 00:00:38 + B>* 203.0.113.0/24 [20/0] via 10.2.2.2, eth3 (vrf Internet), weight 1, 00:00:38 + + vyos@Core# run show ipv6 route vrf LAN1 + Codes: K - kernel route, C - connected, S - static, R - RIPng, + O - OSPFv3, I - IS-IS, B - BGP, N - NHRP, T - Table, + v - VNC, V - VNC-Direct, A - Babel, F - PBR, + f - OpenFabric, + > - selected route, * - FIB route, q - queued, r - rejected, b - backup + t - trapped, o - offload failure + + VRF LAN1: + B>* ::/0 [20/0] via fe80::5200:ff:fe02:3, eth3 (vrf Internet), weight 1, 00:07:50 + C>* 2001:db8::/127 is directly connected, eth0, 05:33:43 + B>* 2001:db8::6/127 [20/0] via fe80::5200:ff:fe02:3, eth3 (vrf Internet), weight 1, 00:07:50 + S>* 2001:db8:0:1::/64 [1/0] via 2001:db8::1, eth0, weight 1, 05:31:03 + B>* 2001:db8:0:3::/64 [20/0] via 2001:db8::5, eth2 (vrf Management), weight 1, 00:07:50 + B>* 2001:db8:1::/48 [20/0] via fe80::5200:ff:fe02:3, eth3 (vrf Internet), weight 1, 00:07:50 + B>* 2001:db8:2::/48 [20/0] via fe80::5200:ff:fe02:3, eth3 (vrf Internet), weight 1, 00:07:50 + B>* 2001:db8:3::/48 [20/0] via fe80::5200:ff:fe02:3, eth3 (vrf Internet), weight 1, 00:07:50 + C>* fe80::/64 is directly connected, eth0, 05:33:43 + + +As we can see in the BGP table any imported route has been injected with a "@" +followed by the VPN id; In the routing table of the VRF, if the route was +installed, we can see -between round brackets- the exported VRF table. + +Step 4: End to End verification +------------------------------- + +Now we perform some end-to-end testing + +- From Management to LAN1/LAN2 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: none + + vyos@Management:~$ ping 10.0.0.1 source-address 192.168.0.1 + PING 10.0.0.1 (10.0.0.1) from 192.168.0.1 : 56(84) bytes of data. + 64 bytes from 10.0.0.1: icmp_seq=1 ttl=63 time=1.93 ms + 64 bytes from 10.0.0.1: icmp_seq=2 ttl=63 time=2.12 ms + 64 bytes from 10.0.0.1: icmp_seq=3 ttl=63 time=2.12 ms + ^C + --- 10.0.0.1 ping statistics --- + 3 packets transmitted, 3 received, 0% packet loss, time 2005ms + rtt min/avg/max/mdev = 1.931/2.056/2.123/0.088 ms + vyos@Management:~$ ping 172.16.0.1 source-address 192.168.0.1 + PING 172.16.0.1 (172.16.0.1) from 192.168.0.1 : 56(84) bytes of data. + 64 bytes from 172.16.0.1: icmp_seq=1 ttl=63 time=1.62 ms + 64 bytes from 172.16.0.1: icmp_seq=2 ttl=63 time=1.75 ms + ^C + --- 172.16.0.1 ping statistics --- + 2 packets transmitted, 2 received, 0% packet loss, time 1001ms + rtt min/avg/max/mdev = 1.621/1.686/1.752/0.065 ms + vyos@Management:~$ ping 2001:db8:0:1::1 source-address 2001:db8:0:3::1 + PING 2001:db8:0:1::1(2001:db8:0:1::1) from 2001:db8:0:3::1 : 56 data bytes + 64 bytes from 2001:db8:0:1::1: icmp_seq=1 ttl=63 time=2.44 ms + 64 bytes from 2001:db8:0:1::1: icmp_seq=2 ttl=63 time=2.40 ms + 64 bytes from 2001:db8:0:1::1: icmp_seq=3 ttl=63 time=2.41 ms + ^C + --- 2001:db8:0:1::1 ping statistics --- + 3 packets transmitted, 3 received, 0% packet loss, time 2003ms + rtt min/avg/max/mdev = 2.399/2.418/2.442/0.017 ms + vyos@Management:~$ ping 2001:db8:0:2::1 source-address 2001:db8:0:3::1 + PING 2001:db8:0:2::1(2001:db8:0:2::1) from 2001:db8:0:3::1 : 56 data bytes + 64 bytes from 2001:db8:0:2::1: icmp_seq=1 ttl=63 time=1.66 ms + 64 bytes from 2001:db8:0:2::1: icmp_seq=2 ttl=63 time=1.99 ms + 64 bytes from 2001:db8:0:2::1: icmp_seq=3 ttl=63 time=1.88 ms + 64 bytes from 2001:db8:0:2::1: icmp_seq=4 ttl=63 time=2.32 ms + ^C + --- 2001:db8:0:2::1 ping statistics --- + 4 packets transmitted, 4 received, 0% packet loss, time 3005ms + rtt min/avg/max/mdev = 1.660/1.960/2.315/0.236 ms + +- From Management to Outside (fails as intended) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: none + + vyos@Management:~$ show ip route + Codes: K - kernel route, C - connected, S - static, R - RIP, + O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP, + T - Table, v - VNC, V - VNC-Direct, A - Babel, F - PBR, + f - OpenFabric, + > - selected route, * - FIB route, q - queued, r - rejected, b - backup + t - trapped, o - offload failure + + S>* 0.0.0.0/0 [1/0] via 192.168.3.1, eth2, weight 1, 00:01:58 + C>* 192.168.0.0/24 is directly connected, dum0, 00:02:05 + C>* 192.168.3.0/30 is directly connected, eth2, 00:02:03 + vyos@Management:~$ ping 192.0.2.1 + PING 192.0.2.1 (192.0.2.1) 56(84) bytes of data. + From 192.168.3.1 icmp_seq=1 Destination Net Unreachable + From 192.168.3.1 icmp_seq=2 Destination Net Unreachable + ^C + --- 192.0.2.1 ping statistics --- + 2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 1002ms + + vyos@Management:~$ ping 195.51.100.1 + PING 195.51.100.1 (195.51.100.1) 56(84) bytes of data. + From 192.168.3.1 icmp_seq=1 Destination Net Unreachable + From 192.168.3.1 icmp_seq=2 Destination Net Unreachable + From 192.168.3.1 icmp_seq=3 Destination Net Unreachable + ^C + --- 195.51.100.1 ping statistics --- + 3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2003ms + + vyos@Management:~$ ping 2001:db8:1::1 + PING 2001:db8:1::1(2001:db8:1::1) 56 data bytes + From 2001:db8::4 icmp_seq=1 Destination unreachable: No route + From 2001:db8::4 icmp_seq=2 Destination unreachable: No route + ^C + --- 2001:db8:1::1 ping statistics --- + 2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 1002ms + + vyos@Management:~$ ping 2001:db8:2::1 + PING 2001:db8:2::1(2001:db8:2::1) 56 data bytes + From 2001:db8::4 icmp_seq=1 Destination unreachable: No route + From 2001:db8::4 icmp_seq=2 Destination unreachable: No route + ^C + --- 2001:db8:2::1 ping statistics --- + 2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 1002ms + + +- LAN1 to Outside +^^^^^^^^^^^^^^^^^ + +.. code-block:: none + + vyos@LAN1:~$ ping 192.0.2.1 source-address 10.0.0.1 + PING 192.0.2.1 (192.0.2.1) from 10.0.0.1 : 56(84) bytes of data. + 64 bytes from 192.0.2.1: icmp_seq=1 ttl=63 time=1.47 ms + 64 bytes from 192.0.2.1: icmp_seq=2 ttl=63 time=1.41 ms + 64 bytes from 192.0.2.1: icmp_seq=3 ttl=63 time=1.80 ms + ^C + --- 192.0.2.1 ping statistics --- + 3 packets transmitted, 3 received, 0% packet loss, time 2004ms + rtt min/avg/max/mdev = 1.414/1.563/1.803/0.171 ms + vyos@LAN1:~$ ping 198.51.100.1 source-address 10.0.0.1 + PING 198.51.100.1 (198.51.100.1) from 10.0.0.1 : 56(84) bytes of data. + 64 bytes from 198.51.100.1: icmp_seq=1 ttl=63 time=1.71 ms + 64 bytes from 198.51.100.1: icmp_seq=2 ttl=63 time=1.83 ms + ^C + --- 198.51.100.1 ping statistics --- + 2 packets transmitted, 2 received, 0% packet loss, time 1002ms + rtt min/avg/max/mdev = 1.705/1.766/1.828/0.061 ms + vyos@LAN1:~$ ping 203.0.113.1 source-address 10.0.0.1 + PING 203.0.113.1 (203.0.113.1) from 10.0.0.1 : 56(84) bytes of data. + 64 bytes from 203.0.113.1: icmp_seq=1 ttl=63 time=1.25 ms + 64 bytes from 203.0.113.1: icmp_seq=2 ttl=63 time=1.88 ms + ^C + --- 203.0.113.1 ping statistics --- + 2 packets transmitted, 2 received, 0% packet loss, time 1003ms + rtt min/avg/max/mdev = 1.249/1.566/1.884/0.317 ms + vyos@LAN1:~$ ping 2001:db8:1::1 source-address 2001:db8:0:1::1 + PING 2001:db8:1::1(2001:db8:1::1) from 2001:db8:0:1::1 : 56 data bytes + 64 bytes from 2001:db8:1::1: icmp_seq=1 ttl=63 time=2.35 ms + 64 bytes from 2001:db8:1::1: icmp_seq=2 ttl=63 time=2.29 ms + 64 bytes from 2001:db8:1::1: icmp_seq=3 ttl=63 time=2.22 ms + ^C + --- 2001:db8:1::1 ping statistics --- + 3 packets transmitted, 3 received, 0% packet loss, time 2004ms + rtt min/avg/max/mdev = 2.215/2.285/2.352/0.055 ms + vyos@LAN1:~$ ping 2001:db8:2::1 source-address 2001:db8:0:1::1 + PING 2001:db8:2::1(2001:db8:2::1) from 2001:db8:0:1::1 : 56 data bytes + 64 bytes from 2001:db8:2::1: icmp_seq=1 ttl=63 time=1.37 ms + 64 bytes from 2001:db8:2::1: icmp_seq=2 ttl=63 time=2.68 ms + 64 bytes from 2001:db8:2::1: icmp_seq=3 ttl=63 time=2.00 ms + ^C + --- 2001:db8:2::1 ping statistics --- + 3 packets transmitted, 3 received, 0% packet loss, time 2003ms + rtt min/avg/max/mdev = 1.367/2.015/2.679/0.535 ms + + +.. note:: we are using "source-address" option cause we are not redistributing + connected interfaces into BGP on the Core router hence there is no comeback + route and ping will fail. + +- LAN1 to LAN2 +^^^^^^^^^^^^^^ + +.. code-block:: none + + vyos@LAN1:~$ ping 172.16.0.1 source-address 10.0.0.1 + PING 172.16.0.1 (172.16.0.1) from 10.0.0.1 : 56(84) bytes of data. + 64 bytes from 172.16.0.1: icmp_seq=1 ttl=63 time=3.00 ms + 64 bytes from 172.16.0.1: icmp_seq=2 ttl=63 time=2.20 ms + ^C + --- 172.16.0.1 ping statistics --- + 2 packets transmitted, 2 received, 0% packet loss, time 1002ms + rtt min/avg/max/mdev = 2.199/2.600/3.001/0.401 ms + vyos@LAN1:~$ ping 2001:db8:0:2::1 source 2001:db8:0:1::1 + PING 2001:db8:0:2::1(2001:db8:0:2::1) from 2001:db8:0:1::1 : 56 data bytes + 64 bytes from 2001:db8:0:2::1: icmp_seq=1 ttl=63 time=4.82 ms + 64 bytes from 2001:db8:0:2::1: icmp_seq=2 ttl=63 time=1.95 ms + 64 bytes from 2001:db8:0:2::1: icmp_seq=3 ttl=63 time=1.98 ms + ^C + --- 2001:db8:0:2::1 ping statistics --- + 3 packets transmitted, 3 received, 0% packet loss, time 2003ms + rtt min/avg/max/mdev = 1.949/2.915/4.815/1.343 ms + +*********** +Conclusions +*********** + +Inter-VRF routing is a well-known solution to address complex routing scenarios +that enable -in a dynamic way- to leak routes between VRFs. Is recommended to +take special consideration while designing route-targets and its application as +it can minimize future interventions while creating a new VRF will automatically +take the desired effect in its propagation. + +********** +Appendix-A +********** + +Full configuration from all devices +----------------------------------- + +- Core +^^^^^^ + +.. code-block:: none + + set interfaces ethernet eth0 address '10.1.1.1/30' + set interfaces ethernet eth0 address '2001:db8::/127' + set interfaces ethernet eth0 vrf 'LAN1' + set interfaces ethernet eth1 address '172.16.2.1/30' + set interfaces ethernet eth1 address '2001:db8::2/127' + set interfaces ethernet eth1 vrf 'LAN2' + set interfaces ethernet eth2 address '192.168.3.1/30' + set interfaces ethernet eth2 address '2001:db8::4/127' + set interfaces ethernet eth2 vrf 'Management' + set interfaces ethernet eth3 address '10.2.2.1/30' + set interfaces ethernet eth3 address '2001:db8::6/127' + set interfaces ethernet eth3 vrf 'Internet' + set protocols bgp address-family ipv4-unicast + set protocols bgp local-as '64496' + set vrf name Internet protocols bgp address-family ipv4-unicast export vpn + set vrf name Internet protocols bgp address-family ipv4-unicast import vpn + set vrf name Internet protocols bgp address-family ipv4-unicast rd vpn export '64496:100' + set vrf name Internet protocols bgp address-family ipv4-unicast route-target vpn export '64496:100' + set vrf name Internet protocols bgp address-family ipv4-unicast route-target vpn import '64496:1 64496:2' + set vrf name Internet protocols bgp address-family ipv6-unicast export vpn + set vrf name Internet protocols bgp address-family ipv6-unicast import vpn + set vrf name Internet protocols bgp address-family ipv6-unicast rd vpn export '64496:100' + set vrf name Internet protocols bgp address-family ipv6-unicast route-target vpn export '64496:100' + set vrf name Internet protocols bgp address-family ipv6-unicast route-target vpn import '64496:1 64496:2' + set vrf name Internet protocols bgp local-as '64496' + set vrf name Internet protocols bgp neighbor 10.2.2.2 address-family ipv4-unicast + set vrf name Internet protocols bgp neighbor 10.2.2.2 remote-as '64497' + set vrf name Internet protocols bgp neighbor 2001:db8::7 address-family ipv6-unicast + set vrf name Internet protocols bgp neighbor 2001:db8::7 remote-as '64497' + set vrf name Internet table '104' + set vrf name LAN1 protocols bgp address-family ipv4-unicast export vpn + set vrf name LAN1 protocols bgp address-family ipv4-unicast import vpn + set vrf name LAN1 protocols bgp address-family ipv4-unicast rd vpn export '64496:1' + set vrf name LAN1 protocols bgp address-family ipv4-unicast redistribute static + set vrf name LAN1 protocols bgp address-family ipv4-unicast route-target vpn export '64496:1' + set vrf name LAN1 protocols bgp address-family ipv4-unicast route-target vpn import '64496:100 64996:50 64496:2' + set vrf name LAN1 protocols bgp address-family ipv6-unicast export vpn + set vrf name LAN1 protocols bgp address-family ipv6-unicast import vpn + set vrf name LAN1 protocols bgp address-family ipv6-unicast rd vpn export '64496:1' + set vrf name LAN1 protocols bgp address-family ipv6-unicast redistribute static + set vrf name LAN1 protocols bgp address-family ipv6-unicast route-target vpn export '64496:1' + set vrf name LAN1 protocols bgp address-family ipv6-unicast route-target vpn import '64496:100 64496:50 64496:2' + set vrf name LAN1 protocols bgp local-as '64496' + set vrf name LAN1 protocols static route 10.0.0.0/24 next-hop 10.1.1.2 + set vrf name LAN1 protocols static route6 2001:db8:0:1::/64 next-hop 2001:db8::1 + set vrf name LAN1 table '101' + set vrf name LAN2 protocols bgp address-family ipv4-unicast export vpn + set vrf name LAN2 protocols bgp address-family ipv4-unicast import vpn + set vrf name LAN2 protocols bgp address-family ipv4-unicast rd vpn export '64496:2' + set vrf name LAN2 protocols bgp address-family ipv4-unicast redistribute static + set vrf name LAN2 protocols bgp address-family ipv4-unicast route-target vpn export '64496:2' + set vrf name LAN2 protocols bgp address-family ipv4-unicast route-target vpn import '64496:100 64496:50 64496:1' + set vrf name LAN2 protocols bgp address-family ipv6-unicast export vpn + set vrf name LAN2 protocols bgp address-family ipv6-unicast import vpn + set vrf name LAN2 protocols bgp address-family ipv6-unicast rd vpn export '64496:2' + set vrf name LAN2 protocols bgp address-family ipv6-unicast redistribute static + set vrf name LAN2 protocols bgp address-family ipv6-unicast route-target vpn export '64496:2' + set vrf name LAN2 protocols bgp address-family ipv6-unicast route-target vpn import '64496:100 64496:50 64496:1' + set vrf name LAN2 protocols bgp local-as '64496' + set vrf name LAN2 protocols static route 172.16.0.0/24 next-hop 172.16.2.2 + set vrf name LAN2 protocols static route6 2001:db8:0:2::/64 next-hop 2001:db8::3 + set vrf name LAN2 table '102' + set vrf name Management protocols bgp address-family ipv4-unicast export vpn + set vrf name Management protocols bgp address-family ipv4-unicast import vpn + set vrf name Management protocols bgp address-family ipv4-unicast rd vpn export '64496:50' + set vrf name Management protocols bgp address-family ipv4-unicast redistribute static + set vrf name Management protocols bgp address-family ipv4-unicast route-target vpn export '64496:50' + set vrf name Management protocols bgp address-family ipv4-unicast route-target vpn import '64496:1 64496:2' + set vrf name Management protocols bgp address-family ipv6-unicast export vpn + set vrf name Management protocols bgp address-family ipv6-unicast import vpn + set vrf name Management protocols bgp address-family ipv6-unicast rd vpn export '64496:50' + set vrf name Management protocols bgp address-family ipv6-unicast redistribute static + set vrf name Management protocols bgp address-family ipv6-unicast route-target vpn export '64496:50' + set vrf name Management protocols bgp address-family ipv6-unicast route-target vpn import '64496:1 64496:2' + set vrf name Management protocols bgp local-as '64496' + set vrf name Management protocols static route 192.168.0.0/24 next-hop 192.168.3.2 + set vrf name Management protocols static route6 2001:db8:0:3::/64 next-hop 2001:db8::5 + set vrf name Management table '103' + + +- LAN1 +^^^^^^ + +.. code-block:: none + + set interfaces dummy dum0 address '10.0.0.1/24' + set interfaces dummy dum0 address '2001:db8:0:1::1/64' + set interfaces ethernet eth0 address '10.1.1.2/30' + set interfaces ethernet eth0 address '2001:db8::1/127' + set protocols static route 0.0.0.0/0 next-hop 10.1.1.1 + set protocols static route6 ::/0 next-hop 2001:db8::* + +- LAN2 +^^^^^^ + +.. code-block:: none + set interfaces dummy dum0 address '172.16.0.1/24' + set interfaces dummy dum0 address '2001:db8:0:2::1/64' + set interfaces ethernet eth0 hw-id '50:00:00:03:00:00' + set interfaces ethernet eth1 address '172.16.2.2/30' + set interfaces ethernet eth1 address '2001:db8::3/127' + set protocols static route 0.0.0.0/0 next-hop 172.16.2.1 + set protocols static route6 ::/0 next-hop 2001:db8::2 + +- Management +^^^^^^^^^^^^ + +.. code-block:: none + + set interfaces dummy dum0 address '192.168.0.1/24' + set interfaces dummy dum0 address '2001:db8:0:3::1/64' + set interfaces ethernet eth2 address '192.168.3.2/30' + set interfaces ethernet eth2 address '2001:db8::5/127' + set protocols static route 0.0.0.0/0 next-hop 192.168.3.1 + set protocols static route6 ::/0 next-hop 2001:db8::4 + +- ISP +^^^^^ + +.. code-block:: none + + set interfaces dummy dum0 address '192.0.2.1/24' + set interfaces dummy dum0 address '2001:db8:1::1/48' + set interfaces dummy dum1 address '198.51.100.1/24' + set interfaces dummy dum1 address '2001:db8:2::1/48' + set interfaces dummy dum2 address '203.0.113.1/24' + set interfaces dummy dum2 address '2001:db8:3::1/48' + set interfaces ethernet eth3 address '10.2.2.2/30' + set interfaces ethernet eth3 address '2001:db8::7/127' + set protocols bgp address-family ipv4-unicast redistribute connected + set protocols bgp address-family ipv6-unicast redistribute connected + set protocols bgp local-as '64497' + set protocols bgp neighbor 10.2.2.1 address-family ipv4-unicast default-originate + set protocols bgp neighbor 10.2.2.1 remote-as '64496' + set protocols bgp neighbor 2001:db8::6 address-family ipv6-unicast default-originate + set protocols bgp neighbor 2001:db8::6 remote-as '64496' + set protocols static route 0.0.0.0/0 next-hop 10.2.2.1 + set protocols static route6 ::/0 next-hop 2001:db8::6 + +********** +Appendix-B +********** + +Route-Filtering +--------------- + +When importing routes using MP-BGP it is possible to filter a subset of them +before are injected in the BGP table. One of the most common case is to use a +route-map with an prefix-list. + +- Configuration +^^^^^^^^^^^^^^^ + +We create a prefix-list first and add all the routes we need to. + +.. code-block:: none + + # set both ipv4 and ipv6 policies + + set policy prefix-list LAN2-Internet rule 1 action 'permit' + set policy prefix-list LAN2-Internet rule 1 le '24' + set policy prefix-list LAN2-Internet rule 1 prefix '198.51.0.0/16' + set policy prefix-list LAN2-Internet rule 2 action 'permit' + set policy prefix-list LAN2-Internet rule 2 prefix '192.0.2.0/24' + set policy prefix-list LAN2-Internet rule 3 action 'permit' + set policy prefix-list LAN2-Internet rule 3 prefix '192.168.0.0/24' + set policy prefix-list LAN2-Internet rule 4 action 'permit' + set policy prefix-list LAN2-Internet rule 4 prefix '10.0.0.0/24' + + set policy prefix-list6 LAN2-Internet-v6 rule 1 action 'permit' + set policy prefix-list6 LAN2-Internet-v6 rule 1 prefix '2001:db8:1::/48' + set policy prefix-list6 LAN2-Internet-v6 rule 2 action 'permit' + set policy prefix-list6 LAN2-Internet-v6 rule 2 prefix '2001:db8:2::/48' + set policy prefix-list6 LAN2-Internet-v6 rule 3 action 'permit' + set policy prefix-list6 LAN2-Internet-v6 rule 3 prefix '2001:db8:0:3::/64' + set policy prefix-list6 LAN2-Internet-v6 rule 4 action 'permit' + set policy prefix-list6 LAN2-Internet-v6 rule 4 prefix '2001:db8:0:1::/64' + +Then add a route-map and reference to above prefix. Consider that the actions +taken inside the prefix will MATCH the routes that will be affected by the +actions inside the rules of the route-map. + +.. code-block:: none + + set policy route-map LAN2-Internet rule 1 action 'permit' + set policy route-map LAN2-Internet rule 1 match ip address prefix-list 'LAN2-Internet' + + set policy route-map LAN2-Internet-v6 rule 1 action 'permit' + set policy route-map LAN2-Internet-v6 rule 1 match ipv6 address prefix-list 'LAN2-Internet-v6' + +We are using a "white list" approach by allowing only what is necessary. In case +that need to implement a "black list" approach you will ned to change the action +in the route-map for a deny BUT you need to add a rule that permit the rest due +to the implicit deny in the route-map. + +Then we need to attach the policy into the bgp process. This needs to be under +the import statement in the vrf we need to filter. + +.. code-block:: none + + set vrf name LAN2 protocols bgp address-family ipv4-unicast route-map vpn import 'LAN2-Internet' + set vrf name LAN2 protocols bgp address-family ipv6-unicast route-map vpn import 'LAN2-Internet-v6' + + +- Verification +^^^^^^^^^^^^^^ + +.. code-block:: none + + # show ip route vrf LAN2 + + B>* 10.0.0.0/24 [20/0] via 10.1.1.2, eth0 (vrf LAN1), weight 1, 00:45:28 + S>* 172.16.0.0/24 [1/0] via 172.16.2.2, eth1, weight 1, 00:45:32 + C>* 172.16.2.0/30 is directly connected, eth1, 00:45:39 + B>* 192.0.2.0/24 [20/0] via 10.2.2.2, eth3 (vrf Internet), weight 1, 00:45:24 + B>* 192.168.0.0/24 [20/0] via 192.168.3.2, eth2 (vrf Managment), weight 1, 00:45:27 + B>* 198.51.100.0/24 [20/0] via 10.2.2.2, eth3 (vrf Internet), weight 1, 00:45:24 + + # show ipv6 route vrf LAN2 + + C>* 2001:db8::2/127 is directly connected, eth1, 00:46:26 + B>* 2001:db8:0:1::/64 [20/0] via 2001:db8::1, eth0 (vrf LAN1), weight 1, 00:46:17 + S>* 2001:db8:0:2::/64 [1/0] via 2001:db8::3, eth1, weight 1, 00:46:21 + B>* 2001:db8:0:3::/64 [20/0] via 2001:db8::5, eth2 (vrf Managment), weight 1, 00:46:16 + B>* 2001:db8:1::/48 [20/0] via fe80::5200:ff:fe02:3, eth3 (vrf Internet), weight 1, 00:46:13 + B>* 2001:db8:2::/48 [20/0] via fe80::5200:ff:fe02:3, eth3 (vrf Internet), weight 1, 00:46:13 + C>* fe80::/64 is directly connected, eth1, 00:46:27 + +As we can see even if both VRF LAN1 and LAN2 has the same import RTs we are able +to select which routes are effectively imported and installed. +