SONiC について
SONiC(Software for Open Networking in the Cloud)は、LinuxベースのNOSです。2016年にMicrosoftによって開発され、当初はAzureクラウドデータセンター向けに作成されましたが、その後、MS社はソースコードをオープンし、業界での人気と採用が広がっているそうです。
ググってみたら、"Enterprise SONiC By XXX" は 勝手に使えなく、MS 社のトレードマークだそうです。
Enterprise SONiC By XXX なら、日本では以下 2 社の利用実績もあるって 近年の JANOG の講演会から聞きました。
- Enterprise SONiC By Broadcom
SONiCをLINEのClosネットワークに導入した話 - Enterprise SONiC Distribution by Edgecore
SONiC ZTPでデータセンターネットワークを作った話
目標
- GNS3 に Broadcom VS をインポート
- VS Interface の確認
- mgmt port
- front port
- ping 疎通
- Vlan config
- IP interface config
- ARP table
環境と事前準備
-
Broadcom SONiC Virtual Switch Image ダウンロード先
https://github.com/Broadcom/sonic-VirtualSwitch/releases/tag/3.1.2 -
- ゲスト OS:Ubuntu Linux (64 ビット)
- 互換性:ESXi 6.7 仮想マシン
GNS3 に Broadcom VS をインポート
- sonic-vs-3.1.2.gns3a を事前に何処かでダウンロード
- GNS3を開き、「file」->「Import appliance」->「sonic-vs-3.1.2.gns3a」を選択し、デフォルトの「Install the appliance on your local computer」を確認し、「next」をクリック
- デフォルトの「qemu-system-x86_64」を確認し、「next」をクリック
- Enterprise SONiC Distribution by Broadcom version 3.1.2 のステータスはReady to install になってるかどうかを確認
もし missing file になっている場合、事前に github 上ダウンロードした3.1.2 版のイメージを import する必要
Nextボタンを押すと、「The template available in the router category」の完了画面は表示する
- インポート完了!
VS Interface の確認
GNS3でSONiCを使うの記事を参考し、インターフェースについて、Community版の SONiC VS ならいくつかの罠がありそうで、まず VS 上のインターフェースを確認しましょう。
Interface
Broadcom SONiC VS
デフォルトの Interface status を show interface status
コマンドで確認してみると、、、
admin@brSONiC-1:~$ show interface statu
Interface Lanes Speed MTU Alias Vlan Oper Admin Type Asym PFC
----------- --------------- ------- ----- ------- ------ ------ ------- ------ ----------
Ethernet0 49 25G 9100 Eth1/1 routed down down N/A N/A
Ethernet1 50 25G 9100 Eth1/2 routed down down N/A N/A
Ethernet2 51 25G 9100 Eth1/3 routed down down N/A N/A
Ethernet3 52 25G 9100 Eth1/4 routed down down N/A N/A
Ethernet4 57 25G 9100 Eth1/5 routed down down N/A N/A
Ethernet5 58 25G 9100 Eth1/6 routed down down N/A N/A
Ethernet6 59 25G 9100 Eth1/7 routed down down N/A N/A
Ethernet7 60 25G 9100 Eth1/8 routed down down N/A N/A
Ethernet8 61 25G 9100 Eth1/9 routed down down N/A N/A
Ethernet9 62 25G 9100 Eth1/10 routed down down N/A N/A
Ethernet10 63 25G 9100 Eth1/11 routed down down N/A N/A
Ethernet11 64 25G 9100 Eth1/12 routed down down N/A N/A
Ethernet12 77 25G 9100 Eth1/13 routed down down N/A N/A
Ethernet13 78 25G 9100 Eth1/14 routed down down N/A N/A
Ethernet14 79 25G 9100 Eth1/15 routed down down N/A N/A
Ethernet15 80 25G 9100 Eth1/16 routed down down N/A N/A
Ethernet16 85 25G 9100 Eth1/17 routed down down N/A N/A
Ethernet17 86 25G 9100 Eth1/18 routed down down N/A N/A
Ethernet18 87 25G 9100 Eth1/19 routed down down N/A N/A
Ethernet19 88 25G 9100 Eth1/20 routed down down N/A N/A
Ethernet20 93 25G 9100 Eth1/21 routed down down N/A N/A
Ethernet21 94 25G 9100 Eth1/22 routed down down N/A N/A
Ethernet22 95 25G 9100 Eth1/23 routed down down N/A N/A
Ethernet23 96 25G 9100 Eth1/24 routed down down N/A N/A
Ethernet24 13 25G 9100 Eth1/25 routed down down N/A N/A
Ethernet25 14 25G 9100 Eth1/26 routed down down N/A N/A
Ethernet26 15 25G 9100 Eth1/27 routed down down N/A N/A
Ethernet27 16 25G 9100 Eth1/28 routed down down N/A N/A
Ethernet28 21 25G 9100 Eth1/29 routed down down N/A N/A
Ethernet29 22 25G 9100 Eth1/30 routed down down N/A N/A
Ethernet30 23 25G 9100 Eth1/31 routed down down N/A N/A
Ethernet31 24 25G 9100 Eth1/32 routed down down N/A N/A
Ethernet32 29 25G 9100 Eth1/33 routed down down N/A N/A
Ethernet33 30 25G 9100 Eth1/34 routed down down N/A N/A
Ethernet34 31 25G 9100 Eth1/35 routed down down N/A N/A
Ethernet35 32 25G 9100 Eth1/36 routed down down N/A N/A
Ethernet36 97 25G 9100 Eth1/37 routed down down N/A N/A
Ethernet37 98 25G 9100 Eth1/38 routed down down N/A N/A
Ethernet38 99 25G 9100 Eth1/39 routed down down N/A N/A
Ethernet39 100 25G 9100 Eth1/40 routed down down N/A N/A
Ethernet40 105 25G 9100 Eth1/41 routed down down N/A N/A
Ethernet41 106 25G 9100 Eth1/42 routed down down N/A N/A
Ethernet42 107 25G 9100 Eth1/43 routed down down N/A N/A
Ethernet43 108 25G 9100 Eth1/44 routed down down N/A N/A
Ethernet44 113 25G 9100 Eth1/45 routed down down N/A N/A
Ethernet45 114 25G 9100 Eth1/46 routed down down N/A N/A
Ethernet46 115 25G 9100 Eth1/47 routed down down N/A N/A
Ethernet47 116 25G 9100 Eth1/48 routed down down N/A N/A
Ethernet48 121,122,123,124 100G 9100 Eth1/49 routed down down N/A N/A
Ethernet52 125,126,127,128 100G 9100 Eth1/50 routed down down N/A N/A
Ethernet56 69,70,71,72 100G 9100 Eth1/51 routed down down N/A N/A
Ethernet60 65,66,67,68 100G 9100 Eth1/52 routed down down N/A N/A
Ethernet64 1,2,3,4 100G 9100 Eth1/53 routed down down N/A N/A
Ethernet68 33,34,35,36 100G 9100 Eth1/54 routed down down N/A N/A
Ethernet72 5,6,7,8 100G 9100 Eth1/55 routed down down N/A N/A
Ethernet76 41,42,43,44 100G 9100 Eth1/56 routed down down N/A N/A
なんと、トータル 56 ポートがあります。多分この VS は downlink 25Gx48 / uplink 100Gx8 のスイッチだと想定しているでしょう。
だが、GNS3上の操作は eth0 + Ethernet0~8 、トータル 10 ポートしかありません。
GNS3上のポート | SONiC仮想マシン内でのポート |
---|---|
eth0 | eth0 |
Ethernet0 | Ethernet0 |
Ethernet1 | Ethernet1 |
Ethernet2 | Ethernet2 |
... | ... |
Ethernet8 | Ethernet8 |
Broadcom SONiC VS のポート数は少ないですが、Community SONiC VS のような GNS3 と VS の名称不一致の現象がないですね。Community 版より使いやすいでしょう。
ping 疎通を検証!
以下のようにトポロジーを作図します。
以下のコンフィグを想定
スイッチ名 | VLAN ID | IPアドレス | ポート | ポートのタグ付け |
---|---|---|---|---|
fanout | 1 | Vlan1: 192.168.1.1/24 | Ethernet0, Ethernet1 | タグなし |
brSONiC-1 | 10 | Vlan10: 172.16.10.1/24 | Ethernet0 | タグ付き |
brSONiC-1 | - | mgmt: 192.168.1.10/24 | eth0 | - |
brSONiC-2 | 10 | Vlan10: 172.16.10.2/24 | Ethernet0 | タグ付き |
brSONiC-2 | - | mgmt: 192.168.1.11/24 | eth0 | - |
また、default hostname は sonic
のため、事前に以下のコマンドでそれぞれの hostname を変更しときます。
sudo config hostname ${new_hostname}
fanout
config
admin@fanout:~$ sudo config interface startup Ethernet0
admin@fanout:~$ sudo config interface startup Ethernet1
admin@fanout:~$ sudo config vlan add 1
admin@fanout:~$ sudo config vlan member add 1 -u Ethernet0
admin@fanout:~$ sudo config vlan member add 1 -u Ethernet1
admin@fanout:~$ sudo config interface ip add Vlan1 192.168.1.1/24
interface status
admin@fanout:~$ show interface status |head -n 5
Interface Lanes Speed MTU Alias Vlan Oper Admin Type Asym PFC
----------- --------------- ------- ----- ------- ------ ------ ------- ------ ----------
Ethernet0 49 25G 9100 Eth1/1 trunk up up N/A N/A
Ethernet1 50 25G 9100 Eth1/2 trunk up up N/A N/A
Ethernet2 51 25G 9100 Eth1/3 routed down down N/A N/A
ip interface
admin@fanout:~$ show ip interfaces
Interface IPv4 address/mask Master Admin/Oper BGP Neighbor Neighbor IP Flags
----------- ------------------- -------- ------------ -------------- ------------- -------
Vlan1 192.168.1.1/24 up/up N/A N/A
docker0 240.127.1.1/24 up/down N/A N/A
lo 127.0.0.1/8
Vlan brief
admin@fanout:~$ show vlan brief
+-----------+----------------+-----------+----------------+-----------------------+
| VLAN ID | IP Address | Ports | Port Tagging | DHCP Helper Address |
+===========+================+===========+================+=======================+
| 1 | 192.168.1.1/24 | Ethernet0 | untagged | |
| | | Ethernet1 | untagged | |
+-----------+----------------+-----------+----------------+-----------------------+
brSONiC-1
config
admin@fanout:~$ sudo config interface startup Ethernet0
admin@fanout:~$ sudo config vlan add 10
admin@fanout:~$ sudo config vlan member add 10 Ethernet0
admin@fanout:~$ sudo config interface ip add Vlan10 172.16.10.1/24
admin@fanout:~$ sudo config interface ip add eth0 192.168.1.10/24
Interface status
admin@brSONiC-1:~$ show interface status |head -n 5
Interface Lanes Speed MTU Alias Vlan Oper Admin Type Asym PFC
----------- --------------- ------- ----- ------- ------ ------ ------- ------ ----------
Ethernet0 49 25G 9100 Eth1/1 trunk up up N/A N/A
Ethernet1 50 25G 9100 Eth1/2 routed down down N/A N/A
Ethernet2 51 25G 9100 Eth1/3 routed down down N/A N/A
ip interface
admin@brSONiC-1:~$ show ip interfaces
Interface IPv4 address/mask Master Admin/Oper BGP Neighbor Neighbor IP Flags
----------- ------------------- -------- ------------ -------------- ------------- -------
Vlan10 172.16.10.1/24 up/up N/A N/A
docker0 240.127.1.1/24 up/down N/A N/A
eth0 192.168.1.10/24 up/up N/A N/A
lo 127.0.0.1/8
Vlan brief
admin@brSONiC-1:~$ show vlan brief
+-----------+----------------+-----------+----------------+-----------------------+
| VLAN ID | IP Address | Ports | Port Tagging | DHCP Helper Address |
+===========+================+===========+================+=======================+
| 10 | 172.16.10.1/24 | Ethernet0 | tagged | |
+-----------+----------------+-----------+----------------+-----------------------+
brSONiC-2
config
admin@fanout:~$ sudo config interface startup Ethernet0
admin@fanout:~$ sudo config vlan add 10
admin@fanout:~$ sudo config vlan member add 10 Ethernet0
admin@fanout:~$ sudo config interface ip add Vlan10 172.16.10.2/24
admin@fanout:~$ sudo config interface ip add eth0 192.168.1.11/24
Interface status
admin@brSONiC-2:~$ show interface status |head -n 5
Interface Lanes Speed MTU Alias Vlan Oper Admin Type Asym PFC
----------- --------------- ------- ----- ------- ------ ------ ------- ------ ----------
Ethernet0 49 25G 9100 Eth1/1 trunk up up N/A N/A
Ethernet1 50 25G 9100 Eth1/2 routed down down N/A N/A
Ethernet2 51 25G 9100 Eth1/3 routed down down N/A N/A
ip interface
admin@brSONiC-2:~$ show ip interfaces
Interface IPv4 address/mask Master Admin/Oper BGP Neighbor Neighbor IP Flags
----------- ------------------- -------- ------------ -------------- ------------- -------
Vlan10 172.16.10.2/24 up/up N/A N/A
docker0 240.127.1.1/24 up/down N/A N/A
eth0 192.168.1.11/24 up/up N/A N/A
lo 127.0.0.1/8
Vlan brief
admin@brSONiC-2:~$ show vlan brief
+-----------+----------------+-----------+----------------+-----------------------+
| VLAN ID | IP Address | Ports | Port Tagging | DHCP Helper Address |
+===========+================+===========+================+=======================+
| 10 | 172.16.10.2/24 | Ethernet0 | tagged | |
+-----------+----------------+-----------+----------------+-----------------------+
検証結果
お互いに ping させて、show arp
コマンドで確認すると、ARP 学習できましたね。
最後に
以上で、今日の目的も全部達成しましたね。
どのように SONiC VS を利用するのかすでに多くの記事がありますが、実際に動けるか試した記事はまだまだ少ないです。今後、GNS3を使用して、以下の機能を試し記事にしてみようと考えています。
L2機能:
- LACP
L3機能:
- Static route
- BGP
- OSPF
セキュリティ / システム / 管理機能:
- CACL
- AAA
システム / 管理 SNMP サポート機能:
- Syslog
- NTP
- DHCPリレー
- ログファイル
- 管理フレームワーク
...など
長く書いてしまいましたが、ここまで参考していただいてありがとうございます。
初めて Qiita での投稿で、今後ともよろしくお願いします!
参考
How to run vSONiC on GNS3
SONiC github
Setting up SONiC on GNS3
SONiC CLI について