Blog Viewer

Service Mapping to Colored MPLS Paths

By Anton Elita posted 01-18-2023 12:07

  

Service Mapping to Colored MPLS Paths

Mapping modern and legacy services to colored MPLS paths, achieving business differentiation.

Introduction

People say there are no greenfield service providers (SPs). Some networks grow organically, some by acquisitions and merges. Growth takes time, and technology does not stay idle – speaking not only of interface speeds, but as well of the used protocols. Sooner or later, a more efficient network would require protocols to be updated or changed: solving scaling challenges, providing more flexible underlays and overlays, enabling new businesses.

Many SPs already moved to SR-MPLS or are in the process of transition. Now is the time to use the advantages of this technology, for example one or multiple flavors of traffic engineering (SR-TE). In this TechPost, we will see how to map virtual private networks (VPNs) or plain IPv4/IPv6 prefixes to colored traffic-engineered paths in an MPLS network.

Junos is doing great job in helping network operators to change a technology. To name just one example: coexistence of VPLS and EVPN, allowing for site-by-site migration and saving the investments in VPLS. Check this post for more details.

The same applies to migration between different transport protocols. Junos allows mapping of new (for example EVPN) and old (for example LDP-based) services to traffic-engineered transport paths established by RSVP, SR-TE, BGP-CT or Flex-Algo.

In this article we’re reviewing colored TE transport tunnels, carrying different services between same pairs of PE endpoints. Color is required to differentiate transport tunnels between a pair of PE endpoints, each using a single Loopback IP address. It’s a great business enabler, allowing different SLAs for various service types.

Basic Network Setup

Throughout this TechPost we will use this reference network:

Topology

Figure 1: Reference Network

Please note that this network is running on vMX with Junos 22.4R1. Support for mapping services to colored MPLS LSPs appeared in Junos in 2019, gradually adding new features on all platforms like MX, PTX, ACX – and even more features to come, as the protocols and products evolve!

ISIS is serving as internal protocol (IGP), but OSPF is supported as well. Each link has an IGP metric (green color) and a delay metric (red). IGP metric can be thought of being proportional to the link bandwidth, and the delay metric represents a static or a dynamic link latency value in milliseconds. There is a single Flex-Algo 128 which uses delay metrics for shortest path calculation. Other constraints like link affinities might be used, but for brevity are not included here.

All services are running between PE1 and PE2. Some will be BGP-signaled, and some use LDP. PE devices either have a direct iBGP session or exchange prefixes via a route reflector. Basic PE configuration is independent of the carried services:

aelita@pe2# show groups SR
policy-options {
    policy-statement PS-ADD-FLEX-ALGO {
        term TR-FA128 {
            from {
                interface lo0.0;
                route-filter 192.0.2.6/32 exact;
            }
            then {
                prefix-segment {
                    algorithm 128 index 106 node-segment;
                    index 6;                                                    
                    node-segment;
                }
                accept;
            }
        }
    }
}
routing-options {
    flex-algorithm 128 {
        definition {
            metric-type delay-metric;
        }
        color 128;
        use-transport-class;
    }
    route-distinguisher-id 192.0.2.6;
    resolution {
        preserve-nexthop-hierarchy;
    }
    transport-class {
        auto-create;
        name tc-128 {
            color 128;
        }
    }
}
protocols {
    isis {
        source-packet-routing {
            node-segment ipv4-index 6;
            flex-algorithm 128;
        }
        export PS-ADD-FLEX-ALGO;
    }
    mpls {
        label-range {
            srgb-label-range 100000 135999;
        }
    }
}

A few notes on the above configuration:

  • SRGB allocation is configured at “protocols mpls” level, and effectively creates a shared common label block for protocols like ISIS and BGP
  • Flex-Algo 128 is configured for both participation (required on every participating node) and definition (required on at least one node per ISIS level)
  • A policy is used to advertise both regular SID and Flex-Algo 128 SID in ISIS
  • “resolution preserve-nexthop-hierarchy” must be enabled for correct next-hop resolution in services like VPLS
  • Transport-Class is used for the colored paths

Transport classes have been introduced in Junos 21.1R1 and represent sets of transport tunnels with common TE characteristics. They simplify mapping of service routes to transport routes, with desired SLA and fallback characteristics. Matching happens by comparing color community attached to the service prefix with the color of the transport class, where transport tunnel reside. Transport tunnels can be initiated by RSVP-TE, SR-TE, Flex-Algo or BGP-CT.

