マルチキャストルータ間の通信を制御するプロトコルとしてPIMがあります。PIM sparse modeはRPと呼ばれる待ち合わせ場所の設定が必要になりますが、RPをstaticに設定する方法を紹介します。
概要
PIM sparse modeについてまとめます。sparse modeはRPと呼ばれる待ち合わせ場所を設けるモードです。ソースからRPまでは送信元ツリー(source tree)と呼ばれるツリーに従って転送され、RPからレシーバまでは共有ツリー(shared tree)と呼ばれるツリーに従って転送されます。
コマンド一覧
このシナリオで重要なコマンド一覧は以下の通りです。
Router(config)# ip pim rp-address <rp_addr> [ <std_acl> ] [ override ] Router(config)# ip pim send-rp-announce <int> scope <ttl> [ group-list <std_acl> ] [ interval <sec> ] Router(config)# ip pim send-rp-discovery <int> scope <ttl> [ interval <sec> ] Router(config)# ip pim rp-candidate <int> [ group-list <std_acl> ] [ interval <sec> ] [ priority <priority> ] Router(config)# ip pim bsr-candidate <int> [ <hash> ] [ <priority> ] Router(config)# interface <interface> Router(config-if)# ip pim autorp listener Router(config)# interface Loopback 0 Router(config-if)# ip pim sparse-mode
RP 選出方法
概要
sparse modeではRPを定義する必要がありますが、RPの定義方法は大きく分けて以下の3通りがあります。
方法 | 説明 |
---|---|
static RP | RPをstaticに設定します。ルータ台数が多くなると管理工数が増大するデメリットがあります。しかし、Auto RPやBSRと異なり、「RPを管理するメッセージがRPFによって破棄されないか」等の構成上の心配をせずに済むメリットもあります。 |
Auto RP | RP候補ルータ(RP candidate)とRP情報収集ルータ(Mapping Agent)で構成されます。これら2種類のルータによる一括管理が可能で、管理工数が少なくなります。 |
BSR | RP候補ルータ(RP candidate)とRP情報収集ルータ(BSR)で構成されます。これら2種類のルータによる一括管理が可能で、管理工数が少なくなります。 |
Auto RP, BSR の違い
RPを一括設定する方法は、Auto RP, BSRの2通りがあります。これら2つは、RP候補ルータとRP情報収集ルータの2種類のルータが存在する事は同じですが、標準化, 用語, 細かな動作が異なるので注意が必要です。違いをまとめると以下のようになります。
Auto RP | BSR | |
---|---|---|
規格 | Cisco独自規格 | RFC 5059 |
RP候補ルータ | RP candidator | RP candidator |
RP情報収集ルータ | Mapping Agent | BSR router |
RP候補ルータが 送るメッセージ |
Auto RP candidate message 239.0.1.39宛て |
Candidate RP Advertisement ユニキャスト送信 |
RP情報収集ルータ が送るメッセージ |
Auto RP discovery message 239.0.1.40宛て |
BSR message 224.0.0.13宛てのhop by hop通信 |
Auto RPはCisco独自規格でBSRは標準規格です。また、Auto RPは239.0.1.39, 239.0.1.40を使用するので、Auto RPはマルチキャストルーティングが必要になります。一方、BSRはTTL 1の224.0.0.13宛てパケットをhop by hopで伝播させるので、BSPはマルチキャストルーティングが必要ありません。
Auto RP 動作説明
Auto RPの動作概要は以下の通りです。
- RP candidatorは”自身がRPになりたい”旨をMapping Agentに伝えます。このメッセージは、Auto RP candidate message(239.0.1.39宛て)を用いて伝播されます。
- Mapping AgentはRP候補ルータの情報を収集し、収集した結果のRPを全ルータに伝えます。このメッセージは、Auto RP discovery message(239.0.1.40宛て)を用いて伝播されます。
これらメッセージをキャプチャすると以下のようになっています。
[Auto RP candidate message] Ethernet II, Src: cc:01:13:e4:00:00 (cc:01:13:e4:00:00), Dst: IPv4mcast_00:01:27 (01:00:5e:00:01:27) Internet Protocol Version 4, Src: 10.2.2.2 (10.2.2.2), Dst: 224.0.1.39 (224.0.1.39) User Datagram Protocol, Src Port: pim-rp-disc (496), Dst Port: pim-rp-disc (496) Cisco Auto-RP Version: 1 or 1+, Packet type: RP announcement RP count: 1 Holdtime: 31 seconds Reserved: 0x0 RP 10.2.2.2: 1 group RP address: 10.2.2.2 (10.2.2.2) .... ..11 = Version: Dual version 1 and 2 (3) Number of groups this RP maps to: 1 Group 224.0.0.0/4 (Positive group prefix) .... ...0 = Sign: Positive group prefix (0) Mask length: 4 Prefix: 224.0.0.0 (224.0.0.0) [Auto RP discovery message] Ethernet II, Src: cc:00:13:e4:00:00 (cc:00:13:e4:00:00), Dst: IPv4mcast_00:01:28 (01:00:5e:00:01:28) Internet Protocol Version 4, Src: 10.1.1.1 (10.1.1.1), Dst: 224.0.1.40 (224.0.1.40) User Datagram Protocol, Src Port: pim-rp-disc (496), Dst Port: pim-rp-disc (496) Cisco Auto-RP Version: 1 or 1+, Packet type: RP mapping RP count: 1 Holdtime: 31 seconds Reserved: 0x0 RP 10.2.2.2: 1 group RP address: 10.2.2.2 (10.2.2.2) .... ..11 = Version: Dual version 1 and 2 (3) Number of groups this RP maps to: 1 Group 224.0.0.0/4 (Positive group prefix) .... ...0 = Sign: Positive group prefix (0) Mask length: 4 Prefix: 224.0.0.0 (224.0.0.0)
BSR 動作説明
Auto RPの動作概要は以下の通りです。なお、BSR messageが使用する224.0.0.13はTTL 1のリンクローカルアドレスですが、BSR messageもRPF checkの対象になるのでAuto RPと同様の注意が必要です。
- BSR routerが自身のアドレスをRP candidator含め全ルータに知らせます。このメッセージは、BSR message(224.0.0.13宛て)を用いてhop by hopで伝播されます。
- BSR routerのアドレスを知ったRP candidatorは、”自身がRPになりたい”旨をBSR routerに伝えます。このメッセージは、Candidate RP Advertisement(ユニキャスト)を用いて伝播されます。
- BSR routerはRP候補ルータの情報を収集し、収集した結果のRPを全ルータに伝えます。このメッセージは、BSR message(224.0.0.13宛て)を用いてhop by hopで伝播されます。
これらメッセージをキャプチャすると以下のようになっています。
[BSR message] Ethernet II, Src: cc:00:0e:bc:00:00 (cc:00:0e:bc:00:00), Dst: IPv4mcast_00:00:0d (01:00:5e:00:00:0d) Internet Protocol Version 4, Src: 192.168.12.1 (192.168.12.1), Dst: 224.0.0.13 (224.0.0.13) Protocol Independent Multicast 0010 .... = Version: 2 .... 0100 = Type: Bootstrap (4) Reserved byte(s): 00 Checksum: 0xc433 [correct] PIM options Fragment tag: 0x1b28 Hash mask len: 0 BSR priority: 0 BSR: 10.1.1.1 Group 0: 224.0.0.0/4 RP count: 1 FRP count: 1 RP 0: 10.3.3.3 Holdtime: 150s Priority: 0 [Candidate RP Advertisement] Ethernet II, Src: cc:02:17:30:00:02 (cc:02:17:30:00:02), Dst: cc:00:17:30:00:02 (cc:00:17:30:00:02) Internet Protocol Version 4, Src: 192.168.13.3 (192.168.13.3), Dst: 10.1.1.1 (10.1.1.1) Protocol Independent Multicast 0010 .... = Version: 2 .... 1000 = Type: Candidate-RP-Advertisement (8) Reserved byte(s): 00 Checksum: 0xe7db [correct] PIM options Prefix-count: 1 Priority: 0 Holdtime: 25s RP: 10.3.3.3 Group 0: 224.0.0.0/4
Auto RP 実装方法概要
Auto RPはRP Announce message(224.0.1.39)とRP Discovery message(224.0.1.40)というマルチキャストルーティングを用いて、RPの情報を伝播させます。しかし、RPが分からなければ、sparse modeによるマルチキャストルーティングが実現できません。このような矛盾を解決するためには、以下3通りの方法が挙げられます。
方法 | 説明 |
---|---|
spase dense mode | sparse dense modeを使用します。このモードはRPを認識していない場合はdense modeで転送されるので、RP Announce message, RP Discovery messageはdense modeで転送されます。 |
Auto RP Lintener | Auto RP LintenerはRP Announce message, RP Discovery messageのみ。dense modeで転送する機能です。 |
static 設定 | 224.0.1.39, 224.0.1.40に対するRPをstaticに設定します。実践的ではないので検証は省略します。 |
構成図
これ以降の動作確認は、以下の環境で行います。動作確認の都合上、R1, R3間でMulticastを有効にしていません。
[ip address] e0/0 e0/1 .2+--------+.2 192.168.12.0/24┌----+ R2 +----┐192.168.23.0/24 │ +--------+ │ │ │ .1│e0/0 e0/1│.3 +---+----+ +---+----+ | R1 +----------+ R3 | +--------+.1 .3+--------+ e0/2 e0/2 192.168.13.0/24 R1 Loopback0 R2 Loopback0 R3 Loopback0 10.1.1.1/32 10.2.2.2/32 10.3.3.3/32 [multicast domain] static RP e0/0 e0/1 .2+--------+.2 192.168.12.0/24┌----+ R2 +----┐192.168.23.0/24 │ +--------+ │ │ │ .1│e0/0 e0/1│.3 +---+----+ +---+----+ | R1 | | R3 | +--------+ +--------+
[R1] no ip domain lookup ! ip multicast-routing ! interface Loopback0 ip pim sparse-mode ! interface Ethernet0/0 ip pim sparse-mode ! ip pim rp-address 10.2.2.2 [R2] no ip domain lookup ! ip multicast-routing ! interface Loopback0 ip pim sparse-mode ! interface Ethernet0/0 ip pim sparse-mode ! interface Ethernet0/1 ip pim sparse-mode ! ip pim rp-address 10.2.2.2 [R3] no ip domain lookup ! ip multicast-routing ! interface Loopback0 ip pim sparse-mode ! interface Ethernet0/1 ip pim sparse-mode ! ip pim rp-address 10.2.2.2
設定全文は下記ファイルです。詳細設定は下記を参照ください。
static RP
仕様説明
以下のコマンドでRPをstaticに設定する事ができます。ACLを用いると、RPとなるマルチキャストグループを制限する事ができます。
また、overrideキーワードを指定するとstatic RPを優先させる事ができます。通常、Auto RPやBSRのように動的に定義されたRPの方がstatic RPよりも優先されます。従って、Auto RP messageなどを用いてRPを恣意的に変更させる攻撃が可能です。RPを変更される脅威が存在する場合は、overrideキーワードを指定するのも対策のひとつとして挙げる事ができます。
Router(config)# ip pim rp-address <rp_addr> [ <std_acl> ] [ override ]
よく忘れてしまうのがPIMの設定です。RPはLoopback interfaceに対して設定する事が多いですが、RPとなるinterfaceも含めPIMを有効にして下さい。つまり、Loopback interfaceも含めPIMを有効にして下さい。
Router(config)# interface Loopback 0 Router(config-if)# ip pim dense-mode
RP 設定
R1, R2, R3にRPをstaticに設定します。
[R1] ip pim rp-address 10.2.2.2 [R2] ip pim rp-address 10.2.2.2 [R3] ip pim rp-address 10.2.2.2
RP 確認
以下のコマンドでRPを確認する事ができます。R1, R2, R3全てのルータにおいて、RPを認識している事が分かります。なお、デフォルトの状態ではRPの名前解決を試みてしまうので、DNS timeout待ちを避けたいならばno ip domain-lookupを入力する事をお勧めします。
[R1] R1#show ip pim rp mapping PIM Group-to-RP Mappings Group(s): 224.0.0.0/4, Static RP: 10.2.2.2 (?) R1# [R2] R2#show ip pim rp mapping PIM Group-to-RP Mappings Group(s): 224.0.0.0/4, Static RP: 10.2.2.2 (?) R2# [R3] R3#show ip pim rp mapping PIM Group-to-RP Mappings Group(s): 224.0.0.0/4, Static RP: 10.2.2.2 (?) R3#
Auto RP – sparse dense mode
仕様説明
Auto RPはRP Announce message(224.0.1.39)とRP Discovery message(224.0.1.40)の2つのメッセージを用いてRP情報を伝播させます。RPを認識する前はsparse modeによるマルチキャストルーティングができないので、これら2つのメッセージがでdense modeでルーティングできるようsparse dense modeを設定します。
Router(config-if)# ip pim sparse-dense-mode
RPとして立候補したいルータに以下のコマンドを入力します。group-listでRPとなるマルチキャストグループを制限する事ができ、intervalでRP Announce messageを送信する間隔を定義する事ができます。RP Announce messageの送信間隔はデフォルト60秒なので、検証中はintervalを短かくし設定反映の待ち時間を短くすると良いでしょう。
Router(config)# ip pim send-rp-announce <int> scope <ttl> [ group-list <std_acl> ] [ interval <sec> ]
RP立候補情報を収集するルータ(Mapping Agent)に以下のコマンドを入力し、収集した情報をRP Discovery messageで伝播させます。
Router(config)# ip pim send-rp-discovery <int> scope <ttl> [ interval <sec> ]
RP 設定
R2をRP Candidator、R1をMapping Agentとして設定します。また、Auto RP messageはdense modeで転送されるので、各ルータの物理interfaceをsparse-dense-modeに変更します。
[R1] interface Ethernet0/0 ip pim sparse-dense-mode ! no ip pim rp-address 10.2.2.2 ip pim send-rp-discovery Loopback0 scope 10 interval 10 [R2] interface Ethernet0/0 ip pim sparse-dense-mode ! interface Ethernet0/1 ip pim sparse-dense-mode ! no ip pim rp-address 10.2.2.2 ip pim send-rp-announce Loopback0 scope 10 interval 10 [R3] interface Ethernet0/1 ip pim sparse-dense-mode ! no ip pim rp-address 10.2.2.2
RP 確認
RPを確認します。R3のみRPを認識していない事が分かります。static RPと異なり、RP Announce message, RP Discovery messageがRPF checkにより破棄されていないかを意識しなければなりません。
[R1] R1#show ip pim rp mapping PIM Group-to-RP Mappings This system is an RP-mapping agent (Loopback0) Group(s) 224.0.0.0/4 RP 10.2.2.2 (?), v2v1 Info source: 10.2.2.2 (?), elected via Auto-RP Uptime: 00:00:13, expires: 00:00:27 R1# [R2] R2#show ip pim rp mapping PIM Group-to-RP Mappings This system is an RP (Auto-RP) Group(s) 224.0.0.0/4 RP 10.2.2.2 (?), v2v1 Info source: 10.1.1.1 (?), elected via Auto-RP Uptime: 00:00:23, expires: 00:00:27 R2# [R3] R3#show ip pim rp mapping PIM Group-to-RP Mappings R3#
R3 マルチキャストルーティングテーブルを見ると、”Incoming interface: Null”となっている事から、R1からのRP Discovery messageが破棄されている事が分かります。
R3#show ip mroute <omitted> (10.1.1.1, 224.0.1.40), 00:00:52/00:02:09, flags: L Incoming interface: Null, RPF nbr 192.168.13.1 Outgoing interface list: Loopback0, Forward/Sparse, 00:00:52/00:02:37 Ethernet0/1, Forward/Sparse-Dense, 00:00:52/00:00:00
staic mroute
RP Discovery messageを受信できるよう、以下static mrouteを定義します。
[R3] ip mroute 10.1.1.1 255.255.255.255 192.168.23.2
R3がRPを認識している事を確認します。
R3#show ip pim rp mapping PIM Group-to-RP Mappings Group(s) 224.0.0.0/4 RP 10.2.2.2 (?), v2v1 Info source: 10.1.1.1 (?), elected via Auto-RP Uptime: 00:00:04, expires: 00:00:25 R3# R3#show ip mroute <omitted> (10.1.1.1, 224.0.1.40), 00:02:21/00:02:58, flags: LT Incoming interface: Ethernet0/1, RPF nbr 192.168.23.2, Mroute Outgoing interface list: Loopback0, Forward/Sparse, 00:02:21/00:00:00
Auto RP – Auto RP Listener
仕様説明
Auto RPはRP Announce message(224.0.1.39)とRP Discovery message(224.0.1.40)の2つのメッセージを用いてRP情報を伝播させます。RPを認識する前はsparse modeによるマルチキャストルーティングができません。spase dense modeを使うのも回避策のひとつですが、Auto RP Lisntenerを有効にするとsparse modeでもこれら2つのメッセージがdense modeで転送されます。
Router(config-if)# ip pim autorp listener
RP 設定
全interfaceをsparse modeに戻し、各ルータにAuto RP Listenerを設定します。また、sparse dense modeを使用した時と同様に、static mrouteが必要な事にも注意が必要です。
[R1] interface Ethernet0/0 ip pim sparse-mode ! ip pim autorp listener ip pim send-rp-discovery Loopback0 scope 10 interval 10 [R2] interface Ethernet0/0 ip pim sparse-mode ! interface Ethernet0/1 ip pim sparse-mode ! ip pim autorp listener ip pim send-rp-announce Loopback0 scope 10 interval 10 [R3] interface Ethernet0/1 ip pim sparse-mode ! ip pim autorp listener ip mroute 10.1.1.1 255.255.255.255 192.168.23.2
RP 確認
RPを確認します。R1, R2, R3全てのルータがRPを認識している事が読み取れます。
[R1] R1#show ip pim rp mapping PIM Group-to-RP Mappings This system is an RP-mapping agent (Loopback0) Group(s) 224.0.0.0/4 RP 10.2.2.2 (?), v2v1 Info source: 10.2.2.2 (?), elected via Auto-RP Uptime: 00:07:43, expires: 00:00:20 R1# [R2] R2#show ip pim rp mapping PIM Group-to-RP Mappings This system is an RP (Auto-RP) Group(s) 224.0.0.0/4 RP 10.2.2.2 (?), v2v1 Info source: 10.1.1.1 (?), elected via Auto-RP Uptime: 00:07:54, expires: 00:00:27 R2# [R3] R3#show ip pim rp mapping PIM Group-to-RP Mappings Group(s) 224.0.0.0/4 RP 10.2.2.2 (?), v2v1 Info source: 10.1.1.1 (?), elected via Auto-RP Uptime: 00:08:09, expires: 00:00:22 R3#
BSR
仕様説明
RP candidatorは以下のコマンドで設定します。priorityは、RP candidatorが複数台存在する場合の優先度を定義します。
Router(config)# ip pim rp-candidate <int> [ group-list <std_acl> ] [ interval <sec> ] [ priority <priority> ]
BSR routerは以下のコマンドで設定します。<hash>はRPの負荷分散に使用する値です(詳細は別の機会に触れます)。また、priorityは、BSR routerが複数台存在する場合の優先度を定義します。
Router(config)# ip pim bsr-candidate <int> [ <hash> ] [ <priority> ]
RP 設定
R3をRP Candidator、R1をBSR Routerとして設定します。
[R1] no ip pim autorp listener no ip pim send-rp-discovery Loopback0 scope 10 interval 10 ! ip pim bsr-candidate Loopback0 0 [R2] no ip pim autorp listener no ip pim send-rp-announce Loopback0 scope 10 interval 10 [R3] ip pim rp-candidate Loopback0 interval 10 no ip mroute 10.1.1.1 255.255.255.255 192.168.23.2
RP 確認
RPを確認します。RPを認識しているルータは1台もない事が分かります。
[R1] R1#show ip pim rp mapping PIM Group-to-RP Mappings This system is the Bootstrap Router (v2) R1# [R2] R2#show ip pim rp mapping PIM Group-to-RP Mappings R2# [R3] R3#show ip pim rp mapping PIM Group-to-RP Mappings This system is a candidate RP (v2) R3#
BSRはBSR routerが自身のアドレスを全ルータに伝えた後、RP candidatorがユニキャストでBSRにRPになりたい旨を伝えます。つまり、まず、BSR messageにより全ルータがBSRのアドレスを認識しているかどうかを確認する必要があります。
BSRを認識しているかどうかは、show ip pim bsr-routerで確認する事ができます。R3のみ”BSR address: 10.1.1.1″の表示がない、つまり、R3のみBSRを認識していない事が読み取れます。
[R1] R1#show ip pim bsr-router PIMv2 Bootstrap information This system is the Bootstrap Router (BSR) BSR address: 10.1.1.1 (?) Uptime: 00:02:14, BSR Priority: 0, Hash mask length: 0 Next bootstrap message in 00:00:47 R1# [R2] R2#show ip pim bsr-router PIMv2 Bootstrap information BSR address: 10.1.1.1 (?) Uptime: 00:00:55, BSR Priority: 0, Hash mask length: 0 Expires: 00:01:14 R2# [R3] R3#show ip pim bsr-router PIMv2 Bootstrap information Candidate RP: 10.3.3.3(Loopback0) Holdtime 25 seconds Advertisement interval 10 seconds Next advertisement in 00:00:00 R3#
staic mroute
BSRは224.0.0.13宛てのリンクローカルアドレスを使用するので、マルチキャストルーティングテーブルからRPF failureを読み取る事ができません。RPF failureの確証を得るには、デバッグメッセージを使用します。debug ip mpacketでも確認可能ですが、BSRの場合は”debug ip pim bsr”を使用する事も可能です。
R3#debug ip pim bsr PIM-BSR debugging is on R3# *Mar 1 00:07:11.415: PIM-BSR(0): bootstrap (10.1.1.1) on non-RPF path Ethernet0/1 or from non-RPF neighbor 192.168.13.1 discarded R3#
R3にstatic mrouteを追加し、R1からのBSR messageを受信できるようにします。
[R3] ip mroute 10.1.1.1 255.255.255.255 192.168.23.2
R3がBSRを認識した事を確認します。
R3#show ip pim bsr-router PIMv2 Bootstrap information BSR address: 10.1.1.1 (?) Uptime: 00:00:07, BSR Priority: 0, Hash mask length: 0 Expires: 00:02:06 Candidate RP: 10.3.3.3(Loopback0) Holdtime 25 seconds Advertisement interval 10 seconds Next advertisement in 00:00:05 R3#
全てのルータがRPを認識した事を確認します。
[R1] R1#show ip pim rp mapping PIM Group-to-RP Mappings This system is the Bootstrap Router (v2) Group(s) 224.0.0.0/4 RP 10.3.3.3 (?), v2 Info source: 192.168.13.3 (?), via bootstrap, priority 0, holdtime 25 Uptime: 00:00:28, expires: 00:00:16 R1# [R2] R2#show ip pim rp mapping PIM Group-to-RP Mappings Group(s) 224.0.0.0/4 RP 10.3.3.3 (?), v2 Info source: 10.1.1.1 (?), via bootstrap, priority 0, holdtime 150 Uptime: 00:01:01, expires: 00:02:22 R2# [R3] R3#show ip pim bsr-router PIMv2 Bootstrap information BSR address: 10.1.1.1 (?) Uptime: 00:00:07, BSR Priority: 0, Hash mask length: 0 Expires: 00:02:06 Candidate RP: 10.3.3.3(Loopback0) Holdtime 25 seconds Advertisement interval 10 seconds Next advertisement in 00:00:05 R3#