Issue
In this
example we will examine Multicast VPN with MPLS implemented using static rp for
multicast information deleivery
Our CEs
in this example are R1 and R5
Our PEs
are R2 and R4, and R3 is the P
We will
run OSPF as the IGP inside the MPLS backbone 
Configuration
R1#sh
run int f1/0
Building
configuration...
Current
configuration : 114 bytes
!
interface
FastEthernet1/0
 ip address 192.1.12.1 255.255.255.0
 ip pim sparse-mode
 speed 100
 duplex full
R1#sh
run | sec ip route
ip
route 0.0.0.0 0.0.0.0 192.1.12.2
R2
R2#sh
run int f1/0
interface
FastEthernet1/0
 vrf forwarding VPN_A
 ip address 192.1.12.2 255.255.255.0
 ip pim sparse-mode
 speed 100
 duplex full
R2#sh
run int f1/1
interface
FastEthernet1/1
 ip address 192.1.23.2 255.255.255.0
 ip pim sparse-mode
 speed 100
 duplex full
 mpls ip
R2#sh
run int lo0
interface
Loopback0
 ip address 2.2.2.2 255.255.255.255
 ip pim sparse-mode
R2#sh
run | sec vrf def
vrf
definition VPN_A
 rd 100:1
 route-target export 100:1
 route-target import 100:1
 !
 address-family ipv4
  mdt default 239.1.1.1
 exit-address-family
R2#sh
run | sec router ospf
router
ospf 1
 router-id 2.2.2.2
 network 2.2.2.2 0.0.0.0 area 0
 network 192.1.23.2 0.0.0.0 area 0
R2#sh
run | sec router bgp
router
bgp 100
 bgp log-neighbor-changes
 no bgp default ipv4-unicast
 neighbor 4.4.4.4 remote-as 100
 neighbor 4.4.4.4 update-source Loopback0
 !
 address-family ipv4
 exit-address-family
 !
 address-family vpnv4
  neighbor 4.4.4.4 activate
  neighbor 4.4.4.4 send-community both
 exit-address-family
 !
 address-family ipv4 vrf VPN_A
  network 192.1.12.0
 exit-address-family
R3
R3#sh
run int f1/0
interface
FastEthernet1/0
 ip address 192.1.23.3 255.255.255.0
 ip pim sparse-mode
 speed 100
 duplex full
 mpls ip
R3#sh
run int f1/1
interface
FastEthernet1/1
 ip address 192.1.34.3 255.255.255.0
 ip pim sparse-mode
 speed 100
 duplex full
 mpls ip
R3#sh
run int lo0
interface
Loopback0
 ip address 3.3.3.3 255.255.255.255
 ip pim sparse-mode
R3#sh
run | sec router ospf
router
ospf 1
 router-id 3.3.3.3
 network 3.3.3.3 0.0.0.0 area 0
 network 192.1.23.3 0.0.0.0 area 0
 network 192.1.34.3 0.0.0.0 area 0
R4
R4#sh
run int f1/0
interface
FastEthernet1/0
 ip address 192.1.34.4 255.255.255.0
 ip pim sparse-mode
 speed 100
 duplex full
 mpls ip
R4#sh
run int f1/1
interface
FastEthernet1/1
 vrf forwarding VPN_A
 ip address 192.1.45.4 255.255.255.0
 ip pim sparse-mode
 speed 100
 duplex full
R4#sh
run int lo0
interface
Loopback0
 ip address 4.4.4.4 255.255.255.255
 ip pim sparse-mode
R4#sh
run | sec vrf def
vrf
definition VPN_A
 rd 100:1
 route-target export 100:1
 route-target import 100:1
 !
 address-family ipv4
  mdt default 239.1.1.1
 exit-address-family
R4#sh
run | sec router ospf
router
ospf 1
 router-id 4.4.4.4
 network 4.4.4.4 0.0.0.0 area 0
 network 192.1.34.4 0.0.0.0 area 0
R4#sh
run | sec router bgp 
router
bgp 100
 bgp log-neighbor-changes
 no bgp default ipv4-unicast
 neighbor 2.2.2.2 remote-as 100
 neighbor 2.2.2.2 update-source Loopback0
 !
 address-family ipv4
 exit-address-family
 !
 address-family vpnv4
  neighbor 2.2.2.2 activate
  neighbor 2.2.2.2 send-community both
 exit-address-family
 !
 address-family ipv4 vrf VPN_A
  network 192.1.45.0
 exit-address-family
R5
R5#sh
run int f1/0
interface
FastEthernet1/0
 ip address 192.1.45.5 255.255.255.0
 ip pim sparse-mode
speed
100
 duplex full