Each transport class can have own fallback configuration, which allows using next-hops from a different colored transport class or uncolored tunnels.

Mapping to transport classes is facilitated via new route target called “transport-target”, acting as a mapping community to resolve routes via respective transport classes.

aelita@pe2# run show routing transport-class all
Transport Class: junos-tc-128  Configured name: tc-128
  Color: 128, References: 6
  Transport Endpoints: IPv4 5  IPv6 0
  Mapping community: color:0:128
  Route Target: transport-target:0:128
  Routing instance: junos-rti-tc-128

Transport Class: junos-tc-best-effort
  Color: 0, References: 2
  Transport Endpoints: IPv4 5  IPv6 0
  Mapping community: color:0:0
  Routing instance: master
  ExportDisabled

aelita@pe2# run show route resolution scheme all
Resolution scheme: junos-resol-schem-tc-128-v4-service
  AutoCreated
  References: 1
  Mapping community: color:0:128
  Resolution Tree: 0x9782400, index: 6, Nodes: 5
  Policy: [__resol-schem-common-import-policy__]
  Contributing routing tables: junos-rti-tc-128.inet.3 inet.3

Resolution scheme: junos-resol-schem-tc-128-v4-transport
  AutoCreated
  References: 1
  Mapping community: transport-target:0:128
  Resolution Tree: 0x9783c00, index: 8, Nodes: 5
  Policy: [__resol-schem-common-import-policy__]
  Contributing routing tables: junos-rti-tc-128.inet.3

The above output shows two types of resolution schemes, for transport and service. Transport can be any of RSVP-TE, SR-TE, Flex-Algo and other types of underlay transport tunnels, and uses transport-target as a mapping community. Service refers to L3VPN, EVPN, L2VPN and other types of payload and uses color community for mapping.

aelita@pe2# run show route table junos-rti-tc-128.inet.3

192.0.2.1/32       *[L-ISIS/14] 2d 22:11:52, metric 101
                    >  to 10.0.36.1 via ge-0/0/0.0, Push 100101
192.0.2.2/32       *[L-ISIS/14] 2d 22:12:03, metric 50
                    >  to 10.0.26.1 via ge-0/0/1.0
192.0.2.3/32       *[L-ISIS/14] 2d 22:11:40, metric 50
                    >  to 10.0.36.1 via ge-0/0/0.0
192.0.2.4/32       *[L-ISIS/14] 2d 22:11:26, metric 112
                    >  to 10.0.36.1 via ge-0/0/0.0, Push 100104
192.0.2.5/32       *[RSVP/7/1] 00:03:58, metric 30
                    >  to 10.0.36.1 via ge-0/0/0.0, label-switched-path LSP-PE1
                    [SPRING-TE/8] 00:09:03, metric 1, metric2 30
                    >  to 10.0.26.1 via ge-0/0/1.0, Push 100005
                       to 10.0.36.1 via ge-0/0/0.0, Push 100005
                    [L-ISIS/14] 2d 22:12:23, metric 163
                    >  to 10.0.36.1 via ge-0/0/0.0, Push 100105

aelita@pe2# run show isis route flex-algorithm-id 128
 IS-IS routing table             Current version: L1: 0 L2: 390
IPv4/IPv6 Routes
----------------
Prefix             L Version   Metric Type Interface       NH   Via                 Backup Score
192.0.2.1/32       2     348      101 int  ge-0/0/0.0      IPV4 p3
192.0.2.2/32       2     348       50 int  ge-0/0/1.0      IPV4 p2
192.0.2.3/32       2     348       50 int  ge-0/0/0.0      IPV4 p3
192.0.2.4/32       2     348      112 int  ge-0/0/0.0      IPV4 p3
192.0.2.5/32       2     348      163 int  ge-0/0/0.0      IPV4 p3
192.0.2.6/32       2     348        0 int 
[..]

The CLI outputs show which transport classes exist, their fallback configuration, and the contents of the respective routing tables. Table junos-rti-tc-128.inet.3 shows routes from different protocols like RSVP-TE, SR-TE and ISIS Flex-Algo.

Color assignment for Flex-Algo is by default taking the value of Flex-Algo itself, for example 128. For RSVP-TE or SR-TE, color can be configured like this:

aelita@pe2# show protocols mpls
label-switched-path LSP-PE1 {
    to 192.0.2.5;
    transport-class tc-128;
}
aelita@pe2# show groups SR protocols source-packet-routing
source-routing-path SP-PE1 {
    to 192.0.2.5;
    color 128;
    primary {
        SL-PE1 {
            compute;
        }
    }
}

Above LSPs do not have strict path or other constraints, and Junos will calculate the path - provided that the TED is populated by IGP. More on TED can be found in this techpost.

Mapping LDP-based VPNs to colored transport tunnels

L2circuit

L2circuit is a very widespread technology supporting layer-2 point-to-point VPNs. With a simple configuration knob, l2circuits can be mapped to underlying colored transport tunnels:

aelita@pe2# show groups L2CIRCUIT
interfaces {
    ge-0/0/2 {
        encapsulation ethernet-ccc;
        unit 0;
    }
}
policy-options {
    community CM-128 members color:0:128;
}
protocols {
    l2circuit {
        neighbor 192.0.2.5 {
            interface ge-0/0/2.0 {
                virtual-circuit-id 19202501;
                community CM-128;
            }
        }
    }
    ldp {
        interface lo0.0;
    }
}

The only thing we needed to add to regular l2circuit definition is the color community, that was an easy job!

Note that the only interface where LDP is enabled is Lo0.0 on the PE device. Core (transit) nodes do not need to run LDP at all.

Junos will pick up the next-hop with the lowest distance from the transport class table matching community:

aelita@pe2# run show route table junos-rti-tc-128.inet.3 192.0.2.5/32

192.0.2.5/32       *[RSVP/7/1] 00:39:22, metric 30
                    >  to 10.0.36.1 via ge-0/0/0.0, label-switched-path LSP-PE1
                    [SPRING-TE/8] 00:44:27, metric 1, metric2 30
                    >  to 10.0.26.1 via ge-0/0/1.0, Push 100005
                       to 10.0.36.1 via ge-0/0/0.0, Push 100005
                    [L-ISIS/14] 2d 22:47:47, metric 163
                    >  to 10.0.36.1 via ge-0/0/0.0, Push 100105

aelita@pe2# run show route table l2circuit.0 expanded-nh
192.0.2.5:CtrlWord:5:19202501:Local/96
                   *[L2CKT/7] 00:11:47, metric2 30
                    >  to 10.0.36.1 via ge-0/0/0.0, label-switched-path LSP-PE1

We can remove the RSVP-TE LSP to verify that l2circuit will be re-mapped to the next available transport tunnel:

aelita@pe2# deactivate protocols mpls label-switched-path LSP-PE1

[edit]
aelita@pe2# commit
commit complete

aelita@pe2# run show route table l2circuit.0 expanded-nh

