# IPv6マルチキャスト / PIM

## PIM-SMv6

IPv6用のマルチキャスト経路制御プロトコルPIM-SMv6（Protocol Independent Multicast - Sparse Mode for IPv6）について解説します。
Note

PIM-SMv6を使用するにはフィーチャーライセンスが必要です。
ライセンスのインストール方法については「運用・管理」/「システム」の「ライセンスキーのインストール」をご参照ください。

Note

コントロールファブリックカードを2枚装着した構成、および、VCS構成時はPIM-SMv6とRSTPを併用できません。

### 概要

PIM-SMv6は、明示的に要求を出したネットワークにだけトラフィックを届けるSparseモードのマルチキャスト経路制御プロトコルです。このプロトコルは、グループのメンバーがネットワーク上に広くまばらに分散しているような環境で最適な動作をするよう設計されています。グループへの参加を表明していないルーターにトラフィックが配送されることは原則としてありません。これを実現するため、グループのトラフィックをとりまとめるランデブーポイント（RP）というルーターを用意し、RPを起点とする共有木を作成してトラフィックを配送します。
PIM-SMv6では、次の役割を持つルーターが必要です。
DR（Designated Router：代表ルーター：各サブネットに最低1台のDR候補が必要）
各サブネットにおいて、実際にマルチキャストパケットの転送を担当するルーター。PIM-SMv6では、マルチキャストクライアントが存在するIPv6サブネットごとにDRが必要です。サブネット内に複数のPIM-SMv6ルーターが存在する場合、インターフェースに設定されたDR優先度の値がもっとも大きなルーターがDRとなります。DR優先度が同じときは、IPv6アドレスの大きなルーターがDRになります。同一サブネット上のPIM-SMv6ルーターは定期的にHelloパケットを送信して互いの状態を監視しており、DRがダウンした場合は次点のルーターがDRになります。
RP（Rendezvous Point：ランデブーポイント：各マルチキャストグループに最低1台のRP候補が必要）
PIM-SMv6ネットワークの中核をなす重要なルーター。マルチキャストグループごとに用意します。マルチキャストパケットの送信者が接続されているネットワークのDR（FHR：ファーストホップルーター）と、受信者が接続されているネットワークのDR（LHR：ラストホップルーター）は、送受信を始めるにあたってRPにメッセージを送り、このような送信者・受信者が存在するということを伝えます。最初、ファーストホップルーターはマルチキャストパケットをRPにユニキャストします。すると、RPは通知のあったラストホップルーターに向けてのみ、パケットをマルチキャストで転送します。RP候補（C-RP）が複数存在する場合、RP優先度値のもっとも小さいルーターがRPに選出されます。
BSR（Bootstrap Router：ブートストラップルーター：PIM-SMv6ネットワークに最低1台のBSR候補が必要）
PIM-SMv6ネットワークにおいて、RP候補とマルチキャストグループの一覧、および、各グループのRP候補（C-RP）一覧を管理・広告するルーター。複数のBSR候補（C-BSR）が存在するときは、BSR優先度値のもっとも大きいルーターがBSRに選出されます。ネットワーク上のPIM-SMv6ルーターは、BSRから受信した情報をもとに計算を行って各グループのRPを決定します。
次に、PIM-SMv6の基本的な設定手順について説明します。
なお、以下の各例では、VLANとIPv6ユニキャストルーティングの設定までは完了しているものとします。
Note

PIM-SMv6では、マルチキャスト経路の制御に必要なユニキャスト経路情報は交換しないため、あらかじめ何らかの手段で各ルーター上にユニキャスト経路表を構築しておく必要があります。通常、そのためには、RIPng、OSPFv3などの設定を行っておく必要があります。

VLANの設定については「L2スイッチング」の「バーチャルLAN」をご覧ください。また、IPv6インターフェースの基本設定については「IPv6」の「IPv6インターフェース」を、静的な経路設定については「IPv6」の「経路制御」を、RIPngについては「IPv6」の「経路制御（RIPng）」を、OSPFv3については「IPv6」の「経路制御（OSPFv3）」をご覧ください。

### 基本設定

PIM-SMv6では、ランデブーポイント（RP）が重要な役割を果たします。
PIM-SMv6の基本設定は、RPの指定方法によって次の3種類があります。

- ブートストラップメカニズムによってRPを動的に決定する方法（動的RP）
- すべてのルーターにRPのアドレスをスタティック登録する方法（静的RP）
- RPのアドレスを埋め込んだ特殊なマルチキャストグループアドレスを使う方法（Embedded RP）

