STUDY · NETWORK GUIDE

2-7 EtherChannel

複数の物理リンクを論理的に 1 つに束ねる EtherChannel の仕組み。LACP で 2 リンクを Port-channel に集約する動作を iosvl2 で実機検証する。

1. EtherChannel とは

EtherChannel は、複数の物理リンクをまとめて 1 つの論理ポート(Port-channel) として扱う技術である。Cisco の呼称が EtherChannel で、IEEE 標準としては Link Aggregation、業界一般語としては LAG(Link Aggregation Group)と呼ばれる。中身は同じ「複数の物理リンクを束ねて 1 本に見せる」仕組みである。

下図のように、SW1 と SW2 の間を Gi0/1 と Gi0/2 の 2 本のリンクで結び、その 2 本を Port-channel1(Po1)という 1 つの論理ポートに束ねる。スイッチ自身も、上位プロトコル(STP / トランク / SVI / 経路)も、Po1 という 1 本のリンクとして扱う。物理的にはケーブル 2 本だが、論理的には 1 本である。

EtherChannel 検証トポロジ

帯域は単純合算され、1 Gbps × 2 本なら 2 Gbps の論理リンクになる。後の show 出力で BW 2000000 Kbit/sec と表示されるのがその合算結果である。物理リンクが 1 本ダウンしても、Port-channel そのものは生き残り、残ったリンクで通信を継続する。STP は Po1 を 1 ポートとして扱うので、リンクを 2 本に増やしてもループ計算は走らず、Blocking ポートも生まれない。


2. なぜ EtherChannel か

スイッチ間の帯域を 2 倍、4 倍、8 倍と素直に伸ばしたい時に、もっとも一般的に使われる手段が EtherChannel である。10 Gbps SFP+ を 4 本束ねて 40 Gbps の論理リンクを作る、といった構成は現代のデータセンタや業務 LAN の集約区間でごく普通に見られる。回線種別を変えずにそのまま帯域を増やせる、というのが大きな利点である。

冗長性の観点でも有利である。前節で扱った STP は、ループのある物理トポロジから 1 本を Blocking で殺してループを断つ仕組みだった。3 本のリンクで三角形を作ると、1 本は普段使われない予備路に回る。一方 EtherChannel は最初から「太い 1 本」として束ねるので、全リンクを常時稼働させたまま冗長化できる。1 本切れたら残りの本数で稼働を継続し、収束時間は STP の数秒よりさらに短く、ほぼ瞬時に切り替わる。

STP との相性も良い。EtherChannel で束ねた複数本のリンクを STP は 1 ポート として認識する。前節で見た「3 角形のうち 1 辺が Blocking」のような複雑なツリー計算が、束ねた区間では走らない。Root Port と Designated Port の選出も、束ねた論理ポート 1 つに対して行われる。STP の計算量とトポロジ変更時の収束範囲が、束ねたぶんだけ素直に減る。

帯域集約・冗長性・STP の単純化、この 3 つを同時に手に入れられるのが EtherChannel である。


3. 3 つのバンドル方式

EtherChannel の束ね方には 3 種類ある。違いは「両端が動的にネゴシエーションするかどうか」「ネゴシエーションのプロトコルが標準か Cisco 独自か」の 2 軸である。

  • LACP(Link Aggregation Control Protocol、IEEE 802.3ad): IEEE 標準の動的バンドル方式。両端で LACPDU という制御フレームを交換し、相手の能力を見ながらバンドルを組み立てる。channel-group N mode activemode passive で有効化する。標準なので Cisco とそれ以外のベンダ(HPE / Arista / Juniper / Linux bonding 等)の混在でも動く。
  • PAgP(Port Aggregation Protocol): Cisco 独自の動的バンドル方式。LACP より前から存在し、mode desirable または mode auto で有効化する。Cisco 同士の閉じた環境では使えるが、相互運用性がない。
  • Static(on): プロトコルでのネゴシエーションをせず、両端で mode on を入れた瞬間にバンドルを組む方式。両端の設定が完全に一致していないとフレームが破棄されたりループしたりするので、運用上の事故率が高い。

