Cisco IOS マルチキャスト PIM sparse mode 共有ツリー(Shared Tree)の動作確認

スポンサーリンク

PIM Sparse modeはRPと呼ばれる待ち合わせ場所が存在します。RPとは共有ツリーと送信元ツリーがぶつかる場所です。ここでは、レシーバ, RP間の通信経路である共有ツリーについて考察します。

概要

shared tree 概要

以下の構成を例に挙げて、shared tree形成の概要を説明します。Host 1がマルチキャストレシーバで、R3がRPです。

                                                                 RP
 +--------+          +--------+          +--------+          +--------+
 | Host 1 +----------+   R1   +----------+   R2   +----------+   R3   |
 +--------+          +--------+          +--------+          +--------+
           --------->          --------->          --------->
     IGMP membership report     PIM join            PIM join

ラストホップルータであるR1はHost 1からのIGMP membership reportを受信すると、RPに向かってPIM joinを送信し、マルチキャストレシーバの存在をRPに知らせます。また、R1はPIM joinを作成すると同時に、shared tree用の(*, G)エントリを作成します。

同様にR2も、PIM joinの送信と(*, G)エントリの作成を行います。

なお、PIM joinをキャプチャした結果は以下の通りです。

Ethernet II, Src: cc:02:0f:4c:00:01 (cc:02:0f:4c:00:01), Dst: IPv4mcast_00:00:0d (01:00:5e:00:00:0d)
Internet Protocol Version 4, Src: 192.168.23.3 (192.168.23.3), Dst: 224.0.0.13 (224.0.0.13)
Protocol Independent Multicast
    0010 .... = Version: 2
    .... 0011 = Type: Join/Prune (3)
    Reserved byte(s): 00
    Checksum: 0xff3b [correct]
    PIM options
        Upstream-neighbor: 192.168.23.2
        Reserved byte(s): 00
        Num Groups: 1
        Holdtime: 210s 
        Group 0: 239.1.1.1/32
            Num Joins: 1
                IP address: 10.1.1.1/32 (SWR)
            Num Prunes: 0

shared tree

動作確認

以下の構成で、R1をRPとして設定します。なお、検証の都合上、一部のinterfaceのみマルチキャストを有効にしています。

 [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   +----------+ Host 3| 
            +--------+.1      .3+--------+.3    .103+--------+
                    e0/2      e0/2      e0/0      e0/0
                    192.168.13.0/24     192.168.3.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]
                      
                     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   +----------+ Host 3| 
            +--------+          +--------+.3    .103+--------+
             static RP                  e0/0      e0/0
                                        192.168.3.0/24

 [R1]
ip multicast-routing 
!
interface Loopback0
 ip pim sparse-mode
!
interface Ethernet0/0
 ip pim sparse-mode
