sparse-modeのSPT switchover~トラブルシュート~

Advent Calendar 2018 大國魂(ITブログ) の7日目です。

前回は、SPT switchoverの基本的な動作を確認してみました。

構成図は同じままで、1つだけ設定を変更してみます。

経路の途中にあるルートでip pim sparse-modeをとる…という設定です。

f:id:TKCman:20181130095408p:plain

前回の記事ではサラッと書いてしまいましたが、全部のルータのインターフェイスにip pim sparse-modeの設定が入っています。

R2とR3がつながっているインターフェイスのR2側だけip pim sparse-modeを削除してみます。senderからreceiverにいく(S,G) にツリーができる(pim joinがsenderまで送られる)(*,G)→(S,G) にツリーがかわるSPT switchoverがうまくいかないことが期待される動作です。

 

■R2からip pim sparse-modeの設定を削除しておきます。
R2#sho run int e 0/1
Building configuration...

Current configuration : 68 bytes
!
interface Ethernet0/1
ip address 192.168.23.2 255.255.255.0
end

 

■このときのこの時の共有ツリー(今回も225.1.1.1が使用するマルチキャストグループです。)
R4#sho 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, 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,
N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed,
Q - Received BGP S-A Route, q - Sent BGP S-A Route,
V - RD & Vector, v - Vector, p - PIM Joins on route
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
Timers: Uptime/Expires
Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 225.1.1.1), 10:00:42/00:02:26, RP 100.0.0.2, flags: SJCL
Incoming interface: Ethernet0/0, RPF nbr 192.168.34.3
Outgoing interface list:
Loopback0, Forward/Sparse, 10:00:42/00:02:26

(*, 224.0.1.40), 10:05:50/00:02:18, RP 100.0.0.2, flags: SJPCL
Incoming interface: Ethernet0/0, RPF nbr 192.168.34.3
Outgoing interface list: Null

 

R3#sho 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, 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,
N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed,
Q - Received BGP S-A Route, q - Sent BGP S-A Route,
V - RD & Vector, v - Vector, p - PIM Joins on route
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
Timers: Uptime/Expires
Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 225.1.1.1), 10:01:18/00:02:32, RP 100.0.0.2, flags: S
Incoming interface: Ethernet0/1, RPF nbr 192.168.23.2★R3からR2には行けないのにR2側を向いてしまっている!!
Outgoing interface list:
Ethernet0/2, Forward/Sparse, 10:01:18/00:02:32

(*, 224.0.1.40), 10:08:24/00:02:47, RP 100.0.0.2, flags: SJCL
Incoming interface: Ethernet0/1, RPF nbr 192.168.23.2
Outgoing interface list:
Ethernet0/0, Forward/Sparse, 05:37:36/00:02:30
Ethernet0/2, Forward/Sparse, 10:06:26/00:03:07

R3#

前回は(*, 225.1.1.1):共有ツリーや(192.168.25.5, 225.1.1.1)送信元ツリーだけ確認していましたが、今回は通るルートが重要です。

どのルートを通るかは、ツリーのRPF情報を確認します。(上記例だと192.168.23.2がRPF(Reverse Path Fowarding)

 

現状をもう一度図にすると…

f:id:TKCman:20181130201649p:plain

となるはずです。(R3で(*, 225.1.1.1)のグループでRPFが192.168.23.2になっているからなりそう)。

 

■ここで、前回と同じくR5から
ping 225.1.1.1 repeat 100
します。

pingしても今回は失敗
R5#ping 225.1.1.1 repeat 100
Type escape sequence to abort.
Sending 100, 100-byte ICMP Echos to 225.1.1.1, timeout is 2 seconds:
......................................................................
..............................
R5#

 

■R4とR3が共有ツリー(*,G)のまま(赤字の(*, 225.1.1.1)が共有ツリー
R4#sho 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, 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,
N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed,
Q - Received BGP S-A Route, q - Sent BGP S-A Route,
V - RD & Vector, v - Vector, p - PIM Joins on route
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
Timers: Uptime/Expires
Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 225.1.1.1), 10:11:23/00:02:45, RP 100.0.0.2, flags: SJCL
Incoming interface: Ethernet0/0, RPF nbr 192.168.34.3
Outgoing interface list:
Loopback0, Forward/Sparse, 10:11:23/00:02:45

(*, 224.0.1.40), 10:16:31/00:02:37, RP 100.0.0.2, flags: SJPCL
Incoming interface: Ethernet0/0, RPF nbr 192.168.34.3
Outgoing interface list: Null


R3#sho 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, 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,
N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed,
Q - Received BGP S-A Route, q - Sent BGP S-A Route,
V - RD & Vector, v - Vector, p - PIM Joins on route
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
Timers: Uptime/Expires
Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 225.1.1.1), 00:07:49/00:02:36, RP 100.0.0.2, flags: S
Incoming interface: Ethernet0/1, RPF nbr 192.168.23.2
Outgoing interface list:
Ethernet0/2, Forward/Sparse, 00:07:49/00:02:36

