VyOSでVXLANを設定してみた（前編 マルチキャスト編）

# はじめに
　ネットワークスペシャリスト試験（ネスペ）の令和6年（2024年）春試験午後Ⅱ問1で出題されたVXLANの構成を，VyOSとCatalystで作ってみました。
　本記事で作ったのは，問題文前半の「現行の検証ネットワーク」の一部です。アンダーレイのL3ネットワークをOSPF＋マルチキャスト（BUMトラフィック用）で構成し，オーバレイのL2ネットワークをVXLANで構成する方式です。
 
# 問題文の構成図

出典：IPAに掲載された[過去問](https://www.ipa.go.jp/shiken/mondai-kaiotu/2024r06.html#haru_nw)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/54b941cb-9efa-118e-fd0d-5ffe4040b2d1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/ce49a666-25e8-30fa-296a-dbd87a0488f9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/5c9983f3-71df-707c-4ed0-ca84c7eef15c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/f14f4ee7-83dd-bc10-908f-29d235dd0012.png)


# 今回作った構成図
問題文の構成図のうち，最低限のVXLAN動作を確認できる構成に抜粋しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/14519154-8f9d-5acc-bda6-2cf7b9470672.png)



# 材料
- Leaf用L3SW代わりの[VyOS1.5](https://vyos.net/get/nightly-builds/)(vyos-1.5-rolling-202405070019-amd64.iso)
- Spine用L3SW Catalyst3850(ipserviceライセンス），ヤフオクで入手(\12,100+送料\1,800)


# 構成の補足
- SpineのL3SW01部分もVyOSを使いたかったのですがCatalystを使いました。[changineer.infoさんのサイト](https://changineer.info/network/vyatta/vyatta_tunnel_vxlan.html)でも「VyOS 1.4ではマルチキャストルーティングに不具合がある」との指摘がありました。今回はVyOS1.5ですがやはりうまく動かせず，マルチキャスト構成のSpineにVyOSを使うのは現時点ではよくなさそうです。
- 「今回作った構成図」の要素は全てConfigに反映済みですが，「今回作った構成図」に載ってない設定（問題文に合わせた他のVNIやVLANなど）もあるのでご注意ください。
- VyOSはProxmox上で稼働させましたが，Proxmoxの説明は本記事では省略します。（ちなみに，LinuxBridgeをセグメント毎に作成し，VyOSの仮想NICや物理NICと関連付けしました）
- 問題文ではL3SW01とL3SW02がランデブーポイント（RP）なので，問題文に合わせるとL3SW11とL3SW31にはRPを2箇所設定しないといけないです。しかし，VyOSでは同じマルチキャストサブネットに対し複数のRPを設定できない仕様らしいのでL3SW11だけをRPとして指定しました。

# 設定


``` L3SW11(VyOS).conf
# VXLANインタフェースと，物理インタフェース(eth3)のタグVLANの関連付け
set interfaces bridge br110 member interface eth3.110
set interfaces bridge br110 member interface vxlan10010
set interfaces bridge br120 member interface eth3.120
set interfaces bridge br120 member interface vxlan10020
set interfaces bridge br130 member interface eth3.130
set interfaces bridge br130 member interface vxlan10030

# インタフェース毎にIPアドレスを設定
# MTUを1550にしたのは，VXLANパケット送出インタフェースには50Byteの
# VXLANオーバヘッド分を付与するため（設定しないと，VXLANのsource-interface
# 設定で怒られる
set interfaces ethernet eth1 address '10.1.0.2/30'
set interfaces ethernet eth1 mtu '1550'
set interfaces ethernet eth2 address '10.2.0.2/30'
set interfaces ethernet eth2 mtu '1550'

# 物理インタフェースに仮想インタフェース（＝VLAN）を設定
set interfaces ethernet eth3 vif 110
set interfaces ethernet eth3 vif 120
set interfaces ethernet eth3 vif 130

# Loopbackアドレス。VyOSの場合dummyインタフェースの方が良いらしいですが
# 今回は敢えてLoopbackで。
set interfaces loopback lo address '10.0.0.11/32'

# VXLAN設定
# see https://docs.vyos.io/en/equuleus/configuration/interfaces/vxlan.html

# VNI10010の設定
# BUMトラフィック用のマルチキャストアドレス
set interfaces vxlan vxlan10010 group '239.0.0.1'
# VXLANパケットの送出元IPアドレス
set interfaces vxlan vxlan10010 source-address '10.0.0.11'
# VXLANパケットの送出元インタフェース
set interfaces vxlan vxlan10010 source-interface 'eth1'
set interfaces vxlan vxlan10010 vni '10010'

# VNI10020の設定
set interfaces vxlan vxlan10020 group '239.0.0.2'
set interfaces vxlan vxlan10020 source-address '10.0.0.11'
set interfaces vxlan vxlan10020 source-interface 'eth1'
set interfaces vxlan vxlan10020 vni '10020'

# VNI10030の設定
set interfaces vxlan vxlan10030 group '239.0.0.3'
set interfaces vxlan vxlan10030 source-address '10.0.0.11'
set interfaces vxlan vxlan10030 source-interface 'eth1'
set interfaces vxlan vxlan10030 vni '10030'

# OSPF設定
set protocols ospf area 0 network '10.1.0.0/30'
set protocols ospf area 0 network '10.0.0.11/32'
set protocols ospf area 0 network '10.2.0.0/30'
set protocols ospf maximum-paths '4'
set protocols ospf parameters router-id '10.0.0.11'

# マルチキャストルーティング（PIM-SMの設定）
set protocols pim interface eth1
set protocols pim interface eth2
set protocols pim interface lo
set protocols pim rp address 10.0.0.1 group '239.0.0.0/24'

set system host-name 'L3SW11'
```

``` L3SW31(VyOS).conf
# 設定の意図はL3SW11と同じなので詳細は省略
set interfaces bridge br310 member interface eth3.310
set interfaces bridge br310 member interface vxlan10010
set interfaces bridge br320 member interface eth3.320
set interfaces bridge br320 member interface vxlan10040
set interfaces bridge br330 member interface eth3.330
set interfaces bridge br330 member interface vxlan10030
set interfaces ethernet eth0 address '192.168.0.31/24'
set interfaces ethernet eth1 address '10.1.0.18/30'
set interfaces ethernet eth1 mtu '1550'
set interfaces ethernet eth2 address '10.2.0.18/30'
set interfaces ethernet eth2 mtu '1550'
set interfaces ethernet eth3 vif 310
set interfaces ethernet eth3 vif 320
set interfaces ethernet eth3 vif 330
set interfaces loopback lo address '10.0.0.31/32'
set interfaces vxlan vxlan10010 group '239.0.0.1'
set interfaces vxlan vxlan10010 source-address '10.0.0.31'
set interfaces vxlan vxlan10010 source-interface 'eth1'
set interfaces vxlan vxlan10010 vni '10010'
set interfaces vxlan vxlan10030 group '239.0.0.3'
set interfaces vxlan vxlan10030 source-address '10.0.0.31'
set interfaces vxlan vxlan10030 source-interface 'eth1'
set interfaces vxlan vxlan10030 vni '10030'
set interfaces vxlan vxlan10040 group '239.0.0.4'
set interfaces vxlan vxlan10040 source-address '10.0.0.31'
set interfaces vxlan vxlan10040 source-interface 'eth1'
set interfaces vxlan vxlan10040 vni '10040'
set protocols ospf area 0 network '10.1.0.16/30'
set protocols ospf area 0 network '10.2.0.16/30'
set protocols ospf area 0 network '10.0.0.31/32'
set protocols ospf maximum-paths '4'
set protocols ospf parameters router-id '10.0.0.31'
set protocols pim interface eth1
set protocols pim interface eth2
set protocols pim interface lo
set protocols pim rp address 10.0.0.1 group '239.0.0.0/24'
set system host-name 'L3SW31'
```

``` L3SW01(Catalyst3850).conf
!
hostname L3SW01
!
ip routing
!
ip multicast-routing
!
! VyOS側のMTUに合わせて1550に設定。これを設定しておかないと
! OSPFでneighborが張れない
system mtu 1550
!
!
interface Loopback0
 ip address 10.0.0.1 255.255.255.255
!
! L3SW11を接続する物理ポート
interface GigabitEthernet1/0/1
 switchport access vlan 511
 switchport mode access
 no cdp enable
 spanning-tree portfast
!
interface GigabitEthernet1/0/2
 switchport access vlan 512
 switchport mode access
 no cdp enable
 spanning-tree portfast
!
interface GigabitEthernet1/0/3
 switchport access vlan 513
 switchport mode access
 no cdp enable
 spanning-tree portfast
!
interface GigabitEthernet1/0/4
 switchport access vlan 514
 switchport mode access
 no cdp enable
 spanning-tree portfast
!
! L3SW31を接続する物理ポート
interface GigabitEthernet1/0/5
 switchport access vlan 515
 switchport mode access
 no cdp enable
 spanning-tree portfast
!
interface GigabitEthernet1/0/6
 switchport access vlan 516
 switchport mode access
 no cdp enable
 spanning-tree portfast
!
! L3SW11を接続するVLAN
interface Vlan511
 ip address 10.1.0.1 255.255.255.252
 ip pim sparse-mode
!
interface Vlan512
 ip address 10.1.0.5 255.255.255.252
 ip pim sparse-mode
!
interface Vlan513
 ip address 10.1.0.9 255.255.255.252
 ip pim sparse-mode
!
interface Vlan514
 ip address 10.1.0.13 255.255.255.252
 ip pim sparse-mode
!
! L3SW11を接続するVLAN
interface Vlan515
 ip address 10.1.0.17 255.255.255.252
 ip pim sparse-mode
!
interface Vlan516
 ip address 10.1.0.21 255.255.255.252
 ip pim sparse-mode
!
router ospf 100
 router-id 10.0.0.1
 network 10.0.0.1 0.0.0.0 area 0
 network 10.1.0.0 0.0.0.3 area 0
 network 10.1.0.4 0.0.0.3 area 0
 network 10.1.0.8 0.0.0.3 area 0
 network 10.1.0.12 0.0.0.3 area 0
 network 10.1.0.16 0.0.0.3 area 0
 network 10.1.0.20 0.0.0.3 area 0
!
ip pim rp-address 10.0.0.1
```

# 結果
無事にvm11からvm31にPingが飛びました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/9eab2941-0d64-c2e0-428a-92bee5c42195.png)


# （おまけ）VyOSの確認コマンド
```
show interfaces vxlan vxlan100XX
sudo bridge fdb show dev vxlan10010
show ip pim neighbor
```

# （おまけ）Catalystの確認コマンド
```
show ip mroute
show ip pim neighbor
```

# 最後に
記事にするとあっさりできたように見えますが，丸1.5日かかりました。
特にL3SW01をVyOSで作ろうとして挫折するまでが長かった。
[後編](https://qiita.com/gaichi/items/1aa1d1c9e622f90341b1)では，問題文後半で出題されたEVPNを構築してみます。

# 参考
https://qiita.com/yas-nyan/items/c392f6f84504b1cc4381

https://changineer.info/network/vyatta/vyatta_tunnel_vxlan.html

https://docs.vyos.io/en/latest/configuration/interfaces/vxlan.html