LinuxでLACPを使う

CentOS Stream8でLACPを使ったリンクアグリゲーションを構成したので備忘録。

構成

以下の構成で、スイッチ(Cisco C1000)とCentOS Stream8(以降CentOSと呼ぶ)とでLACPによるネゴシエーションを使ったリンクアグリゲーション(以降LAGと呼ぶ)を実現。

CentOSのパラメーターなど

動的/静的動的(LACP)
制御フレーム(LACPDU)送信間隔高速(1秒間隔)
通したいパケットの種類802.1QタグVLAN
通したいタグVLANのID90
ボンディングインターフェースの名前bond0
vlan90インターフェースの名前bond0.90
vlan90インターフェースのIPアドレスDHCP(自動取得)

LACP制御フレームの送信間隔については高速だと1秒で低速だと30秒らしくて、5秒とかの微妙な値を設定できないのが少し気になる。5秒にしたい。

スイッチでLAG設定

スイッチ側で以下コンフィグを流す。

interface range GigabitEthernet1/0/21-22
  channel-group 1 mode active
  switchport mode trunk
  switchport trunk allowed vlan 90
  lacp rate fast
  no shutdown

この設定をすると、もともとスイッチ上にPort-channel1インターフェースが存在していなければ、自動的に作成される。

CentOSでLAG設定

bondingインターフェースを作成

nmcli con add type bond \
  ifname bond0 \
  con-name bond0 \
  ipv4.method "disabled" \
  ipv6.method "disabled" \
  +bond.options "mode=802.3ad","lacp_rate=fast"

LAGに使用するNICを指定

nmcli con add type ethernet ifname enp3s0 master bond0
nmcli con add type ethernet ifname enp1s0 master bond0

これで、bond-slave-xxxというインターフェースが生成される。

作成したコネクションのアクティベート

nmcli con up bond0
nmcli con up bond-slave-enp1s0
nmcli con up bond-slave-enp3s0

vlan90インターフェースの作成

nmcli con add type vlan \
  con-name bond0.90 \
  ifname bond0.90 \
  dev bond0 \
  ipv4.method "auto" \
  ipv6.method "disabled" \
  id 90

作成したコネクションのアクティベート

nmcli con up bond0.90

CentOSで状態確認

動的に作成される/proc/net/bonding/bond0ファイルの内容を見ると、色々書いてある。

[hoge@CentOSStream8 work]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2 (0)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Peer Notification Delay (ms): 0

802.3ad info
LACP rate: fast
Min links: 0
Aggregator selection policy (ad_select): stable
System priority: 65535
System MAC address: xx:xx:xx:xx:xx:xx
Active Aggregator Info:
        Aggregator ID: 2
        Number of ports: 2
        Actor Key: 9
        Partner Key: 1
        Partner Mac Address: xx:xx:xx:xx:xx:xx

Slave Interface: enp3s0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: xx:xx:xx:xx:xx:xx
Slave queue ID: 0
Aggregator ID: 2
Actor Churn State: none
Partner Churn State: none
Actor Churned Count: 0
Partner Churned Count: 0
details actor lacp pdu:
    system priority: 65535
    system mac address: xx:xx:xx:xx:xx:xx
    port key: 9
    port priority: 255
    port number: 2
    port state: 63
details partner lacp pdu:
    system priority: 32768
    system mac address: xx:xx:xx:xx:xx:xx
    oper key: 1
    port priority: 32768
    port number: 278
    port state: 63

Slave Interface: enp1s0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: xx:xx:xx:xx:xx:xx
Slave queue ID: 0
Aggregator ID: 2
Actor Churn State: none
Partner Churn State: none
Actor Churned Count: 0
Partner Churned Count: 0
details actor lacp pdu:
    system priority: 65535
    system mac address: 68:05:ca:71:cf:52
    port key: 9
    port priority: 255
    port number: 3
    port state: 63
details partner lacp pdu:
    system priority: 32768
    system mac address: c8:84:a1:36:82:80
    oper key: 1
    port priority: 32768
    port number: 279
    port state: 63
