フレームリレー, DMVPNなどのNBMA環境は、マルチキャスト通信をサポートしていません。もし、NMBA環境でマルチキャストを使用したい場合は、ip pim nbma-modeという特殊な設定を使用する必要があります。
概要
PIM nbma modeについてまとめます。NBMAとは、Non Broadcast Multi Accessの略で、frame relayのような非ブロードキャスト環境の事を指します。PIM nbma modeをfrema relayのhub routerに設定すると、以下のようにな動作になります。
- Incomming List, Out goint Listの管理がInterface単位からDLCI単位に変わる
- split holizonが無効になる
なお、NBMA modeが有効になるのはsparse modeのみです(dense modeを使用する場合は、GRE tunnelなどの別の回避策が必要となります)。
コマンド一覧
このシナリオで重要なコマンド一覧は以下の通りです。
Router(config)# interface <interface> Router(config-if)# ip pim nbma-mode
構成図
これ以降の動作確認は、以下の環境で行います。R1, R2, R3はHub and Spokeのframe relay構成です。
[ip address] +--------+ ┌------+ R2 | s0/1 s0/1 s0/0 2│ .2+--------+ +--------+.101 .1+--------+.1 1+---+----+s0/0 | Host 1 +--------+ R1 +------+ FRSW | +--------+ +--------+ +---+----+s0/0 RP Candidator 3│ .3+--------+ BSR Router └------+ R3 | +--------+ 192.168.1.0/24 192.168.123.0/24 R1 Loopback0 R2 Loopback0 R3 Loopback0 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
[R1] ip multicast-routing ! interface Loopback0 ip pim sparse-mode ! interface Serial0/0 ip pim sparse-mode ! interface Serial0/1 ip pim sparse-mode ! ip pim bsr-candidate Loopback0 ip pim rp-candidate Loopback0 interval 30 [R2] ip multicast-routing ! interface Loopback0 ip pim sparse-mode ! interface Serial0/0 ip pim sparse-mode [R3] ip multicast-routing ! interface Loopback0 ip pim sparse-mode ip igmp join-group 239.3.3.3 ! interface Serial0/0 ip pim sparse-mode
設定全文は下記ファイルです。ルーティングなどの詳細設定は下記を参照ください。
非ブロードキャスト環境における問題点
概要
PIM NBMA modeを無効である場合は、以下のような不都合が生じます。
- 不要なDLCIに対してパケットがfloodingされてしまう
- split holizonの法則が働き、spoke間での通信ができなくなる
不要なflooding
Host1からR3へマルチキャスト通信について考えます。以下のような通信を発生させて下さい。
[R3] interface Loopback0 ip igmp join-group 239.3.3.3 [Host1] Host1#ping 239.3.3.3 Type escape sequence to abort. Sending 1, 100-byte ICMP Echos to 239.3.3.3, timeout is 2 seconds: Reply to request 0 from 192.168.123.3, 200 ms Host1#
この通信はR3のみに転送すれば充分ですが、PIM nbma modeが無効である場合は全てのspokeに対してfloodingされてしまいます。R2にもパケットが転送されてしまっている事は以下のデバッグメッセージにより確認できます。なお、マルチキャストパケットの確認を行にはip mroute-cacheを無効化する必要があります。
[R2] interface Serial0/0 no ip mroute-cache [R2] R2#debug ip mpacket IP multicast packets debugging is on R2# R2# R2# *Mar 1 00:21:16.027: IP(0): s=192.168.1.101 (Serial0/0) d=239.3.3.3 id=51, ttl=253, prot=1, len=104(100), mroute olist null *Mar 1 00:21:26.979: IP(0): s=192.168.1.101 (Serial0/0) d=239.3.3.3 id=52, ttl=253, prot=1, len=104(100), mroute olist null R2#
spoke間の疎通不能
PIM nbma modeが有効ではない場合はspoke間の通信ができません。R2からR3への疎通が不能である事を確認します。
[R3] interface Loopback0 ip igmp join-group 239.3.3.3 [R2] R2#ping 239.3.3.3 source Loopback 0 Type escape sequence to abort. Sending 1, 100-byte ICMP Echos to 239.3.3.3, timeout is 2 seconds: Packet sent with a source address of 10.2.2.2 . R2#
PIM nmba mode 基本動作
仕様確認
NBMA modeを有効にするには、以下コマンドを入力します。
Router(config-if)# ip pim nbma-mode
flooding防止
PIM nmba modeを有効にする事によって、マルチキャストルーティングテーブルがinterface単位の管理からDLCI単位の管理に変わります。まず、PIM nmba modeを有効にする前は、Outgoing interface list:にinterfaceに関する情報しか載っていない事が読み取れます。
[R1] R1#show ip mroute 239.3.3.3 <omitted> (*, 239.3.3.3), 00:19:51/00:03:28, RP 10.1.1.1, flags: S Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: Serial0/0, Forward/Sparse, 00:19:43/00:03:28 (10.2.2.2, 239.3.3.3), 00:01:01/00:02:10, flags: PJTX Incoming interface: Serial0/0, RPF nbr 192.168.123.2 Outgoing interface list: Null R1#
Hub RouterであるR1でPIM nmba modeを有効にし、マルチキャストルーティングテーブルを再作成します。
[R1] interface Serial0/0 ip pim nbma-mode [R1, R2, R3] clear ip mroute * [R3] interface Loopback0 no ip igmp join-group 239.3.3.3 ip igmp join-group 239.3.3.3
Outgoing interface list:に記載されている情報が、interfaceだけでなくPIM neighborも加わった事が分かります。DLCI単位のルーティングが行われるようになり、不要なfloodingが防止されるようになりました。
[R1] R1#show ip mroute 239.3.3.3 <omitted> (*, 239.3.3.3), 00:08:45/00:02:35, RP 10.1.1.1, flags: S Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: Serial0/0, 192.168.123.3, Forward/Sparse, 00:08:45/00:02:35 (192.168.1.101, 239.3.3.3), 00:00:59/00:02:37, flags: T Incoming interface: Serial0/1, RPF nbr 0.0.0.0 Outgoing interface list: Serial0/0, 192.168.123.3, Forward/Sparse, 00:00:59/00:02:35 R1#
不要なfloodingが防止されているかどうかは、先ほどと同じデバッグメッセージを有効にしてメッセージが出力されない事により確認できます。(R1からR3へのpingではflooding防止は確認できませんでした。floodingが防止されるのはルータ発信のパケットではなく、ルーティングされるパケットのみのようです。ですので、Host1からR3へのpingで動作確認を行ってください。)
[Host1] Host1#ping 239.3.3.3 *Mar 1 00:11:16.151: %SYS-5-CONFIG_I: Configured from console by console Type escape sequence to abort. Sending 1, 100-byte ICMP Echos to 239.3.3.3, timeout is 2 seconds: Reply to request 0 from 192.168.123.3, 288 ms Host1# [R2] R2#debug ip mpacket IP multicast packets debugging is on R2# R2#
spoke間の疎通確認
PIM nbma modeを有効にする事で、spoke間の疎通が可能になった事を確認します。R2からR3への疎通が可能である事を確認します。
R2#ping 239.3.3.3 source Loopback 0 Type escape sequence to abort. Sending 1, 100-byte ICMP Echos to 239.3.3.3, timeout is 2 seconds: Packet sent with a source address of 10.2.2.2 Reply to request 0 from 192.168.123.3, 84 ms R2#