現代の Cisco 機器では LACP が事実上の標準である。マルチベンダ環境でも動き、設定不一致時には bundle に組み込まれないという safety net(後述の suspended 状態)も働く。本ラボも LACP で検証する。PAgP と Static は仕様としては存在するが、新規設計で選ぶ理由は基本的にない。


4. LACP の active と passive

LACP には 2 つの動作モードがある。

  • active: 自分から LACPDU を送り出してバンドル交渉を能動的に開始するモード。
  • passive: 自分からは LACPDU を送らず、相手から来たら応答するモード。

両端の組合せで動くかどうかが変わる。

SW1 側SW2 側結果
activeactiveOK
activepassiveOK
passivepassiveNG(誰も発議しない)

passive-passive は、両端とも「相手から話しかけられたら応答する」モードなので、誰もきっかけを作らない。LACPDU の交換が始まらず、バンドルは永久に組まれない。新規設計では片側だけでも必ず active にしておくのが原則である。両端 active にしておけば、どちらが先に上がっても確実に交渉が走るので、ラボでも本番でもこれが推奨される。

なお、LACP(動的バンドル)と Static(mode on)の混在も成立しない。動的側は LACPDU を送り続けるのに対し、Static 側は LACPDU を理解せず無視する。両端のモードが一致していることが大前提である。

本ラボでは SW1 / SW2 とも LACP active で設定してある。


5. CML での検証

検証は CML(Cisco Modeling Labs)上の iosvl2 で行う。SW1 ↔ SW2 を Gi0/1 と Gi0/2 の 2 本のトランクで結び、その 2 本を Port-channel1 に束ねる構成である。両端の day0 config から EtherChannel 関連部分を抜くと、次のとおりである(SW1 / SW2 で完全に対称、ホスト名以外同一)。

snippet
interface Port-channel1
 description Bundle to peer
 switchport trunk encapsulation dot1q
 switchport mode trunk
!
interface GigabitEthernet0/1
 description Bundle member 1
 switchport trunk encapsulation dot1q
 switchport mode trunk
 channel-group 1 mode active
!
interface GigabitEthernet0/2
 description Bundle member 2
 switchport trunk encapsulation dot1q
 switchport mode trunk
 channel-group 1 mode active

設計上、押さえておくべき点が 3 つある。

1 つ目は channel-group 1 mode active が物理ポート Gi0/1 / Gi0/2 の側に入る点である。channel-group N の N が、束ね先の Port-channel 番号を指す。SW1 と SW2 で番号は揃える必要はない(Po1 同士でなくとも動く)が、運用上は対称にしておくのが普通である。mode active の部分が LACP active を指定している。

2 つ目は トランク設定が Port-channel1 側に入る ことである。switchport trunk encapsulation dot1qswitchport mode trunk は論理ポート Po1 に設定するもので、物理メンバ Gi0/1 / Gi0/2 にも同じ設定が並んでいるのは、channel-group で束ねた瞬間に整合性チェックが走るからである。両端の物理メンバの設定が一致していないとバンドルが形成されない(後述の落とし穴参照)。

3 つ目は 両端の物理メンバの本数・速度・duplex・trunk allowed vlan が一致していること。これが LACP のバンドル成立条件である。Gi0/1 と Gi0/2 が両端とも 1 Gbps full duplex で、許可 VLAN も同一(本ラボでは制限なし = all)であるため、整合する。


6. show etherchannel summary — バンドル状態の確認(本節の山場)

検証の中心となるコマンドが show etherchannel summary である。SW1 で実行した結果を見ていく。

snippet
SW1#show etherchannel summary
Flags:  D - down        P - bundled in port-channel
        I - stand-alone s - suspended
        H - Hot-standby (LACP only)
        R - Layer3      S - Layer2
        U - in use      N - not in use, no aggregation
        f - failed to allocate aggregator

        M - not in use, minimum links not met
        m - not in use, port not aggregated due to minimum links not met
        u - unsuitable for bundling
        w - waiting to be aggregated
        d - default port

        A - formed by Auto LAG


Number of channel-groups in use: 1
Number of aggregators:           1

Group  Port-channel  Protocol    Ports
------+-------------+-----------+-----------------------------------------------
1      Po1(SU)         LACP      Gi0/1(P)    Gi0/2(P)

