NSX-T Multicast

今回はNSX-Tのバージョン3.0.0からサポートしているMulticastの検証証跡をまとめます。

 

概要

PIM-SMとIGMPについて

最初にマルチキャストで使われる用語を整理します。

マルチキャストトラフィックの送信元をSender、マルチキャストトラフィックを受信したい端末をReceiverと呼びます。また、Senderと直接接続しているルータをFHR(Fast Hop Router)、Receiverと直接接続しているルータをLHR(Last Hop Router)と呼びます。

マルチキャストではRP(Rendezvous Point)と呼ばれる特殊なルータが存在し、事前に各ルータはRPとして動作するルータのアドレスを認識しておく必要があります。各ルータにRPのアドレスを認識させる方法は2種類存在します。1つ目はStatic RPと呼ばれており、各ルータに手動でRPのアドレスを設定します。2つ目はBSR(Bootstrap Router)と呼ばれており、各ルータ間で動的にRPのアドレスをやり取りします。

 

ここから、SenderからReceiverにマルチキャストトラフィックが転送されるまでの流れを説明します。

まず、ReceiverはIGMP(Internet Group Management Protocol)を使用して、LHRに対して、受信したいマルチキャストトラフィックのグループアドレスを通知します。この際に送信されるメッセージをIGMP Membership Reportと呼びます。
LHRはIGMP Membershipを受信後、RPの方向に対して、PIM(Protocol Independent Multicast)を使用して、Receiverが受信したいマルチキャストトラフィックのグループアドレスを通知します。この際に送信させるメッセージをPIM Joinと呼びます。(正式な名称はPIM Join/Pruneになります。)
また、PIMにはPIM-DM(PIM Dense Mode)、PIM-SM(Sparse Mode)、Bidir-PIM(Bidirectional PIM)の3種類が存在します。ここでは、NSX-TでサポートしているPIM-SMの動作を説明します。

PIM Joinが転送される過程で、各ルータにはマルチキャストトラフィックを転送するためのルート情報である(*,G)エントリが生成されます。*はマルチキャストトラフィックの送信元のアドレスが不明なことを示します。

 

この後、Senderがマルチキャストトラフィックを送信したとします。

FHRはマルチキャストパケットを受信後、マルチキャストパケットをPIMでカプセル化して、ユニキャストでRPに転送します。RPはカプセル化されたパケットを受信後、カプセル化を解除し、LHR側にマルチキャストパケットを転送します。また、この時点で、RP~LHR間のルータとFHRに(S,G)エントリが生成されます。

 

また、RPはマルチキャストパケットの送信元の方向に対して、PIM Joinを送信します。

 

この結果、FHR~LHR間のルータに(*,G)エントリや(S,G)エントリが生成され、途中でのカプセル化無しで、FHRからLHRに対してマルチキャストパケットが転送可能です。
このFHRからLHRまでのマルチキャストパケットが流れる経路をDistribution Treeと呼びます。

 

上記の場合、RPとLHRは直接接続されていますが、RPはLHRにマルチキャストパケットを直接転送していないため、通信経路が非効率なことが分かります。この様な状況では、LHRは通信経路の最適化を試みます。この処理をSwitchoverと呼びます。(緑のトラフィックをPIM Pruneと呼びます。)

 

この結果、FHRからLHRまでのマルチキャストパケットの転送経路が最適化されます。

 

RPF Checkについて

届いたマルチキャストパケットを、無条件でLHR側に転送してしまうと、Receiverが同じパケットを複数受信してしまう可能性があります。

 

上記の問題を解決するために、ルータはマルチキャストパケットを受信した際、RPF(Reverse Path Forwarding) Checkと呼ばれる処理を実施します。RPF Checkでは、以下が異なる場合、マルチキャストパケットをLHR側に転送せずに破棄します。

  • マルチキャストパケットを受信したインタフェース
  • マルチキャストパケットの送信元アドレスへのネクストホップインタフェース

 

NSX-Tのマルチキャストについて

