ネットワーク実験室の構築（macOSへGNS3の導入）

# GNS3とは
「**Graphical Network Simulator（GNS3）**」とは、クロスプラットフォームのグラフィカルネットワークシミュレータです。
GNS3を使えば、Cisco IOS、Juniper、MikroTik、Arista、およびVyattaなどの**実際のネットワークオペレーティングシステム**を使い、仮想ネットワークをPC上で設計およびテストを行うことができます。
GNS3では、ハードウェアのエミュレートを行っています。すなわち、PC上で実際のネットワークオペレーティングシステム（たとえば、Cisco IOS）イメージファイルを実行させることができます。したがって、理論的には、Cisco IOSバージョンがサポートするすべてのプロトコルまたは機能について使用することが可能です。

# プレインストール
## 推奨CISCO IOS イメージ
プレインストール作業は、ルータのイメージファイルを用意することです。ルータなどをエミュレートするには、そのネットワークオペレーティングシステムのイメージが必要になります。

<details><summary>推奨されている Cisco IOS イメージ</summary><div>

|Ciscoルータ|推奨IOS|必要RAM|アイドルPCの提案値|MD5ハッシュ値|
|---|---|---|---|---|
|Cisco 1700|c1700-adventerprisek9-mz.124-25d.bin|128 MB|0x80358a60|3ed8d56a8757771105a56070e4147716|
| |c1700-adventerprisek9-mz.124-15.T14.bin|160 MB|0x824a4dc4|351190de8764263e85a2b50718f394fd|
|Cisco 2600|c2600-adventerprisek9-mz.124-25d.bin|128 MB|0x80519c48|8eca1f6fe57dfb3c3cf3568c0e475853|
| |c2600-adventerprisek9-mz.124-15.T14.bin|256 MB|0x8027ec88|12b8548b23e2ec593652ae9310ac797f|
|Cisco 3620|c3620-a3jk8s-mz.122-26c.bin|64 MB|0x603a8bac|dd34b958ad362ef54ba48b187f4c97b4|
|Cisco 3640|c3640-a3js-mz.124-25d.bin|128 MB|0x6050b114|db9f63ca1b46d18fb835496bfffe608a|
|Cisco 3660|c3660-a3jk9s-mz.124-25d.bin|192 MB|0x606071f8|4ac7e947f13c189d746149dc74992890|
| |c3660-a3jk9s-mz.124-15.T14.bin|256 MB|0x6076e0b4|39950b7a563aa08e94a168260409f1e6|
|Cisco 2691|c2691-adventerprisek9-mz.124-25d.bin|192 MB|0x60a48cb8|a8e1f5821d87456595488d6221ce42e5|
| |c2691-adventerprisek9-mz.124-15.T14.bin|256 MB|0x60bcf9f8|91388104d7276ad09204e36d2dfcf52d|
|Cisco 3725|c3725-adventerprisek9-mz.124-25d.bin|128 MB|0x602467a4|ac3d313d3caff5beeee244b81d2c024c|
| |c3725-adventerprisek9-mz.124-15.T14.bin|256 MB|0x60c09aa0|42baf17af10d9a1471bf542f0bfd07c7|
|Cisco 3745|c3745-adventerprisek9-mz.124-25d.bin|256 MB|0x60aa1da0|563797308a3036337c3dee9b4ab54649|
| |c3745-adventerprisek9-mz.124-15.T14.bin|256 RAM|0x602701e4|a696619869a972ec3a27742d38031b6a|
|Cisco 7200|c7200-adventerprisek9-mz.152-4.M7.bin|512 MB| |1fe8d7d82cb8261a7487d543f172b985|
| |c7200-a3jk9s-mz.124-25g.bin|256 MB| |3a78cb61831b3ef1530f7402f5986556|
| |c7200-adventerprisek9-mz.124-24.T5.bin|256 MB|0x606df838|3c4148f62acf56602ce3b371ebae60c9|

</div></details>

## Cisco IOS
Cisco IOSの特定バージョンの機能を調べるなど、特別な目的が無い限り、Cisco 7200ルータの使用が推奨されます。
また、SVI（VLAN）インターフェイスを使用する場合には、`NM-16ESW`モジュールを取り付けたCisco 3725を使用することが推奨されています。