R5#sh
run | sec ip route
ip
route 0.0.0.0 0.0.0.0 192.1.45.4
Multicast Configuration
We
first have to enable multicast globally on our devices, but on our PE routers, the
multicast routing should be enabled for the VRF as this is our concern
R2#sh
run | inc multica
ip
multicast-routing 
ip
multicast-routing vrf VPN_A
Next,
we will enable pim sparse-mode on the transit interfaces (sample configuration)
R1#conf
t
Enter
configuration commands, one per line. 
End with CNTL/Z.
R1(config)#int
f1/0
R1(config-if)#ip
pim sparse-mode
Next,
we will define who is the rp-address of our multicast domain, we will choose our
P router (R3) to take this role, but for the VRF PE1 will take this role 
R1#sh
run | inc rp-add
ip
pim rp-address 192.1.12.2
R2#sh
run | inc rp-add
ip
pim rp-address 3.3.3.3
ip
pim vrf VPN_A rp-address 192.1.12.2
R3#sh
run | inc rp-add
ip
pim rp-address 3.3.3.3
R4#sh
run | inc rp-add
ip
pim rp-address 3.3.3.3
ip
pim vrf VPN_A rp-address 192.1.12.2
R5#sh
run | inc rp-add
ip
pim rp-address 192.1.12.2
R1#sh
ip pim rp mapping
PIM
Group-to-RP Mappings
Group(s):
224.0.0.0/4, Static
    RP: 192.1.12.2 (?)
R2#sh
ip pim rp mapping
PIM
Group-to-RP Mappings
Group(s):
224.0.0.0/4, Static
    RP: 3.3.3.3 (?)
R3#sh
ip pim rp mapping
PIM
Group-to-RP Mappings
Group(s):
224.0.0.0/4, Static
    RP: 3.3.3.3 (?)
R4#sh
ip pim rp mapping
PIM
Group-to-RP Mappings
Group(s):
224.0.0.0/4, Static
    RP: 3.3.3.3 (?)
R5#sh
ip pim rp mapping
PIM
Group-to-RP Mappings
Group(s):
224.0.0.0/4, Static
    RP: 192.1.12.2 (?)
R2#sh
ip pim vrf VPN_A rp mapping   
PIM
Group-to-RP Mappings
Group(s):
224.0.0.0/4, Static
    RP: 192.1.12.2 (?)
R4#sh
ip pim vrf VPN_A rp mapping     
PIM
Group-to-RP Mappings
Group(s):
224.0.0.0/4, Static
    RP: 192.1.12.2 (?)
Not
forgetting the MDT group!
R2#sh
run | sec vrf def
address-family
ipv4
  mdt default 239.1.1.1
 exit-address-family
R4#sh
run | sec vrf def
address-family
ipv4
  mdt default 239.1.1.1
 exit-address-family
To
make sure that the multicast inside our core is working properly interface R4 lo0
will join the group 224.5.5.5
R4#sh
run int lo0 | inc igm
 ip igmp join-group 224.5.5.5
Will
R2 be able to ping it?
R2#ping
224.5.5.5 repeat 1
Type
escape sequence to abort.
Sending
1, 100-byte ICMP Echos to 224.5.5.5, timeout is 2 seconds:
Reply
to request 0 from 4.4.4.4, 96 ms
Reply
to request 0 from 4.4.4.4, 100 ms
Then
it is working fine, now let us configure R5 interface F1/0 to join the group 239.9.9.9
R5#sh
run int f1/0 | inc igmp
 ip igmp join-group 239.9.9.9
R1#ping
239.9.9.9 repeat 1
Type
escape sequence to abort.
Sending
1, 100-byte ICMP Echos to 239.9.9.9, timeout is 2 seconds:
Reply
to request 0 from 192.1.45.5, 148 ms
Then
our Multicast VPN is working fine and as required
R1#sh
ip int bri | inc Tun
Tunnel0                192.1.12.1      YES unset 
up                    up   
R2#sh
ip mroute vrf VPN_A 239.9.9.9
IP
Multicast Routing Table
Flags:
D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected,
       L - Local, P - Pruned, R - RP-bit set, F
- Register flag,
       T - SPT-bit set, J - Join SPT, M - MSDP
created entry, E - Extranet,
       X - Proxy Join Timer Running, A -
Candidate for MSDP Advertisement,
       U - URD, I - Received Source Specific
Host Report, 
       Z - Multicast Tunnel, z - MDT-data group
sender, 
       Y - Joined MDT-data group, y - Sending
to MDT-data group, 
       G - Received BGP C-Mroute, g - Sent BGP
C-Mroute, 
       Q - Received BGP S-A Route, q - Sent BGP
S-A Route, 
       V - RD & Vector, v - Vector
Outgoing
interface flags: H - Hardware switched, A - Assert winner
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD,
State/Mode
(*,
239.9.9.9), 21:57:03/stopped, RP 192.1.12.2, flags: S
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    Tunnel2, Forward/Sparse,
21:51:36/00:02:41
(192.1.12.1,
239.9.9.9), 00:00:03/00:02:56, flags: T
  Incoming interface: FastEthernet1/0, RPF nbr
192.1.12.1
  Outgoing interface list:
    Tunnel2, Forward/Sparse,
00:00:03/00:03:26
R2#show
derived-config interface tunnel 2
Building
configuration...
Derived
configuration : 133 bytes
!
interface
Tunnel2
 ip unnumbered Loopback0
 no ip redirects
 ip mtu 1500
 tunnel source Loopback0
 tunnel mode gre multipoint
end
As
can be seen that a GRE tunnel was used with a source of loopback 0 and a destination
of the default MDT group configured under the VRF definition