(*, 224.0.1.40), 00:07:49/00:02:53, RP 100.0.0.2, flags: SJCL
Incoming interface: Ethernet0/1, RPF nbr 192.168.23.2
Outgoing interface list:
Ethernet0/2, Forward/Sparse, 00:07:15/00:03:05
Ethernet0/0, Forward/Sparse, 00:07:49/00:02:42

R2#

SPT switchoverが起きなかったことが確認できました。

 

 

◇ ◇ ◇

マルチキャストは前提として、IGPが動作している必要があります。

マルチキャストルーティングを行う前提として、ユニキャストル ーティングが完成していることが必要なので注意してください。

 マルチキャストルーティングの仕組み その3 (ネットワークのおべんきょしませんか? Cisco CCNA/CCNP/CCIE、ネットワークスペシャリスト試験の勉強にピッタリ) より

 

IGPが通るルートにマルチキャストが一緒に通る…というイメージです。

IGPとマルチキャストが同じルートを通っていることは

・IGPはtraceroute

マルチキャストはmtrace

それぞれのトレースルートコマンドで確認できます。

R4#
R4#trace
R4#traceroute 192.168.25.5
Type escape sequence to abort.
Tracing the route to 192.168.25.5
VRF info: (vrf in name/id, vrf out name/id)
1 192.168.34.3 0 msec 1 msec 0 msec
2 192.168.23.2 0 msec 1 msec 0 msec
3 192.168.25.5 0 msec 0 msec *

R4#mtrace 192.168.25.5
Type escape sequence to abort.
Mtrace from 192.168.25.5 to 192.168.34.4 via RPF
From source (?) to destination (?)
Querying full reverse path...
0 192.168.34.4
-1 192.168.34.4 ==> 192.168.34.4 PIM [192.168.25.0/24]
-2 192.168.34.3 ==> 192.168.23.3 PIM [192.168.25.0/24]
-3 192.168.23.2 ==> 192.168.25.2 PIM_MT Multicast disabled [192.168.25.0/24]
R4# 

今回の場合、解決方法は、R2とR3がつながっているインターフェイスのR2側にip pim sparse-modeが入っていないことを発見する以外に

IGPに向いてしまっているマルチキャストのルート(R3-R2)を
マルチキャストが通れる側のルート(R3-R1-R2)に変更する…という方法もあります。変更するコマンドがip mrouteコマンドです。

ip mroute 0.0.0.0 0.0.0.0 192.168.13.1

 

また、図にすると…

今度は、R3-R1-R2を通るルートで送信元ツリーができるはずです。

f:id:TKCman:20181203093633p:plain

■R3に設定を入れてみます。

R3(config)#ip mroute
R3(config)#ip mroute 0.0.0.0 0.0.0.0 192.168.13.1
R3(config)#
R3(config)#end
R3#
R3#sho ip
*Nov 22 17:34:32.301: %SYS-5-CONFIG_I: Configured from console by console
R3#sho ip mroute
R3#sho 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, 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,
N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed,
Q - Received BGP S-A Route, q - Sent BGP S-A Route,
V - RD & Vector, v - Vector, p - PIM Joins on route
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
Timers: Uptime/Expires
Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 225.1.1.1), 02:25:40/00:03:20, RP 100.0.0.2, flags: S
Incoming interface: Ethernet0/0, RPF nbr 192.168.13.1, Mroute★ルートがR1側を向いた。
Outgoing interface list:
Ethernet0/2, Forward/Sparse, 02:25:40/00:03:20

(*, 224.0.1.40), 02:26:25/00:02:49, RP 100.0.0.2, flags: SJCL
Incoming interface: Ethernet0/0, RPF nbr 192.168.13.1, Mroute
Outgoing interface list:
Ethernet0/2, Forward/Sparse, 02:26:17/00:02:49