* 参考：Cisco Feature Navigator, [https://cfn.cloudapps.cisco.com/ITDIT/CFN/jsp/SearchBySoftware.jsp](https://cfn.cloudapps.cisco.com/ITDIT/CFN/jsp/SearchBySoftware.jsp)
* 参考：Dynamips用のCisco IOSイメージ, [https://docs.gns3.com/1-kBrTplBltp9P3P-AigoMzlDO-ISyL1h3bYpOl5Q8mQ/index.html](https://docs.gns3.com/1-kBrTplBltp9P3P-AigoMzlDO-ISyL1h3bYpOl5Q8mQ/index.html)

Cisco IOSの名前は、最大7つの主要フィールドとそれに続く.bin拡張子で構成されています。

`[Platform]-[Feature Set]-[Memory location][Compression format].[Train
number]-[Maintenance release].[Train identifier].bin`

`show version`コマンドの出力結果は、次の通りです。

```
Cisco IOS Software, 7200 Software (C7200-ADVENTERPRISEK9-M), Version 15.2(4)S6, RELEASE SOFTWARE (fc1)
```

* 参考：Cisco IOSバージョンと命名の概要, [http://www.ciscopress.com/articles/article.asp?p=2106547](http://www.ciscopress.com/articles/article.asp?p=2106547)

# 環境情報
今回、GNS3のインストールを行うmacOS X環境は、次の通りです。

```
$ sw_vers
ProductName:	macOS
ProductVersion:	12.6.1
BuildVersion:	21G217
```

OS XバージョンのGNS3にはオールインワンパッケージがありません。このため、必要なパッケージを1つずつインストールする必要があります。

|アプリケーション|バージョン|Download from...|
|---|---|---|
|GNS3|Version 2.2.35.1|https://github.com/GNS3/gns3-gui/releases/|
|GNS3 VM|VMware Workstation and Fusion Version 2.2.35.1|https://www.gns3.com/software/download-vm|
|Wireshark|4.0.1 Intel 64|https://1.eu.dl.wireshark.org/osx/|
|VMware Fusion|13.0.0|https://www.vmware.com/jp/products/fusion/fusion-evaluation.html|

Cisco IOSルータを使用し基本的なGNS3トポロジだけを作成したい場合には、ローカル（Dynamips）インストールで十分です。すなわち、GNS3 GUI（`GNS3-2.2.35.1.dmg`）のみをインストールし、GNS3 VM（`GNS3.VM.VMware.Workstation.2.2.35.1.zip`）ならびに、`VMware Fusion`を使用しないことを意味します。

* 参考：GNS3 WorkBench, [https://rednectar.net/gns3-workbench/](https://rednectar.net/gns3-workbench/)

# インストール
## Wiresharkのインストール
ダウンロードした`Wireshark 4.0.1 Intel 64.dmg`を使用してmacOSにインストールします。

### 手順
1 `Wireshark 4.0.1 Intel 64.dmg` ファイルをダブルクリックして開きます。ディスク イメージの内容が表示されます。

![スクリーンショット 2022-11-29 23.26.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/51ff5a46-0fb3-5ac2-81e2-1193de5bb9d0.png)

2 Finder ウィンドウで、[Wireshark] アイコンを [アプリケーション] フォルダにドラッグします。

## VMware Fusionのインストール
詳細は割愛します。

* 参考：Fusion のインストール, [https://docs.vmware.com/jp/VMware-Fusion/11/com.vmware.fusion.using.doc/GUID-ACC3A019-93D3-442C-A34E-F7755DF6733B.html](https://docs.vmware.com/jp/VMware-Fusion/11/com.vmware.fusion.using.doc/GUID-ACC3A019-93D3-442C-A34E-F7755DF6733B.html)
* 「VMware Player」を使用するには、追加のフリーソフトウェア（`VMware VIX`）, [https://www.vmware.com/support/developer/vix-api/](https://www.vmware.com/support/developer/vix-api/)をインストールする必要があります。

## GNS3のインストール
ダウンロードした`GNS3-2.2.35.1.dmg`を使用してmacOSにインストールします。

### 手順

1 ファイルをダブルクリックして開きます。
<img width="600" alt="スクリーンショット 2020-07-14 10.15.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/eaf1cb07-2741-6293-8595-e4fa25b36790.png">

2 Finder ウィンドウで、[GNS3] アイコンを [アプリケーション] フォルダにドラッグします。

* 参考：macOS Sierra: 開発元が未確認のアプリケーションを開く, [https://support.apple.com/kb/PH25088?locale=ja_JP](https://support.apple.com/kb/PH25088?locale=ja_JP)

## GNS3 VMの仮想イメージをインストール
ダウンロードした`GNS3.VM.VMware.Workstation.2.2.35.1.zip`を任意の場所に展開します。
[**注意**]GNS3とGNS3 VMのバージョンを必ず一致させてください。

### 手順
1 展開されたファイルに`GNS3 VM.ovf`が含まれていることを確認します。
注釈：OVF（Open Virtualization Format）とは、規格化された仮想マシンのファイルデータの集まりです。

2 VMware Fusionを起動します。［インポート］ ウィザードを開きます。これを行うには、［ファイル］ メニューの ［インポート］ を選択します。

3 インポートするパッケージ（`GNS3 VM.ovf`）を選択し、［続ける］ をクリックします。
<img width="640" alt="スクリーンショット 2020-06-28 15.42.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/143ecb94-0096-1107-b295-85c472c4f6ae.png">

4 `仮想マシンの構成が完了しました。`と表示されれば終了です。
<img width="640" alt="スクリーンショット 2020-06-28 15.43.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/4a107872-17f4-8595-3c25-2490b6944a61.png">

インポートが完了すると`GNS3 VM`が起動します。
<img width="1024" alt="スクリーンショット 2020-07-14 10.39.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/b6fb427b-2dfe-c9df-e13d-0ca13b0d6ded.png">


### GNS3 VMのアップグレード
すでにGNS3 VMを使用している場合、[Upgrade]メニューから最新バージョンへ更新することが可能です。

1 GNS3 VMを起動し、ステータス表示画面[Display VM information]を表示させ[OK]を選択。
<img width="1024" alt="スクリーンショット 2020-06-28 15.44.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/17c7462c-4033-c2f2-083a-5aa8ed98bb35.png">

2 キーボードカーソルキーにて[Upgrade]を選択。
<img width="1024" alt="スクリーンショット 2020-07-14 10.19.01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/a7514e08-6a93-e3fb-6d36-1ae9e0781e2b.png">

3 警告メッセージが表示される。アップグレード前に失敗時に備えて仮想イメージのスナップショットを取得するように推奨されています。スナップショットを取得後に、[Yes]を選択。

```
PLEASE SNAPSHOT THE VM BEFORE RUNNING THE UPGRADE IN CASE OF FAILURE. The server will reboot at the end of the upgrade process. Continue?
```

<img width="1024" alt="スクリーンショット 2020-07-14 10.19.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/a379c0b5-5f97-eaef-bd78-17bc9069d4e3.png">

4 更新後のバージョンを選択。ここでは、「v2.2.11」を選択します。
<img width="1024" alt="スクリーンショット 2020-07-14 10.48.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/fff2f86a-1908-4a61-2249-c1c2da6a1211.png">

5 以降は自動でGNS3 VMの更新、再起動が行われます。
<img width="1024" alt="スクリーンショット 2020-07-14 10.39.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/02cf1405-709f-8c0e-fc95-ec9b64e869a7.png">

# GNS3 VMセットアップウィザード
### 手順
1 GNS3の初回起動時にGNS3セットアップウィザードが表示されます。セットアップウィザードは、［ファイル］ メニューの ［Help］ > [Setup Wizard] を選択していつでも手動で起動することができます。
<img width="531" alt="スクリーンショット 2020-06-28 15.50.36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/8d07f7a6-4491-fbbc-dc79-d317e8d6a7b5.png">
[オプション] `Don't show this again`チェックボックスをオンにすると、セットアップウィザードの表示を無効にできます。  

2 セットアップウィザードで、`Run appliances in a virtual machine`を選択し、[Next]をクリックします。

3 GNSのローカルサーバ設定を行います。`gns3server`ファイルへのパスが正しいことを確認し、[Host binding:]と[Port:]を選択します。設定変更を行っていない場合、これらの項目は初期設定のままで問題ありません。[Next]をクリックします。
<img width="531" alt="スクリーンショット 2020-06-28 15.51.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/bc5d488e-5d4c-ff41-276b-e991a0b9bf19.png">

4 接続確認画面が表示されます。成功したら[Next]をクリックします。
<img width="531" alt="スクリーンショット 2020-06-28 15.52.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/e751fe5c-bc2f-84e8-eeec-ae13f0b954c3.png">

5 使用する仮想化ソフトウェア（Virtualization software:）を選択します。この例では、`VMware（recommended）`が選択されています。
<img width="728" alt="スクリーンショット 2020-06-28 15.55.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/87229d10-7f5d-695e-8a61-e44b5ad861f6.png">

セットアップウィザードは、`VMware Fusion`に`GNS3 VM`が存在することを検出します。`GNS3 VM`が表示されていない場合は、[Refresh]ボタンをクリックして、`GNS3 VM`が`VMware Fusion`に正しくインポートされたことを確認してください。
`vCPU cores:`と`RAM size:`の値を変更し、[Next]をクリックします。
[**重要**] 使用可能なcCPUコアと、RAMは、使用しているPCの物理的なサイズの半分程度を設定するのが望ましいです。

６ セットアップウィザードは`Summary`ページを表示します。`Please Wait`と表示される場合があります。これは、GNS3がGNS3 VMを起動しているためです。[Finish]ボタンをクリックして、作業が完了です。
<img width="728" alt="スクリーンショット 2020-06-28 15.56.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/c8bb0189-5eca-e724-3ce5-dffb53f40c23.png">

# New templateのセットアップ
## 手順
1 GNS3セットアップウィザードは、`New template`ウィンドウを表示します。`New template`は、［ファイル］ メニューの ［File］ > [New template] を選択していつでも手動で起動することができます。
<img width="900" alt="スクリーンショット 2019-04-05 11.03.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/294810/60b56754-7ece-5bc7-0668-735adaaff13d.png">
`Install an appliance from the GNS3 server (recommended)`を選択肢、[Next]をクリックします。

２ `Appliances from server`ウィンドウが表示されます。ここには、使用できるさまざまなApplianceが一覧表示されます。最新の情報を表示させるため、`Update from online registry`ボタンをクリックします。
<img width="900" alt="スクリーンショット 2019-04-05 11.07.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/294810/a2b1bbd3-dd68-5d75-c41e-ac498a499ffb.png">

3 Appliance情報の更新が完了すると、`Appliances are up-to-date!`ウィンドウが表示されます。[OK]をクリックし、閉じます。
<img width="301" alt="スクリーンショット 2019-04-05 11.09.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/294810/9e29c352-5c56-bcf7-45f1-1e5c1b7e5513.png"> 　<img width="285" alt="スクリーンショット 2019-04-05 11.10.34.png" src="https://qiita-image-store.s3.amazonaws.com/0/294810/7e312e60-2d87-8f92-d451-67d98b0646f3.png">

4 ここでは、`c7200-adventerprisek9-mz.124-24.T5.bin`のイメージをインストールします。`Routers`を選択し、`Cisco 7200`を選択して[Install]をクリックします。
<img width="900" alt="スクリーンショット 2020-06-28 16.07.21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/2d1e5c87-3222-b325-a267-f23f56e86343.png">

5 `Server`ウィンドウが表示されます。`Install the appliance on the GNS3 VM (recommended)`を選択し、[Next]をクリックします。
<img width="900" alt="スクリーンショット 2020-06-28 16.08.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/b7285d20-a707-d94e-39f5-1cbccaeb64ba.png">

6 `Required files`ウィンドウが表示されます。`Allow custom files`チェックボックスをONにし、`c7200-adventerprisek9-mz.124-T5.image`を選択します。[Import]ボタンをクリックし、あらかじめダウンロードしておいた`c7200-adventerprisek9-mz.124-T5.bin`のファイルを選択します。
<img width="900" alt="スクリーンショット 2020-06-28 16.12.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/2091325d-6fbb-1c02-4dc3-2bded8c77eec.png">

`Allow custom files`チェックボックスをONにした場合、次の警告が表示されます。内容を確認し、[Yes]をクリックします。
<img width="420" alt="スクリーンショット 2019-04-05 11.25.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/294810/f456b642-58a5-cef3-36ac-ec9ddf68f3f2.png">

7 ダウンロードしておいた`c7200-adventerprisek9-mz.124-T5.bin`とGNS3上のハッシュ値データベースにおける`c7200-adventerprisek9-mz.124-T5.image`のMD5ハッシュ値の値が異なるため、警告画面が表示されます。[Yes]をクリックし、先に進みます。
<img width="420" alt="スクリーンショット 2020-06-28 16.12.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/4e8361a1-fd6f-f4b9-05f1-13f3732da615.png">

8 `Required files`ウィンドウにおける`Status`項目の値が`Ready to install`に変わっていることを確認し、[Next]をクリックします。
<img width="900" alt="スクリーンショット 2019-04-05 11.31.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/294810/9b1a27a3-4494-cd76-023a-772e190c2f3c.png">

9 `Would you like to install Cisco 3660 version 124-15.T14?`が表示されます。[Yes]をクリックします。
<img width="420" alt="スクリーンショット 2019-04-05 11.33.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/294810/ef71669b-24ed-b539-a604-02843d608527.png">

10 `Usage`ウィンドウが表示されます。`The template will be available in the router category.`の表示を確認し、[Finish]をクリックします。
<img width="900" alt="スクリーンショット 2019-04-05 11.34.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/294810/d4385a54-7b2a-57ad-a23b-ff81570941d9.png">

11 `Cisco 3660 124-15.T14`テンプレートの作成成功を示すウィンドウが表示されます。
<img width="420" alt="スクリーンショット 2019-04-05 11.34.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/294810/f6e02fc3-3283-c96d-c28e-38ad69d777e0.png">

## トラブルシューティング
GNS3ならびにGNS3 VMのバージョンを更新した際に、[Servers Summary]においてGNS3 VMインジケーターがグリーンにならない問題に遭遇しました。
この状態で「New templateのセットアップ」を試みた場合、次のエラーが表示されます。

```
Error while getting the list of remote images: Cannot connect to compute 'GNS3 VM (GNS3 VM)' with request GET /dynamips/images
```

<img width="289" alt="スクリーンショット 2020-07-08 14.14.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/95bf16a8-be53-52a3-07ec-965fc05143e5.png">

同様の問題に遭遇した場合のチェック項目について、次に記載します。

- [ ]  ホストマシンからGNS3 VMに対してpingを実行し、疎通確認を行う。
- [ ]  `GNS3 VM preferences`においてポート番号の設定が正しいことを確認する。
<img width="980" alt="スクリーンショット 2020-07-08 14.27.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/2468da2f-93c9-ed5f-98fb-9b763882f9dd.png">

# プロジェクトの作成
## 手順
1 `New project`ウィンドウが表示されます。新しいプロジェクトに名前を付けて、[OK]をクリックします。
<img width="520" alt="スクリーンショット 2019-04-05 11.57.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/294810/0bd112e3-1610-59b7-2798-b0069e3518c1.png">

2 GNS3ワークスペースが表示されます。
<img width="1374" alt="スクリーンショット 2019-04-05 11.58.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/294810/c73b48f6-b459-ed5f-02a9-d08b5a4b56a8.png">

3 `Devices`ツールバーに注目してください。このツールバーでは機能別にデバイスを分類しています。プロジェクトへデバイスノードを追加するには、`Devices`ツールバーのアイコンをクリックし、設定済みデバイスのリストを表示させ、デバイスをワークスペースにドラッグします。
<img width="396" alt="スクリーンショット 2019-04-05 12.00.33.png" src="https://qiita-image-store.s3.amazonaws.com/0/294810/89e1e576-6dc0-65fc-295b-4a77b441a5a0.png">

ツールバーのデバイスタイプは、左から順に次のとおりです。

* Routers
* Switches
* End Devices
* Security Devices
* All Devices
* Add a Link

4 `All Devices`アイコンをクリックし、先ほどセットアップを行った`Cisco 3660 124-15.T14`テンプレートをワークスペースへドロップします。
<img width="1374" alt="スクリーンショット 2019-04-05 12.10.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/294810/94754083-e1be-22c0-3fbe-5f363a867427.png">

5 `Second Group`、`Third Group`ツールバーに注目してください。このツールバーでは機器の制御を行います。`Start/Resume all devices`ボタンをクリックし、ワークスペースにドロップした`R1`ルータを起動します。
<img width="306" alt="スクリーンショット 2019-04-05 12.10.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/294810/3388d43e-6d21-c596-99ae-6104219f8055.png">

ツールバーの制御機能は、左から順に次のとおりです。

* Snapshot
* Show interface labels
* Console connect to all devices
* Start/Resume all devices
* Suspend all devices
* Stop all devices
* Reload all devices

6 `Console connect to all devices`ボタンをクリックします。`R1`ルータのコンソールが立ち上がります。これで、**無事、完了**です。おつかれさまでした。
あとは、自由に実験するネットワークトポロジーを作成することができます。

# まとめ
「GNS3」はGPLv3ライセンスで配布されているオープンソースソフトウェアです。実ネットワークに影響を与えること無く、柔軟にネットワークの実験を行うことができます。
インストールを終えたら、まずは3つのルータから構成されるネットワークトポロジーを作成してみてください。
GNS3に用意されている`VPCS`（Virtual PC Simulator）や、追加インストールを行った`Wireshark`を使えば、より複雑なトポロジーに対する実験や、ネットワークパケットをキャプチャする検証が可能です。
引き続き、次の記事も参照いただければ幸いです。

* VLAN間ルーティング - Router on a Stick, https://qiita.com/v_avenger/items/85a4db548dbe090141c5
* Cisco スイッチに対するVLANとEIGRPを使った設定, https://qiita.com/v_avenger/items/b1a0b2afe82d949f2a17