下段の集計行 1 行に、このノードのバンドル状況がすべて凝縮されている。読み方は以下のとおり。

  • Group 1: channel-group 番号。day0 で channel-group 1 mode active と書いた 1 がそのまま現れる。
  • Po1(SU): 論理ポート名 Port-channel1 と、その状態フラグ。S は Layer2(L2 トランク)、U は in use(実際に使用中)の意味である。L2 トランクとして組み立てられ、転送に使われている、という最良の状態を示す。
  • Protocol LACP: バンドル交渉プロトコルが LACP であること。
  • Gi0/1(P) Gi0/2(P): 物理メンバとそのフラグ。P は bundled in port-channel、すなわち「Po1 に束ねられて稼働中」を意味する。

冒頭の Flag 凡例には D / I / s / H / R / S / U / N / P / f / M / m / u / w / d / A と多くの記号が並ぶが、健全に動いている時に現れるのは S / U / P の 3 つだけと覚えておけばよい。それ以外(特に s(suspended)・I(stand-alone)・w(waiting to be aggregated))が出たら、両端の設定不一致や相手不在を疑う、というのが現場での読み方である。

SW1 のこの結果は、Po1 が L2 トランクとして使用中(SU)、Gi0/1 と Gi0/2 の両方がバンドルされて稼働中(P)、という意味になる。LACP の交渉が正常に成立し、2 本の物理リンクが 1 本の論理リンクに束ねられた直後の理想状態である。


7. show etherchannel detail / LACP neighbor

show etherchannel 1 detail で、より詳細なバンドル状態を見られる。

snippet
SW1#show etherchannel 1 detail
Group state = L2 
Ports: 2   Maxports = 4
Port-channels: 1 Max Port-channels = 4
Protocol:   LACP
Minimum Links: 0


		Ports in the group:
		-------------------
Port: Gi0/1
------------

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
Gi0/1     SA      bndl      32768         0x1       0x1     0x2         0x3D  

Partner's information:

                  LACP port                        Admin  Oper   Port    Port
Port      Flags   Priority  Dev ID          Age    key    Key    Number  State
Gi0/1     SA      32768     5254.00e0.8000  21s    0x0    0x1    0x2     0x3D  

Age of the port in the current state: 0d:00h:03m:25s

Port: Gi0/2
------------

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
Gi0/2     SA      bndl      32768         0x1       0x1     0x3         0x3D  

Partner's information:

                  LACP port                        Admin  Oper   Port    Port
Port      Flags   Priority  Dev ID          Age    key    Key    Number  State
Gi0/2     SA      32768     5254.00e0.8000  26s    0x0    0x1    0x3     0x3D  

Age of the port in the current state: 0d:00h:03m:23s

注目すべき行を順に拾っていく。

冒頭 Group state = L2 で、このグループが L2 トランク用であることが明示される。Ports: 2 Maxports = 4 は、現在 2 ポートが束ねられており、最大 4 ポートまで束ねられる仕様であることを示す(iosvl2 の制限。実機では 8 ポートまでが一般的)。Protocol: LACP で動作プロトコルが、Minimum Links: 0 で「最小何本のリンクが上がっていればバンドルを稼働させるか」のしきい値が 0(無制限)であることが分かる。

各物理ポートのブロックでは、Port state = Up Mstr Assoc In-BndlIn-Bndl が「バンドルに組み込まれて稼働中」を意味する。Mode = Active が LACP active モードを、Pseudo port-channel = Po1 が束ね先を示す。

Local information の Flags SAState bndl が、本節 6 の Gi0/1(P) を裏付けるさらに詳しい情報である。S は Slow LACPDU を送信中(30 秒間隔、LACP 既定)、A は active モードbndl は bundled を意味する。Partner’s information にも同じ SA が出ているので、対向(SW2)も同じく active で Slow LACPDU を送っており、両端で対称に動いていることが分かる。

LACP の隣接情報だけに絞って見たい時は show lacp neighbor を使う。

snippet
SW1#show lacp neighbor
Flags:  S - Device is requesting Slow LACPDUs 
        F - Device is requesting Fast LACPDUs
        A - Device is in Active mode       P - Device is in Passive mode     

Channel group 1 neighbors

Partner's information:

                  LACP port                        Admin  Oper   Port    Port