NSX-Tのマルチキャストの注意点は以下になります。

  • プロトコルはPIM-SM、IGMPv2のみサポート(PIM-DM、Bidier-PIM、IGMPv3は未サポート)
  • RPの学習方法はStatic RP、BSRのみをサポート(Auto-RPは未サポート)
  • Tier-0 GWのみマルチキャストをサポート(Tier-1 GWはマルチキャストを未サポート)
  • RPF Checkにはデフォルトルートを使用不可(バージョン3.0.1からは可)

 

検証結果

検証内容、構成

Tier-0 GWでSegment 1を収容します。
NSX EdgeにTier-0 GWのSRを配置し、物理ネットワークとNSX-Tの仮想ネットワークを接続します。

Tier-0 GWとR2でPIM-SMを動作させます。
R2の20.0.0.2/32をRPとして使用します。
Tier-0 GWとR2ではRPのアドレスを手動で指定します。

Segment 1の仮想マシンを230.1.1.1に参加させます。
R3から230.1.1.1宛のトラフィックを送信します。

 

ネットワーク機器のCLIの設定


ip multicast-routing distributed
!
interface Loopback0
 ip address 20.0.0.2 255.255.255.255
!
interface GigabitEthernet2
 ip address 20.1.1.100 255.255.255.0
 ip pim sparse-mode
!
interface GigabitEthernet3
 ip address 20.2.2.2 255.255.255.0
 ip pim sparse-mode
!
ip pim rp-address 20.0.0.2
!
ip route 0.0.0.0 0.0.0.0 20.1.1.1
            


interface GigabitEthernet2
 ip address 20.2.2.3 255.255.255.0
!
ip route 0.0.0.0 0.0.0.0 20.2.2.2
            

 

Multicastの設定

IGMP Profileの設定

IGMP Profileにおいて、IGMPの各種タイマーを設定します。

 

PIM Profileの設定

PIM Profileにおいて、RPのアドレスを指定します。

 

Tier-0 GWの設定

マルチキャストの有効化

最初にTier-0 GWでマルチキャストを有効にします。また、先程定義したIGMP ProfileとPIM Profileを適用します。
(ドキュメントを読みましたが、レプリケーションのマルチキャスト範囲が何のためのパラメータなのか分かりませんでした。使用しないマルチキャストアドレスの範囲を指定すればよいと思います。)

 

アップリンクでのPIMの有効化

物理ネットワーク側のルータとPIMのメッセージをやり取りするために、アップリンクでPIMを有効にします。

 

RPF Check用のスタティックルートの設定

受信したマルチキャストパケットに対するRPF Checkを成功させるために、マルチキャストの送信元アドレスにマッチするスタティックルートを設定します。

 

状態確認1(仮想マシン : グループ参加前 , R3 : トラフィック送信前)

IGMP/PIMの状態確認

IGMPが動作しているインタフェースはget igmp interfacesコマンドで確認可能です。Tier-0 GWのDRやSRのインタフェースでIGMPが動作していることが確認できます。

NSX Edge1

edge1(tier0_sr)> get igmp interfaces
Interface         State          Address  V  Querier  Query Timer    Uptime
downlink-327         up      169.254.0.2  2    local     00:00:27  01:06:13
downlink-355         up       10.1.1.254  2    local     00:00:27  01:06:13
uplink-325           up         20.1.1.1  2    local     00:00:27  157:37:04
            

 

PIMが動作しているインタフェースはget pim interfacesコマンドで確認可能です。Tier-0 GWのDRやSRのインタフェースでPIMが動作していることが確認できます。

NSX Edge1

edge1(tier0_sr)> get pim interfaces
Interface         State          Address  PIM Nbrs           PIM DR  FHR IfChannels
downlink-327         up      169.254.0.2         0            local    0          0
downlink-355         up       10.1.1.254         0            local    0          0
uplink-325           up         20.1.1.1         1       20.1.1.100    0          0
            

 

PIMのネイバーはget pim neighborsコマンドで確認可能です。Tier-0 GWのSRがR2とPIMネイバーを確立していることが確認できます。

NSX Edge1

edge1(tier0_sr)> get pim neighbors
Interface                Neighbor    Uptime  Holdtime  DR Pri
uplink-325             20.1.1.100  157:36:50  00:01:23       1
            

 

状態確認2(仮想マシン : グループ参加後 , R3 : トラフィック送信前)

