Multicast Bidirectional PIM (Bidir-PIM)を設定してみた

Multicast Bidir-PIM を勉強しなおしたので、Virl を使用して検証してみました。

構成

f:id:naoki029:20181209201214j:plain

RT1 から RT4 で Bidir-PIM を設定し、Multicast を転送できるようにしました。通信の確認用に Client として L3 switch を接続しています。

Multicast 以外の設定

Client が接続している RT の Interface には IP .254 を設定し、Client 側では .1 を設定しています。Client の Default GW は接続している RTを指定しています。

Client1#show ip int brief gi 0/1
Interface              IP-Address      OK? Method Status                Protocol
GigabitEthernet0/1     172.16.1.1      YES manual up                    up      
Client1#
Client1#show ip route         
S*    0.0.0.0/0 [1/0] via 172.16.1.254
      172.16.0.0/16 is variably subnetted, 2 subnets, 2 masks
C        172.16.1.0/24 is directly connected, GigabitEthernet0/1
L        17

各 RT は OSPF でルートを学習しているので、すべての Device 間で IP の疎通ができる状態になっています。

RT1#show ip route
Gateway of last resort is not set
      10.0.0.0/8 is variably subnetted, 6 subnets, 2 masks
C        10.0.0.20/30 is directly connected, GigabitEthernet2
L        10.0.0.21/32 is directly connected, GigabitEthernet2
C        10.0.0.24/30 is directly connected, GigabitEthernet3
L        10.0.0.25/32 is directly connected, GigabitEthernet3
O        10.0.0.28/30 [110/2] via 10.0.0.22, 00:53:06, GigabitEthernet2
O        10.0.0.32/30 [110/2] via 10.0.0.26, 00:53:06, GigabitEthernet3
      172.16.0.0/16 is variably subnetted, 5 subnets, 2 masks
C        172.16.1.0/24 is directly connected, GigabitEthernet4
L        172.16.1.254/32 is directly connected, GigabitEthernet4
O        172.16.2.0/24 [110/2] via 10.0.0.22, 00:42:35, GigabitEthernet2
O        172.16.3.0/24 [110/2] via 10.0.0.26, 00:42:35, GigabitEthernet3
O        172.16.4.0/24 [110/3] via 10.0.0.26, 00:42:34, GigabitEthernet3
                       [110/3] via 10.0.0.22, 00:42:34, GigabitEthernet2
      192.168.0.0/32 is subnetted, 4 subnets
C        192.168.0.1 is directly connected, Loopback0
O        192.168.0.2 [110/2] via 10.0.0.22, 00:53:35, GigabitEthernet2
O        192.168.0.3 [110/2] via 10.0.0.26, 00:53:32, GigabitEthernet3
O        192.168.0.4 [110/3] via 10.0.0.26, 00:53:01, GigabitEthernet3
                     [110/3] via 10.0.0.22, 00:53:01, GigabitEthernet2
RT1# 
RT1# show ip ospf neighbor 

Neighbor ID     Pri   State           Dead Time   Address         Interface
192.168.0.3       1   FULL/DR         00:00:39    10.0.0.26       GigabitEthernet3
192.168.0.2       1   FULL/DR         00:00:35    10.0.0.22       GigabitEthernet2
RT1#

Bidir-PIM の設定

すべての RT で同じ設定を投入しています。

Multicast と Bidir-PIM の有効化

デフォルトでは無効なので、有効にする必要があります。

ip multicast-routing distributed
ip pim bidir-enable

Randezvous Point (RP) の設定

今回は 225.0.0.0/24 と 225.0.1.0/24 の Multicast 転送に対して、別々の RP を static で設定しました。RPの対応は以下のようにしました。

  • 225.0.0.0/24 : RT1 Lo0 192.168.0.1
  • 225.0.1.0/24 : RT2 Lo0 192.168.0.2

Multicast アドレスを指定するための access-list (ACL) を作成します。

access-list 1 permit 225.0.0.0 0.0.0.255
access-list 2 permit 225.0.1.0 0.0.0.255

作成した ACL を使用して、RP を設定します。

