VyOSでマルチキャスト 動画配信

VyOSでマルチキャストによる動画配信を簡単に検証したので、まとめます。
* 検証環境
    * VyOS 1.4.0-rolling-202206290841 (sagitta)
    * 動画テスト用：[VLC Media Player](https://www.videolan.org/vlc/index.ja.html)
    * Cent OS 7.4
# マルチキャストとは
<font color="purple">**1つの送信元から複数の宛先へ**</font>、UDPベースで<font color="purple"> **同じデータを送る通信**</font>。
（例：リアルタイム 映像配信など）
配信にはクラスDアドレス（224.0.0.0 ～ 239.255.255.255）が使用され、サーバが配信するデータがネットワーク上で複製されてクライアントに到達する。サーバから送信されたデータをクライアントまで転送する為、マルチキャスト ルーティング が必要となる。
マルチキャスト ルータ が使用するプロトコルは2種類。
* <font color="blue">**IGMP**</font>：マルチキャスト クライアント が、マルチキャスト ルータ に自身の存在を通知する為のプロトコル（IGMP Join）
* <font color="blue">**PIM**</font>：マルチキャスト ルータ 間でのマルチキャスト クライアント の経路情報の交換/維持の為のプロトコル。一般的に <font color="red">**RP（ランデブーポイント）**</font>と呼ばれるルータが中心となり、経路ツリーを維持する。（PIM-SMモード）

# VyOSでの マルチキャストルーティング
今回はVyOSを使用して[こちら](
https://docs.vyos.io/en/equuleus/configuration/protocols/igmp.html
) を参照の上、マルチキャストルーティングを実施しました。
* **VyOS マルチキャスト ルーティングコマンド**
    * <font color="green">set protocols pim interface</font> :  PIMネイバーとの通信用に、インターフェースでPIMを有効化
    * <font color="green">set protocols pim rp address <address> group </font> :  IGMP Joinの送信先となるRPと、対象のネットワーク範囲を指定
    * <font color="green">set protocols igmp interface</font> :  インターフェースでIGMPを有効化
  
# マルチキャスト ルーティング 構成図
[こちら](https://docs.vyos.io/en/equuleus/configuration/protocols/igmp.html) の構成図の内容に基本的に揃えました。（Router2 の配下にマルチキャスト サーバ、Router1 の配下にマルチキャスト クライアントがあり、Router3 がRPです。）　
![multicast-basic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251519/113f7c5c-03b7-4a99-3b80-3fc5579b7fc4.png)

# マルチキャスト ルーティング コマンド設定例
上記構成にて実施した設定コマンドのサンプルです。
<font color="grey">※ Router3のインターフェースを一部変更しています</font> 
```
# Router1 (マルチキャスト クライアント側)
set interfaces ethernet eth1 address '100.64.0.1/24'
set interfaces ethernet eth2 address '172.16.0.2/24'
set protocols ospf area 0 network '172.16.0.0/24'
set protocols ospf area 0 network '100.64.0.0/24'
set protocols igmp interface eth1
set protocols pim interface eth1
set protocols pim interface eth2
set protocols pim rp address 172.16.255.1 group '239.1.1.0/24

# Router3 (RP)
set interfaces dummy dum0 address '172.16.255.1/24'
set interfaces ethernet eth1 address ‘172.16.0.1/24’
set interfaces ethernet eth2 address '172.16.1.1/24'
set protocols ospf area 0 network '172.16.0.0/24'
set protocols ospf area 0 network '172.16.255.0/24'
set protocols ospf area 0 network '172.16.1.0/24'
set protocols pim interface dum0
set protocols pim interface eth1
set protocols pim interface eth2
set protocols pim rp address 172.16.255.1 group '239.1.1.0/24'
```
# マルチキャスト 動画配信の確認
[こちら](https://www.infraexpert.com/study/multicastx04.html) を参考に、CentOS 7.4 上にVLC Media Playerをインストールし、動画配信を実施しました。配信用のMP4動画 は[こちら](
https://www.home-movie.biz/free_movie.html
) を利用させていただきました。
実行結果として、マルチキャスト サーバからマルチキャスト クライアントに動画が配信される様子が確認出来ました（クライアント側で、マルチキャストアドレス 239.1.1.1 アドレスにて[RTP](https://www.fenet.jp/infla/column/network/rtp%E3%81%AFudp%E4%B8%8A%E3%81%A7%E5%8B%95%E4%BD%9C%E3%81%99%E3%82%8B%EF%BC%815%E3%81%A4%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF%E8%A7%A3%E8%AA%AC%E3%82%84%E6%B4%BB%E7%94%A8%E4%BA%8B%E4%BE%8B%E3%82%92/) により動画を受信）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251519/8aed8ae3-f389-47dd-1fa4-37a3d7eb71db.png)

# マルチキャスト 確認コマンド
以下 いくつかshowコマンドにて、マルチキャストルーティング の動作を確認しました。
```
# Router1 VyOSマルチキャストルーティングテーブルの確認（Sparseモードで動作）
vyos@Router-1:~$ show ip multicast route
IP Multicast Routing Table
Flags: S - Sparse, C - Connected, P - Pruned
       R - SGRpt Pruned, F - Register flag, T - SPT-bit set
Source          Group           Flags    Proto  Input            Output           TTL  Uptime
100.64.0.2      239.1.1.1       SP       none   eth1             none             0    --:--:--

# PIMが動作するインターフェースを確認
vyos@Router-1:~$ show ip pim interfaces
Interface         State          Address  PIM Nbrs           PIM DR  FHR IfChannels
eth1                 up       100.64.0.1         4       172.16.1.2    0          0
eth2                 up       172.16.0.2         4       172.16.1.2    0          0
pimreg               up          0.0.0.0         0            local    0          0

# PIMネイバーを確認
vyos@Router-1:~$ show ip pim neighbor
Interface                Neighbor    Uptime  Holdtime  DR Pri
eth1                   172.16.0.1  00:13:54  00:01:20       1
eth1                   172.16.1.1  00:13:54  00:01:20       1
eth1                     10.0.0.1  00:13:54  00:01:20       1
eth1                   172.16.1.2  00:13:54  00:01:20       1
eth2                     10.0.0.1  00:13:54  00:01:20       1
eth2                   172.16.1.2  00:13:54  00:01:20       1
eth2                   172.16.0.1  00:13:54  00:01:20       1
eth2                   172.16.1.1  00:13:54  00:01:20       1
```


# 参照元 URL
* [【図解】初心者にも分かるマルチキャストの仕組み～UDPの理由、メリット・デメリット、マルチキャストアドレス一覧～](https://milestone-of-se.nesuke.com/nw-advanced/multicast/multicast-summary/#:)
* [マルチキャストルーティングの設定(前編)](https://news.mynavi.jp/techplus/article/networkswitch-17/)
* [Multicast — VyOS 1.3.x (equuleus) documentation](https://docs.vyos.io/en/equuleus/configuration/protocols/igmp.html)
* [VLC media player - セットアップ（ マルチキャストサーバ ）
](https://www.infraexpert.com/study/multicastx04.html)
* [PIM-SMの設定と確認コマンド](https://www.n-study.com/ip-multicast/pim-sm-configuration/)