ネットワーク機器を買わずにオンプレのハンズオンがしたい - L2スイッチ編

この記事はフューチャー[Advent Calender 2021](https://qiita.com/advent-calendar/2021/future) 3日目の記事です。

昨日は@shibukawaさんによる「[趣味の勉強、技術ブログ、勉強会、OSS、ネタ選びをどうするか?](https://qiita.com/shibukawa/items/f4bc17743f23d2e0c3ae)」でした。

## 1. はじめに
こんにちは！フューチャー入社３年目の本田です。
業務でクラウドを触れる機会は多いですが、オンプレはクラウドとのVPN等限られた機会でしか触れてきませんでした。

オンプレ学習欲求はありますが、そのためにルーターやスイッチを買うかと言われると...という程度のモチベーションしかなく、AWSのようにアカウントさえ作れば気軽に自身のパソコン１つでハンズオンできるような環境を求めていました。

そこで、今回はCisco社の提供しているPacket Tracerというツールを用いてハンズオンを実施してみたという内容の記事を書きました。L2スイッチを用いて通信の仕組みの確認と可視化を試すことでPacket Tracerの凄さを少しでもお伝えしたいと思います。

## 2. 環境
* Cisco Packert Tracer 8.0.1

## 3. Packert Tracerとは
Cisco製のネットワーク機器のシミュレートが可能なツールです。
[CCNA](https://www.cisco.com/c/ja_jp/training-events/training-certifications/certifications/associate/ccna.html)(Cisco Certified Network Associate)に代表されるようにCisco社は多くの認定資格を提供しており、同時にPacket Tracerを活用した学習教材なども提供しています。  
自身のパソコン１つのみでネットワーク機器に関する実務に近い経験を積むことができるため、インフラやネットワーク初心者の方にもおすすめできるツールです。

以下の図のようににPCやネットワーク機器をケーブルで接続し、実際にルーターのコンフィグを設定したり、PCからpingを飛ばしたり、パケットキャプチャを行うことが可能です。

![スクリーンショット 2021-11-22 23.20.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525823/6d5253e5-0434-227b-34ea-7c478ff87329.png)

## 4. L2スイッチで遊んでみる
本記事では、以下の順に進めていきます。あくまでハンズオンが目的なので細かい説明はご容赦ください。

1. L2スイッチで機器を接続する
1. Snifferを利用してパケットをキャプチャする
1. シミュレーションモードで通信の流れを可視化する
1. VLANを設定する

### 利用機器一覧
Packet Tracerを起動すると左下にデバイス一覧が表示されます。今回利用するデバイスの場所を一覧で記しておきます。

#### [Cisco Catalyst 2960 シリーズ スイッチ](https://www.cisco.com/c/ja_jp/support/switches/catalyst-2960-series-switches/series.html)
Cisco社の提供するL2スイッチです。2019年10月31日でサポートが終了しているようですが、学習に利用する分には問題ないと思います。
![L2スイッチ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525823/ddac885b-1ac8-25bc-7436-90051bf6fc1b.png)

#### Laptop
ノートパソコンです。モジュールを換装することで有線だけでなくwifiでルータと接続することもできました。
![Laptop](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525823/81b5953b-d0d3-b41f-17e2-d8d9e92440e3.png)

#### ストレートケーブル
近年クロスケーブルを使う必要性も減ってきていると思われるので本記事ではストレートケーブルで統一します。
![ストレートケーブル](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525823/31c8c8fa-09c6-dff6-bd39-75deb70ded3e.png)

#### Sniffer
ネットワークアナライザやパケットアナライザと呼ばれるものです。特定のポートに送られたパケットのキャプチャやフィルタリングが可能なソフトウェアを搭載したパソコンのようなイメージです。ネットワークのトラブルシューティングやユーザの行動調査などに用いられます。
![スクリーンショット 2021-12-02 23.22.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525823/abd1aa36-25de-5b91-7a46-a4a1d20b85d2.png)


### 4.1 L2スイッチで機器を接続する
デバイスをドラッグすることで任意のネットワークを構成することができます。
シンプルな構成として以下のようにデバイスを配置し、ケーブリングしてみます。
今回は以下のように接続しました。

* PC0:FastEthernet0 ⇔ Switch0:FastEthernet0/1
* Switch0:FastEthernet0/2 ⇔ PC1:FastEthernet0

<img width="500" alt="準備完了後" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525823/8c713e1e-1328-8d9b-3f30-9167ef8ed8d2.png">

Switch側の準備が整うとケーブル状に表示されていたオレンジ色の丸が全て緑になります。右図の状態になればOKです。

次にPC側のIPアドレスを設定していきます。
PCをダブルクリックし、デスクトップタブからIP Configurationを選択し、IPアドレスとサブネットマスクを設定します。

| 端末名 | IPアドレス | サブネットマスク |
|:-----------:|:------------:|:------------:|
| PC0 | 192.168.0.1 | 255.255.255.0 |
| PC1 | 192.168.0.2 | 255.255.255.0 |

<img width="340" alt="デスクトップタブ" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525823/e4e8c44b-4387-5cd2-abcb-4f237052cd97.png"><img width="340" alt="設定画面" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525823/dc52b435-34ec-fdce-58d9-7447e9d3ebd6.png">

PC0のコマンドプロンプトを開きPC2にpingを打って疎通確認してみます。
<img width="340" alt="cmd" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525823/b9e8c10e-ae52-3727-2605-e9305583d985.png"><img width="340" alt="ping" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525823/f11b2627-7676-0093-a36b-fc69ec10038a.png">

以下のように表示されれば成功です。

```
C:\>ping 192.168.0.2

Pinging 192.168.0.2 with 32 bytes of data:

Reply from 192.168.0.2: bytes=32 time=1ms TTL=128
Reply from 192.168.0.2: bytes=32 time<1ms TTL=128
Reply from 192.168.0.2: bytes=32 time<1ms TTL=128
Reply from 192.168.0.2: bytes=32 time<1ms TTL=128

Ping statistics for 192.168.0.2:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 1ms, Average = 0ms
```


### 4.2 Snifferを利用してパケットをキャプチャする
4.1疎通ができたのでもう少し通信の細かくみてみたいと思います。
pingによって学習したARPテーブル等をリセットしたいので一旦ネットワークをリセットします。
<img width="340" alt="reset" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525823/cd71e212-e9c0-3c4b-9ffa-3251e8551f33.png">

SnifferをSwitch0:FastEthernet0/3に接続します。
![スクリーンショット 2021-12-03 0.16.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525823/79edafa1-1999-8460-c86b-22235e346b4b.png)

Switchをダブルクリックしてcliを起動し、以下のコマンドを入力します。
FastEthernet0/1(PC0)を送信元とし、FastEthernet0/3(Sniffer)を宛先とすることでパケットが転送されるようになり、パケットの解析が可能となります。こうした機能をポートミラーリングと呼び、CiscoではSPAN（Switched Port Analyzer）と呼ばれているようです。

```
enable
config terminal
monitor session 1 source interface FastEthernet0/1
monitor session 1 destination interface FastEthernet0/3
end
```

パケットを見やすくするため、Snifferの設定からEdit Filtersを選択し、ARPとICMPのみ表示されるように設定し、Clearボタンを謳歌します。
![スクリーンショット 2021-12-03 0.37.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525823/a4b03b62-816e-9119-b72f-25f9ea5af205.png)

この状態で、PC0からPC1にpingを実施します。
pingが成功したことを確認後、SnifferをダブルクリックしGUIタブを開くをARP実施後にICMPが4往復していることがわかります。

①Ethernet層のDESTが `FFFF.FFFF.FFFF` となっているのでブロードキャストしていることがわかります。今回のネットワークでは、PC0からPC1およびSnifferにパケットが送られ、宛先(192.168.0.2)のMACアドレスを要求します。
![スクリーンショット 2021-12-03 0.47.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525823/fed3b45e-50cc-c5b1-dc73-28ab1dc77073.png)

②192.168.0.2と合致したPC1からARP応答が返ります。これにより、PC0はPC1(192.168.0.2)のMACアドレスを知ることができます。
![スクリーンショット 2021-12-03 0.50.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525823/accb78e1-9406-3736-65c5-6be4f06e0d25.png)

コマンドプロンプトを開き、下記コマンドを実行することで学習済みのARPテーブルを確認することができます。

PC0のARPテーブル

```
C:\>arp -a
  Internet Address      Physical Address      Type
  192.168.0.2           00d0.bcd5.6ec0        dynamic
```

PC1のARPテーブル

```
arp -a
  Internet Address      Physical Address      Type
  192.168.0.1           0090.0c77.2938        dynamic
```

Switchも同様にMACアドレスを学習しており、MACアドレスとポートの組み合わせを記憶しています。ARPテーブルとは異なりIPアドレスは保持していません。これが第２層(データリンク層)と呼ばれる層の役割です。

```
Switch#show mac address-table
          Mac Address Table
-------------------------------------------

Vlan    Mac Address       Type        Ports
----    -----------       --------    -----

   1    0090.0c77.2938    DYNAMIC     Fa0/1
   1    00d0.bcd5.6ec0    DYNAMIC     Fa0/2
```

これらのテーブルにより、宛先が明確になりお互いの機器での通信が可能となります。

③PC0がPC1に対してICMPを送る
![スクリーンショット 2021-12-03 0.50.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525823/ddc43169-5235-5145-b22c-886a3ef64826.png)
④PC1がPC0に対して応答する
![スクリーンショット 2021-12-03 0.50.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525823/9d081386-db52-6b4d-6f9a-09a10d186ed6.png)

このようにPacket Tracerでは、ただ機器を繋げて疎通をするだけでなく実戦に近い形でパケットの取得やトラブルシューティングをしてみるといったことも可能です。

### 4.3 シミュレーションモードで通信の流れを可視化する
4.2ではSnifferというデバイスを利用してパケットをキャプチャしましたが、Packet Tracerにはシミュレーションモードという便利な機能があり、正直Snifferを利用する必要はあまりないと思います。便利な機能なのでシミュレーションモードも利用してみます。

画面右下にRealtimeとSimulationというボタンが並んで配置されています。今回はSimulationモードに切り替えて4.2と同様にPC0からPC1にpingを実行してみます。
![スクリーンショット 2021-12-03 23.35.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525823/d4f829ac-2e31-95a8-7213-83d25e6defac.png)

```
C:\>ping 192.168.0.2

Pinging 192.168.0.2 with 32 bytes of data:
```

pingの応答がなくなりました。疎通できなくなったわけではなく、時が止まっています。
画面右側のEvent Listを見るとPC0からICMPを送ろうとする過程でARP要求が発生していることが確認できます。この状態で再生ボタンを押すことで時間を進めることができます。

![スクリーンショット 2021-12-03 23.38.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525823/37700426-a77e-969a-e7bf-6cf6d2d40e05.png)

時間を進めるとEvent Listが追加されると共に、通信の流れを可視化することができます。
![ezgif.com-gif-maker.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525823/c5983c07-67fe-0b4b-c2cc-64ff38d62e3b.gif)

Event Listをクリックすることで、どのレイヤでどういった通信が行われているか確認することができるのでアニメーションで全体の流れを把握し、細かく中身をみたい部分はEvent Listから確認することでネットワークの学習にとても役立つ機能だと感じました。
![スクリーンショット 2021-12-03 23.49.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525823/1f5c4da5-ac2b-8fda-7dd8-948567c887f3.png)


### 4.4 VLANを設定する
最後にL2スイッチの機能としてVLANを簡単に試してみたいと思います。
VLANとは仮想的なLANを意味するもので同じスイッチ内でもポートごとにネットワークを分割することが出来る機能です。
今回はハンズオンが目的なので、細かい説明は抜きにしてとりあえず試してみます。

以下のような構成を用意しました。PC1とPC2が192.168.0.0/24、PC3とPC4が192.168.1.0/24のサブネットに属するように設定しています。

![スクリーンショット 2021-12-04 6.59.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525823/4df7dad8-c578-56ba-fb85-eb7eb1bce6e2.png)


スイッチのcliからVLANのdefaultの状態を確認してみます。すると、以下の通り全てのポートがVLAN 1に属することが確認できました。

```
Switch#enable
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
1002 fddi-default                     active    
1003 token-ring-default               active    
1004 fddinet-default                  active    
1005 trnet-default                    active    
```

この状態でPC1からPC2にpingを打つことでARP要求を発生させた場合、以下の図に示す通り全ての端末にARP要求が送られることがわかりました。4.2で説明した通り、L2スイッチはIPアドレスで経路の制御を行なっているわけではないので、サブネットを分割したとしても、L2スイッチからしたら一つのネットワークに過ぎないわけです。
そこで、L2スイッチ上で仮想的にネットワークを分割するためのVLANが必要となってきます。
![スクリーンショット 2021-12-04 6.07.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525823/91c66f66-d0d2-c6c9-5378-b2100c3bd071.png)


ネットワークを分割するため、VLAN 2を作成します。名前は適当にtest_vlanにします。

```
Switch>enable
Switch#configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.
Switch(config)#vlan 2
Switch(config-vlan)#name test_vlan
Switch(config-vlan)#end
```

作成したVLAN 2にPC3とPC4がつながっているポート(ここではFa0/3とFa0/4)を割り当てます。

```
Switch>enable
Switch#config terminal
Enter configuration commands, one per line.  End with CNTL/Z.
Switch(config)#interface FastEthernet0/3
Switch(config-if)#switchport access vlan 2
Switch(config-if)#exit
Switch(config)#interface FastEthernet0/4
Switch(config-if)#switchport access vlan 2
Switch(config-if)#end
```

VLANの割り当てが完了したら、再度VLANの状態を確認してみます。Fa0/3, Fa0/4がVLAN 2に割り当てられていることが確認できました。

```
Switch#show vlan

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Fa0/1, Fa0/2, 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    test_vlan                        active    Fa0/3, Fa0/4
1002 fddi-default                     active    
1003 token-ring-default               active    
1004 fddinet-default                  active    
1005 trnet-default                    active   
```

この状態でPC1からPC2にpingを打つことでARP要求を発生させた場合、以下の図に示す通りPC1からPC2へのみARP要求が発生していることが確認できました。仮想的にレイヤ２でネットワークを分割することができました。

![スクリーンショット 2021-12-04 6.56.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525823/65bb68e5-f4a4-37f2-aedf-09cdb61035c8.png)

VLANを設定しない場合だと、無駄なトラフィックが発生したり、PCのIPアドレスを変えることでサブネットの移動が可能な状態でした。VLANによってセキュリティやネットワークの効率が向上することを改めて確認することができました。

## 5. おわりに
当初の目的であったネットワーク機器を買わずにオンプレのハンズオンがしたいという願望を満たすことができたので個人的には満足しています。
今回はL2スイッチしか触れることができませんでしたが、他にもたくさんの機器が用意されているので、機会があればまた記事にしたいと思います。

明日は@RuyPKGさんです。