ip pim rp-address 192.168.0.1 1 bidir
ip pim rp-address 192.168.0.2 2 bidir

インターフェースで pim sparse-mode の有効化

Multicast を送受信するインターフェースで pim sparse-mode を有効にします。

RT1#show run
...
interface Loopback0
 description Loopback
 ip address 192.168.0.1 255.255.255.255
 ip pim sparse-mode

interface GigabitEthernet2
 description to RT2
 ip address 10.0.0.21 255.255.255.252
 ip pim sparse-mode
 ip ospf cost 1
!
interface GigabitEthernet3
 description to RT3
 ip address 10.0.0.25 255.255.255.252
 ip pim sparse-mode
 ip ospf cost 1
!
interface GigabitEthernet4
 description to Client1
 ip address 172.16.1.254 255.255.255.0
 ip pim sparse-mode
!         

これで RT の設定は完了です。

RT のルーティングテーブルを確認

Multicast の通信を行う前に、RT のルーティングテーブルを確認します。この時点では、Multicast が流れていないので (*,G) エントリーは RP を設定した 225.0.0.0/24 と 225.0.1.0/24 しかありません。Bidir-Upstream に RP に一番近いインターフェースが出現します。

※ 224.0.1.40 は Cisco 機器で Auto RP を設定するために使用さるアドレスで、Multicast を有効にすると自動的にルーティングテーブルに乗ってきます。今回は Static RP で設定しているため、以後省略します。

RT1#show ip mroute
(*,225.0.1.0/24), 01:09:26/-, RP 192.168.0.2, flags: B
  Bidir-Upstream: GigabitEthernet2, RPF nbr: 10.0.0.22
  Incoming interface list:
    GigabitEthernet4, Accepting/Sparse
    GigabitEthernet3, Accepting/Sparse
    Loopback0, Accepting/Sparse
    GigabitEthernet2, Accepting/Sparse

(*,225.0.0.0/24), 01:09:26/-, RP 192.168.0.1, flags: B
  Bidir-Upstream: Loopback0, RPF nbr: 192.168.0.1
  Incoming interface list:
    GigabitEthernet4, Accepting/Sparse
    GigabitEthernet3, Accepting/Sparse
    GigabitEthernet2, Accepting/Sparse
    Loopback0, Accepting/Sparse

(*, 224.0.1.40), 01:09:26/00:02:35, RP 0.0.0.0, flags: DPL
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list: Null

RT1#

Multicast の通信確認 (Client3 から Client2 )

Client2 で 225.0.0.1 の IGMP グループに join します。

Client2#show run int gi 0/1
interface GigabitEthernet0/1
 description to RT2
 no switchport
 ip address 172.16.2.1 255.255.255.0
 ip igmp join-group 225.0.0.1
end

IGMP Join メッセージが 225.0.0.1 の RP である RT1 に送信され、RT1 のルーティングテーブルに (*,225.0.0.1) のエントリが出現します。

RT1#show ip mroute 225.0.0.1
(*, 225.0.0.1), 00:05:40/00:02:46, RP 192.168.0.1, flags: B
  Bidir-Upstream: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    GigabitEthernet2, Forward/Sparse, 00:05:40/00:02:46
RT1#

このとき、IGMP Join メッセージが通る経路は RT2 -> RT1 となるので、RT2 にも (*,225.0.0.1) エントリが作成されます。また、IGMP Join メッセージは RT3 と RT4 を経由しないので、この2台のデバイス上ではエントリが作成されません。

RT2#show ip mroute 225.0.0.1

(*, 225.0.0.1), 00:08:02/00:02:38, RP 192.168.0.1, flags: BC
  Bidir-Upstream: GigabitEthernet2, RPF nbr 10.0.0.21
  Outgoing interface list:
    GigabitEthernet4, Forward/Sparse, 00:08:02/00:02:38
    GigabitEthernet2, Bidir-Upstream/Sparse, 00:08:02/stopped

RT2#

RT3#show ip mroute 225.0.0.1
Group 225.0.0.1 not found
RT3#

RT4#show ip mroute 225.0.0.1
Group 225.0.0.1 not found
RT4#

