Cisco IOS マルチキャスト Multicast Over GREの設定方法

スポンサーリンク

通信経路上にマルチキャストをサポートしない機器があったとしても、どうしてもマルチキャスト通信をしたい要件に出会うかもしれません。そのような場合は、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

設定全文は下記ファイルです。詳細設定は下記を参照ください。

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-dense-mode
!
interface Serial0/0
 ip address 192.168.123.1 255.255.255.0
 ip pim sparse-dense-mode
 encapsulation frame-relay
 no ip split-horizon eigrp 10
 serial restart-delay 0
 frame-relay map ip 192.168.123.2 102 broadcast
 frame-relay map ip 192.168.123.3 103 broadcast
!
interface Serial0/1
 no ip address
 shutdown
 serial restart-delay 0
!
interface Serial0/2
 no ip address
 shutdown
 serial restart-delay 0
!
interface Serial0/3
 no ip address
 shutdown
 serial restart-delay 0
!
interface Ethernet1/0
 ip address 192.168.14.1 255.255.255.0
 ip pim sparse-dense-mode
 half-duplex
!
interface Ethernet1/1
 no ip address
 shutdown
 half-duplex
!
interface Ethernet1/2
 no ip address
 shutdown
 half-duplex
!
interface Ethernet1/3
 no ip address
 shutdown
 half-duplex
!
!
router eigrp 10
 network 0.0.0.0
 no auto-summary
!
ip http server
ip forward-protocol nd
!
!
ip pim rp-candidate Loopback0 group-list RP_GROUP interval 30
!
!
ip access-list standard RP_GROUP
 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
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-dense-mode
!
interface Serial0/0
 ip address 192.168.123.2 255.255.255.0
 ip pim sparse-dense-mode
 encapsulation frame-relay
 serial restart-delay 0
 frame-relay map ip 192.168.123.1 201 broadcast
 frame-relay map ip 192.168.123.3 201 broadcast
!
interface Serial0/1
 no ip address
 shutdown
 serial restart-delay 0
!
interface Serial0/2
 no ip address
 shutdown
 serial restart-delay 0
!
interface Serial0/3
 no ip address
 shutdown
 serial restart-delay 0
!
!
router eigrp 10
 network 0.0.0.0
 no auto-summary
!
ip http server
ip forward-protocol nd
!
!
ip pim bsr-candidate Loopback0 32
!
!
!
!
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-dense-mode
!
interface Serial0/0
 ip address 192.168.123.3 255.255.255.0
 ip pim sparse-dense-mode
 encapsulation frame-relay
 serial restart-delay 0
 frame-relay map ip 192.168.123.1 301 broadcast
 frame-relay map ip 192.168.123.2 301 broadcast
!
interface Serial0/1
 no ip address
 shutdown
 serial restart-delay 0
!
interface Serial0/2
 no ip address
 shutdown
 serial restart-delay 0
!
interface Serial0/3
 no ip address
 shutdown
 serial restart-delay 0
!
!
router eigrp 10
 network 0.0.0.0
 no auto-summary
!
ip http server
ip forward-protocol nd
!
!
!
!
!
!
control-plane
!
!
!
!
mgcp behavior g729-variants static-pt
!
!
!
!
!
line con 0
line aux 0
line vty 0 4
 login
!
!
end
R4
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname R4
!
boot-start-marker
boot-end-marker
!
!
no aaa new-model
memory-size iomem 5
!
!
ip cef
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
interface Loopback0
 ip address 10.4.4.4 255.255.255.0
!
interface Ethernet1/0
 ip address 192.168.14.4 255.255.255.0
 half-duplex
!
interface Ethernet1/1
 ip address 192.168.45.4 255.255.255.0
 half-duplex
!
interface Ethernet1/2
 no ip address
 shutdown
 half-duplex
!
interface Ethernet1/3
 no ip address
 shutdown
 half-duplex
!
!
router eigrp 10
 network 0.0.0.0
 no auto-summary
!
ip http server
ip forward-protocol nd
!
!
!
!
!
!
control-plane
!
!
!
!
mgcp behavior g729-variants static-pt
!
!
!
!
!
line con 0
line aux 0
line vty 0 4
 login
!
!
end
R5
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname R5
!
boot-start-marker
boot-end-marker
!
!
no aaa new-model
memory-size iomem 5
!
!
ip cef
!
!
ip multicast-routing 
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
interface Loopback0
 ip address 10.5.5.5 255.255.255.255
 ip pim sparse-dense-mode
!
interface Ethernet1/0
 no ip address
 shutdown
 half-duplex
!
interface Ethernet1/1
 ip address 192.168.45.5 255.255.255.0
 ip pim sparse-dense-mode
 half-duplex
!
interface Ethernet1/2
 ip address 192.168.5.5 255.255.255.0
 ip pim sparse-dense-mode
 half-duplex
 no keepalive
!
interface Ethernet1/3
 no ip address
 shutdown
 half-duplex
!
!
router eigrp 10
 network 0.0.0.0
 no auto-summary
!
ip http server
ip forward-protocol nd
!
!
!
!
!
!
control-plane
!
!
!
!
mgcp behavior g729-variants static-pt
!
!
!
!
!
line con 0
line aux 0
line vty 0 4
 login
!
!
end

マルチキャスト非対応ルータ対策

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#
タイトルとURLをコピーしました