Multicast: Understanding RPF check
·
While
configuring multicast, we often see RPF failures
·
What
is RPF check and why it needs to be done?
·
If
we see the multicast functionality, PIM depends on IGP protocols to find the
best path.
·
And
if multiple paths exist in the IGP and PIM is not enabled on the IGP best path,
then we have issues.
·
To
avoid this, RPF check is used.
·
This
simply to check the source, where the packet is coming from; if the router uses
the same interface to reach the source, then RPF check is pass or else it is
fail.
·
Let
me take 2 router topology to configure this and verify:
R1----S1/0--------------------------S1/0----R2
R1----S1/1--------------------------S1/1----R2
·
R1-R2
– Ser1/0: 10.1.21.0/24
·
R1-R2
– Ser1/1: 10.1.12.0/24
·
OSPF
has been configured between R1 and R2
R1#show ip
ospf nei
Neighbor
ID Pri State Dead Time Address Interface
2.2.2.2 0
FULL/ - 00:00:34 10.1.12.2 Serial1/1
2.2.2.2 0
FULL/ - 00:00:32 10.1.21.2 Serial1/0
R1#
R1#show ip
route 2.2.2.2
Routing
entry for 2.2.2.2/32
Known via "ospf 1", distance 110,
metric 65, type intra area
Last update from 10.1.21.2 on Serial1/0,
00:00:07 ago
Routing Descriptor Blocks:
* 10.1.21.2, from 2.2.2.2, 00:00:07 ago, via Serial1/0
Route metric is 65, traffic share count
is 1
R1#
R2#show ip
ospf nei
Neighbor
ID Pri State Dead Time Address Interface
1.1.1.1 0
FULL/ - 00:00:37 10.1.12.1 Serial1/1
1.1.1.1 0
FULL/ - 00:00:34 10.1.21.1 Serial1/0
R2#
R2#show ip
route 1.1.1.1
Routing
entry for 1.1.1.1/32
Known via "ospf 1", distance 110,
metric 65, type intra area
Last update from 10.1.21.1 on Serial1/0,
00:01:27 ago
Routing Descriptor Blocks:
* 10.1.21.1, from 1.1.1.1, 00:01:27 ago, via Serial1/0
Route metric is 65, traffic share count
is 1
R2#
Observation:
·
OPSF
neighbor relationship is up between R1-R2 Fa0/0 and Ser1/0
·
R1
and R2 using Fa0/0 to reach each other’s loopback0
·
Now,
let me enable multicast (I’m using dense mode here).
·
R1’s
loopback 1.1.1.1 is the server and R2’s loopback 2.2.2.2 is the client
·
I’m
enabling multicast under Ser1/1, which not the best path to reach the
loopbacks.
R1(config-if)#do
show run int ser1/1
Building
configuration...
Current
configuration : 124 bytes
!
interface
Serial1/1
ip address 10.1.12.1 255.255.255.0
ip pim dense-mode
ip ospf cost 999
serial restart-delay 0
end
R1(config-if)#do
show run int loop0
Building
configuration...
Current
configuration : 82 bytes
!
interface
Loopback0
ip address 1.1.1.1 255.255.255.255
ip pim dense-mode
end
R1(config-if)#
R2(config-if)#do
show run int ser1/1
Building
configuration...
Current
configuration : 124 bytes
!
interface
Serial1/1
ip address 10.1.12.2 255.255.255.0
ip pim dense-mode
ip ospf cost 999
serial restart-delay 0
end
R2(config-if)#do
show run int loop0
Building
configuration...
Current
configuration : 115 bytes
!
interface
Loopback0
ip address 2.2.2.2 255.255.255.255
ip pim dense-mode
ip igmp join-group 227.27.27.27
end
R2(config-if)#
·
Now, let me verify
multicast reachability by initiating the ping from R1:
R1#ping
227.27.27.27 source 1.1.1.1
Type
escape sequence to abort.
Sending
1, 100-byte ICMP Echos to 227.27.27.27, timeout is 2 seconds:
Packet
sent with a source address of 1.1.1.1
.
R1#
Observation:
·
Ping
is unsuccessfulL
·
Now,
let me check the multicast routing table to identify the problem:
R1#show ip
mroute
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,
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
Outgoing
interface flags: H - Hardware switched, A - Assert winner
Timers: Uptime/Expires
Interface state: Interface, Next-Hop or VCD,
State/Mode
(*,
227.27.27.27), 00:07:40/stopped, RP 0.0.0.0, flags: D
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
Serial1/1, Forward/Dense, 00:07:40/00:00:00
(1.1.1.1,
227.27.27.27), 00:03:26/00:02:54, flags: T
Incoming interface: Loopback0, RPF nbr
0.0.0.0
Outgoing interface list:
Serial1/1, Forward/Dense, 00:03:26/00:00:00
(*,
224.0.1.40), 01:03:49/00:02:55, RP 0.0.0.0, flags: DCL
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
Serial1/1, Forward/Dense, 00:11:48/00:00:00
Loopback0, Forward/Dense, 00:22:54/00:00:00
R1#
R2#show ip
mroute
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,
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
Outgoing
interface flags: H - Hardware switched, A - Assert winner
Timers: Uptime/Expires
Interface state: Interface, Next-Hop or VCD,
State/Mode
(*,
227.27.27.27), 00:08:57/stopped, RP 0.0.0.0, flags: DCL
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
Serial1/1, Forward/Dense, 00:08:57/00:00:00
Loopback0, Forward/Dense, 00:08:57/00:00:00
(1.1.1.1,
227.27.27.27), 00:00:10/00:02:49, flags: L
Incoming interface: Null, RPF nbr 10.1.21.1
Outgoing interface list:
Loopback0, Forward/Dense, 00:00:10/00:00:00
Serial1/1, Forward/Dense, 00:00:10/00:00:00
(*,
224.0.1.40), 01:03:32/00:02:52, RP 0.0.0.0, flags: DCL
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
Serial1/1, Forward/Dense, 00:11:53/00:00:00
Loopback0, Forward/Dense, 01:02:26/00:00:00
R2#
Observation:
·
RPF
check is failed in R2, because Ser1/0, 10.1.21.0/24 is the best path to reach
the server 1.1.1.1 and multicast is not enabled under Ser1/0
·
This
we can see in R2’s multicast routing table, incoming interface is set to NULL.
·
Solution
is to create multicast static route in R2, mroute through Ser1/1
R2#conf
t
Enter
configuration commands, one per line.
End with CNTL/Z.
R2(config)#ip mroute 1.1.1.1
255.255.255.255 serial 1/1
R2(config)#
·
Now, let me verify
multicast connectivity:
R1#ping 227.27.27.27
Type
escape sequence to abort.
Sending
1, 100-byte ICMP Echos to 227.27.27.27, timeout is 2 seconds:
Reply
to request 0 from 10.1.12.2, 92 ms
Reply
to request 0 from 10.1.12.2, 92 ms
R1#
Observation:
·
Ping
is successfulJ
·
Now,
let me check the multicast routing table:
R1#show ip
mroute
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,
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
Outgoing
interface flags: H - Hardware switched, A - Assert winner
Timers: Uptime/Expires
Interface state: Interface, Next-Hop or VCD,
State/Mode
(*,
227.27.27.27), 00:00:30/stopped, RP 0.0.0.0, flags: D
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
Serial1/1, Forward/Dense, 00:00:30/00:00:00
(1.1.1.1, 227.27.27.27),
00:00:30/00:02:31, flags: T
Incoming interface: Loopback0, RPF nbr 0.0.0.0
Outgoing interface list:
Serial1/1, Forward/Dense, 00:00:30/00:00:00
(*,
224.0.1.40), 01:17:39/00:02:08, RP 0.0.0.0, flags: DCL
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
Serial1/1, Forward/Dense, 00:25:38/00:00:00
Loopback0, Forward/Dense, 00:36:44/00:00:00
R1#
R2#show ip
mroute
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,
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
Outgoing
interface flags: H - Hardware switched, A - Assert winner
Timers: Uptime/Expires
Interface state: Interface, Next-Hop or VCD,
State/Mode
(*,
227.27.27.27), 00:22:49/stopped, RP 0.0.0.0, flags: DCL
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
Serial1/1, Forward/Dense, 00:22:49/00:00:00
Loopback0, Forward/Dense, 00:22:49/00:00:00
(1.1.1.1, 227.27.27.27), 00:00:37/00:02:28,
flags: LT
Incoming interface: Serial1/1, RPF nbr 10.1.12.1, Mroute
Outgoing interface list:
Loopback0, Forward/Dense, 00:00:37/00:00:00
(*,
224.0.1.40), 01:17:24/00:02:09, RP 0.0.0.0, flags: DCL
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
Serial1/1, Forward/Dense, 00:25:45/00:00:00
Loopback0, Forward/Dense, 01:16:19/00:00:00
R2#
Observation:
·
RPF
check is passed now, because, though Ser1/1 is not the best path to reach
1.1.1.1, I have created a static mroute to reach 1.1.1.1 through Ser1/1.
·
This
we can see in R2’s multicast routing table, incoming interface is set to Ser1/1.
No comments:
Post a Comment