During networking field day service provider 1 there was a ton of talk about segment routing (SR) and ethernet virtual private networks (EVPN). One of the biggest questions was “how do we get there?” and while we won’t examine EVPN in this post (it’s coming in a future post don’t worry) we will look at how you can take advantage of SR while still having large portions of LDP in your network.
MPLS and IGP setup
The first thing to accomplish is end to end reachability between the provider edge (PE) routers. MikroTik doesn’t support IS-IS so we will have to perform redistribution between the IS-IS segment and the OSPF segment as seen above.
MPLS only requires the /32s of the loopbacks for functionality so redistribution is limited to the /32 loopbacks of the PE routers.
ip prefix-list LDP-PE-LOOPBACKS seq 10 permit 100.127.2.0/24 eq 32 ! ip prefix-list SR-PE-LOOPBACKS seq 10 permit 100.127.0.0/24 eq 32 ! route-map REDIS-OSPF-TO-ISIS permit 10 match ip address prefix-list LDP-PE-LOOPBACKS ! route-map REDIS-ISIS-TO-OSPF permit 10 match ip address prefix-list SR-PE-LOOPBACKS ! router ospf 1 ospf router-id 100.127.0.2 redistribute isis IPv4-UNDERLAY route-map REDIS-ISIS-TO-OSPF network 100.126.2.0/29 area 0.0.0.0 ! router isis IPv4-UNDERLAY is-type level-1-2 metric-style wide mpls traffic-eng router-id 100.127.0.2 mpls traffic-eng level-1 mpls traffic-eng level-2 capability cspf dynamic-hostname fast-reroute ti-lfa level-1 proto ipv4 fast-reroute ti-lfa level-2 proto ipv4 net 49.0015.1001.2700.0002.00 redistribute ospf level-1-2 route-map REDIS-OSPF-TO-ISIS isis segment-routing global block 16000 23999 segment-routing mpls
ipi-1.lab.jan1.us.ipa.net#ping 100.127.2.0 source-ip 100.127.0.1 Press CTRL+C to exit PING 100.127.2.0 (100.127.2.0) from 100.127.0.1 : 56(84) bytes of data. 64 bytes from 100.127.2.0: icmp_seq=1 ttl=63 time=0.332 ms 64 bytes from 100.127.2.0: icmp_seq=2 ttl=63 time=0.304 ms
Now that we have reachability between the loopbacks we can work on signaling for exchanging labels. Since MikroTik only runs LDP we will have to “stitch” the LDP and segment routing domains together. This is done with a segment routing – LDP mapping server.
This will assign labels to the routes in the LDP label space and distribute them to through the SR domain so we can have an end to end label switched path enabling the use of MPLS services.
segment-routing mapping-server srms preference 100 prefix-sid-map address-family ipv4 100.127.2.0/32 4000 range 256 exit-ms-af exit-ms !
This will start with prefix 100.127.2.0/32 add 4000 to the segment routing global block starting point (16000 as defined) and be able to label the next 256 routes in order. i.e. 100.127.2.1/32 gets the node sid 20001. IPI-2 shows the stitching in action.
ipi-2.lab.jan1.us.ipa.net#show mpls ilm-table Codes: > - installed ILM, * - selected ILM, p - stale ILM K - CLI ILM, T - MPLS-TP, s - Stitched ILM S - SNMP, L - LDP, R - RSVP, C - CRLDP B - BGP , K - CLI , V - LDP_VC, I - IGP_SHORTCUT O - OSPF/OSPF6 SR, i - ISIS SR, k - SR CLI P - SR Policy, U - unknown Code FEC/VRF/L2CKT ILM-ID In-Label Out-Label In-Intf Out-Intf /VRF Nexthop LSP-Type i> 100.127.0.2/32 1 16102 Nolabel N/A N/A 127.0.0.1 LSP_DEFAULT i> 100.127.0.1/32 2 16101 3 N/A xe48 100.126.0.1 LSP_DEFAULT B> evpn:2 7 16 Nolabel N/A N/A 127.0.0.1 LSP_DEFAULT i> 100.126.0.1/32 4 24320 3 N/A xe48 100.126.0.1 LSP_DEFAULT s i> 100.127.2.0/32 8 20000 3 N/A xe1.2 100.126.2.2 LSP_DEFAULT s L> 100.127.0.1/32 3 25600 3 N/A xe48 100.126.0.1 LSP_DEFAULT i> fe80::3e2c:99ff:fec2:2aa/128 5 24321 3 N/A xe48 fe80::3e2c:99ff:fec2:2aa LSP_DEFAULT
And on IPI-1 we can see that this doesn’t appear “stitched” as it only runs IS-IS SR and not LDP as well as IS-IS SR. Tracing the label-switched path to 100.127.2.0/32 would take us via IPI-2 which does the stitching as seen above.
ipi-1.lab.jan1.us.ipa.net#show mpls ilm-table Codes: > - installed ILM, * - selected ILM, p - stale ILM K - CLI ILM, T - MPLS-TP, s - Stitched ILM S - SNMP, L - LDP, R - RSVP, C - CRLDP B - BGP , K - CLI , V - LDP_VC, I - IGP_SHORTCUT O - OSPF/OSPF6 SR, i - ISIS SR, k - SR CLI P - SR Policy, U - unknown Code FEC/VRF/L2CKT ILM-ID In-Label Out-Label In-Intf Out-Intf /VRF Nexthop LSP-Type i> 100.127.0.2/32 4 16102 3 N/A xe48 100.126.0.2 LSP_DEFAULT i> 100.127.0.1/32 1 16101 Nolabel N/A N/A 127.0.0.1 LSP_DEFAULT B> evpn:100 5 16 Nolabel N/A N/A 127.0.0.1 LSP_DEFAULT i> 100.126.0.2/32 3 24320 3 N/A xe48 100.126.0.2 LSP_DEFAULT i> 100.127.2.0/32 6 20000 20000 N/A xe48 100.126.0.2 LSP_DEFAULT B> VOICE 2 25024 Nolabel N/A VOICE N/A LSP_DEFAULT i> fe80::3e2c:99ff:fec0:aa/128 7 24321 3 N/A xe48 fe80::3e2c:99ff:fec0:aa LSP_DEFAULT
Here is what the label space looks like from the perspective of the MikroTik-1 as well.
[[email protected]] > mpls remote-bindings print Flags: X - disabled, A - active, D - dynamic # DST-ADDRESS NEXTHOP LABEL PEER 0 AD 100.127.0.1/32 100.126.2.1 25600 100.127.0.2:0 1 AD 100.127.0.2/32 100.126.2.1 impl-null 100.127.0.2:0 2 D 100.126.0.0/29 impl-null 100.127.0.2:0 3 D 100.126.2.0/29 impl-null 100.127.0.2:0
Delivering a service with an L3VPN
Now that there is an end to end label switched path a L3VPN is built between IPI-1 and MikroTik-1. A common service to put in a L3VPN is voice which is the name of the vrf above.
router bgp 65000 neighbor 100.127.2.0 remote-as 65000 neighbor 100.127.2.0 update-source lo ! address-family vpnv4 unicast neighbor 100.127.2.0 activate exit-address-family ! address-family ipv4 vrf VOICE redistribute connected exit-address-family !
/routing bgp peer add address-families=vpnv4 name=OCNOS1 nexthop-choice=force-self \ remote-address=100.127.0.1 remote-as=65000 update-source=Lo0
ipi-1.lab.jan1.us.ipa.net# ping 192.168.2.1 vrf VOICE Press CTRL+C to exit PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data. 64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=0.577 ms 64 bytes from 192.168.2.1: icmp_seq=2 ttl=64 time=0.287 ms 64 bytes from 192.168.2.1: icmp_seq=3 ttl=64 time=0.278 ms
If it were not for the SR-LDP mapping server this functionality would not be possible. This can jumpstart your transition to segment routing.
Be sure to check back soon for more on segment routing and EVPN in the future. If you noticed there are already labels for EVPN in the ilm-table output.