以下ではそれぞれの基本設定について解説します。

#### ブートストラップメカニズムによる動的RP

ここでは、ブートストラップメカニズムを利用して、RPを動的に決定する設定を示します。
この場合は、少なくともRP、BSR、その他の3種類のルーターが必要となり、基本設定もRP、BSR、その他の3種類に分かれます（RPとBSRは同じルーターにしてもかまいません）。

##### ランデブーポイント（RP）

1. PIM-SMv6の動作に必要なPIM6サービスを有効にします。これにはservice pim6コマンドを使います。

       awplus(config)# service pim6

2. IPv6マルチキャストルーティングを有効化します。これにはipv6 multicast-routingコマンドを使います。

       awplus(config)# ipv6 multicast-routing

3. マルチキャストルーティングを行うすべてのインターフェースで、PIM-SMv6とMLD機能を有効にします。これにはipv6 pim sparse-modeコマンドとipv6 mldコマンドを使います。

       awplus(config)# interface vlan10,vlan20,vlan30
       awplus(config-if)# ipv6 pim sparse-mode
       awplus(config-if)# ipv6 mld
       awplus(config-if)# exit

4. ランデブーポイントとして動作するよう設定します。これにはipv6 pim rp-candidateコマンドを使います。
   ここでは、すべてのマルチキャストグループに対するランデブーポイント候補（C-RP）として自らを広告するよう設定しています。広告時のアドレスとしては、vlan10のIPv6アドレスを使います。

       awplus(config)# ipv6 pim rp-candidate vlan10

設定は以上です。
特定のマルチキャストグループ範囲に対してのみ、C-RPとして動作させるには、名前付き標準IPv6アクセスリストを使って対象マルチキャストグループを指定します。たとえば、ff1e::1:2:3:0000～ff1e::1:2:3:ffffのランデブーポイント候補として動作させる場合は次のようにします。

    awplus(config)# ipv6 access-list standard mc1 permit ff1e::1:2:3:0/112
    awplus(config)# ipv6 pim rp-candidate vlan10 group-list mc1

##### ブートストラップルーター（BSR）

1. PIM-SMv6の動作に必要なPIM6サービスを有効にします。これにはservice pim6コマンドを使います。

       awplus(config)# service pim6

2. IPv6マルチキャストルーティングを有効化します。これにはipv6 multicast-routingコマンドを使います。

       awplus(config)# ipv6 multicast-routing

3. マルチキャストルーティングを行うすべてのインターフェースで、PIM-SMv6とMLD機能を有効にします。これにはipv6 pim sparse-modeコマンドとipv6 mldコマンドを使います。

       awplus(config)# interface vlan10,vlan20,vlan30
       awplus(config-if)# ipv6 pim sparse-mode
       awplus(config-if)# ipv6 mld
       awplus(config-if)# exit

4. ブートストラップルーターとして動作するよう設定します。これにはipv6 pim bsr-candidateコマンドを使います。
   ここでは、ブートストラップルーター候補（C-BSR）として自らを広告するよう設定しています。広告時のアドレスとしては、vlan10のIPv6アドレスを使います。

       awplus(config)# ipv6 pim bsr-candidate vlan10

設定は以上です。

##### その他のルーター（非RP）

1. PIM-SMv6の動作に必要なPIM6サービスを有効にします。これにはservice pim6コマンドを使います。

       awplus(config)# service pim6

2. IPv6マルチキャストルーティングを有効化します。これにはipv6 multicast-routingコマンドを使います。

       awplus(config)# ipv6 multicast-routing

3. マルチキャストルーティングを行うすべてのインターフェースで、PIM-SMv6とMLD機能を有効にします。これにはipv6 pim sparse-modeコマンドとipv6 mldコマンドを使います。

       awplus(config)# interface vlan10,vlan20,vlan30
       awplus(config-if)# ipv6 pim sparse-mode
       awplus(config-if)# ipv6 mld
       awplus(config-if)# exit

設定は以上です。

#### スタティック登録による静的RP

本製品では、BSRを使わずに、RPを静的設定する方法もサポートしています。
この方法では、すべてのルーターに対し、特定のルーターがランデブーポイント（RP）であるということを静的に設定します。
静的RPの構成ではブートストラップルーター（BSR）を使用しないため、ルーターの役割はRPとその他の2種類になりますが、基本設定はすべてのルーターで同じになります。

##### すべてのルーター（RPおよび非RP）

