EtherChannel

# 概要
EtherChannelとは、複数の物理リンクを1つの論理的なリンクとみなし、複数のリンクを効率よく利用する技術のこと。**リンクアグリゲーション**ともいわれる。
論理的に1本とみなされれば、STPの計算によりブロックされることはない。

![キャプチャ1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3238179/3ad5a972-5283-6335-9052-9f9778234961.png)

最大8本のリンクを1つの論理リンクとして扱うことが可能。1本のリンクとしてまとめることを**バンドル**といい、物理ポートも1つの論理的なポートしてバンドルされる。このバンドルした論理的なポートを**Port-channel**という。
バンドルしたリンクを通るトラフィックは、条件により物理リンクを分散させることができる。

![キャプチャ2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3238179/543edd68-2b35-fcb1-3029-92253921c57d.png)

バンドル内のリンクに障害が起きた場合、他のリンクを使用して接続を維持できるため、耐障害性が向上する。

![キャプチャ3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3238179/a20e2690-10ff-ee92-2958-9d24557cc0e2.png)

### 負荷の分散
負荷分散方法の設定を変えることにより、通信を複数のリンクに効率よく分散させることができる。

![キャプチャ4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3238179/280a0436-e991-916c-b9d5-caeea45e8aa8.png)


### 設定の条件
どのようなポートでもバンドルできるわけではなく、合わせなければならない条件がある。

+ **ポートの通信モード（半二重または全二重）を合わせる**
+ **バンドルするポートで速度が同じである**
+ **同一のVLANに所属させる**（アクセスポート設定の場合）
+ **バンドルするポートをすべてトランクポートにする**（トランクポート設定の場合）
+ **トランクポートのカプセル化（ISLまたはIEEE 802.1Q）、トランクリンクの通過を許可するVLAN、ネイティブVLANの統一**（トランクポートの場合）
+ **ルーテッドポートの設定**

## ポートの種類
レイヤ3スイッチでは以下のEtherChannelを作ることが可能。バンドルするポートは統一にする必要がある。

+ レイヤ2EtherChannel(スイッチポートでのEtherChannel)
+ レイヤ3EtherChannel(ルーテッドポートでのEtherChannel)

:::note warn
バンドルする場合は、スイッチポートとルーテッドポートを混在させることは出来ない。
:::

### アクセスポートの設定
EtherChannelのリンクをアクセスリンクとするなら、バンドルされるポートは全てアクセスポートにして、所属するVLANを同一に合わせなければならない。

### トランクポートの設定
アクセスポートと一緒で、トランクリンクとするならバンドルされるポートは全てトランクポートにしなければならない。さらに、以下の設定を統一する必要がある。

+ トランキングプロトコル(ISL,IEEE 802.1Q)
+ トランクポートの通貨を許可するVLANの範囲
+ ネイティブVLANを合わせる(IEEE 802.1Qの場合)



## EtherChannelのネゴシエーション
EtherChannelではネゴシエーションに2つのプロトコルを利用することができる。

### PAgP(Port Aggregation Protocol)
Cisco独自のプロトコルで、非Ciscoデバイスとの接続は出来ない。
自分からネゴシエーション有効：desirable
自分からネゴシエーション無効：auto

また、**サイレントモード**と**ノンサイレントモード**の2種類のオプションがあり、対向の機器からPAgPフレームが送信されてこなかった場合リンクダウンとなる。デフォルトはサイレントモード。


### LACP(Link Aggregation Control Protocol)
`IEEE 802.3ad`として標準化されている。非Ciscoデバイスとの接続で使用可能。PAgPと違い、最大16個のポートを同一チャネルグループとすることができる。16個全て使用するわけではなく、8個のポートがアクティブとなり、残りのリンクはスタンバイとなる。

自分からネゴシエーション有効：active
自分からネゴシエーション無効：passive

【アクティブとなるポートの判断基準】
+ LACPシステムプライオリティ
+ MACアドレス
+ LACPポートプライオリティ
+ ポート番号

::: note info
モードを手動に設定した場合、向かいのスイッチも手動に設定する必要がある。
:::


## EtherChannelのロードバランシング
スイッチに着信したパケットは、バンドルされている物理ポートのどれかに以下の方法で振り分けられる。

| 方式 | 内容 |
|:-:|:-:|
| src-mac  | 送信元MACアドレスによって負荷分散する  |
| dst-mac  | 宛先MACアドレスによって負荷分散する  |
| src-dst-mac  | 送信元と宛先MACアドレスによって負荷分散する  |
| src-ip  | 送信元IPアドレスによって負荷分散する  |
| dst-ip  | 宛先IPアドレスによって負荷分散する  |
| src-dst-ip  | 送信元と宛先IPアドレスによって負荷分散する  |