l2circuit.0: 2 destinations, 2 routes (2 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

192.0.2.5:CtrlWord:5:19202501:Local/96
                   *[L2CKT/7] 00:14:23, metric2 30
                    >  to 10.0.26.1 via ge-0/0/1.0, Push 100005
                       to 10.0.36.1 via ge-0/0/0.0, Push 100005

Now we remove SR-TE LSP as well, so that only Flex-Algo with color 128 is the only contributor to the traffic-class table with the ID 128:

aelita@pe2# deactivate groups SR protocols source-packet-routing source-routing-path SP-PE1

[edit]
aelita@pe2# commit
commit complete

aelita@pe2# run show route table junos-rti-tc-128.inet.3 192.0.2.5/32

192.0.2.5/32       *[L-ISIS/14] 3d 00:14:03, metric 163
                    >  to 10.0.36.1 via ge-0/0/0.0, Push 100105

[edit]
aelita@pe2# run show route table l2circuit.0 expanded-nh

192.0.2.5:CtrlWord:5:19202501:Local/96
                   *[L2CKT/7] 00:00:34, metric2 163
                    >  to 10.0.36.1 via ge-0/0/0.0, Push 100105

The outgoing transport label is clearly confirming the use of Flex-Algo 128 label. The metric of 163 is a sum of delay metrics following this lowest latency path: PE2 – P2 – P3 – P1 – P4 -PE1

VPLS with LDP signaling

Similar to L2circuits, VPLS with LDP signaling uses LDP to allocate the label, but does not require LDP-enabled core and can be mapped to colored transport tunnels.

I will skip the full VPLS configuration for brevity, as it’s already well documented in the guides for Junos.

Before applying the mapping onto colored transport tunnels:

aelita@pe2# run show route table l2circuit.0 expanded-nh

l2circuit.0: 2 destinations, 2 routes (2 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

192.0.2.5:NoCtrlWord:5:192003:Local/96
                   *[VPLS/7] 00:01:05, metric2 30
                       to 10.0.26.1 via ge-0/0/1.0, Push 100005
                    >  to 10.0.36.1 via ge-0/0/0.0, Push 100005

aelita@pe2# run show route 192.0.2.5
[..]

inet.3: 5 destinations, 5 routes (5 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

192.0.2.5/32       *[L-ISIS/14] 3d 02:22:06, metric 30
                    >  to 10.0.26.1 via ge-0/0/1.0, Push 100005
                       to 10.0.36.1 via ge-0/0/0.0, Push 100005

junos-rti-tc-128.inet.3: 5 destinations, 5 routes (5 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

192.0.2.5/32       *[L-ISIS/14] 3d 02:22:06, metric 163
                    >  to 10.0.36.1 via ge-0/0/0.0, Push 100105

Junos used transport label from the inet.3 table because we hadn’t applied the color community yet. Let’s change that:

aelita@pe2# set groups VPLS-LDP routing-instances RI-VPLS protocols vpls community CM-128
aelita@pe2# set groups VPLS-LDP policy-options community CM-128 members color:0:128
[edit]
aelita@pe2# commit

aelita@pe2# run show route table l2circuit.0

192.0.2.5:NoCtrlWord:5:192003:Local/96
                   *[VPLS/7] 00:00:04, metric2 163
                    >  to 10.0.36.1 via ge-0/0/0.0, Push 100105

Next-hop now expectedly points to the colored next-hop.

Mapping BGP-based VPNs to colored transport tunnels

L2VPN

L2VPN with BGP signaling would by default use any valid next-hop from the inet.3 table, where uncolored tunnels are located. To instruct a PE to use a colored MPLS path to the remote end, we will add a community matching traffic-class configuration. Setting the color community will be part of a BGP policy. Such policy can be applied flexibly: it can be configured on the egress PE by using VRF export policy, or BGP export policy per group or per neighbor. Alternatively, color community can be applied on the ingress PE by using BGP import policy per group or per neighbor.

aelita@pe2# show groups L2VPN
interfaces {
    ge-0/0/2 {
        encapsulation ethernet-ccc;
        unit 0;
    }
}
policy-options {
    policy-statement PL-ADD-COLOR {
        term A {
            then {
                community add CM-128;
            }
        }
    }
    community CM-128 members color:0:128;
}
routing-instances {
    RI-L2VPN {
        instance-type l2vpn;
        protocols {
            l2vpn {
                site pe2 {
                    interface ge-0/0/2.0 {
                        remote-site-id 1;
                    }
                    site-identifier 2;
                }
                encapsulation-type ethernet;
            }
        }
        interface ge-0/0/2.0;
        vrf-target target:100:1;
    }
}
protocols {
    bgp {
        group GR-iBGP {
            local-address 192.0.2.6;
            import PL-ADD-COLOR;
            family l2vpn {
                signaling;
            }
            peer-as 100;
            local-as 100;
            neighbor 192.0.2.5;
        }
    }
}

aelita@pe2# run show route table RI-L2VPN.l2vpn.0 expanded-nh

192.0.2.5:65532:1:1/96
                   *[BGP/170] 00:13:45, localpref 100, from 192.0.2.5
                      AS path: I, validation-state: unverified
                    >  to 10.0.36.1 via ge-0/0/0.0, Push 100105

The other side PE1 does not have any coloring applied, so it will resolve via regular L-ISIS route with ECMP:

aelita@pe1# run show route table RI-L2VPN.l2vpn.0 expanded-nh

192.0.2.6:65533:2:1/96
                   *[BGP/170] 00:15:12, localpref 100, from 192.0.2.6
                      AS path: I, validation-state: unverified
                       to 10.0.15.1 via ge-0/0/0.0, Push 100006
                    >  to 10.0.45.1 via ge-0/0/1.0, Push 100006

aelita@pe1# run show route 192.0.2.6 table inet.3

192.0.2.6/32       *[L-ISIS/14] 3d 00:32:37, metric 30
                    >  to 10.0.15.1 via ge-0/0/0.0, Push 100006
                       to 10.0.45.1 via ge-0/0/1.0, Push 100006

Metric 30 is the sum of regular IGP metrics via either southern or northern paths in our topology.

VPLS with BGP signaling

VPLS with BGP signaling uses the same address family as L2VPN above. BGP policies to add color community are same too. VPLS configuration itself is well known, so can be skipped.

Verification of the route programming in Junos, and traffic class being applied:

aelita@pe2# run show route table RI-VPLS.l2vpn.0 expanded-nh

RI-VPLS.l2vpn.0: 2 destinations, 2 routes (2 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

192.0.2.5:9:1:1/96
                   *[BGP/170] 00:18:45, localpref 100, from 192.0.2.5
                      AS path: I, validation-state: unverified
                    >  to 10.0.36.1 via ge-0/0/0.0, Push 100105

aelita@pe2# run show route forwarding-table family vpls detail
Routing table: RI-VPLS.vpls
VPLS:
Enabled protocols: ACKed by all peers,
Destination        Type RtRef Next hop           Type Index    NhRef Netif
default            perm     0                    dscd      609     1
vt-0/0/0.1048576   intf     0                    indr  1048574     4
                              10.0.36.1         Push 25, Push 100105(top)      616     2 ge-0/0/0.0

The label used corresponds to the Flex-Algo node SID of the egress PE1:

aelita@pe2# run show route 192.0.2.5/32 table junos-rti-tc-128

192.0.2.5/32       *[L-ISIS/14] 3d 01:47:53, metric 163
                    >  to 10.0.36.1 via ge-0/0/0.0, Push 100105

EVPN-ELAN, EVPN-VPWS, EVPN-ETREE

Junos 23.1R1 makes possible EVPN mapping to colored SR-TE or Flex-Algo transport tunnels using "transport classes" . With older Junos releases,  inet[6]color tables with resolution-maps can be used for service mapping.

Below is configuration and verification example for EVPN-ELAN and EVPN-VPWS.

aelita@pe2# show
interfaces {
    ge-0/0/2 {
        flexible-vlan-tagging;
        encapsulation flexible-ethernet-services;
        unit 0 {
            encapsulation vlan-ccc;
            vlan-id 10;
            esi {
                00:00:00:00:01:00:00:00:00:01;
                all-active;
            }
        }
        unit 11 {
            encapsulation vlan-bridge;
            vlan-id 11;
            esi {
                00:00:00:00:02:00:00:00:00:01;
                all-active;
            }
        }
    }
}
policy-options {
    policy-statement PL-ADD-COLOR {
        term A {
            then {
                community add CM-128;
            }
        }
    }
    community CM-128 members color:0:128;
}
routing-instances {
    RI-EVPN-VPWS {
        instance-type evpn-vpws;
        protocols {
            evpn {
                interface ge-0/0/2.0 {
                    vpws-service-id {
                        local 2;
                        remote 1;
                    }
                }
            }
        }
        interface ge-0/0/2.0;
        vrf-target target:100:1;
    }
    RI-EVPN-ELAN {
        instance-type evpn;
        protocols {
            evpn;
        }
        vlan-id 11;
        interface ge-0/0/2.11;
        vrf-target target:100:2;
    }
}
protocols {
    bgp {
        group GR-iBGP {
            local-address 192.0.2.6;
            import PL-ADD-COLOR;
            family evpn {
                signaling;
            }
            peer-as 100;
            local-as 100;
            neighbor 192.0.2.5;
        }
    }
}

[edit groups EVPN]

VLANs 10 and 11 carry different EVPN services: VPWS and ELAN. Here again we assign extended color community color:0:128 on the ingress BGP group level, but this can be changed to vrf-export (or BGP group/neighbor export) on egress PE side.

Verification for VPWS service:

aelita@pe2# run show evpn vpws-instance RI-EVPN-VPWS
Instance: RI-EVPN-VPWS, Instance type: EVPN VPWS, Encapsulation type: MPLS
  Route Distinguisher: 192.0.2.6:65534
  Number of local interfaces: 1 (1 up)

    Interface name  ESI                            Mode          Role       Status     Control-Word    Flow-Label-Tx    Flow-Label-Rx
    ge-0/0/2.0      00:00:00:00:01:00:00:00:00:01 all-active      Primary    Up         No              No               No
        Local SID: 2 Advertised Label: 34
        Remote SID: 1
            PE addr         ESI                           Label  End.Dx2 SID     Mode           Role     TS                      Status
            192.0.2.5       00:00:00:00:01:00:00:00:00:02 37                     all-active     Primary  2022-12-28 01:42:58.619 Resolved
  Number of protect interfaces: 0

    Fast Convergence Information
    ESI: 00:00:00:00:01:00:00:00:00:02 Number of PE nodes: 1
        PE: 192.0.2.5
            Advertised SID: 1


Check that the transport tunnel picks up the right label for Flex-Algo 128:

aelita@pe2# run show route table RI-EVPN-VPWS.evpn.0 expanded-nh

1:192.0.2.5:0::010000000002::FFFF:FFFF/192 AD/ESI
                   *[BGP/170] 00:05:36, localpref 100, from 192.0.2.5
                      AS path: I, validation-state: unverified
                    >  to 10.0.36.1 via ge-0/0/0.0, Push 100105
1:192.0.2.5:65533::010000000002::1/192 AD/EVI
                   *[BGP/170] 00:05:36, localpref 100, from 192.0.2.5
                      AS path: I, validation-state: unverified
                    >  to 10.0.36.1 via ge-0/0/0.0, Push 100105

Check the full label stack:

aelita@pe2# run show route forwarding-table ccc ge-0/0/2.0 extensive
Routing table: default.mpls [Index 0]
MPLS:

Destination:  ge-0/0/2.0  (CCC)
  Route type: user
  Route reference: 0                   Route interface-index: 0
  Multicast RPF nh index: 0
  P2mpidx: 0
  Flags: sent to PFE, prefix load balance
  Nexthop:
  Next-hop type: composite             Index: 573      Reference: 3
  Load Balance Label: Push 37, None
  Next-hop type: indirect              Index: 1048574  Reference: 2
  Nexthop: 10.0.36.1
  Next-hop type: Push 100105           Index: 621      Reference: 2
  Load Balance Label: None
  Next-hop interface: ge-0/0/0.0

EVPN-ELAN service allows verification of the learned MAC addresses, provided that you have any active hosts:

aelita@pe2# run show evpn database
Instance: RI-EVPN-ELAN
VLAN  DomainId  MAC address        Active source                  Timestamp        IP address
11              56:04:1d:00:a5:c1  00:00:00:00:02:00:00:00:00:02  Dec 28 02:07:43  1.1.1.1

aelita@pe2# run show route forwarding-table matching "56:04:1d:00:a5:c1" extensive
Routing table: RI-EVPN-ELAN.evpn [Index 9]
EVPN:
Enabled protocols: Single VLAN, ACKed by all peers, EVPN, ARP/NDP suppression,

Destination:  56:04:1d:00:a5:c1/48
  Learn VLAN: 0                        Route type: user
  Route reference: 0                   Route interface-index: 336
  Multicast RPF nh index: 0
  P2mpidx: 0
  IFL generation: 0                    Epoch: 0
  Sequence Number: 0                   Learn Mask: 0x00000000
  L2 Flags: control, control_dyn
  Flags: sent to PFE
  Next-hop type: indirect              Index: 1048576  Reference: 4
  Nexthop:
  Next-hop type: composite             Index: 627      Reference: 2
  Load Balance Label: Push 41, None
  Nexthop: 10.0.36.1
  Next-hop type: Push 100105           Index: 621      Reference: 4
  Load Balance Label: None
  Next-hop interface: ge-0/0/0.0

L3VPN

After having covered enough of layer 2 VPN service types, it’s time to have a look at L3 services. We can start with L3VPN for IPv4 and IPv6 families.

Let’s configure a policy setting the extended community on the egress PE side, as part of the VRF export policy.

Configuration on the egress PE1 side:

aelita@pe1# show groups L3VPN
interfaces {
    ge-0/0/6 {
        unit 0 {
            family inet {
                address 1.1.1.2/24;
            }
            family inet6 {
                address 2001:100::1:1/127;
            }
        }
    }
}
policy-options {
    policy-statement PL-ADD-COLOR {
        term A {
            then {
                community add CM-128;
                community add CM-RT-100-1;
                accept;
            }
        }
    }
    community CM-128 members color:0:128;
    community CM-RT-100-1 members target:100:1;
}
routing-instances {
    RI-L3VPN {
        instance-type vrf;
        interface ge-0/0/6.0;
        vrf-export PL-ADD-COLOR;
        vrf-target target:100:1;
        vrf-table-label;
    }
}
protocols {
    bgp {
        group GR-iBGP {
            local-address 192.0.2.5;
            family inet-vpn {
                unicast;
            }
            family inet6-vpn {
                unicast;
            }
            peer-as 100;
            local-as 100;
            neighbor 192.0.2.6;
        }
    }
    mpls {
        ipv6-tunneling;
    }
}

Remember that we need MPLS IPv6 tunneling for IPv4-based BGP next-hops.

Verification on the ingress PE2 node:

aelita@pe2# run show route receive-protocol bgp 192.0.2.5 detail | match "\*|comm|label"
* 1.1.1.0/24 (1 entry, 1 announced)
     VPN Label: 48
     Communities: target:100:1 color:0:128
* 192.0.2.5:10:1.1.1.0/24 (1 entry, 0 announced)
     VPN Label: 48
     Communities: target:100:1 color:0:128
* 2001:100::1:0/127 (1 entry, 1 announced)
     VPN Label: 48
     Communities: target:100:1 color:0:128
* 192.0.2.5:10:2001:100::1:0/127 (1 entry, 0 announced)
     VPN Label: 48
     Communities: target:100:1 color:0:128

aelita@pe2# run show route 1.1.1.0/24

RI-L3VPN.inet.0: 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

1.1.1.0/24         *[BGP/170] 00:09:18, localpref 100, from 192.0.2.5
                      AS path: I, validation-state: unverified
                    >  to 10.0.36.1 via ge-0/0/0.0, Push 48, Push 100105(top)

aelita@pe2# run show route 2001:100::1:0/127

RI-L3VPN.inet6.0: 5 destinations, 5 routes (5 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

2001:100::1:0/127  *[BGP/170] 00:09:57, localpref 100, from 192.0.2.5
                      AS path: I, validation-state: unverified
                    >  to 10.0.36.1 via ge-0/0/0.0, Push 48, Push 100105(top)

We receive the route, recognize the color community, and set the next-hop to Flex-Algo 128!

Plain IPv4 and IPv6

Plain IPv4 or IPv6 is not much different from L3VPN. All what’s needed is to add a color community to chosen prefix(es): either on the egress PE as part of the BGP export policy, or on the ingress PE in the BGP import policy.

aelita@pe2# run show route receive-protocol bgp 192.0.2.5 detail | match "\*|comm|label"
* 1.1.1.0/24 (1 entry, 1 announced)
     Communities: color:0:128
* 2001:100::1:0/127 (1 entry, 1 announced)
     Communities: color:0:128

aelita@pe2# run show route protocol bgp table inet.0

1.1.1.0/24         *[BGP/170] 00:00:48, localpref 100, from 192.0.2.5
                      AS path: I, validation-state: unverified
                    >  to 10.0.36.1 via ge-0/0/0.0, Push 100105

aelita@pe2# run show route protocol bgp table inet6.0

2001:100::1:0/127  *[BGP/170] 00:01:05, localpref 100, from 192.0.2.5
                      AS path: I, validation-state: unverified
                    >  to 10.0.36.1 via ge-0/0/0.0, Push 100105

Summary

Junos allows a very granular mapping of complete services (or service prefixes) to colored MPLS tunnels. SR-TE, RSVP-TE, BGP-CT or Flex-Algo are all supported contributors to the transport tunnels. In addition to the above-mentioned services, Junos allows transport class mapping  for IPv6 and flowspec address familes.

Useful links

Glossary

  • BGP Border Gateway Protocol
  • BGP-CT BGP Classful Transport
  • ECMP Equal-Cost Multipath
  • EVPN Ethernet Virtual Private Network
  • IGP Interior Gateway Protocol
  • LSP Label-switched path
  • MPLS Multiprotocol Label Switching
  • PE Provider Edge
  • SP Service Provider
  • SPF Shortest Path First
  • SR Segment Routing
  • SR-TE Segment Routing Traffic Engineering
  • TE Traffic Engineering
  • TED Traffic Engineering Database
  • VPLS Virtual Private LAN Service

Acknowledgements

Thanks to Krzysztof Szarkowicz for the review and suggestions.

Feedback

Revision History

Version Author(s) Date Comments
1 Anton Elita January 2023  Initial publication
2 Anton Elita January 2023  Added details on Junos releases
3
Anton Elita
April 2023
 Added details on Junos releases and supported address families


#SolutionsandTechnology
#Routing

Permalink