1. PIM-SMv6の動作に必要なPIM6サービスを有効にします。これにはservice pim6コマンドを使います。

       awplus(config)# service pim6

2. IPv6マルチキャストルーティングを有効化します。これにはipv6 multicast-routingコマンドを使います。

       awplus(config)# ipv6 multicast-routing

3. マルチキャストルーティングを行うすべてのインターフェースで、PIM-SMv6とMLD機能を有効にします。これにはipv6 pim sparse-modeコマンドとipv6 mldコマンドを使います。

       awplus(config)# interface vlan10,vlan20,vlan30
       awplus(config-if)# ipv6 pim sparse-mode
       awplus(config-if)# ipv6 mld
       awplus(config-if)# exit

4. ランデブーポイント（RP）を静的に設定します。これにはipv6 pim rp-addressコマンドを使います。
   ここでは、すべてのマルチキャストグループに対して、ランデブーポイント2001:db8:10:10::1を使うよう設定しています。

       awplus(config)# ipv6 pim rp-address 2001:db8:10:10::1

   Note

   ランデブーポイントの指定は、ランデブーポイントとして動作させるルーター（ここでは2001:db8:10:10::1）にも、そうでないルーターにも同じように行います。

設定は以上です。
特定のマルチキャストグループ範囲ごとにランデブーポイントを設定するには、名前付き標準IPv6アクセスリストを使って対象マルチキャストグループを指定します。たとえば、ff1e::1:2:3:10 ～ ff1e::1:2:3:1f のランデブーポイントとして2001:db8:10:10::1を、ff1e::1:2:3:20 ～ ff1e::1:2:3:2f のランデブーポイントとして2001:db8:10:20::1を使う場合は次のようにします。

    awplus(config)# ipv6 access-list standard mc1 permit ff1e::1:2:3:10/124
    awplus(config)# ipv6 access-list standard mc2 permit ff1e::1:2:3:20/124
    awplus(config)# ipv6 pim rp-address 2001:db8:10:10::1 mc1
    awplus(config)# ipv6 pim rp-address 2001:db8:10:20::1 mc2

#### RPアドレスを埋め込んだ特殊なマルチキャストグループアドレスを使う方法（Embedded RP）

RFC3956では、RPのアドレスを埋め込むことのできる特殊なマルチキャストグループアドレス（Embedded RPマルチキャストグループアドレス。以下、Embedded RPグループアドレス）の範囲 ff70::/12 を定義しています。
PIM-SMv6ネットワーク上のすべてのルーターがEmbedded RPグループアドレスをサポートしていれば、この範囲のアドレスを使用することで、ブートストラップメカニズムやRPのスタティック登録を行わなくても各ルーターはRPのアドレスを知ることができます。
本製品は Embedded RPグループアドレスをサポートしており、初期設定で有効になっています。
Embedded RPグループアドレスを使用する場合の注意点をまとめます。

- RPのIPv6アドレスは、インターフェースID（IPv6アドレスの下位64ビット）を 0:0:0:1～0:0:0:f のいずれかにする必要があります。
  これは、128ビットのEmbedded RPグループアドレスに128ビットのRPアドレスを埋め込むためです。

  `[埋め込み可能なRPアドレスの例]
  2001:db8:10:10::1
  2001:db8:10::f
  [埋め込みが不可能なRPアドレスの例]
  2001:db8:10:10:207:e9ff:fe02:21a2
  2001:db8:10::1234:5678
  `
- Embedded RPグループアドレスの形式は次のとおりです。

  `ff7X:YZZ:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
  `

  X | アドレスの有効範囲（スコープ）。0xe（グローバルスコープ）や0x8（組織ローカル）などが一般的です
  Y | RPアドレスのインターフェースID（RIID）。有効範囲は0x1～0xfです
  ZZ | RPアドレスのネットワークプレフィックス長。有効範囲は0x01～0x40（10進数では1～64）。一般的には0x40を使います
  xxxx:xxxx:xxxx:xxxx:xxxx:xxxx | 先頭ZZビットがRPアドレスのネットワークプレフィックスを示し、残りのビットがマルチキャストグループIDを示します。たとえば、ZZが0x40（10進数では64）なら、先頭64ビットがRPアドレスのネットワークプレフィックスを表し、残りの32ビットで該当RPが扱うマルチキャストグループを表すことができます

  ここから、RPアドレス2001:db8:10:10::1（プレフィックス = 2001:db8:10:10::/64（プレフィックス長 = 64 (0x40)）、インターフェースID = 0x1）を埋め込んだグローバルスコープ（0xe）のマルチキャストグループアドレスは、次の形式となります。

  `ff7e:140:2001:db8:10:10:yyyy:yyyy
  `
  yyyy:yyyy の部分は、該当RP（2001:db8:10:10::1）が扱うマルチキャストグループのIDです。この例では、0000:0000～ffff:ffffの32ビット、約40億個が使用可能です。