!
ip pim rp-address 10.1.1.1

 [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.1.1.1 1
access-list 1 permit 239.0.0.0 0.255.255.255

 [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.1.1.1 1
access-list 1 permit 239.0.0.0 0.255.255.255

 [Host3]
interface Ethernet0/0
 ip igmp join-group 239.1.1.1
!
ip route 0.0.0.0 0.0.0.0 192.168.3.3

設定全文は下記ファイルです。ルーティングなどの詳細設定は下記を参照ください。

R1
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname R1
!
boot-start-marker
boot-end-marker
!
!
no aaa new-model
memory-size iomem 5
!
!
ip cef
no ip domain lookup
!
!
ip multicast-routing 
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
interface Loopback0
 ip address 10.1.1.1 255.255.255.255
 ip pim sparse-mode
!
interface Ethernet0/0
 ip address 192.168.12.1 255.255.255.0
 ip pim sparse-mode
 half-duplex
!
interface Ethernet0/1
 no ip address
 shutdown
 half-duplex
!
interface Ethernet0/2
 ip address 192.168.13.1 255.255.255.0
 half-duplex
!
interface Ethernet0/3
 no ip address
 shutdown
 half-duplex
!
!
router ospf 1
 log-adjacency-changes
 network 0.0.0.0 255.255.255.255 area 0
!
ip http server
ip forward-protocol nd
!
!
ip pim rp-address 10.1.1.1 1
ip pim autorp listener
ip pim send-rp-announce Loopback0 scope 5 group-list 2 interval 15
ip pim send-rp-discovery Loopback0 scope 5 interval 15
ip pim bsr-candidate Loopback0 0
ip pim rp-candidate Loopback0 group-list 3 interval 15
!
access-list 1 permit 239.0.0.0 0.255.255.255
access-list 2 permit 238.0.0.0 0.255.255.255
access-list 3 permit 237.0.0.0 0.255.255.255
!
!
!
control-plane
!
!
!
!
mgcp behavior g729-variants static-pt
!
!
!
!
!
line con 0
line aux 0
line vty 0 4
 login
!
!
end
R2
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname R2
!
boot-start-marker
boot-end-marker
!
!
no aaa new-model
memory-size iomem 5
!
!
ip cef
no ip domain lookup
!
!
ip multicast-routing 
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
interface Loopback0
 ip address 10.2.2.2 255.255.255.255
 ip pim sparse-mode
!
interface Ethernet0/0
 ip address 192.168.12.2 255.255.255.0
 ip pim sparse-mode
 half-duplex
!
interface Ethernet0/1
 ip address 192.168.23.2 255.255.255.0
 ip pim sparse-mode
 half-duplex
!
interface Ethernet0/2
 no ip address
 shutdown
 half-duplex
!
interface Ethernet0/3
 no ip address
 shutdown
 half-duplex
!
!
router ospf 1
 log-adjacency-changes
 network 0.0.0.0 255.255.255.255 area 0
!
ip http server
ip forward-protocol nd
!
!
ip pim rp-address 10.1.1.1 1
ip pim autorp listener
!
access-list 1 permit 239.0.0.0 0.255.255.255
!
!
!
control-plane
!
!
!
!
mgcp behavior g729-variants static-pt
!
!
!
!
!
line con 0
line aux 0
line vty 0 4
 login
!
!
end
R3
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname R3
!
boot-start-marker
boot-end-marker
!
!
no aaa new-model
memory-size iomem 5
!
!
ip cef
no ip domain lookup
!
!
ip multicast-routing 
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
interface Loopback0
 ip address 10.3.3.3 255.255.255.255
 ip pim sparse-mode
!
interface Ethernet0/0
 ip address 192.168.3.3 255.255.255.0
 ip pim sparse-mode
 half-duplex
!
interface Ethernet0/1
 ip address 192.168.23.3 255.255.255.0
 ip pim sparse-mode
 half-duplex
!
interface Ethernet0/2
 ip address 192.168.13.3 255.255.255.0
 half-duplex
!
interface Ethernet0/3
 no ip address
 shutdown
 half-duplex
!
!
router ospf 1
 log-adjacency-changes
 network 0.0.0.0 255.255.255.255 area 0
!
ip http server
ip forward-protocol nd
!
!
ip pim rp-address 10.1.1.1 1
ip pim autorp listener
!
access-list 1 permit 239.0.0.0 0.255.255.255
!
!
!
control-plane
!
!
!
!
mgcp behavior g729-variants static-pt
!
!
!
!
!
line con 0
line aux 0
line vty 0 4
 login
!
!
end
Host3
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname Host3
!
boot-start-marker
boot-end-marker
!
!
no aaa new-model
memory-size iomem 5
!
!
ip cef
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
interface Ethernet0/0
 ip address 192.168.3.103 255.255.255.0
 ip igmp join-group 239.1.1.1
 half-duplex
!
interface Ethernet0/1
 no ip address
 shutdown
 half-duplex
!
interface Ethernet0/2
 no ip address
 shutdown
 half-duplex
!
interface Ethernet0/3
 no ip address
 shutdown
 half-duplex
!
!
ip http server
ip forward-protocol nd
ip route 0.0.0.0 0.0.0.0 192.168.3.3
!
!
!
!
!
!
control-plane
!
!
!
!
mgcp behavior g729-variants static-pt
!
!
!
!
!
line con 0
line aux 0
line vty 0 4
 login
!
!
end

shared tree 確認

Host3からIGMP membership reportを送信し、shared treeが形成される様子を観察します。

interface Ethernet0/0
 no ip igmp join-group 239.1.1.1
 ip igmp join-group 239.1.1.1

マルチキャストルーティングテーブルを確認すると、R1, R2には、(*, 239.1.1.1)エントリが存在しない事が分かります。また、R3 (*, 239.1.1.1)エントリにIncoming interface: Nullと表記されている事が分かります。

 [R1]
R1#show ip mroute 239.1.1.1
Group 239.1.1.1 not found
R1#

 [R2]
R2#show ip mroute 239.1.1.1
Group 239.1.1.1 not found
R2#

 [R3]
R3#show ip mroute 239.1.1.1

 <omitted>

(*, 239.1.1.1), 00:00:37/00:02:43, RP 10.1.1.1, flags: SJC
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet0/0, Forward/Sparse, 00:00:16/00:02:43

R3#

shared treeにおけるIncoming interfaceとは、RPの方向を示します。

ルーティングテーブルを参照すると、RPの方向はe0/2である事が分かります。しかし、e0/2はPIMが有効になっていないので、PIM joinをRPに向かって送信する事ができません。このようにユニキャストルーティング上の不都合によりshared treeが形成できない場合は、static mrouteを用いてPIM joinを送信する方向を制御する必要があります

R3#show ip route ospf
O    192.168.12.0/24 [110/20] via 192.168.23.2, 00:07:57, Ethernet0/1
                     [110/20] via 192.168.13.1, 00:07:57, Ethernet0/2
     10.0.0.0/32 is subnetted, 3 subnets
O       10.2.2.2 [110/11] via 192.168.23.2, 00:07:57, Ethernet0/1
O       10.1.1.1 [110/11] via 192.168.13.1, 00:07:57, Ethernet0/2
R3#

static mroute

R3からR2へPIM joinを送信するように、以下のstatic mrouteを送信します。

 [R3]
ip mroute 10.1.1.1 255.255.255.255 192.168.23.2

R1, R2, R3に(*, G)エントリが作成されている事が確認できます。また、R3 (*, G)エントリのIncomming interfaceがe0/1に変わっている事が読み取れます。

 [R1]
R1#show ip mroute 239.1.1.1

 <omitted>

(*, 239.1.1.1), 00:02:37/00:02:51, RP 10.1.1.1, flags: S
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet0/0, Forward/Sparse, 00:02:37/00:02:51

R1#

 [R2]
R2#show ip mroute 239.1.1.1

 <omitted>

(*, 239.1.1.1), 00:02:32/00:02:46, RP 10.1.1.1, flags: S
  Incoming interface: Ethernet0/0, RPF nbr 192.168.12.1
  Outgoing interface list:
    Ethernet0/1, Forward/Sparse, 00:02:32/00:02:46

R2#

 [R3]
R3#show ip mroute 239.1.1.1

 <omitted>

(*, 239.1.1.1), 00:14:39/00:02:20, RP 10.1.1.1, flags: SJC
  Incoming interface: Ethernet0/1, RPF nbr 192.168.23.2, Mroute
  Outgoing interface list:
    Ethernet0/0, Forward/Sparse, 00:14:18/00:02:20

R3#

RP(R1 Loopback 0)からレシーバ(Host3)まで疎通可能である事を確認します。

R1#ping 239.1.1.1 source Loopback 0

Type escape sequence to abort.
Sending 1, 100-byte ICMP Echos to 239.1.1.1, timeout is 2 seconds:
Packet sent with a source address of 10.1.1.1

Reply to request 0 from 192.168.3.103, 80 ms
Reply to request 0 from 192.168.3.103, 80 ms
R1#

Accept RP

基本設定

shared treeにはAccept RPという機能が存在します。Accept RPとは、RPが受け入れるグループアドレスを制限する機能のことです。具体的には、RPに送る(*, G) join messageを取捨選択を行います。

以下のコマンドで、RPに転送する(*, G) joinを制限する事ができます。

Router(config) ip pim accept-rp <rp_addr> <std_acl>

以下のコマンドで、自動的に設定されたRPに対してのみ(*, G) joinを転送します。言い換えると、staticに設定されたRPに対する(*, G) joinを拒否し、自動設定されたRP(Auto RPだけでなくBSRも含みます)に対してのみ(*, G) joinを転送します。また、<std_acl>を指定すると、グループアドレスに基づく(*, G) joinの取捨選択が可能です。

Router(config) ip pim accept-rp auto-rp [ <std_acl> ]

動作確認

動作確認を行う環境は、先ほどと同様です。RPの仕様がやや複雑ですので、RPに関する仕様を以下に抜粋します。

 [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   +----------+ Host 3 |
            +--------+.1      .3+--------+.3    .103+--------+
                    e0/2      e0/2      e0/0      e0/0
                    192.168.13.0/24     192.168.3.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]
                      
                     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   +----------+ Host 3 |
            +--------+          +--------+.3    .103+--------+
      static RP : 239.0.0.0/8           e0/0      e0/0
        Auto RP : 238.0.0.0/8           192.168.3.0/24
         BSR    : 237.0.0.0/8
 [R1]
ip pim rp-address 10.1.1.1 1
ip pim autorp listener
ip pim send-rp-announce Loopback0 scope 5 group-list 2 interval 15
ip pim send-rp-discovery Loopback0 scope 5 interval 15
ip pim bsr-candidate Loopback0 0
ip pim rp-candidate Loopback0 group-list 3 interval 15
!
access-list 1 permit 239.0.0.0 0.255.255.255
access-list 2 permit 238.0.0.0 0.255.255.255
access-list 3 permit 237.0.0.0 0.255.255.255

 [R2]
ip pim rp-address 10.1.1.1 1
ip pim autorp listener
!
access-list 1 permit 239.0.0.0 0.255.255.255

 [R3]
ip pim rp-address 10.1.1.1 1
!
access-list 1 permit 239.0.0.0 0.255.255.255
ip pim autorp listener
!
ip mroute 10.1.1.1 255.255.255.255 192.168.23.2

グループアドレスに基づく制限

R2において、第四オクテットが奇数である(*, G) joinのみを許可するように設定します。

 [R2]
access-list 4 permit 239.0.0.1 0.255.255.254
ip pim accept-rp 10.1.1.1 4

Host3で以下のマルチキャストグループに参加します。

 [Host3]
interface Ethernet0/0
 no ip igmp join-group 239.1.1.1
 ip igmp join-group 239.1.1.1
 ip igmp join-group 239.2.2.2
 ip igmp join-group 239.3.3.3
 ip igmp join-group 239.4.4.4

R2のコンソールを開きしばらく待つと、R2において(*, G) joinがフィルタされた旨が出力されます。

R2#
*Mar  1 00:13:10.435: %PIM-6-INVALID_RP_JOIN: Received (*, 239.2.2.2) Join from 192.168.23.3 for invalid RP 10.1.1.1
R2#

R2のマルチキャストルーティングテーブルを見ると、第四オクテットが奇数であるグループアドレスのみshared treeが形成されている事が読み取れます。

R2#show ip mroute | include 23[0-9]
(*, 239.1.1.1), 00:05:54/00:02:38, RP 10.1.1.1, flags: S
(*, 239.3.3.3), 00:00:40/00:02:49, RP 10.1.1.1, flags: S
R2#

static RP 拒否

R2において、static RPへの(*, G) joinを拒否するように設定します。

 [R2]
no ip pim accept-rp 10.1.1.1 4
ip pim accept-rp auto-rp

Host3で以下のマルチキャストグループに参加します。

 [Host3]
interface Ethernet0/0
 no ip igmp join-group 239.1.1.1
 no ip igmp join-group 239.2.2.2
 no ip igmp join-group 239.3.3.3
 no ip igmp join-group 239.4.4.4
 ip igmp join-group 239.1.1.1
 ip igmp join-group 239.2.2.2
 ip igmp join-group 239.3.3.3
 ip igmp join-group 239.4.4.4
 ip igmp join-group 238.1.1.1
 ip igmp join-group 238.2.2.2
 ip igmp join-group 237.1.1.1
 ip igmp join-group 237.2.2.2

R2のマルチキャストルーティングテーブルを見ると、自動的に設定されたRP(Auto RP, BSR)に対してのみのshared treeが形成された事が読み取れます。

R2#show ip mroute | include 23[0-9]
(*, 238.1.1.1), 00:00:08/00:03:21, RP 10.1.1.1, flags: S
(*, 237.2.2.2), 00:00:19/00:03:11, RP 10.1.1.1, flags: S
(*, 238.2.2.2), 00:00:07/00:03:22, RP 10.1.1.1, flags: S
(*, 237.1.1.1), 00:00:21/00:03:09, RP 10.1.1.1, flags: S
R2#

Multicast Boundary

基本設定

Multicast BoundaryはPIM join messageやAuto RP messageを制限する事によってマルチキャストに境界を設ける技術です。

(*, G) join messageを制限するには、以下のコマンドを指定します。

Router(config-if) ip multicast boundary <std_acl>

(S, G) join messageを制限するには、以下のコマンドを指定します。なお、in, outはPIM messageが流れる方向ではなく、マルチキャストのデータパケットが流れる方向を指定します。

Router(config-if) ip multicast boundary <ext_acl> { in | out }

Auto RP messageを制限するには、以下のコマンドを指定します。<std_acl>にはグループアドレスを指定してます。
なお、announce, discoveryの両方を制限する事が可能ですが、誤って、224.0.1.39, 224.0.1.40まで制限しないよう注意して下さい。

Router(config-if) ip multicast boundary <std_acl> filter-autorp

グループアドレスに基づく制限

グループアドレスが、238.0.0.0/8, 239.0.0.0/8である(*, G) joinをR2からR1へ転送しないようにする設定を投入します。

 [R2]
ip access-list standard BOUNDAY
 10 deny 238.0.0.0 1.255.255.255
 99 permit any
!
interface Ethernet0/0
 ip multicast boundary BOUNDAY

マルチキャストルーティングテーブルを削除して、しばらく待ちます。238.0.0.0/8, 239.0.0.0/8に対するshared treeが作成されない事を確認します。

 [R1, R2, R3]
clear ip mroute *

 [R1]
R1#show ip mroute | i 23[0-9]
(*, 237.2.2.2), 00:12:48/00:03:28, RP 10.1.1.1, flags: S
(*, 237.1.1.1), 00:12:48/00:02:31, RP 10.1.1.1, flags: S
R1#
タイトルとURLをコピーしました