Port      Flags   Priority  Dev ID          Age    key    Key    Number  State
Gi0/1     SA      32768     5254.00e0.8000  21s    0x0    0x1    0x2     0x3D  
Gi0/2     SA      32768     5254.00e0.8000   0s    0x0    0x1    0x3     0x3D

Dev ID 5254.00e0.8000 が対向 SW2 のシステム MAC で、Gi0/1 / Gi0/2 のどちらの隣接も同一 Dev ID を示している。つまり「Gi0/1 の対向と Gi0/2 の対向が同じスイッチである」ことを LACP が認識している、ということになる。これが LACP の重要な安全機構で、別々のスイッチに繋いだ物理リンクを誤って 1 つの Port-channel に束ねようとすると、Dev ID が一致せずバンドルが形成されない。

LACPDU の送受信カウンタは show lacp counters で見られる。

snippet
SW1#show lacp counters
             LACPDUs         Marker      Marker Response    LACPDUs
Port       Sent   Recv     Sent   Recv     Sent   Recv      Pkts Err
---------------------------------------------------------------------
Channel group: 1
Gi0/1       18     13       0      0        0      0         0     
Gi0/2       18     14       0      0        0      0         0

Sent / Recv のカウンタが両ポートで増え続けていれば、LACPDU の交換が継続しているということで、バンドルが「死んでいない」確認になる。Slow LACPDU は 30 秒間隔で送られるので、3 分間で 6 〜 7 回ぶん送受信されるはずで、上の出力もそのくらいの値になっている。Pkts Err 列が増えていれば LACPDU の不整合が起きているサインで、設定ミスを疑う指標になる。

論理ポートとしての Port-channel1 自体の状態は show interfaces Port-channel1 で確認できる。

snippet
SW1#show interfaces Port-channel1
Port-channel1 is up, line protocol is up (connected) 
  Hardware is EtherChannel, address is 5254.0093.2991 (bia 5254.0093.2991)
  Description: Bundle to peer
  MTU 1500 bytes, BW 2000000 Kbit/sec, DLY 10 usec, 
     reliability 255/255, txload 1/255, rxload 1/255
  Encapsulation ARPA, loopback not set

Hardware is EtherChannel という表記がそのまま現れ、BW 2000000 Kbit/sec で帯域が 2 Gbps(1 Gbps × 2 本)に合算されていることが分かる。リンクを 3 本に増やせば 3 Gbps、4 本なら 4 Gbps と素直に伸びていく。物理メンバが 1 本ダウンしても、Port-channel そのものは line protocol is up を維持し、BW だけが残り本数ぶんに減る、という挙動になる。


8. SW2 側も対称的に動作

LACP は双方向のプロトコルなので、両端で対称的に動いていることを確かめる必要がある。SW2 の show etherchannel summary を見る。

snippet
SW2#show etherchannel summary
Flags:  D - down        P - bundled in port-channel
        I - stand-alone s - suspended
        H - Hot-standby (LACP only)
        R - Layer3      S - Layer2
        U - in use      N - not in use, no aggregation
        f - failed to allocate aggregator

        M - not in use, minimum links not met
        m - not in use, port not aggregated due to minimum links not met
        u - unsuitable for bundling
        w - waiting to be aggregated
        d - default port

        A - formed by Auto LAG


Number of channel-groups in use: 1
Number of aggregators:           1

Group  Port-channel  Protocol    Ports
------+-------------+-----------+-----------------------------------------------
1      Po1(SU)         LACP      Gi0/1(P)    Gi0/2(P)

SW1 とまったく同じ Po1(SU) LACP Gi0/1(P) Gi0/2(P) の状態である。両端で対称にバンドルが組まれていることが、これで確定する。LACP は「両端の合意が取れて初めて bundle される」プロトコルなので、片側だけが SU で他方が w(waiting)や s(suspended)になることはあっても、両側で SU が揃った時点で双方向の交渉が完全に成立している、ということになる。

念のため SW2 の show interfaces Port-channel1 も確認する。

