Next Generation Multicast VPN (NG-mVPN)
NG-mVPN is a next-generation multicast distribution technology that is predominantly used in service provider networks and addresses scalability and manageability issues associated with the previous generation of SP Multicast VPN (Draft Rosen).
In this article, we will go through configuration steps you’d need to undertake to configure NG-mVPN in a Juniper environment. We will also discuss BGP advertisements that are associated with multicast sources and receivers connected to the network.
Lab Setup
We are setting up simple MPLS network with three PE routers and a single P router.
Multicast Source will be directly connected to PE1, while receivers are connected to PE2 and PE3.
PE1 is configured as the Rendezvous Point (RP) for customer’s VRF-A. In a real production implementation, you can implement distributed RP model, where every PE device serves as an RP for customer’s VRF.
It’s important to note that there is no ‘native’ multicast running between PE and P devices. All customer multicast traffic (C-Multicast) will be encapsulated in MPLS packers and will traverse the network leveraging point-to-multipoint LSPs.
Configuration Steps
The following things need to be configured for NG-MVPN to work:
On the P devices:
- P-to-PE Interfaces with IP addresses and family MPLS. As we’ll be using IS-IS as an IGP protocol in our lab, we will also enable family ISO
- IGP Protocol with TE-Extensions. We are using IS-IS
- MPLS under protocols
- RSVP-TE
On the PE devices:
- PE-to-P Interfaces with IP addresses and families IS-IS and MPLS
- IGP Protocol with TE-Extensions
- MPLS under protocols
- RSVP-TE
- Customer-facing interfaces
- Customer VRF
- IBGP peering between PE devices permitting address families Inet-VPN Unicast and Inet-MVPN
Configuration Examples
PE1 Configuration
Interfaces
interfaces { ge-0/0/0 { description ‘P1’; unit 0 { family inet { address 1.0.1.1/31; } family iso; family mpls; } } ge-0/0/1 { description ‘VRF A’; unit 0 { family inet { address 2.0.1.1/24; } } } lo0 { unit 0 { family inet { address 1.0.0.11/32; } family iso { address 49.0002.0010.0000.0011.00; } family mpls; } } }
Protocols
routing-options { autonomous-system 1; } protocols { rsvp { interface all; } mpls { label-switched-path pe1-pe3 { to 1.0.0.13; } label-switched-path pe1-pe2 { to 1.0.0.12; } interface all; } bgp { group ibgp { type internal; local-address 1.0.0.11; family inet-vpn { unicast; } family inet-mvpn { signaling; } neighbor 1.0.0.12; neighbor 1.0.0.13; } } isis { traffic-engineering { family inet { shortcuts; } } level 2 wide-metrics-only; level 1 disable; interface all; } ldp { interface all; } }
Customer VRF
routing-instances { A { instance-type vrf; interface ge-0/0/1.0; route-distinguisher 1:1; provider-tunnel { rsvp-te { label-switched-path-template { default-template; } } } vrf-target target:1:1; vrf-table-label; protocols { pim { rp { local { address 2.0.1.1; group-ranges { 225.0.0.0/8; } } } interface ge-0/0/1.0; } mvpn; } } }
PE2 Configuration
Interfaces
interfaces { ge-0/0/1 { unit 0 { family inet { address 2.0.2.1/24; } } } ge-0/0/2 { unit 0 { family inet { address 1.0.1.3/31; } family iso; family mpls; } } lo0 { unit 0 { family inet { address 1.0.0.12/32; } family iso { address 49.0002.0000.0012.00; } } } }
Protocols
routing-options { autonomous-system 1; } protocols { rsvp { interface all; } mpls { label-switched-path pe2-pe1 { to 1.0.0.11; } label-switched-path pe2-pe3 { to 1.0.0.13; } interface all; } bgp { group ibgp { type internal; local-address 1.0.0.12; family inet-vpn { unicast; } family inet-mvpn { signaling; } neighbor 1.0.0.11; neighbor 1.0.0.13; } } isis { traffic-engineering { family inet { shortcuts; } } level 2 wide-metrics-only; level 1 disable; interface all; } ldp { interface all; } }
Customer VRF
routing-instances { A { instance-type vrf; interface ge-0/0/1.0; route-distinguisher 1:1; provider-tunnel { rsvp-te { label-switched-path-template { default-template; } } } vrf-target target:1:1; vrf-table-label; protocols { pim { rp { static { address 2.0.1.1 { group-ranges { 225.0.0.0/8; } } } } interface ge-0/0/1.0; } mvpn; } } }
PE3 Configuration
Interfaces
interfaces { ge-0/0/0 { unit 0 { family inet { address 1.0.1.5/31; } family iso; family mpls; } } ge-0/0/1 { unit 0 { family inet { address 2.0.3.1/24; } } } lo0 { unit 0 { family inet { address 1.0.0.13/32; } family iso { address 49.0002.0000.0013.00; } } } }
Protocols
routing-options { autonomous-system 1; } protocols { rsvp { interface all; } mpls { label-switched-path pe3-pe1 { to 1.0.0.11; } label-switched-path pe3-pe2 { to 1.0.0.12; } interface all; } bgp { group ibgp { type internal; local-address 1.0.0.13; family inet-vpn { unicast; } family inet-mvpn { signaling; } neighbor 1.0.0.11; neighbor 1.0.0.12; } } isis { traffic-engineering { family inet { shortcuts; } } level 1 disable; level 2 wide-metrics-only; interface all; } ldp { interface all; } }
Customer VRF
routing-instances { A { instance-type vrf; interface ge-0/0/1.0; route-distinguisher 1:1; provider-tunnel { rsvp-te { label-switched-path-template { default-template; } } } vrf-target target:1:1; vrf-table-label; protocols { pim { rp { static { address 2.0.1.1 { group-ranges { 225.0.0.0/8; } } } } interface ge-0/0/1.0; } mvpn; } } }
P Configuration
Interfaces
interfaces { ge-0/0/0 { unit 0 { family inet { address 1.0.1.0/31; } family iso; family mpls; } } ge-0/0/1 { unit 0 { family inet { address 1.0.1.4/31; } family iso; family mpls; } } ge-0/0/2 { unit 0 { family inet { address 1.0.1.2/31; } family iso; family mpls; } } lo0 { unit 0 { family inet { address 1.0.0.0/32; } family iso { address 49.0002.0010.0000.0000.00; } } } }
Protocols
protocols { rsvp { interface all; } mpls { interface all; } isis { traffic-engineering { family inet { shortcuts; } } level 2 wide-metrics-only; level 1 disable; interface all; } ldp { interface all; } }
The Initial State (no multicast traffic)
PE1’s View
IGP (IS-IS) State
PE1> show isis adjacency Interface System L State Hold (secs) SNPA ge-0/0/0.0 P1 2 Up 23 0:50:56:a2:63:ea
Multicast State
No multicast routes:
PE1> show multicast route instance A Instance: A Family: INET Instance: A Family: INET6 PE1> show pim join instance A Instance: PIM.A Family: INET R = Rendezvous Point Tree, S = Sparse, W = Wildcard Instance: PIM.A Family: INET6 R = Rendezvous Point Tree, S = Sparse, W = Wildcard
BGP State
Type 1 Intra-AS Auto-discovery Routers are being sent by PE devices participating in NG-MVPN:
For example, PE1 sends/receives the following advertisements to/from PE2:
PE1> show route advertising-protocol bgp 1.0.0.12 … bgp.mvpn.0: 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden) Prefix Nexthop MED Lclpref AS path 1:1:1:1.0.0.11/240 * Self 100 I PE1> show route receive-protocol bgp 1.0.0.12 … bgp.mvpn.0: 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden) Prefix Nexthop MED Lclpref AS path 1:1:1:1.0.0.12/240 * 1.0.0.12 100 I
Source Traffic (no receivers)
At the point, we inject multicast traffic into the network by sending UDP Datastream to 225.1.1.1 group from a device directly connected to PE1 in VRF-A.
PE1’s View
PIM State
PE1> show pim join instance A Instance: PIM.A Family: INET R = Rendezvous Point Tree, S = Sparse, W = Wildcard Group: 225.1.1.1 Source: 2.0.1.2 Flags: sparse,spt Upstream interface: ge-0/0/1.0 Instance: PIM.A Family: INET6 R = Rendezvous Point Tree, S = Sparse, W = Wildcard PE1> show pim join instance A extensive Instance: PIM.A Family: INET R = Rendezvous Point Tree, S = Sparse, W = Wildcard Group: 225.1.1.1 Source: 2.0.1.2 Flags: sparse,spt Upstream interface: ge-0/0/1.0 Upstream neighbor: Direct Upstream state: Local Source, Local RP Keepalive timeout: 353 Uptime: 00:00:07 Downstream neighbors: Number of downstream interfaces: 0 Number of downstream neighbors: 0 Instance: PIM.A Family: INET6 R = Rendezvous Point Tree, S = Sparse, W = Wildcard
RSVP Tunnels
P2MP RSVP Tunnels were automatically built by the system for NG-MVPN in VRF-A.
PE1> show rsvp session Ingress RSVP: 4 sessions To From State Rt Style Labelin Labelout LSPname 1.0.0.12 1.0.0.11 Up 0 1 SE - 299936 1.0.0.12:1:1:mvpn:A 1.0.0.13 1.0.0.11 Up 0 1 SE - 299936 1.0.0.13:1:1:mvpn:A 1.0.0.12 1.0.0.11 Up 0 1 FF - 299840 pe1-pe2 1.0.0.13 1.0.0.11 Up 0 1 FF - 299824 pe1-pe3 Total 4 displayed, Up 4, Down 0 Egress RSVP: 4 sessions To From State Rt Style Labelin Labelout LSPname 1.0.0.11 1.0.0.12 Up 0 1 FF 3 - pe2-pe1 1.0.0.11 1.0.0.13 Up 0 1 FF 3 - pe3-pe1 1.0.0.11 1.0.0.12 Up 0 1 SE 16 - 1.0.0.11:1:1:mvpn:A 1.0.0.11 1.0.0.13 Up 0 1 SE 16 - 1.0.0.11:1:1:mvpn:A Total 4 displayed, Up 4, Down 0 Transit RSVP: 0 sessions Total 0 displayed, Up 0, Down 0 PE1> show rsvp session extensive Ingress RSVP: 4 sessions 1.0.0.12 From: 1.0.0.11, LSPstate: Up, ActiveRoute: 0 LSPname: 1.0.0.12:1:1:mvpn:A, LSPpath: Primary LSPtype: Dynamic Configured P2MP LSPname: 1:1:mvpn:A, Re-merge: Head Suggested label received: -, Suggested label sent: - Recovery label received: -, Recovery label sent: 299936 Resv style: 1 SE, Label in: -, Label out: 299936 Time left: -, Since: Wed Jan 2 22:29:12 2019 Tspec: rate 0bps size 0bps peak Infbps m 20 M 1500 Port number: sender 1 receiver 36195 protocol 0 P2MP branch id: 1, Subgroup Originator: 1.0.0.11 Enhanced FRR: Enabled (Downstream) PATH rcvfrom: localclient Adspec: sent MTU 1500 Path MTU: received 1500 PATH sentto: 1.0.1.0 (ge-0/0/0.0) 2 pkts outgoing message state: refreshing, Message ID: 27, Epoch: 13790520 RESV rcvfrom: 1.0.1.0 (ge-0/0/0.0) 3 pkts, Entropy label: Yes incoming message handle: R-5/3, Message ID: 47, Epoch: 13790499 Explct route: 1.0.1.0 1.0.1.3 Record route: 1.0.1.0 1.0.1.3 1.0.0.13 From: 1.0.0.11, LSPstate: Up, ActiveRoute: 0 LSPname: 1.0.0.13:1:1:mvpn:A, LSPpath: Primary LSPtype: Dynamic Configured P2MP LSPname: 1:1:mvpn:A, Re-merge: Head Suggested label received: -, Suggested label sent: - Recovery label received: -, Recovery label sent: 299936 Resv style: 1 SE, Label in: -, Label out: 299936 Time left: -, Since: Wed Jan 2 22:30:03 2019 Tspec: rate 0bps size 0bps peak Infbps m 20 M 1500 Port number: sender 1 receiver 36195 protocol 0 P2MP branch id: 2, Subgroup Originator: 1.0.0.11 Enhanced FRR: Enabled (Downstream) PATH rcvfrom: localclient Adspec: sent MTU 1500 Path MTU: received 1500 PATH sentto: 1.0.1.0 (ge-0/0/0.0) 1 pkts outgoing message state: refreshing, Message ID: 29, Epoch: 13790520 RESV rcvfrom: 1.0.1.0 (ge-0/0/0.0) 2 pkts, Entropy label: Yes incoming message handle: R-7/2, Message ID: 55, Epoch: 13790499 Explct route: 1.0.1.0 1.0.1.5 Record route: 1.0.1.0 1.0.1.5
BGP State
Type 5 Source Active Route is being advertised by the PE with directly attached source.
PE1> show bgp summary Groups: 1 Peers: 2 Down peers: 0 Table Tot Paths Act Paths Suppressed History Damp State Pending bgp.l3vpn.0 2 2 0 0 0 0 bgp.mvpn.0 2 2 0 0 0 0 Peer AS InPkt OutPkt OutQ Flaps Last Up/Dwn State|#Active/Received/Accepted/Damped... 1.0.0.12 1 18065 18069 0 1 5d 15:55:45 Establ bgp.l3vpn.0: 1/1/1/0 A.inet.0: 1/1/1/0 bgp.mvpn.0: 1/1/1/0 A.mvpn.0: 1/1/1/0 1.0.0.13 1 18065 18069 0 1 5d 15:55:23 Establ bgp.l3vpn.0: 1/1/1/0 A.inet.0: 1/1/1/0 bgp.mvpn.0: 1/1/1/0 A.mvpn.0: 1/1/1/0 PE1> show route receive-protocol bgp 1.0.0.12 bgp.mvpn.0: 5 destinations, 5 routes (5 active, 0 holddown, 0 hidden) Prefix Nexthop MED Lclpref AS path 1:1:1:1.0.0.12/240 * 1.0.0.12 100 I PE1> show route advertising-protocol bgp 1.0.0.12 … bgp.mvpn.0: 5 destinations, 5 routes (5 active, 0 holddown, 0 hidden) Prefix Nexthop MED Lclpref AS path 1:1:1:1.0.0.11/240 * Self 100 I 5:1:1:32:2.0.1.2:32:225.1.1.1/240 * Self 100 I
PE2 & PE3 devices
Multicast State
PE2> show multicast route instance A Instance: A Family: INET Instance: A Family: INET6 PE2> show igmp group Interface: local, Groups: 3 Group: 224.0.0.2 Source: 0.0.0.0 Last reported by: Local Timeout: 0 Type: Dynamic Group: 224.0.0.13 Source: 0.0.0.0 Last reported by: Local Timeout: 0 Type: Dynamic Group: 224.0.0.22 Source: 0.0.0.0 Last reported by: Local Timeout: 0 Type: Dynamic PE3> show multicast route instance A Instance: A Family: INET Instance: A Family: INET6 PE3> show igmp group Interface: local, Groups: 3 Group: 224.0.0.2 Source: 0.0.0.0 Last reported by: Local Timeout: 0 Type: Dynamic Group: 224.0.0.13 Source: 0.0.0.0 Last reported by: Local Timeout: 0 Type: Dynamic Group: 224.0.0.22 Source: 0.0.0.0 Last reported by: Local Timeout: 0 Type: Dynamic
Multicast Receivers added to PE2 & PE3
PE2’s view
Multicast state on PE2
PE3 is now shown as the state is mostly the same (different customer IP range)
PE2> show igmp group Interface: ge-0/0/1.0, Groups: 1 Group: 225.1.1.1 Source: 0.0.0.0 Last reported by: 2.0.2.2 Timeout: 249 Type: Dynamic Interface: local, Groups: 3 Group: 224.0.0.2 Source: 0.0.0.0 Last reported by: Local Timeout: 0 Type: Dynamic Group: 224.0.0.13 Source: 0.0.0.0 Last reported by: Local Timeout: 0 Type: Dynamic Group: 224.0.0.22 Source: 0.0.0.0 Last reported by: Local Timeout: 0 Type: Dynamic PE2> show multicast route instance A Instance: A Family: INET Group: 225.1.1.1 Source: 2.0.1.2/32 Upstream interface: lsi.0 Downstream interface list: ge-0/0/1.0 Instance: A Family: INET6 PE2> show pim join instance A Instance: PIM.A Family: INET R = Rendezvous Point Tree, S = Sparse, W = Wildcard Group: 225.1.1.1 Source: * RP: 2.0.1.1 Flags: sparse,rptree,wildcard Upstream protocol: BGP Upstream interface: Through BGP Group: 225.1.1.1 Source: 2.0.1.2 Flags: sparse,spt Upstream protocol: BGP Upstream interface: Through BGP Instance: PIM.A Family: INET6 R = Rendezvous Point Tree, S = Sparse, W = Wildcard
PE1
Multicast state
PE1> show pim join instance A extensive Instance: PIM.A Family: INET R = Rendezvous Point Tree, S = Sparse, W = Wildcard Group: 225.1.1.1 Source: 2.0.1.2 Flags: sparse,spt Upstream interface: ge-0/0/1.0 Upstream neighbor: Direct Upstream state: Local Source, Local RP Keepalive timeout: 57 Uptime: 00:15:49 Downstream neighbors: Interface: Pseudo-MVPN Uptime: 00:04:57 Time since last Join: 00:04:57 Number of downstream interfaces: 1 Number of downstream neighbors: 1 Instance: PIM.A Family: INET6 R = Rendezvous Point Tree, S = Sparse, W = Wildcard PE1> show multicast route instance A Instance: A Family: INET Group: 225.1.1.1 Source: 2.0.1.2/32 Upstream interface: ge-0/0/1.0 Downstream interface list: ge-0/0/0.0 Instance: A Family: INET6 PE1> show multicast route instance A extensive Instance: A Family: INET Group: 225.1.1.1 Source: 2.0.1.2/32 Upstream interface: ge-0/0/1.0 Downstream interface list: ge-0/0/0.0 Number of outgoing interfaces: 1 Session description: Unknown Statistics: 494 kBps, 1000 pps, 1043805 packets Next-hop ID: 1048576 Upstream protocol: MVPN Route state: Active Forwarding state: Forwarding Cache lifetime/timeout: forever Wrong incoming interface notifications: 0 Uptime: 00:06:32 Instance: A Family: INET6
BGP State
PE1 advertises the active source using Type 5 BGP route
PE1> show route advertising-protocol bgp 1.0.0.12 bgp.mvpn.0: 5 destinations, 7 routes (5 active, 0 holddown, 0 hidden) Prefix Nexthop MED Lclpref AS path 1:1:1:1.0.0.11/240 * Self 100 I 5:1:1:32:2.0.1.2:32:225.1.1.1/240 * Self 100 I Type 7 Source Tree Join Route is being received from PE2, as PE2 wants to receive the traffic from the source attached to PE1. PE1> show route receive-protocol bgp 1.0.0.12 bgp.mvpn.0: 5 destinations, 7 routes (5 active, 0 holddown, 0 hidden) Prefix Nexthop MED Lclpref AS path 1:1:1:1.0.0.12/240 * 1.0.0.12 100 I 7:1:1:1:32:2.0.1.2:32:225.1.1.1/240 1.0.0.12 0 100 I
Receivers without senders
We’ll look into scenario where IGMP Join requests were sent to PE2/PE3, but Sender behind PE1 is not active
PE2
IGMP state
PE2> show igmp group Interface: ge-0/0/1.0, Groups: 1 Group: 225.1.1.1 Source: 0.0.0.0 Last reported by: 2.0.2.2 Timeout: 204 Type: Dynamic Interface: local, Groups: 3 Group: 224.0.0.2 Source: 0.0.0.0 Last reported by: Local Timeout: 0 Type: Dynamic Group: 224.0.0.13 Source: 0.0.0.0 Last reported by: Local Timeout: 0 Type: Dynamic Group: 224.0.0.22 Source: 0.0.0.0 Last reported by: Local Timeout: 0 Type: Dynamic
PE2’s PIM state
PE2> show pim join instance A Instance: PIM.A Family: INET R = Rendezvous Point Tree, S = Sparse, W = Wildcard Group: 225.1.1.1 Source: * RP: 2.0.1.1 Flags: sparse,rptree,wildcard Upstream protocol: BGP Upstream interface: Through BGP Instance: PIM.A Family: INET6 R = Rendezvous Point Tree, S = Sparse, W = Wildcard
PE1’s view
BGP on PE1
PE1 is not aware of the receivers. PE2/PE3 will no send Type 6/7 C-Multicast joint routes to PE1, unless C-Multicast (S,G) Type 5 Source Discovery route is advertised by PE1.
PE1> show route receive-protocol bgp 1.0.0.12 … bgp.mvpn.0: 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden) Prefix Nexthop MED Lclpref AS path 1:1:1:1.0.0.12/240 * 1.0.0.12 100 I PE1> show route advertising-protocol bgp 1.0.0.12 … bgp.mvpn.0: 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden) Prefix Nexthop MED Lclpref AS path 1:1:1:1.0.0.11/240 * Self 100 I