<div dir="ltr">Hi all<div><br></div><div>I am trying Yakov blog below to test L3VPN using FRR7.5 and the last PE is not capable to de-encapsulate the labelled traffic and send it to the CE.</div><div><br></div><div>This is the diagram in my lab:</div><div><br></div><div><a href="https://github.com/thomarite/linux-mpls-testing/blob/master/lab4-l3vpn/diagram/linux-mpls-lab4-v0.png">https://github.com/thomarite/linux-mpls-testing/blob/master/lab4-l3vpn/diagram/linux-mpls-lab4-v0.png</a><br><br>For example CE1 (vrf_cust1 - <a href="http://192.168.11.102/24">192.168.11.102/24</a>) tries to ping CE3 (vrf_cust1 - <a href="http://192.168.23.102/24">192.168.23.102/24</a>)<br><br>P1 is receiving the traffic with double labels as expected from PE1:</div><div><br></div><div>19:28:46.075164 MPLS (label 17, exp 0, ttl 63) (label 80, exp 0, [S], ttl 63) IP 192.168.11.102 > <a href="http://192.168.23.102">192.168.23.102</a>: ICMP echo request, id 2296, seq 10, length 64<br>19:28:47.099199 MPLS (label 17, exp 0, ttl 63) (label 80, exp 0, [S], ttl 63) IP 192.168.11.102 > <a href="http://192.168.23.102">192.168.23.102</a>: ICMP echo request, id 2296, seq 11, length 64<br><br>PE2 is receiving the traffic on ens8 with just one label after P1 doing PHP:</div><div><br></div><div>19:28:46.074437 MPLS (label 80, exp 0, [S], ttl 63) IP 192.168.11.102 > <a href="http://192.168.23.102">192.168.23.102</a>: ICMP echo request, id 2296, seq 10, length 64<br>19:28:47.098555 MPLS (label 80, exp 0, [S], ttl 63) IP 192.168.11.102 > <a href="http://192.168.23.102">192.168.23.102</a>: ICMP echo request, id 2296, seq 11, length 64<br><br>But then PE2 is not sending anything to CE3. I can't see anything in either end. I have checked iptables in my host just in case but I think PE2 is not sending anything.</div><div><br></div><div>From PE2, all routing seems correct:</div><div><br></div><div>PE2# show mpls table <br> Inbound Label  Type  Nexthop         Outbound Label  <br> -----------------------------------------------------<br> 16             LDP   192.168.77.102  16              <br> 17             LDP   192.168.77.102  implicit-null   <br> 18             LDP   192.168.77.102  implicit-null   <br> 80             BGP   vrf_cust1       -               <br> 81             BGP   vrf_cust2       -               <br><br>PE2# <br>PE2# show bgp summary <br><br>IPv4 Unicast Summary:<br>BGP router identifier 172.20.5.2, local AS number 65010 vrf-id 0<br>BGP table version 0<br>RIB entries 0, using 0 bytes of memory<br>Peers 1, using 21 KiB of memory<br><br>Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt<br>172.20.5.1      4      65010       101       108        0    0    0 01:35:41            0        0<br><br>Total number of neighbors 1<br><br>IPv4 VPN Summary:<br>BGP router identifier 172.20.5.2, local AS number 65010 vrf-id 0<br>BGP table version 0<br>RIB entries 7, using 1344 bytes of memory<br>Peers 1, using 21 KiB of memory<br><br>Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt<br>172.20.5.1      4      65010       101       108        0    0    0 01:35:41            2        2<br><br>Total number of neighbors 1<br>PE2# <br>PE2# show ip route vrf vrf_cust1<br>Codes: K - kernel route, C - connected, S - static, R - RIP,<br>       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,<br>       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,<br>       F - PBR, f - OpenFabric,<br>       > - selected route, * - FIB route, q - queued, r - rejected, b - backup<br><br>VRF vrf_cust1:<br>B>  <a href="http://192.168.11.0/24">192.168.11.0/24</a> [200/0] via 172.20.5.1 (vrf default) (recursive), label 80, weight 1, 01:35:40<br>  *                           via 192.168.77.102, ens8 (vrf default), label 16/80, weight 1, 01:35:40<br>C>* <a href="http://192.168.23.0/24">192.168.23.0/24</a> is directly connected, ens6, 01:38:19<br>PE2#</div><div>PE2# <br>PE2# show isis neighbor <br>Area ISIS:<br>  System Id           Interface   L  State        Holdtime SNPA<br>  P1                  ens8        2  Up            28       2020.2020.2020<br>PE2# <br></div><div><br></div><div>vagrant@PE2:~$ ip route<br>default via 192.168.121.1 dev ens5 proto dhcp src 192.168.121.31 metric 1024 <br>172.20.5.1  encap mpls  16 via 192.168.77.102 dev ens8 proto isis metric 20 <br>172.20.5.5 via 192.168.77.102 dev ens8 proto isis metric 20 <br><a href="http://192.168.66.0/24">192.168.66.0/24</a> via 192.168.77.102 dev ens8 proto isis metric 20 <br><a href="http://192.168.77.0/24">192.168.77.0/24</a> dev ens8 proto kernel scope link src 192.168.77.101 <br><a href="http://192.168.121.0/24">192.168.121.0/24</a> dev ens5 proto kernel scope link src 192.168.121.31 <br>192.168.121.1 dev ens5 proto dhcp scope link src 192.168.121.31 metric 1024 <br>vagrant@PE2:~$ <br>vagrant@PE2:~$ ip -4 a<br>1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000<br>    inet <a href="http://127.0.0.1/8">127.0.0.1/8</a> scope host lo<br>       valid_lft forever preferred_lft forever<br>    inet <a href="http://172.20.5.2/32">172.20.5.2/32</a> scope global lo<br>       valid_lft forever preferred_lft forever<br>2: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000<br>    inet <a href="http://192.168.121.31/24">192.168.121.31/24</a> brd 192.168.121.255 scope global dynamic ens5<br>       valid_lft 2524sec preferred_lft 2524sec<br>3: ens6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master vrf_cust1 state UP group default qlen 1000<br>    inet <a href="http://192.168.23.101/24">192.168.23.101/24</a> brd 192.168.23.255 scope global ens6<br>       valid_lft forever preferred_lft forever<br>4: ens7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master vrf_cust2 state UP group default qlen 1000<br>    inet <a href="http://192.168.24.101/24">192.168.24.101/24</a> brd 192.168.24.255 scope global ens7<br>       valid_lft forever preferred_lft forever<br>5: ens8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000<br>    inet <a href="http://192.168.77.101/24">192.168.77.101/24</a> brd 192.168.77.255 scope global ens8<br>       valid_lft forever preferred_lft forever<br>vagrant@PE2:~$</div><div>vagrant@PE2:~$ ip -M route<br>16 as to 16 via inet 192.168.77.102 dev ens8 proto ldp <br>17 via inet 192.168.77.102 dev ens8 proto ldp <br>18 via inet 192.168.77.102 dev ens8 proto ldp <br>vagrant@PE2:~$</div>vagrant@PE2:~$ ip route show table 10<br>blackhole default <br><a href="http://192.168.11.0/24">192.168.11.0/24</a>  encap mpls  16/80 via 192.168.77.102 dev ens8 proto bgp metric 20 <br>broadcast 192.168.23.0 dev ens6 proto kernel scope link src 192.168.23.101 <br><a href="http://192.168.23.0/24">192.168.23.0/24</a> dev ens6 proto kernel scope link src 192.168.23.101 <br>local 192.168.23.101 dev ens6 proto kernel scope host src 192.168.23.101 <br>broadcast 192.168.23.255 dev ens6 proto kernel scope link src 192.168.23.101 <br>vagrant@PE2:~$ <br><div> vagrant@PE2:~$ ip vrf      <br></div>Name              Table<br>-----------------------<br>vrf_cust1           10<br>vrf_cust2           20<br>vagrant@PE2:~$ <br><div><br></div><div><br></div><div>This is PE2 FRR config:</div><div><br></div><div>PE2# show running-config <br>Building configuration...<br><br>Current configuration:<br>!<br>frr version 7.5<br>frr defaults traditional<br>hostname PE2<br>service integrated-vtysh-config<br>!<br>interface ens8<br> ip router isis ISIS <br> isis circuit-type level-2-only<br> isis network point-to-point<br>!<br>interface lo<br> ip router isis ISIS <br> isis passive<br>!<br>router bgp 65010<br> neighbor 172.20.5.1 remote-as 65010<br> neighbor 172.20.5.1 update-source 172.20.5.2<br> !<br> address-family ipv4 vpn<br>  neighbor 172.20.5.1 activate<br> exit-address-family<br>!<br>router bgp 65010 vrf vrf_cust1<br> !<br> address-family ipv4 unicast<br>  redistribute connected<br>  label vpn export auto<br>  rd vpn export 65010:10<br>  rt vpn both 1:1<br>  export vpn<br>  import vpn<br> exit-address-family<br>!<br>router bgp 65010 vrf vrf_cust2<br> !<br> address-family ipv4 unicast<br>  redistribute connected<br>  label vpn export auto<br>  rd vpn export 65010:20<br>  rt vpn both 2:2<br>  export vpn<br>  import vpn<br> exit-address-family<br>!<br>mpls ldp<br> router-id 172.20.5.2<br> !<br> address-family ipv4<br>  discovery transport-address 172.20.5.2<br>  !<br>  interface ens8<br>  !<br> exit-address-family<br> !<br>!<br>router isis ISIS <br> net 49.0001.1720.2000.5002.00<br>!<br>line vty<br>!<br>end<br>PE2#</div><div><br></div><div><br></div><div>This is PE2 sysctl mpls config:</div><div><br></div>root@PE2:/home/vagrant# sysctl -a | grep mpls<br>net.mpls.conf.ens5.input = 0<br>net.mpls.conf.ens6.input = 0<br>net.mpls.conf.ens7.input = 0<br>net.mpls.conf.ens8.input = 1<br>net.mpls.conf.lo.input = 0<br>net.mpls.conf.vrf_cust1.input = 0<br>net.mpls.conf.vrf_cust2.input = 0<br>net.mpls.default_ttl = 255<br>net.mpls.ip_ttl_propagate = 1<br>net.mpls.platform_labels = 100000<br>root@PE2:/home/vagrant# <br><div> <br></div><div><br></div><div><br></div><div>This is PE1:</div><div><br></div><div>PE1# <br>PE1# show bgp summary <br><br>IPv4 Unicast Summary:<br>BGP router identifier 172.20.5.1, local AS number 65010 vrf-id 0<br>BGP table version 0<br>RIB entries 0, using 0 bytes of memory<br>Peers 1, using 21 KiB of memory<br><br>Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt<br>172.20.5.2      4      65010       111       105        0    0    0 01:39:14            0        0<br><br>Total number of neighbors 1<br><br>IPv4 VPN Summary:<br>BGP router identifier 172.20.5.1, local AS number 65010 vrf-id 0<br>BGP table version 0<br>RIB entries 11, using 2112 bytes of memory<br>Peers 1, using 21 KiB of memory<br><br>Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt<br>172.20.5.2      4      65010       111       105        0    0    0 01:39:14            2        2<br><br>Total number of neighbors 1<br>PE1# <br>PE1# <br>PE1# show mpls table <br> Inbound Label  Type  Nexthop         Outbound Label  <br> -----------------------------------------------------<br> 16             LDP   192.168.66.102  implicit-null   <br> 17             LDP   192.168.66.102  implicit-null   <br> 18             LDP   192.168.66.102  17              <br> 80             BGP   vrf_cust1       -               <br> 81             BGP   vrf_cust2       -               <br><br>PE1# <br>PE1# show ip route vrf <br>all        default    vrf_cust1  vrf_cust2  <br>PE1# show ip route vrf vrf_cust1<br>Codes: K - kernel route, C - connected, S - static, R - RIP,<br>       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,<br>       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,<br>       F - PBR, f - OpenFabric,<br>       > - selected route, * - FIB route, q - queued, r - rejected, b - backup<br><br>VRF vrf_cust1:<br>C>* <a href="http://192.168.11.0/24">192.168.11.0/24</a> is directly connected, ens6, 01:44:51<br>B>  <a href="http://192.168.23.0/24">192.168.23.0/24</a> [200/0] via 172.20.5.2 (vrf default) (recursive), label 80, weight 1, 01:39:18<br>  *                           via 192.168.66.102, ens8 (vrf default), label 17/80, weight 1, 01:39:18<br>PE1#</div><div> PE1# show isis neighbor<br></div>Area ISIS:<br>  System Id           Interface   L  State        Holdtime SNPA<br>  P1                  ens8        2  Up            30       2020.2020.2020<br>PE1# <br>PE1# <br><div> <br></div><div><br></div><div>If I try to ping CE3 to CE1, I see exactly the same behaviour in PE1.</div><div><br></div><div>Any idea what I am missing?</div><div><br></div><div>Thanks</div><div>tomas</div><div><br>On Mon, Nov 23, 2020 at 12:00 PM <<a href="mailto:frog-request@lists.frrouting.org">frog-request@lists.frrouting.org</a>> wrote:<br>><br>><br>> Date: Mon, 23 Nov 2020 10:27:44 +0000<br>> From: "Yakov Sh." <<a href="mailto:yman@protonmail.ch">yman@protonmail.ch</a>><br>> To: Olivier CALVANO <<a href="mailto:o.calvano@gmail.com">o.calvano@gmail.com</a>><br>> Cc: "<a href="mailto:frog@lists.frrouting.org">frog@lists.frrouting.org</a>" <<a href="mailto:frog@lists.frrouting.org">frog@lists.frrouting.org</a>><br>> Subject: Re: [FROG] FRRouting and MPLS<br>> Message-ID:<br>>         <TaX1p13MyS4pDJfNgZ_qra4Lqq-QppV4Gc_JkTUmi9s41lOR7krEd9PBvr1kfX52s03BEhaxOxsaeb_KiIeKoe0QVUUnx-zRhDI72rDSwrM=@<a href="http://protonmail.ch">protonmail.ch</a>><br>><br>> Content-Type: text/plain; charset="utf-8"<br>><br>> Hi!<br>> I had not much experience with FRR in production, but I gave it a try some time ago in a lab and was able to build L3VPN service on VMs with kernel VRF support. You can see details in my blog post - <a href="http://dvjourney.yman.site/2018/10/26/l3vpn-on-linux/">http://dvjourney.yman.site/2018/10/26/l3vpn-on-linux/</a><br>> For L2VPN, as stated in docs, only OpenBSD supports VPWS/VPLS at the moment. <a href="http://docs.frrouting.org/en/latest/overview.html#feature-matrix">http://docs.frrouting.org/en/latest/overview.html#feature-matrix</a><br>><br>> Yakov Sh.<br>> telegram: @darkyman<br>><br>> ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐<br>> On Monday, November 23, 2020 12:15 PM, Olivier CALVANO <<a href="mailto:o.calvano@gmail.com">o.calvano@gmail.com</a>> wrote:<br>><br>> > Hello,<br>> ><br>> > I have just installed FRR for the first time on a Linux CentOS 8 distribution. I am therefore just starting out.<br>> ><br>> > I am gradually reading the forums but there is a lot of information. FRR manages without worries the BGP and the ISIS which I use regularly on my cisco routers.<br>> ><br>> > I am now trying to find out if FRR can integrate more deeply into my network, particularly at the MPLS level. as I understood it is in the Kernel that this is done and not in FRR, but is there a way to integrate VRF IP VPN? and the creation of a VLAN type subinterface directly in FRR?<br>> ><br>> > Then last question: Is there an implementation of the Cisco EoMPLS equivalent in FRR? (xconnect encapsultation mpls)<br>> ><br>> > thank you<br>> > Olivier<br>><br></div></div>