snippet
SW2#show interfaces Port-channel1
Port-channel1 is up, line protocol is up (connected) 
  Hardware is EtherChannel, address is 5254.00fb.dec7 (bia 5254.00fb.dec7)
  Description: Bundle to peer
  MTU 1500 bytes, BW 2000000 Kbit/sec, DLY 10 usec, 
     reliability 255/255, txload 1/255, rxload 1/255
  Encapsulation ARPA, loopback not set

BW 2000000 Kbit/sec も対称的に 2 Gbps、line protocol is up (connected) で論理ポートが活線である。これで SW1 ↔ SW2 間の 2 本のリンクが、論理的に 1 本 2 Gbps のリンクとして使えている状態が両端から確認できた。


9. 落とし穴・補足

EtherChannel は設定の対称性に敏感である。実運用で踏みやすい落とし穴と、関連する補足を 5 つ挙げる。

  • 両端設定不一致 → suspended(s): 速度・duplex・トランクモード・許可 VLAN・native VLAN のいずれかが両端で食い違うと、LACP は bundle を組まずに物理ポートを s(suspended)状態にする。show etherchannel summaryPo1(SD) Gi0/1(s) のように表示されたら、まず両端の show running-config interface を突き合わせて差分を探す。バンドル前の素のポートに戻して動かしてしまわず、suspended で止める設計になっているのが LACP の良いところで、トランクの片側だけ allowed vlan が違って一部 VLAN が消える、といった事故が起きにくい。
  • passive-passive は組まれない: 4 章で触れたとおり、両端 passive にすると LACPDU の発議者がいないので bundle されない。show etherchannel summaryw(waiting to be aggregated)が永続して出る場合、対向が passive のまま動いていない可能性を疑う。
  • STP との関係: 集約した Port-channel を STP は 1 ポート として扱う。show spanning-tree vlan 1 の interface 一覧には Po1 だけが現れ、物理メンバの Gi0/1 / Gi0/2 は STP からは見えなくなる。前節で見た「3 角形のうち 1 辺が Blocking」の発想ではなく、最初からループにならない太い 1 本のリンクとして木に組み込まれる、というイメージになる。
  • 負荷分散アルゴリズム: バンドル内のどの物理ポートに各フレームを流すかは、ハッシュベースで決まる。show etherchannel load-balance で現在の方式を確認できる。Cisco の既定は src-mac(送信元 MAC のハッシュ)で、IP / L4 ポートを混ぜたハッシュにも変更可能(port-channel load-balance src-dst-ip など)。同じ「フロー」のフレームは同じ物理リンクを通る設計になっているため、L2 / L3 / L4 の順序逆転は発生しない代わりに、フロー数が少ない環境では特定の 1 本に偏ることがある。
  • トランク設定は Port-channel 側に: VLAN・トランク・SVI・STP コスト等の論理設定はすべて Port-channel1 に対して行うのが正しい。物理メンバの Gi0/1 / Gi0/2 に対する switchport mode trunk 等の設定は、channel-group で束ねた瞬間に Port-channel 側の設定で上書きされる、と理解しておくのがよい。本ラボでは両方に同じ設定を入れてあるが、運用上は Po1 側だけに集約しても動作は同じである。minimum-links を設定すれば「最低 N 本上がっていないとバンドル全体を down にする」帯域保証も可能で、大事な区間ではこのオプションを使うことがある。

10. 次節

ここまでで、複数の物理リンクを 1 つの論理ポート Port-channel に束ねる EtherChannel の仕組み、LACP active / passive の役割、show etherchannel summaryPo1(SU) Gi0/1(P) Gi0/2(P) で確認できるバンドル成立状態、そして両端での対称的な動作を追った。STP に Blocking させてループを断つのとは別の発想で、最初からループにならない「太い 1 本」を作って帯域と冗長性を確保する、というのが EtherChannel の本質であった。

次節 2-8「L2 セキュリティ機能」では、L2 ドメインを守るための代表的な機能をまとめて扱う。Port Security によるアクセスポート単位の MAC 制限、DHCP Snooping による不正 DHCP サーバの遮断、Dynamic ARP Inspection(DAI)による ARP スプーフィング対策、Storm Control によるブロードキャスト暴走の抑制、といった内容になる。第 2 章 L2 編の最後の節として、ここまでで扱った VLAN / トランク / STP / EtherChannel の上に「攻撃や事故から L2 を守る」レイヤを重ねていく。