## EtherChannelガード
一方は1つのポートとして判断しているが、対向では別々のポートとして判断しているといった、誤設定などによる不一致を検出してErr-disabel状態にする仕組みのこと。


# EtherChannelの設定

::: note warn
設定する際はケーブルを外した状態で作業を行う
:::

### channel-groupコマンド
**書式：channel-group [グループ番号] mode [on | auto | desirable | active | passive] [non-silent]**
EtherChannelを作成するコマンド。インターフェイスコンフィギレーションモードで行う必要がある。バンドルさせたいポートは同じグループ番号に設定するが、**対向のスイッチと合わせる必要はない**。手動で形成する場合はonを指定し、対向の機器もonにする必要がある。
non-silentは、autoかdesirableにしたときのみ指定可能。対向の機器がPAgPフレームを送ってくると想定される場合に指定することで、受診はできないが送信はできるといった単方向リンクを検出できる。
コマンド実行後、自動的に`port-channel`という倫理インターフェイスが作成され、画面にそのことが表示される。

| オプション | 内容 |
|:-:|:-:|
| on  | 無条件にいEtherChannelを形成するため、プロトロコルによるネゴシエーションを行わない|
| auto  | 相手からのPAgPネゴシエーションを受信し、EtherChannelを形成  |
| desirable  | 相手にPAgPネゴシエーションを送信して、EtherChannelを形成  |
| passive  | 相手からのLACPネゴシエーションを受信し、EtherChannelを形成  |
| active  | 相手からのLACPネゴシエーションを送信して、EtherChannelを形成  |

![kk37864.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3238179/a13924d3-5457-6fd2-bb07-5f3cd69f089d.jpeg)


```markdown:Fa0/9とFa0/10をON固定で束ねる
Switch(config)#interface range FastEthernet 0/9 - 10
Switch(config-if-range)#channel-group 1 mode on
Switch(config-if-range)#
Creating a port-channel interface Port-channel 1
```



### channel-protocolコマンド
**書式：channel-protocol [lacp | pagp]**
ネゴシエーションを行う際に使用するプロトコルを指定するコマンド。インターフェイスコンフィギレーションモードで行う必要がある。対向の機器も同じプロトコルを指定する。

::: note info
channel-groupコマンドのmodeにより、ネゴシエーションプロトコルは自動で決まるため実行しなくて問題ない。だが、先に設定しておくことでモードの指定ミスを防ぐことができる。
:::

### port-channel load-balanceコマンド
**書式：port-channel load-balance [負荷分散オプション]**
EtherChannelでの負荷を分散させる際の方法を変更するコマンド。グローバルコンフィギレーションモードで行う必要がある。

| オプション | 負荷分散動作 |
|:-:|:-:|
| src-mac  | 送信元Macアドレスを基に負荷分散  |
| dst-mac  | 宛先Macアドレスを基に負荷分散  |
| src-dst-mac  | 送信元および宛先Macアドレスを基に負荷分散  |
| src-ip  | 送信元IPアドレスを基に負荷分散  |
| dst-ip  | 宛先IPアドレスを基に負荷分散  |
| src-dst-ip  | 送信元および宛先IPアドレスを基に負荷分散  |
| src-port  | 送信元ポート番号を基に負荷分散  |
| dst-port  | 宛先ポート番号を基に負荷分散  |
| src-dst-port  | 送信元および宛先ポート番号を基に負荷分散  |

### interface rangeコマンド
**書式：interface range [インターフェイス]**
複数のポートを選択して同じ設定を同時に行うコマンド。グローバルコンフィギレーションモードで行う必要がある。インターフェイスの指定は、カンマで区切る方法とハイフンで範囲を指定する方法がある。コマンドを実行するするとプロンプトが変化する

``` markdown:interface rangeコマンド実行時
(config-if-range)#
```

### lacp system-priorityコマンド
**書式：lacp system-priority <プライオリティ値>**
LACPシステムプライオリティを設定するコマンド。グローバルコンフィギュレーションモードで行う必要がある。プライオリティ値は1～65535の範囲から指定が可能。値が小さい方の機器がアクティブなポートとして判断される

### lacp port-priorityコマンド
**書式；lacp port-priority <プライオリティ値>**
LACPポートプライオリティを設定するコマンド。インターフェイスコンフィギュレーションモードで行う必要がある。1～65535の範囲から指定が可能。

### port-channel load-balanceコマンド
**書式：port-channel load-balance < dst-ip | dst-mac | src-dst-ip | src-dst-mac | src-ip | src-mac>**
ロードバランシングの方式を変更するコマンド。グローバルコンフィギュレーションモードで行う必要がある。

### spanning-tree etherchannel guard misconfigコマンド
EtherChannelガードを無効化にするコマンド。グローバルコンフィギュレーションモードで行う必要がある。

