cisco L2スイッチを使ってVLAN・タグVLAN・LAG構築の実機演習

##はじめに
実機を使ったネットワークの勉強を行ったので、その内容を書いていきます。

##実験環境
・L2スイッチ　2台
・PC（Windows 2台、Ubuntu 2台）
・コンソールケーブル、LANケーブル
・Tera Term（スイッチにコンソールケーブルでつなげるPCにインストール）
・Wireshark（スイッチにコンソールケーブルでつなげるPCにインストール）

https://eng-entrance.com/teraterm-install

https://beginners-network.com/wireshark.html

##実験内容
###PCとスイッチを接続する

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2156166/1973107f-8d76-f7f5-eace-12baf49a25d1.png)
図1


図1のようにPCとスイッチをLANケーブル（黒）・コンソールケーブル（水色）で繋げます。
各PCにIPアドレスを割り振りpingで疎通ができるか確認します。
（IPアドレスを手動で割り当てる方法　[Window](https://www.buffalo.jp/support/faq/detail/15257.html)、[Ubuntu](https://inab818.site/ubuntu-desktop/ubuntu-desktop-20-04-lts-ip-address-confirmation/)）


```
# PC1からPC２
C:\> ping 192.168.1.2
```

pingが通らない場合はWi-Fiの接続を切っているか、IPアドレスとサブネットマスクの設定が正しいかを確認しましょう。他にはWiresharkをインストールしてパケットの流れを見てみましょう。Wiresharkを使えばどこまでパケットが届いているのか、そもそも届いていないのかがわかります。

pingが通ることが確認できたらARPテーブルとMACアドレステーブルの確認もします。ARPテーブルは宛先MACアドレスを調べるのに必要なものなので、PCやルータなどのルーティングを行う機器に使用します。MACアドレステーブルはMACアドレスとポートの対応関係を調べるスイッチで使用します。

```
# ARPテーブルを表示
C:\> arp -a #Windows
[root@host1 ~]# arp #Ubuntu
```
```
# MACアドレステーブルを表示
Switch> show mac-address-table
```
Wiresharkを使用してみるとARPがどのようなときに飛ぶのかを確認することができました。
ARPテーブルとMACアドレステーブルは時間が経過すると削除されるので注意します。

補足として、「C:\\>」がコマンドプロンプト、「[root@host1 ~]#」が端末、「Switch>」がスイッチに接続したCLIの画面です。

###VLANの設定
VLANとは物理的なLANセグメントとは違い、仮想的なLANセグメントを作る技術です。今回は同じVLAN内のPC同士の通信と異なるVLAN内のPC同士で通信していきます。

最初に現在のVLANがどうなっているのか確認をします。

```
Switch> show vlan

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Fa0/1, Fa0/2, Fa0/3, Fa0/4
                                                Fa0/5, Fa0/6, Fa0/7, Fa0/8
                                                Fa0/9, Fa0/10, Fa0/11, Fa0/12
                                                Fa0/13, Fa0/14, Fa0/15, Fa0/16
                                                Fa0/17, Fa0/18, Fa0/19, Fa0/20
                                                Fa0/21, Fa0/22, Fa0/23, Fa0/24
                                                Gig0/1, Gig0/2
```
デフォルトですべてのポートがVLAN1に属していることがわかります。つまり同じVLANに属しているPC同士は通信可能だとわかります。

念の為PC1とPC2をVLAN2に設定して通信可能か確認します。

```
Switch> enable
Switch# configure terminal
Switch(config)# vlan 2
Switch(config-vlan)# exit
Switch(config)# interface fastEthernet 0/1
Switch(config-if)# switchport access vlan 2
Switch(config-if)# no shutdown
Switch(config-if)# exit
Switch(config)# interface fastEthernet 0/2
Switch(config-if)# switchport access vlan 2
Switch(config-if)# no shutdown
Switch(config-if)# end
Switch# show vlan

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Fa0/3, Fa0/4, Fa0/5, Fa0/6
                                                Fa0/7, Fa0/8, Fa0/9, Fa0/10
                                                Fa0/11, Fa0/12, Fa0/13, Fa0/14
                                                Fa0/15, Fa0/16, Fa0/17, Fa0/18
                                                Fa0/19, Fa0/20, Fa0/21, Fa0/22
                                                Fa0/23, Fa0/24, Gig0/1, Gig0/2
2    VLAN0002                         active    Fa0/1, Fa0/2
```
実行結果からPC1とPC2をVLAN2に割り当てることができました。この状態でpingを飛ばしてみるとレスポンスが返ってきました。

次にPC2をVLAN3に設定して通信可能かを確認していきます。

```
Switch(config)# vlan 3
Switch(config-vlan)# exit
Switch(config)# interface fastEthernet 0/2
Switch(config-if)# switchport access vlan 3
Switch(config-if)# no shutdown
Switch(config-if)# end
Switch# show vlan

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Fa0/3, Fa0/4, Fa0/5, Fa0/6
                                                Fa0/7, Fa0/8, Fa0/9, Fa0/10
                                                Fa0/11, Fa0/12, Fa0/13, Fa0/14
                                                Fa0/15, Fa0/16, Fa0/17, Fa0/18
                                                Fa0/19, Fa0/20, Fa0/21, Fa0/22
                                                Fa0/23, Fa0/24, Gig0/1, Gig0/2
2    VLAN0002                         active    Fa0/1
3    VLAN0003                         active    Fa0/2
```
この状態でpingを通してみると、「Request timed out.」の結果が返ってきました。異なるVLANに属しているPC同士は不可能とわかりました。これで仮想的にセグメントを分けることができました。

###LAGの構築
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2156166/c2e15f39-8ec6-236c-4178-1b49842ca937.png)
図２