Client3 から 225.0.0.1 に対して ping を送信すると成功することが確認できます。

Client3#ping 225.0.0.1
Type escape sequence to abort.
Sending 1, 100-byte ICMP Echos to 225.0.0.1, timeout is 2 seconds:

Reply to request 0 from 172.16.2.1, 6 ms
Client3#

このときの通信経路は RT3 -> RT1 -> RT2 となるので、ルーティングテーブルを見ながら確認していきます。

RT3 は Gi3 から 225.0.0.1 宛てのパケットを受信すると、Bidir-Upstream: GigabitEthernet2 を使用して RP 向けてパケットを転送します。

RT3#show ip mroute
(*,225.0.1.0/24), 01:39:03/-, RP 192.168.0.2, flags: B
  Bidir-Upstream: GigabitEthernet3, RPF nbr: 10.0.0.34
  Incoming interface list:
    GigabitEthernet4, Accepting/Sparse
    Loopback0, Accepting/Sparse
    GigabitEthernet3, Accepting/Sparse
          
(*,225.0.0.0/24), 01:39:03/-, RP 192.168.0.1, flags: B   !このエントリが使用される
  Bidir-Upstream: GigabitEthernet2, RPF nbr: 10.0.0.25
  Incoming interface list:
    GigabitEthernet4, Accepting/Sparse
    GigabitEthernet3, Accepting/Sparse
    Loopback0, Accepting/Sparse
    GigabitEthernet2, Accepting/Sparse

RT3#

RP である RT1 は、Gi 0/2 からパケットを転送します。

RT1#show ip mroute
(*,225.0.1.0/24), 01:43:16/-, RP 192.168.0.2, flags: B
  Bidir-Upstream: GigabitEthernet2, RPF nbr: 10.0.0.22
  Incoming interface list:
    GigabitEthernet4, Accepting/Sparse
    GigabitEthernet3, Accepting/Sparse
    Loopback0, Accepting/Sparse
    GigabitEthernet2, Accepting/Sparse

(*,225.0.0.0/24), 01:43:16/-, RP 192.168.0.1, flags: B
  Bidir-Upstream: Loopback0, RPF nbr: 192.168.0.1
  Incoming interface list:
    GigabitEthernet4, Accepting/Sparse
    GigabitEthernet3, Accepting/Sparse
    GigabitEthernet2, Accepting/Sparse
    Loopback0, Accepting/Sparse

(*, 225.0.0.1), 00:22:59/00:03:07, RP 192.168.0.1, flags: B !このエントリが使用される
  Bidir-Upstream: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    GigabitEthernet2, Forward/Sparse, 00:22:59/00:03:07
RT1#

最後に、RT2 は Gi2 で受信したパケットを Gi4 から Client2 に対して転送します。

RT2#show ip mroute

(*,225.0.1.0/24), 01:48:12/-, RP 192.168.0.2, flags: B
  Bidir-Upstream: Loopback0, RPF nbr: 192.168.0.2
  Incoming interface list:
    GigabitEthernet4, Accepting/Sparse
    GigabitEthernet3, Accepting/Sparse
    GigabitEthernet2, Accepting/Sparse
    Loopback0, Accepting/Sparse

(*,225.0.0.0/24), 01:48:12/-, RP 192.168.0.1, flags: B
  Bidir-Upstream: GigabitEthernet2, RPF nbr: 10.0.0.21
  Incoming interface list:
    GigabitEthernet4, Accepting/Sparse
    GigabitEthernet3, Accepting/Sparse
    Loopback0, Accepting/Sparse
    GigabitEthernet2, Accepting/Sparse

(*, 225.0.0.1), 00:27:55/00:02:50, RP 192.168.0.1, flags: BC !このエントリが使用される
  Bidir-Upstream: GigabitEthernet2, RPF nbr 10.0.0.21
  Outgoing interface list:
    GigabitEthernet4, Forward/Sparse, 00:27:55/00:02:50
    GigabitEthernet2, Bidir-Upstream/Sparse, 00:27:55/stopped

Client2 から Client3 への通信(ICMP echo reply) は Multicast ではなく Unicast になります。