## EtherChannelの確認

### show etherchannelコマンド
**書式：show etherchannel [summary | detail | port]**
EtherChannelの情報を確認するコマンド。特権EXECモードで行う必要がある。summaryを指定すると要約した情報が表示され、detailを指定すると詳細な情報が表示される。

```markdown:show etherchannelコマンド
SW3#show etherchannel 
                Channel-group listing:
                ----------------------

Group: 1
----------
Group state = L2
Ports: 2 Maxports = 8
Port-channels: 1 Max Port-channels = 1
Protocol:    -


Switch#show etherchannel summary 
Flags:  D - down        P - in port-channel
        I - stand-alone s - suspended
        H - Hot-standby (LACP only)
        R - Layer3      S - Layer2
        U - in use      f - failed to allocate aggregator
        u - unsuitable for bundling
        w - waiting to be aggregated
        d - default port


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

Group  Port-channel  Protocol    Ports
------+-------------+-----------+----------------------------------------------

1      Po1(SU)           -      Fa0/9(P) Fa0/10(P)
```


### show etherchannel load-balanceコマンド
現在のEtherChannelでどの負荷分散方法が設定されているかを確認するコマンド。特権EXECモードで行う必要がある。

```markdown:show etherchannel load-balanceコマンド
Switch#show etherchannel load-balance 
EtherChannel Load-Balancing Operational State (src-mac):
Non-IP: Source MAC address
  IPv4: Source MAC address
  IPv6: Source MAC address
```


### show pagp neighborコマンド
PAgP設定時の隣接するスイッチの情報を確認するコマンド。特権EXECモードで行う必要がある。

### show lacp neighborコマンド
LACP設定時の隣接するスイッチの情報を確認するコマンド。特権EXECモードで行う必要がある。

### show lacp internalコマンド
自身のポートに設定されているLACPモードを確認するコマンド。特権EXECモードで行う必要がある。

![k62963.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3238179/c9ee2cac-ae89-c95e-eff4-7a4933e2d7e7.jpeg)


### show interfaces port-channelコマンド
**書式:show interfaces port-channel [ポートチャネル番号]**
指定したポートチャネル（論理インターフェイス）の情報を確認できるコマンド。特権EXECモードで行う必要がある。

```markdown:show interfaces port-channelコマンド
Port-channel1 is up, line protocol is up (connected)
  Hardware is EtherChannel, address is 0090.0ce9.2801 (bia 0090.0ce9.2801)
  MTU 1500 bytes, BW 200000 Kbit, DLY 1000 usec,
     reliability 255/255, txload 1/255, rxload 1/255
  Encapsulation ARPA, loopback not set
  Keepalive set (10 sec)
  Half-duplex, 200Mb/s
  input flow-control is off, output flow-control is off
  Members in this channel: Fa0/9 ,Fa0/10 ,
  ARP type: ARPA, ARP Timeout 04:00:00
  Last input 00:00:08, output 00:00:05, output hang never
  Last clearing of "show interface" counters never
  Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
  Queueing strategy: fifo
  Output queue :0/40 (size/max)
  5 minute input rate 0 bits/sec, 0 packets/sec
  5 minute output rate 0 bits/sec, 0 packets/sec
     956 packets input, 193351 bytes, 0 no buffer
     Received 956 broadcasts, 0 runts, 0 giants, 0 throttles
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
     0 watchdog, 0 multicast, 0 pause input
     0 input packets with dribble condition detected
     2357 packets output, 263570 bytes, 0 underruns
     0 output errors, 0 collisions, 10 interface resets
     0 babbles, 0 late collision, 0 deferred
     0 lost carrier, 0 no carrier
     0 output buffer failures, 0 output buffers swapped out
```


## レイヤ3EtherChannelの設定
レイヤ3EtherChannelとは、ルーテッドポートで行うEtherChannelのこと。レイヤ2EtherChannel（これまでのスイッチポートでのEtherChannel）と変わらないが、IPアドレスの設定はPort-channelインターフェイスで行う必要がある。

![キャプチャ5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3238179/81a02824-603f-65b6-96bc-d5fad7698f80.png)

::: nore info
バンドルされている個々の物理ポート上ではIPアドレスの設定は必要ない
:::

### 設定手順

1. 論理インターフェースを作成
2. `no switceport`コマンドで、論理インターフェースをレイヤ3モードにする
3. 論理インターフェースにIPアドレスを設定
4. `no switceport`コマンドで、物理インターフェースをレイヤ3モードにする
5. 物理インターフェースにチャネルグループを設定


### interface port-channelコマンド
**書式:interface port-channel [ポートチャンネル番号]**
論理インターフェイスを作成するコマンド。グローバルコンフィギュレーションモードで行う必要がある。