LAGとは普通は1本のケーブルでつなぐ機器同士を複数のケーブルでつないで、まとめて1本のケーブルのように扱うことで通信速度を速くする技術です。さらに片方のケーブルが故障しても通信できるので障害に強くなります。

Switch0とSwitch1に2本のLANケーブルを挿します。図2では上のケーブルがgigabitEthernet0/1同士、下のケーブルがgigabitEthernet 0/2同士で繋いでいます。

このまま何も設定せずに通信を行うとネットワークループが起こってしまいます。1本のケーブルのように扱うために以下のコマンドをSwitch0とSwitch1両方で実行します。

```
Switch(config)# interface range gigabitEthernet 0/1, gigabitEthernet 0/2
Switch(config-if-range)# channel-group 1 mode active
Switch(config-if-range)# no shutdown
```
これでLAGの構築ができました。しかし、PC1とPC3、PC2とPC4で通信の確認をしたところ「Request timed out.」の結果が返ってきました。

それぞれのスイッチでVLANの設定がどうなっているかを確認すると原因がわかりました。Gig0/1,0/2がVLAN1に属しているので通信が通りません。そのため、PC1とPC3をVLAN1に設定します。

```
Switch(config)# interface fastEthernet 0/1
Switch(config-if)# switchport access vlan 1
Switch(config-if)# no shutdown
```
これでPC1とPC3の通信が通るようになりました。

###タグVLAN
ラグの構築でVLAN1同士の通信はできましたが、それ以外のVLANでは通信ができませんでした。そこで、複数の同じVLAN同士でも通信できるようにするのがタグVLANです。

タグVLANとはタグをデータに付与して、そのデータがどのVLANに所属しているか識別してくれる機能です。つまり、スイッチ同士を接続する際に各VLAN同士をLANケーブルで接続しなければならないことを、1本のLANケーブルで接続することができます。

以下のコマンドを2つのスイッチで実行します。

```
Switch(config)# interface port-channel 1
Switch(config-if)# switchport mode trunk
Switch(config-if)# no shutdown
```
pingを通してみるとVLAN1同士とVLAN3同士両方とも通信可能になったことがわかりました。

###おまけ　様々なIPアドレスとサブネットマスクに設定して通信
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2156166/284c3838-34f3-bc3f-45f5-77c804c00883.png)
図3

図3のIPアドレスとサブネットマスクの設定で通信を行いました。その結果が以下の表です。

| - | A | B | C | D |
|:-:|:-:|:-:|:-:|:-:|
| A | - | ○ | ✕ | ○ |
| B | ○ | - | ✕ | ○ |
| C | ✕ | ✕ | - | ✕ |
| D | ○ | ○ | △ | - |


・AのIPアドレスは192.168.11.0~192.168.11.7までの範囲です。BのIPアドレスはAの範囲に入っているので同一セグメントだと判断され通信できたと考えられます。B→A、A→D、D→A、B→D、D→Bも同様であると考えられます。
・CのIPアドレスはAの範囲に入ってないのでデフォルトゲートウェイに送信されます（設定してないので送信されない）。C→B、C→Dも同様であると考えられます。
・DのIPアドレスは192.168.0.0~192.168.255.255までの範囲です。CのIPアドレスはDの範囲に入っているのでD→Cは送信されます。しかしCから見るとDは同一セグメントと判断されないので通信されません。

このことから送信元PCは、自身のIPアドレスとサブネットマスクから、所属しているネットワークのIPアドレスの範囲を確認。そして送信元PCは、宛先のIPアドレスがこの範囲内にあるかを調べて送信しているとわかります。

##終わりに
今回の実験で曖昧であった通信の仕組みについて理解することができました。

まずはじめに送信元PCが宛先のPCが同一セグメントに所属しているかを確認してから送信します。同一セグメント内に所属している場合はMACアドレスを利用して送信するので自身のARPテーブルを見ます。ARPテーブルに宛先のMACアドレスが載ってる場合はそのまま送信します。

ARPテーブルにMACアドレスが載ってない場合はARPを飛ばします。このときにL2スイッチはIPアドレスを利用してスイッチングしてくれないので、ブロードキャストされます。該当するPCはARPリプライをユニキャストで送信します。これで送信元PCは宛先のMACアドレスを知ることができたので通信することができます。

VLANの設定は簡単にできるので身近でもよく利用されています。利用目的の1つとして混雑の緩和があります。大規模なネットワークになるとARPによるブロードキャストが頻発します。その影響を少なくするためにVLANが利用されています。
他の利用目的はセキュリティの向上です。ネットワークを分割できるので通信を制限することができます。さらにマルウェアの感染リスクを下げることができます。

今回の実験は初めて実機を使ったのでトータルで6時間ほどかかりました。

##参考文献

https://www.infraexpert.com/study/vlanz1.html

https://www.infraexpert.com/study/etherchannel.html

https://www.buffalo.jp/support/faq/detail/4728.html

https://shinmeisha.co.jp/newsroom/2020/01/27/vlan%E3%81%A8%E3%81%AF/