はじめに
一日目の記事がやたら重くて申し訳なかったので、軽めの記事を書いてみます。よろしくお願いします。
なお、本記事での実行例はSONiC-VS (仮想スイッチ) masterイメージで実行したものになります。
SONiCは通常L3スイッチ(ルータ)として動作します
起動して、show interface status
を表示させると下記のようになっていると思います。
admin@sonic:~$ show int st
Interface Lanes Speed MTU FEC Alias Vlan Oper Admin Type Asym PFC
----------- --------------- ------- ----- ----- -------------- ------ ------ ------- ------ ----------
Ethernet0 25,26,27,28 40G 9100 rs fortyGigE0/0 routed down up N/A N/A
Ethernet4 29,30,31,32 40G 9100 rs fortyGigE0/4 routed down up N/A N/A
Ethernet8 33,34,35,36 40G 9100 rs fortyGigE0/8 routed down up N/A N/A
Ethernet12 37,38,39,40 40G 9100 rs fortyGigE0/12 routed down up N/A N/A
Ethernet16 45,46,47,48 40G 9100 rs fortyGigE0/16 routed down up N/A N/A
Vlan
のカラムがrouted
になっていますが、これはポートがL3ルーティングインタフェースだということを意味しています。
L2スイッチとして動かす方法
方法1 ひとつひとつ丹念に処理する
インタフェースにIPアドレスを振っていなければ、下記のような方法でVLANに所属させることでL2ポートとして振る舞うよう挙動を変更できます。
- VLANを作成する
- L2ポートにしたいインタフェース名を作成したVLANのメンバーにする
このときuntagged
を指定しておく - インタフェースの数だけ繰り返し
シェルで書くとこんなふうです。
sudo config vlan add 1000
for e in $(show int st|awk "/Ethernet/{print $1}"); do sudo config vlan member add 1000 $e --untagged; done
実行後のshow interface status
の結果はこうなります。
admin@sonic:~$ show int st
Interface Lanes Speed MTU FEC Alias Vlan Oper Admin Type Asym PFC
----------- --------------- ------- ----- ----- -------------- ------ ------ ------- ------ ----------
Ethernet0 25,26,27,28 40G 9100 rs fortyGigE0/0 trunk down up N/A N/A
Ethernet4 29,30,31,32 40G 9100 rs fortyGigE0/4 trunk down up N/A N/A
Ethernet8 33,34,35,36 40G 9100 rs fortyGigE0/8 trunk down up N/A N/A
Ethernet12 37,38,39,40 40G 9100 rs fortyGigE0/12 trunk down up N/A N/A
Ethernet16 45,46,47,48 40G 9100 rs fortyGigE0/16 trunk down up N/A N/A
Vlan
のカラムがtrunk
になっているのがわかると思います。
また、shwo vlan brief
を実行するとVLANタグが付与されない設定になっていることも確認できます。
admin@sonic:~$ show vlan brief
+-----------+--------------+-------------+----------------+-------------+
| VLAN ID | IP Address | Ports | Port Tagging | Proxy ARP |
+===========+==============+=============+================+=============+
| 1000 | | Ethernet0 | untagged | disabled |
| | | Ethernet4 | untagged | |
| | | Ethernet8 | untagged | |
| | | Ethernet12 | untagged | |
| | | Ethernet16 | untagged | |
うまく動作していることが確認できたら、設定を保存しておきましょう。
sudo config save -y
方法2 L2 Switch mode
実は公式wikiに、設定手順がステップバイステップで解説されています。
先ほど紹介した手順で考慮の足りなかったと思われる部分についても書かれています。
読めばいいと言えばいいのですが、(マルチASICのスイッチだったりdual ToRの場合を省いて)紹介します。
本記事執筆時点の内容を紹介しますが、今後のアップデートで内容が変わることがありますので、正確な手順は公式wikiをご参照いただければと思います。
1.マネジメントポートとホスト名を設定する
スイッチ実機でマネジメントポートに固定IPアドレスを用いる場合の例は下記。
cat <<EOF | sudo config reload /dev/stdin -y
{
"MGMT_INTERFACE": {
"eth0|10.3.147.46/23": {
"gwaddr": "10.3.146.1"
}
},
"DEVICE_METADATA": {
"localhost": {
"hostname": "sonic"
}
}
}
EOF
SONiC-VSの場合、マネジメントポートのIPアドレスをDHCPで取得するケースがあります。
その場合は下記。
cat <<EOF | sudo config reload /dev/stdin -y
{
"DEVICE_METADATA": {
"localhost": {
"hostname": "sonic"
}
}
}
EOF
実際に打ち込んでみるとこうなります。
admin@sonic:~$ cat <<EOF|sudo config reload /dev/stdin -y
> {
> "DEVICE_METADATA": {
> "localhost": {
> "hostname": "sonic"
> }
> }
> }
> EOF
Disabling container monitoring ...
Stopping SONiC target ...
Running command: /usr/local/bin/sonic-cfggen -j /etc/sonic/init_cfg.json -j /dev/stdin --write-to-db
Running command: /usr/local/bin/db_migrator.py -o migrate
Running command: /usr/local/bin/sonic-cfggen -d -y /etc/sonic/sonic_version.yml -t /usr/share/sonic/templates/sonic-environment.j2,/etc/sonic/sonic-environment
Restarting SONiC target ...
Enabling container monitoring ...
Reloading Monit configuration ...
Reinitializing monit daemon
admin@sonic:~$
2.MACアドレスを設定に書き込む
sudo sonic-cfggen -H --write-to-db
3. L2 Switch modeの設定を見てみる(やらなくてもOK)
-k
の後ろに書くのはSKUです。SONiC-VSであればForce10-S6000
がdefault skuになります。
sudo sonic-cfggen --preset l2 -p -H -k Force10-S6000
実行するとめっちゃたくさん表示されます。長いので頭の方だけ見せるとこんなふうです。
admin@sonic:~$ sudo sonic-cfggen --preset l2 -p -H -k Force10-S6000
{
"DEVICE_METADATA": {
"localhost": {
"hwsku": "Force10-S6000",
"platform": "x86_64-kvm_x86_64-r0",
"mac": "52:54:00:12:01:00"
}
},
"PORT": {
"Ethernet0": {
4. 設定をCONFIG_DBに読み込ませる
-k
の後ろに書くのはSKUです。SONiC-VSであればForce10-S6000
がdefault skuになります。
sudo sonic-cfggen --preset l2 -p -H -k Force10-S6000 | sudo config reload /dev/stdin -y
SwSS container is not ready.
と言われることがあったら、指示通りconfig
コマンドに-f
を加えて実行しましょう。
sudo sonic-cfggen --preset l2 -p -H -k Force10-S6000 | sudo config reload /dev/stdin -f -y
5. QoS設定を読み込ませる
sudo config qos reload --no-dynamic-buffer
6. 設定を保存する
sudo config save -y
7. 新しい設定を読み込ませる
sudo config reload -y
ポートスピードの設定 (必要に応じてやってください)
SONiC-VSではやらなくていいと思います。実機の場合は接続先に合わせて変更します。
Ethernet0
のポート速度を10Gbpsに設定する例が下記です。
sudo config interface speed Ethernet0 10000
show interface status
で設定変更内容を確認できます。
おわりに
公式wikiの手順が丁寧なので長くなってしまいました。
せっかくSONiCを使ってるのに単なるL2スイッチとして使うことはないんじゃ? と思われるかわかりませんが、そうせざるを得ない場合がありましたらご活用ください。