■この状態でpingをうつと成功します。
※R4で227.1.1.1の別のマルチキャストのグループを登録していますが
初期化的な意味あいで行っています。
そのまま、225.1.1.1だとclear ip mroute *を複数ルータで行って
さらに、225.1.1.1で共有ツリーが再度作成されるまで時間がかかるので
227.1.1.1を追加で同じ動作を行っています。

R4(config)#int lo 0
R4(config-if)#ip gim
R4(config-if)#ip igm
R4(config-if)#ip igmp jo
R4(config-if)#ip igmp join-group 227.1.1.1
R4(config-if)#
R4(config-if)#end
R4#

R5#ping 227.1.1.1
Type escape sequence to abort.
Sending 1, 100-byte ICMP Echos to 227.1.1.1, timeout is 2 seconds:

Reply to request 0 from 100.0.0.4, 22 ms
R5#ping 227.1.1.1 re
R5#ping 227.1.1.1 repeat 100
Type escape sequence to abort.
Sending 100, 100-byte ICMP Echos to 227.1.1.1, timeout is 2 seconds:

Reply to request 0 from 100.0.0.4, 1 ms
Reply to request 1 from 100.0.0.4, 1 ms
Reply to request 2 from 100.0.0.4, 1 ms

 

R4#
*Nov 22 17:48:01.715: %SYS-5-CONFIG_I: Configured from console by console
R4#


R4#
R4#sho ip mroute
R4#sho 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, 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,
N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed,
Q - Received BGP S-A Route, q - Sent BGP S-A Route,
V - RD & Vector, v - Vector, p - PIM Joins on route
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
Timers: Uptime/Expires
Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 227.1.1.1), 00:01:17/stopped, RP 100.0.0.2, flags: SJCL
Incoming interface: Ethernet0/0, RPF nbr 192.168.34.3
Outgoing interface list:
Loopback0, Forward/Sparse, 00:01:17/00:02:26

(192.168.25.5, 227.1.1.1), 00:00:38/00:02:21, flags: LJT
Incoming interface: Ethernet0/0, RPF nbr 192.168.34.3
Outgoing interface list:
Loopback0, Forward/Sparse, 00:00:38/00:02:26

(*, 225.1.1.1), 13:42:40/00:02:26, RP 100.0.0.2, flags: SJCL
Incoming interface: Ethernet0/0, RPF nbr 192.168.34.3
Outgoing interface list:
Loopback0, Forward/Sparse, 13:42:40/00:02:26

(*, 224.0.1.40), 13:47:48/00:02:17, RP 100.0.0.2, flags: SJPCL
Incoming interface: Ethernet0/0, RPF nbr 192.168.34.3
Outgoing interface list: Null

 

SPTスイッチオーバーが起きて(192.168.25.5, 227.1.1.1)の送信元ツリーができました。

 

マルチキャストはIGPでルートを学習しているルートを通るのですが
RPFがおかしいと正しく動作しないことが確認できました。

マルチキャストがおかしくなり始めるルータのR3にとっては、IGPが通るルートは、R2側なのに(R2が最短ルート)マルチキャストは、R1側を向くなんておかしい!となっていると言えます。そこをip mrouteコマンドで無理やりR1側に向かせるとうまくいくというのが面白いですね。

マルチキャストは、すべてのルータでip pim sparse-modeが入っているのがいい設計といえるみたいです。

 

■その他(ip mrouteコマンドの使い方)

----------
▼tunnel
マルチキャスト受信しているのが、tunnel0
しかし、RPFはE0/0

▼NBMA
マルチキャストは受信インターフェースを送信にできない。
→ip pim nbma-modeで回避

-------------

これら状態のときもIGPが通るルートにマルチキャストがうまくのっていない状態になってしまうため、ip mrouteコマンドが必要になることが

「詳解IPマルチキャスト 概念からCisco製品での設定例まで (NETWORK PROFESSIONAL)」

https://www.amazon.co.jp/%E8%A9%B3%E8%A7%A3IP%E3%83%9E%E3%83%AB%E3%83%81%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88-%E6%A6%82%E5%BF%B5%E3%81%8B%E3%82%89Cisco%E8%A3%BD%E5%93%81%E3%81%A7%E3%81%AE%E8%A8%AD%E5%AE%9A%E4%BE%8B%E3%81%BE%E3%81%A7-Gene-ebook/dp/B06XZY37XF

に載っています。

 

今回の機器のコンフィグは以下にあります。

github.com