note.

調べたことの頭の整理

Cumulus Linux - 基本的なL2設定方法

Cumulus Linuxに興味が湧いたので触っています。ここでは頭の整理として基本的な部分をまとめました。

概要

この記事はCumulus Linux 4.2でテストしています。

Interface Type

次の Type があり、各ベンダがサポートしている内容と同じかと思います。

種類 概要
Access アクセスポート
Trunk トランクポート
SVI VLAN 内の Layer3 Interface
Bond Port Channel / Link Aggregation
Bridge ブリッジドメイン

Layer2 Mode

Cumulus Linux には 2 種類の設定 Mode がありまます。

  • VLAN-aware Bridge
  • Traditional Bridge

簡単に比較表を作りました。

手法 概念 ポイント
VLAN-aware 1 ブリッジ内で VLAN グループを作成してポートを所属 - 2000 VLAN まで利用可能
- シンプルな設定でスケールしやすい
Traditional ブリッジ単位が VLAN グループとしてポートを所属 - 200VLAN まで利用可能
- Cumulus Linux 3.1 以前で VXLAN を利用している
- PVSTP+を利用している
- VLAN で LAN を指定するというよりブリッジで LAN を決めるイメージ

上記のことから、そもそもの使い方してVLAN-awareでどーんっと VLAN を通してあげることが推奨された使い方に感じました。

詳細はココを参照してください。

設定

比較の結果、VLAN-Awareのみで実施しています。興味のある方はTraditional Bride Modeを参照してください。

Access/Trunk

bridge を作成します。ここで所属させた port が全てTrunkで動作します。

net add bridge bridge ports swp49,51
net add bridge bridge vids 100,200
net add bridge bridge vlan-aware

swp51Accessに変更する場合は、上記に加えて次のように指定します。

net add interface swp51 bridge access 100

以下のように状態が正しくセットされたことが確認できます。

cumulus@leaf01:mgmt:~$ net show bridge vlan

Interface  VLAN  Flags
---------  ----  ---------------------
swp49         1  PVID, Egress Untagged
            100
            200
swp51       100  PVID, Egress Untagged

続いてswp49Trunkの範囲をVLAN100に絞り込みます。

net add interface swp49 bridge vids 100

これによって、先ほどswp49は VLAN100, 200 でしたが、VLAN100 のみ通るようになりました。

ncumulus@leaf01:mgmt:~$ net show bridge vlan

Interface  VLAN  Flags
---------  ----  ---------------------
swp49         1  PVID, Egress Untagged
            100
swp51       100  PVID, Egress Untagged

また、VLAN の利用にはデフォルトで 3600-3999 が予約済み(変更可能)のようなので注意が必要です。

Native-VLAN

デフォルトで Native VLAN は 1 が利用されるようになっており、自動的に設定されます。明示的に設定する場合は次のようにします。

net add bridge bridge pvid 1

もし通したくない場合は次のようにします。

net add interface swp49 bridge allow-untagged no

次のように swp49 から VLAN 1 が削除されました。

cumulus@leaf01:mgmt:~$ net show bridge vlan

Interface  VLAN  Flags
---------  ----  ---------------------
swp49       100
swp51       100  PVID, Egress Untagged

SVI

VLAN 上に Interface を設定します。

net add vlan 100 ip add 192.168.0.100/24

route に追加されました。

cumulus@tor01:mgmt:~$ net show route 192.168.0.0/24
RIB entry for 192.168.0.0/24
============================
Routing entry for 192.168.0.0/24
  Known via "connected", distance 0, metric 0, best
  Last update 00:03:39 ago
  * directly connected, vlan100


FIB entry for 192.168.0.0/24
============================
192.168.0.0/24 dev vlan100 proto kernel scope link src 192.168.0.100

Storm-Control

ループしないように設計を行っても、Storm-Control は念の為入れておくかと思います。

/etc/cumulus/switchd.confの設定項目を編集して機能を利用します。

cumulus@leaf01:mgmt:~$ cat /etc/cumulus/switchd.conf  | grep storm
interface.swp1.storm_control.broadcast = 400
interface.swp1.storm_control.multicast = 3000
interface.swp1.storm_control.unknown_unicast = 2000

編集後はswitchdの restart を行いますが、通信断が発生するため注意が必要です。

cumulus@leaf01:mgmt:~$ sudo systemctl restart switchd

一応 ping で試してみましたが、loss にはなりませんでしたね。

cumulus@spine01:mgmt:~$ ping 192.168.0.2
vrf-wrapper.sh: switching to vrf "default"; use '--no-vrf-switch' to disable
PING 192.168.0.2 (192.168.0.2) 56(84) bytes of data.
...
64 bytes from 192.168.0.2: icmp_seq=8 ttl=64 time=1.35 ms
64 bytes from 192.168.0.2: icmp_seq=9 ttl=64 time=1.75 ms
64 bytes from 192.168.0.2: icmp_seq=10 ttl=64 time=2.14 ms <----- ここ
64 bytes from 192.168.0.2: icmp_seq=11 ttl=64 time=1.34 ms
64 bytes from 192.168.0.2: icmp_seq=12 ttl=64 time=1.49 ms
...
^C
--- 192.168.0.2 ping statistics ---
14 packets transmitted, 14 received, 0% packet loss, time 36ms
rtt min/avg/max/mdev = 1.341/1.722/2.135/0.222 ms

