【CCNA】Cisco機器エミュレータ環境の構築（EC2+Ubuntu+GNS3）

## はじめに
CCNA学習においては、実際にCisco機器の動作を検証できる環境があると理解が深まります。
本記事の目的は、Amazon EC2+Ubuntu+GNS3を使用して、PCとインターネット環境さえあればいつでもどこでも動作検証を行えるエミュレータ環境を構築することです。

<font color="Red">
※GNS3を使用するうえで一番のネックは、CiscoIOSの用意です。
「会社がCiscoパートナー契約を結んでいる」または「会社や知り合いがCiscoルータを所有している」に当てはまらない場合はAmazonやヤフオク、メルカリなどでGNS3対応のIOS搭載ルータを購入する必要があります。出費が発生しますのであくまで自己責任で。。。
</font>


## 目次
1. [AWS環境を用意する](#Chapter1)
1. [Ubuntuサーバを構築する](#Chapter2)
1. [リモートデスクトップ(xrdp)の準備](#Chapter3)
1. [GNS3のインストール](#Chapter4)
1. [GNS3でCiscoルータのテンプレート作成](#Chapter5)
1. [さいごに](#finally)
1. [参考文献](#reference)


<a id="#Chapter1"></a>
## 1.AWS環境を用意する
AWSアカウント作成やVPC、サブネットなどの作成に関しては、本記事の主旨ではないため割愛します。


<a id="#Chapter2"></a>
## 2.Ubuntuサーバを構築する
AWSマネジメントコンソールで「EC2」のページにアクセスし、「インスタンスを起動」します。

以下のポイントを参考にEC2を作成します。

  - AMIは`Ubuntu Server 18.04 LTS (HVM), SSD Volume Type 64ビット(x86)`を選択（無料利用枠の対象）
  - インスタンスタイプは`t2.medium`以上を選択（無料利用枠対象のt2.microだと、後述のubuntuデスクトップが重すぎて動かない）
  - 自動割り当てパブリックIPは、無料利用枠に収める場合は`有効`とする（ただし停止起動のたびにパブリックIPが変わる）
  - EBSボリュームは`汎用 SSD(gp2) 8GiB`でよい
  - タグは`Name:gns3`でよい
  - セキュリティグループは`タイプ:全てのトラフィック`で`ソース:現在使用しているパブリックIP`をインバウンド許可　**※全開けでもよいが、非推奨・危険なので注意すること！**
  
参考：パブリックIPを確認するには：[あなたが現在インターネットに接続しているグローバルIPアドレス確認](https://www.cman.jp/network/support/go_access.cgi)

インスタンスが作成されたら、pemキーを使用してTeraTermなどでubuntuサーバにSSHログインします。なお、Ubuntu AMIのデフォルトユーザは`ubuntu`です。

以下の初期設定をおこないます。

```:最初のaptアップデート
$ sudo apt -y update && sudo apt -y upgrade
```

```:言語や時刻設定
$ sudo apt -y install language-pack-ja-base language-pack-ja ibus-mozc
$ sudo localectl set-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"
$ source /etc/default/locale
$ sudo apt -y install manpages-ja manpages-ja-dev
$ sudo timedatectl set-timezone Asia/Tokyo
```

```:パスワードとSSH認証設定
$ sudo passwd ubuntu　　　#パスワードは任意のものを指定
$ sudo vi /etc/ssh/sshd_config　　　#「PasswordAuthentication」のnoをyesに修正して保存
$ sudo systemctl restart sshd
```

<a id="#Chapter3"></a>
## 3.リモートデスクトップ(xrdp)の準備
xrdp設定については、こちらの記事を参考にさせていただきました。
参考：[Windows10→Ubuntu 18.04のリモートデスクトップ接続メモ](https://qiita.com/s5uishida/items/60eb626df030e33642f4)

以下の通りそれぞれパッケージをインストールして、rebootを実施します。

```:デスクトップ/xrdpパッケージをインストール
$ sudo apt install -y ubuntu-desktop
$ sudo apt install -y xrdp
```

```:aptアップデート
$ sudo apt -y update && apt -y upgrade
```

ここからは実際にリモートデスクトップ接続で使用するユーザに切り替えます。
今回は引き続き、`ubuntu`ユーザで接続するものとして進めます。

2種類のスクリプトを用意します（viコマンドによる新規作成と下記コピペでOK）

```:/home/ubuntu/u_setting.sh
cat <<EOF > ~/.xsessionrc
export GNOME_SHELL_SESSION_MODE=ubuntu
export XDG_CURRENT_DESKTOP=ubuntu:GNOME
export XDG_DATA_DIRS=/usr/share/ubuntu:/usr/local/share:/usr/share:/var/lib/snapd/desktop
export XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg
EOF
```

```:/home/ubuntu/g_setting.sh
sudo sed -e 's/^new_cursors=true/new_cursors=false/g' -i /etc/xrdp/xrdp.ini

cat <<EOF | \
sudo tee /etc/polkit-1/localauthority/50-local.d/xrdp-color-manager.pkla
[Netowrkmanager]
Identity=unix-user:*
Action=org.freedesktop.color-manager.create-device
ResultAny=no
ResultInactive=no
ResultActive=yes
EOF

sudo systemctl restart xrdp
sudo systemctl restart polkit
```

2種類のスクリプトを順に実行します。

```
$ sh /home/ubuntu/u_setting.sh
$ sh /home/ubuntu/g_setting.sh
```

xrdpサービスの確認と起動、自動起動有効化を行います。

```
$ systemctl status xrdp
$ sudo systemctl start xrdp　　　#既に起動していれば不要
$ sudo systemctl is-enabled xrdp
$ sudo systemctl enabled xrdp　　　#既に有効化されていれば不要
```

<a id="#Chapter4"></a>
## 4.GNS3のインストール
GNS3のインストールについては、公式ドキュメントを参考にしました。
参考：[GNS3 Linux Install](https://docs.gns3.com/docs/getting-started/installation/linux/#ubuntu-based-distributions-64-bit-only)

以下の通り実行します。

```:
$ sudo add-apt-repository ppa:gns3/ppa
$ sudo apt install gns3-gui gns3-server
```

2つ目のコマンドを実行した際、以下キャプチャのように
「root以外のユーザに、ubridgeとwiresharkの使用を許可するかどうか」を聞かれたら、どちらも「はい」を選択してEnterします。
<img width="600" alt="20201115_GNS3サーバ構築キャプチャ01.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/873566/ef195e5e-3d50-accb-4828-2059f911633d.png">
<img width="600" alt="20201115_GNS3サーバ構築キャプチャ02.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/873566/f68ec2c8-f1ce-9bdf-35e1-4a4cea5788d6.png">

CUIによる設定は以上で完了です。OSをrebootします。

```:
$ sudo reboot
```


GNS3サーバが起動してきたら、次は自PCからGNS3サーバへリモートデスクトップ接続します。

コンピュータを識別できません警告は「はい」を押下。
<img width="300" alt="20201115_GNS3サーバ構築キャプチャ03.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/873566/39460815-a9d9-a56c-3e92-3de92c2433c3.png">

xrdpの認証画面が表示されるので、
`username:ubuntu`
`password:設定したパスワード`
を入力してOKを押下。
<img width="200" alt="20201115_GNS3サーバ構築キャプチャ04.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/873566/567f1004-5dc0-8ef3-6c99-431ef573d003.png">

ubuntuのデスクトップが表示されます。初回のセットアップ画面が出てきますが右上の「Next」でスキップします。
<img width="400" alt="20201115_GNS3サーバ構築キャプチャ07.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/873566/9ff471da-5903-82af-26c6-af802d4fdbe0.png">

デスクトップにて[Ctrl]＋[Alt]＋[t]キーの同時押しでUbuntuターミナルを起動し、`$ gns3`を入力実行します。
<img width="300" alt="20201115_GNS3サーバ構築キャプチャ08.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/873566/4f0af410-d411-3b5f-ba16-0c2b628a0806.png">


GNS3のセットアップウィザードが表示されるので、`Run appliances on my local computer`を選択して「Next」を押下します。
保存先パスやポート設定などはデフォルトのまま進み、最後に「Finish」を押下します。
<img width="200" alt="20201115_GNS3サーバ構築キャプチャ12.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/873566/5f48def9-f24b-786e-5182-f86f08448cfa.png">

セットアップが完了し、GNS3を使用できるようになります。
<img width="300" alt="20201115_GNS3サーバ構築キャプチャ13.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/873566/5d624762-0ab1-abf4-2173-7099cdbf33ab.png">


<a id="#Chapter5"></a>
## 5.GNS3でCiscoルータのテンプレート作成
こちらの記事を参考にさせていただきました。（というかほぼそのままです、ごめんなさい）
参考：[ネットワークエンジニアとして 「GNS3 - Setup」]
(https://www.infraexpert.com/info/gns3z4.html)

また、ここではCisco 3745のIOSイメージをあらかじめWinSCPでubuntuサーバ内に配置しています。

GNS3メニューの Edit から Preferences を選択します。
<img width="300" alt="20201115_GNS3サーバ構築キャプチャ14.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/873566/3ddd4242-0315-6dd7-03ae-f73f4b5a75fe.png">

Dynamipsの IOS routers を選択したら、下の「New」を押下します。
<img width="500" alt="20201115_GNS3サーバ構築キャプチャ15.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/873566/961e263e-f169-03fc-6e49-8a63ce1ec7cd.png">

IOS image：New Image を選択し、CiscoルータのIOSファイルを指定して「Next」を押下します（.binファイルを選択するとdecompressメニューが出て、自動で.imageファイルにしてくれる）
<img width="300" alt="20201115_GNS3サーバ構築キャプチャ16.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/873566/fba9132b-0b94-654d-3c30-c62a2bfc6664.png">

Name and platform：デフォルトのまま「Next」を押下します。
<img width="300" alt="20201115_GNS3サーバ構築キャプチャ17.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/873566/960f1e35-bd70-f4c7-9f68-3f8f8cff77d3.png">

Memory：デフォルトのまま「Next」を押下します。
<img width="300" alt="20201115_GNS3サーバ構築キャプチャ18.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/873566/d22e1da3-dceb-0620-6538-4def3c60ea88.png">

Network adapters：お好みでイーサネットインターフェースを追加（後で変更可）して「Next」を押下します。
<img width="300" alt="20201115_GNS3サーバ構築キャプチャ19.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/873566/7de7c3b8-e615-c743-b13f-d6c289f2991a.png">

WIC modules：お好みでシリアルインターフェースを追加（後で変更可）して「Next」を押下します。
<img width="300" alt="20201115_GNS3サーバ構築キャプチャ20.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/873566/981e721d-dcbd-ac52-a7bd-1bce89d5fa57.png">

Idle-PC：この設定はホストOS側のCPU高騰を防止するための設定です。「Idle-PC finder」をクリックして、設定が自動入力されたら下の「Finish」を押下します。
<img width="300" alt="20201115_GNS3サーバ構築キャプチャ21.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/873566/3aba7633-b301-2a51-30c5-885ca347324d.png">

これでCiscoルータのテンプレートが作成されたので、GNS3でルータを使用できるようになります。


<a id="#finally"></a>
## さいごに
冒頭でも書きましたが、CiscoIOSイメージの入手は人によってはハードルが高いかと思います。
私の場合、会社に研修用のCisco 3745実機があったので、そこからIOSイメージを吸い出したものを使用しました。

また、Cisco 3745のIOSイメージを使えばスイッチのテンプレートも作成できるみたいで、vlanの検証なども可能なようです。

<a id="#reference"></a>
## 参考文献
本記事はこちらの文献を参考に執筆しました。この場を借りてお礼申し上げます。

- [Windows10→Ubuntu 18.04のリモートデスクトップ接続メモ](https://qiita.com/s5uishida/items/60eb626df030e33642f4)
- [Ubuntu/WindowsからUbuntuにリモートデスクトップ接続する](https://linux.just4fun.biz/?Ubuntu/Windows%E3%81%8B%E3%82%89Ubuntu%E3%81%AB%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B)
- [ネットワークエンジニアとして 「GNS3 - Setup」]
(https://www.infraexpert.com/info/gns3z4.html)