Segment 1の仮想マシンを230.1.1.1に参加させます。

 

IGMP/PIMメッセージの確認

以下はSegment 1の仮想マシンが送信したIGMP Membership Reportのキャプチャになります。参加先のマルチキャストアドレスである230.1.1.1が格納されていることが確認できます。

 

以下はTier-0 GWのDRがSRに転送したIGMP Membership Reportのキャプチャになります。Geneveでカプセル化されていることが確認できます。

 

以下はTier-0 GWのSRがR2に送信したPIM Joinのキャプチャになります。
マルチキャストアドレスの230.1.1.1と、RPのアドレスの20.0.0.2が格納されていることが確認できます。

 

IGMP/PIMの状態確認

 

仮想マシンが参加したマルチキャストアドレスはget igmp membershipコマンドで確認可能です。Tier-0 GWのSRが230.1.1.1を認識していることが確認できます。

NSX Edge1

edge1(tier0_sr)> get igmp membership
Total IGMP groups: 2
Watermark warn limit(Not Set) : 0
Interface        Address         Group           Mode Timer    Srcs V Uptime
downlink-327     169.254.0.2     230.1.1.1       ---- 00:01:06    1 2 00:01:02
uplink-325       20.1.1.1        224.0.1.40      ---- 00:00:45    1 2 157:40:05
            

 

マルチキャストトラフィックを転送するためのルート情報はget mroute <マルチキャストアドレス>コマンドで確認可能です。Tier-0 GWのSRに(*,G)エントリが生成されていることが確認出来ます。

NSX Edge1

edge1(tier0_sr)> get mroute 230.1.1.1
IP Multicast Routing Table
Flags: S- Sparse, C - Connected, P - Pruned
       R - RP-bit set, F - Register flag

Source          Group           Flags   Proto  Input            Output           TTL  Uptime
*               230.1.1.1       SC      IGMP   uplink-325       pimreg           1    00:01:30
                                        IGMP                    downlink-327     1
            

 

PIMのネイバーはget pim neighborsコマンドで確認可能です。R2にも(*,G)エントリが生成されていることが確認できます。

R2

R2#show ip mroute 230.1.1.1

(*, 230.1.1.1), 00:01:41/00:02:52, RP 20.0.0.2, flags: S
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    GigabitEthernet2, Forward/Sparse, 00:01:41/00:02:52
            

 

状態確認3(仮想マシン : グループ参加後 , R3 : トラフィック送信後)

R3から230.1.1.1宛にトラフィックを送信します。

 

IGMP/PIMの状態確認

 

Tier-0 GWのSRとR2に(S,G)エントリが生成されていることが確認できます。

NSX Edge1

edge1(tier0_sr)> get mroute 230.1.1.1
IP Multicast Routing Table
Flags: S- Sparse, C - Connected, P - Pruned
       R - RP-bit set, F - Register flag

Source          Group           Flags   Proto  Input            Output           TTL  Uptime
*               230.1.1.1       SC      IGMP   uplink-325       pimreg           1    00:04:43
                                        IGMP                    downlink-327     1
20.2.2.3        230.1.1.1       S       STAR   uplink-325       downlink-327     1    00:01:35
            
R2

R2#show ip mroute 230.1.1.1

(*, 230.1.1.1), 00:07:39/00:02:54, RP 20.0.0.2, flags: SF
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    GigabitEthernet2, Forward/Sparse, 00:04:24/00:02:54

(20.2.2.3, 230.1.1.1), 00:01:16/00:01:43, flags: FT
  Incoming interface: GigabitEthernet3, RPF nbr 0.0.0.0
  Outgoing interface list:
    GigabitEthernet2, Forward/Sparse, 00:01:16/00:02:54
            

 

疎通確認

 

以下はTier-0 GWのSRがDRに転送した230.1.1.1宛のマルチキャストトラフィックのキャプチャになります。Geneveでカプセル化されていることが確認できます。

 

以下はTier-0 GWのDRがSegment 1の仮想マシンに転送した230.1.1.1宛のマルチキャストトラフィックのキャプチャになります。

コメント

タイトルとURLをコピーしました