Bond(LAG)

リンク冗長の定番は LAG かと思います。早速、swp49swp50で設定してみましょう。

net add bond bond0 bond slaves swp49-50

Bond Detailsを見ると、Bond で変更できるオプションがわかりますね。

Bond Modeは LACP に当たるIEEE802.3adが基本ですが、対向装置が使えない場合はbalance-xorで静的接続に変更が必要です。

cumulus@leaf01:mgmt:~$ net show interface | grep bond
UP     swp49    1G   9216   BondMember    leaf02 (swp49)           Master: bond0(UP)
UP     swp50    1G   9216   BondMember    leaf02 (swp50)           Master: bond0(UP)
UP     bond0    2G   9216   802.3ad                                Bond Members: swp49(UP)
       bond0                                                       Bond Members: swp50(UP)

cumulus@leaf01:mgmt:~$ net show interface bond0
    Name   MAC                Speed  MTU   Mode
--  -----  -----------------  -----  ----  -------
UP  bond0  76:ed:2a:8a:67:24  2G     9216  802.3ad

Bond Details
------------------  --------
Bond Mode:          802.3ad
Load Balancing:     layer3+4
Minimum Links:      1
LACP Sys Priority:
LACP Rate:          1
LACP Bypass:        Inactive

All VLANs on L2 Port
--------------------
1,100,200

Untagged
--------
1

cl-netstat counters
-------------------
RX_OK  RX_ERR  RX_DRP  RX_OVR  TX_OK  TX_ERR  TX_DRP  TX_OVR
-----  ------  ------  ------  -----  ------  ------  ------
  701       0      20       0    697       0       0       0

LLDP Details
------------
LocalPort  RemotePort(RemoteHost)
---------  ----------------------
swp49      swp49(leaf02)
swp50      swp50(leaf02)

Routing
-------
  Interface bond0 is up, line protocol is up
  Link ups:       3    last: 2020/12/19 07:23:19.93
  Link downs:     6    last: 2020/12/19 07:17:33.85
  PTM status: disabled
  vrf: default
  index 15 metric 0 mtu 9216 speed 2000
  flags: <UP,BROADCAST,RUNNING,MULTICAST>
  Type: Unknown
  HWaddr: 76:ed:2a:8a:67:24
  Interface Type bond
  Master interface: bridge PVID: 1
  protodown: off (n/a)

cumulus@leaf01:mgmt:~$ ip link
...
6: swp49: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 9216 qdisc pfifo_fast master bond0 state UP mode DEFAULT group default qlen 1000
    link/ether 76:ed:2a:8a:67:24 brd ff:ff:ff:ff:ff:ff
7: swp50: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 9216 qdisc pfifo_fast master bond0 state UP mode DEFAULT group default qlen 1000
    link/ether 76:ed:2a:8a:67:24 brd ff:ff:ff:ff:ff:ff
...
15: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 9216 qdisc noqueue master bridge state UP mode DEFAULT group default qlen 1000
    link/ether 76:ed:2a:8a:67:24 brd ff:ff:ff:ff:ff:ff

また、デフォルトで利用できるハッシュは次の通りです。

  • IP の場合: src/dst IP
  • TCP/UDP の場合: TCP/UDP src/dst port, src/dst IP

Meallnoxなど利用する HW によってはカスタマイズが可能のようなので、環境に応じてドキュメントの確認が必要です。

LLDP

デフォルトで Linuxlldpdが起動します。そのため、設定を変えたい場合は/etc/lldpd.confを作成します。詳細はマニュアルを参照ください。

netコマンドでも確認できるように次の内容が用意されています。

cumulus@tor01:mgmt:~$ net show lldp

LocalPort  Speed  Mode        RemoteHost       RemotePort
---------  -----  ----------  ---------------  ----------
eth0       1G     Mgmt        oob-mgmt-switch  swp10
swp49      1G     BondMember  leaf02           swp49
swp50      1G     BondMember  leaf02           swp50
swp51      1G     Access/L2   spine01          swp1
swp52      1G     Default     spine02          swp1
swp53      1G     Default     spine03          swp1
swp54      1G     Default     spine04          swp1

まとめ

ざっと最低限使いそうな機能を整理しました。まだnet操作に慣れていませんが、全体的にシンプルでいいですね。

そのほかにも以下の機能がありますので、興味ある方はマニュアルを読んでみてください。

  • STP
  • MLAG
  • LACP bypass
  • IGMP/MLD snooping