[hoge@CentOSStream8 work]#

スイッチで状態確認

show etherchannel detailでいろいろ見れる。


C1000#show etherchannel detail
                Channel-group listing:
                ----------------------

Group: 1
----------
Group state = L2
Ports: 2   Maxports = 16
Port-channels: 1 Max Port-channels = 16
Protocol:   LACP
Minimum Links: 0


                Ports in the group:
                -------------------
Port: Gi1/0/21
------------

Port state    = Up Mstr Assoc In-Bndl
Channel group = 1           Mode = Active          Gcchange = -
Port-channel  = Po1         GC   =   -             Pseudo port-channel = Po1
Port index    = 0           Load = 0x00            Protocol =   LACP

Flags:  S - Device is sending Slow LACPDUs   F - Device is sending fast LACPDUs.
        A - Device is in active mode.        P - Device is in passive mode.

Local information:
                            LACP port     Admin     Oper    Port        Port
Port      Flags   State     Priority      Key       Key     Number      State
Gi1/0/21  FA      bndl      32768         0x1       0x1     0x116       0x3F

Partner's information:

                  LACP port                        Admin  Oper   Port    Port
Port      Flags   Priority  Dev ID          Age    key    Key    Number  State
Gi1/0/21  FA      255       xxxx.xxxx.xxxx   0s    0x0    0x9    0x2     0x3F

Age of the port in the current state: 0d:01h:04m:19s

Port: Gi1/0/22
------------

Port state    = Up Mstr Assoc In-Bndl
Channel group = 1           Mode = Active          Gcchange = -
Port-channel  = Po1         GC   =   -             Pseudo port-channel = Po1
Port index    = 0           Load = 0x00            Protocol =   LACP

Flags:  S - Device is sending Slow LACPDUs   F - Device is sending fast LACPDUs.
        A - Device is in active mode.        P - Device is in passive mode.

Local information:
                            LACP port     Admin     Oper    Port        Port
Port      Flags   State     Priority      Key       Key     Number      State
Gi1/0/22  FA      bndl      32768         0x1       0x1     0x117       0x3F

Partner's information:

                  LACP port                        Admin  Oper   Port    Port
Port      Flags   Priority  Dev ID          Age    key    Key    Number  State
Gi1/0/22  FA      255       xxxx.xxxx.xxxx   0s    0x0    0x9    0x3     0x3F

Age of the port in the current state: 0d:00h:58m:50s

                Port-channels in the group:
                ---------------------------

Port-channel: Po1    (Primary Aggregator)

------------

Age of the Port-channel   = 0d:05h:46m:28s
Logical slot/port   = 9/1          Number of ports = 2
HotStandBy port = null
Port state          = Port-channel Ag-Inuse
Protocol            =   LACP
Port security       = Disabled
Load share deferral = Disabled

Ports in the Port-channel:

Index   Load   Port     EC state        No of bits
------+------+------+------------------+-----------
  0     00     Gi1/0/21 Active             0
  0     00     Gi1/0/22 Active             0

Time since last port bundled:    0d:00h:58m:50s    Gi1/0/22
Time since last port Un-bundled: 0d:00h:59m:54s    Gi1/0/22

Group: 6
----------
Group state = L2
Ports: 3   Maxports = 16
Port-channels: 1 Max Port-channels = 16
Protocol:   LACP
Minimum Links: 0

C1000#

ここまで実施すればOK。ただ検証環境では、vlanインターフェースのアクティベートからDHCPでIPアドレスを自動取得するまでに数秒かかった。無反応でも数秒は待機すると幸せになれそう。

削除

やりなおしたくなったら以下手順で、作成したインターフェースを削除する。

nmcli con del bond0.90
nmcli con del bond0
nmcli con del bond-slave-enp1s0
nmcli con del bond-slave-enp3s0

以上、LinuxでLACPを使うのもなかなかおもしろいと思った。タグVLANの使えるスイッチがある人は、LinuxでタグVLANを使って色々なネットワークに足を出してみるのも一興かと。

Leave a Comment