通信経路上にマルチキャストをサポートしない機器があったとしても、どうしてもマルチキャスト通信をしたい要件に出会うかもしれません。そのような場合は、multicastパケットをGREでカプセル化する事で回避ができます。
概要
GRE tunnelを経由したマルチキャスト通信についてまとめます。マルチキャストをGREでカプセル化する事で以下のような問題を回避する事ができます。
- マルチキャスト非対応ルータ
- RPF failuerにおける疎通不能
- Hub and Spoke構成におけるSplit Horizon
コマンド一覧
このシナリオで重要なコマンド一覧は以下の通りです。
Router(config)# interface Tunnel <num> Router(config-if)# ip unnumbered <interface> Router(config-if)# ip pim { dense-mode | sparse-mode | sparse-dense-mode } Router(config-if)# tunnel source <interface> Router(config-if)# tunnel destination <addr> Router(config)# ip mroute <addr> <mask> { <next-hop> | <interface> }
構成図
これ以降の動作確認は、以下の環境で行います。R1, R2, R3はHub and Spokeのframe relay構成で、R4はマルチキャスト非対応ルータと仮定します。
[ip address] +--------+ ┌------+ R2 | 2│ .2+--------+ +--------+ +--------+ +--------+ 1+---+----+s0/0 ----+ R5 +--------+ R4 +--------+ R1 +------+ FRSW | .5+--------+.5 .4+--------+.4 .1+--------+.1 +---+----+s0/0 e0/2 e0/1 e0/1 e0/0 e1/0 s0/0 3│ .3+--------+ 192.168.5.0/24 192.168.45.0/24 192.168.14.0/24 └------+ R3 | 192.168.123.0/24 +--------+ R5 Loopback0 R4 Loopback0 R1 Loopback0 R2 Loopback0 R3 Loopback0 10.5.5.5/32 10.4.4.4/32 10.1.1.1/32 10.2.2.2/32 10.3.3.3/32 [frame relay mapping] 1:102 = 2:201 1:103 = 3:301 [multicast domain] BSR Router +--------+ ┌------+ R2 | RP Candidator 2│ .2+--------+ +--------+ +--------+ 1+---+----+s0/0 ----+ R5 +-- --+ R1 +------+ FRSW | .5+--------+.5 .1+--------+.1 +---+----+s0/0 e0/2 e0/1 e0/1 e0/0 e1/0 s0/0 3│ .3+--------+ 192.168.5.0/24 └------+ R3 | 192.168.123.0/24 +--------+
[R1] ip access-list standard RP_GROUP 10 permit 239.0.0.0 0.255.255.255 ! ip pim rp-candidate Loopback0 group-list RP_GROUP interval 30 [R2] ip pim bsr-candidate Loopback0 32
設定全文は下記ファイルです。詳細設定は下記を参照ください。
マルチキャスト非対応ルータ対策
GRE tunnel 作成
マルチキャスト非対応ルータを介した通信をしたい場合は、GRE tunnelを作成する事で回避する事ができます。例えば、R4がマルチキャスト非対応ルータとすれば、R1, R5間でGRE tunnelを作成する事でマルチキャスト通信が可能です。
なお、マルチキャストのみの通信で業務用件を満たす場合は、tunnel interfaceのIPアドレスとしてunnumberedを使用することができます。
[R1] interface Tunnel15 ip unnumbered Loopback0 ip pim sparse-dense-mode tunnel source Loopback0 tunnel destination 10.5.5.5 [R5] interface Tunnel15 ip unnumbered Loopback0 ip pim sparse-dense-mode tunnel source Loopback0 tunnel destination 10.1.1.1
RPF failure 対応
Multicast over GREを使用する場合は、tunnelを作成するだけでは通信できません。殆どの場合はRPFの対応も必要になります。
R5からR2への疎通が可能かどうかを確認します。やはり、疎通不能のようです。
[R2] interface Loopback0 ip igmp join-group 224.2.2.2 [R5] R5#ping 224.2.2.2 source Ethernet 1/2 repeat 2 Type escape sequence to abort. Sending 2, 100-byte ICMP Echos to 224.2.2.2, timeout is 2 seconds: Packet sent with a source address of 192.168.5.5 .. R5#
R1のマルチキャストルーティングテーブルを確認します。R1の192.168.5.5に対するRPF neighborは192.168.14.4(R4)ですので、RPF failureが発生している事が分かります。
R1#show ip mroute 192.168.5.5 224.2.2.2 <omitted> (192.168.5.5, 224.2.2.2), 00:00:27/00:02:32, flags: Incoming interface: Ethernet1/0, RPF nbr 192.168.14.4 Outgoing interface list: Serial0/0, Forward/Sparse-Dense, 00:00:27/00:00:00 Tunnel15, Forward/Sparse-Dense, 00:00:27/00:00:00 R1#
RPF failuerが発生しないようR1にstatic mrouteを追加します。なお、このようにtunnel経由の通信の場合は、next hopの変わりにinterfaceを指定したstatic mrouteを作成します。
static mroute作成後、R5からR2への疎通が可能である事を確認します。
[R1] ip mroute 192.168.5.0 255.255.255.0 tunnel 15 ip mroute 10.5.5.5 255.255.255.255 tunnel 15 clear ip mroute * [R5] R5#ping 224.2.2.2 source Ethernet 1/2 repeat 2 Type escape sequence to abort. Sending 2, 100-byte ICMP Echos to 224.2.2.2, timeout is 2 seconds: Packet sent with a source address of 192.168.5.5 Reply to request 0 from 192.168.123.2, 140 ms Reply to request 1 from 192.168.123.2, 96 ms R5#
Auto RP, BSR対応
Multicast over GRE環境では、Auto RP, BSR等のメッセージが受信できない事もあります。下記showコマンドを見ると、R5はRPを認識していない事が分かります。
[R5] R5#show ip pim rp mapping PIM Group-to-RP Mappings R5#
R2(10.2.2.2)からのBSR messageをtunnel 15から受信した時にRPF failuerが発生しているため、R5はRPを認識できません。そこで、RPF failuerが発生しないようstatic routeを定義します。
[R5] ip mroute 10.2.2.2 255.255.255.255 tunnel 15
static route追加後、R5がRPを認識できるようになった事を確認します(RPを認識するようになるまで最大60秒かかる事もあります)。
[R5] R5#show ip pim rp mapping PIM Group-to-RP Mappings Group(s) 239.0.0.0/8 RP 10.1.1.1 (?), v2 Info source: 10.2.2.2 (?), via bootstrap, priority 0, holdtime 150 Uptime: 00:00:00, expires: 00:02:27 R5#
split horizon 対策
PIM nbma mode 仕様再確認
以下showコマンドを見ると、R3がRPを認識していません。
[R3] R3#show ip pim rp mapping PIM Group-to-RP Mappings R3#
この現象は、Hub RouterであるR1が、R2から受信したBSR messageをR3へ教え返さない、
いわゆるsplit horizonが原因です。
split horizonが原因という事ならばPIM nbma modeで回避できそうですが、実はPIM nbma modeで回避する事はできません。仕様理解のためにR1 s0/0でPIM nbma modeを有効にしてみましょう。
[R1] R1(config)#interface Serial 0/0 R1(config-if)#ip pim nbma-mode PIM nbma-mode is not recommended for sparse-dense-mode R1(config-if)#
上記コマンド入力時、sparse-dense-modeではnbma modeが非推奨である旨が出力されています。これは、nbma modeで動作するのはsparse modeのみであるためです。nbma modeを有効にしてもdense modeの挙動は変わりません。
GRE tunnel 作成
Auto RP, BSRなどのメッセージは、dense modeで動作します。従って、PIM nbma modeを有効にしてもsplit horizonを無効化する事はできます。
このような場合は、GRE tunnelを作成する事で回避可能です。R1, R3間でtunnleを作成します。また、先ほどと同様に、static mrouteが必要な事にも注意して下さい。
[R1] interface Tunnel13 ip unnumbered Loopback0 ip pim sparse-dense-mode tunnel source Loopback0 tunnel destination 10.3.3.3 [R3] interface Tunnel13 ip unnumbered Loopback0 ip pim sparse-dense-mode tunnel source Loopback0 tunnel destination 10.1.1.1 ! ip mroute 10.2.2.2 255.255.255.255 Tunnel13
R3がRPを認識するようになった事を確認します。
[R3] R3#show ip pim rp mapping PIM Group-to-RP Mappings Group(s) 239.0.0.0/8 RP 10.1.1.1 (?), v2 Info source: 10.2.2.2 (?), via bootstrap, priority 0, holdtime 150 Uptime: 00:01:04, expires: 00:02:21 R3#