次に、前記のEmbedded RPマルチキャストグループアドレスを使うための設定を示します。
Embedded RPの構成ではブートストラップルーター（BSR）を使用しないため、ルーターの役割はRPとその他の2種類になり、基本設定もRPとその他の2種類に分かれます。

##### ランデブーポイント（RP）

1. PIM-SMv6の動作に必要なPIM6サービスを有効にします。これにはservice pim6コマンドを使います。

       awplus(config)# service pim6

2. IPv6マルチキャストルーティングを有効化します。これにはipv6 multicast-routingコマンドを使います。

       awplus(config)# ipv6 multicast-routing

3. マルチキャストルーティングを行うすべてのインターフェースで、PIM-SMv6とMLD機能を有効にします。これにはipv6 pim sparse-modeコマンドとipv6 mldコマンドを使います。

       awplus(config)# interface vlan10,vlan20,vlan30
       awplus(config-if)# ipv6 pim sparse-mode
       awplus(config-if)# ipv6 mld
       awplus(config-if)# exit

4. Embedded RPを有効にします。これには、ipv6 pim rp embeddedコマンドを使います。

       awplus(config)# ipv6 pim rp embedded

   Note

   初期状態ではEmbedded RPが有効に設定されているため、特に設定を変更していない場合本手順は省略できます。

5. Embedded RPマルチキャストグループアドレスに対するランデブーポイント（RP）を静的に設定します。これにはipv6 pim rp-addressコマンドを使います。
   ここでは、ff7e:140:2001:db8:10:10:0000:0000 ～ ff7e:140:2001:db8:10:10:ffff:ffff のランデブーポイントとして、これらのアドレスに埋め込まれた 2001:db8:10:10::1 を使うように設定しています。

       awplus(config)# ipv6 access-list standard embedded permit ff7e:140:2001:db8:10:10::/96
       awplus(config)# ipv6 pim rp-address 2001:db8:10:10::1 embedded

   Note

   Embedded RPマルチキャストグループアドレスを使う場合はグループアドレスからRPアドレスを抽出できるため、非RPのPIM-SMv6ルーターでは ipv6 pim rp-addressコマンドによる静的 RP の設定は不要です。ただし、RPとして動作させるルーター（ここでは2001:db8:10:10::1）にだけは、ipv6 pim rp-addressコマンドで自身のインターフェースアドレスを指定する必要があります。これを忘れるとEmbedded RPが動作しないためご注意ください。

設定は以上です。

##### その他のルーター（非RP）

1. PIM-SMv6の動作に必要なPIM6サービスを有効にします。これにはservice pim6コマンドを使います。

       awplus(config)# service pim6

2. IPv6マルチキャストルーティングを有効化します。これにはipv6 multicast-routingコマンドを使います。

       awplus(config)# ipv6 multicast-routing

3. マルチキャストルーティングを行うすべてのインターフェースで、PIM-SMv6とMLD機能を有効にします。これにはipv6 pim sparse-modeコマンドとipv6 mldコマンドを使います。

       awplus(config)# interface vlan10,vlan20,vlan30
       awplus(config-if)# ipv6 pim sparse-mode
       awplus(config-if)# ipv6 mld
       awplus(config-if)# exit

4. Embedded RPを有効にします。これには、ipv6 pim rp embeddedコマンドを使います。

       awplus(config)# ipv6 pim rp embedded

   Note

   初期状態ではEmbedded RPが有効に設定されているため、特に設定を変更していない場合本手順は省略できます。

設定は以上です。

#### その他

マルチキャスト受信者（ホスト）だけが接続されており、PIM-SMv6ルーターが存在しない末端ネットワークのインターフェースでは、ipv6 pim sparse-modeコマンドでPIM-SMv6を有効化するときにpassiveオプションを指定することにより、PIM-SMv6パケットの送信を抑制できます。
たとえば、前記の各例において、vlan30にPIM-SMv6ルーターが存在しないのであれば、vlan30のみ次のような設定に変更することが可能です。

    awplus(config)# interface vlan30
    awplus(config-if)# ipv6 pim sparse-mode passive
    awplus(config-if)# ipv6 mld