GNS3でArista cEOSを動かす

ネットワークシミュレータ [GNS3](https://www.gns3.com/) はCCNAなどのCisco資格を取る人には必須だ！とよく言われますが、Cisco IOSに限らずいろんなネットワークOSを動作させることができます。例えば

- Cisco IOS-XRv
- Juniper vSRX
- Arista vEOS
- Arista cEOS
- RouterOS

などがあります。また、Linuxベースで動作しているGNS3 VMを使うことで、Dockerイメージを取り込んで使うことができます。今回は、Arista NetworksさんからDockerイメージとして提供されているcEOSをGNS3で動かしてみたいと思います。

（あまりEOSに関する記事って見かけないので、使う人が増えるきっかけになればいいなぁ…って）

## cEOSのダウンロード
まずはcEOSのイメージを https://www.arista.com/en/support/software-download からダウンロードしてきます。無償でダウンロードできますがアカウント登録が必要です。
本稿執筆時点ではGNS3で動作確認できているのは4.20.5Fなので、このバージョンの「cEOS-lab.tar.xz」をダウンロードしてきます。
![download_ceos.png](https://qiita-image-store.s3.amazonaws.com/0/323386/c4f12a9e-6028-7a48-b995-3d1e5e109967.png)

## GNS3 VMへの転送

GNS3 VMのコンソールを開きます。私はVMware Fusionを使っていますので、VirtualBoxを使っている方はウィンドウが違うかと思いますが、表示される内容は同じです。ここでは以下の「ssh」と「Password」の行をメモしておきます。
![gns3vm_info.png](https://qiita-image-store.s3.amazonaws.com/0/323386/3deba220-f2b4-0e6e-052b-52b096e368f9.png)

先ほどダウンロードしたcEOS-lab.tar.xzをGNS3 VMにSCPで転送します。このときの接続ユーザ名と接続先アドレスは上記の情報を使用します。私の環境では以下のようなコマンドを使用しました。

```
$ scp cEOS-lab.tar.xz gns3@192.168.44.128:/tmp
Password:（上図の通り、パスワードにgns3を指定）
cEOS-lab.tar.xz                     100%  287MB  27.0MB/s   00:10
```

## GNS3 VMへのcEOS-lab Dockerイメージの組み込み

VMコンソール上でEnterキーを押すか、またはSSHで接続すると以下のようにメニュー画面が表示されます。ここでカーソルキーを使って「Shell」を選択してEnterキーを押下すると以下のようなプロンプトが表示されます。

```
gns3@gns3vm:~$
```

先程SCPで転送した`cEOS-lab.tar.xz`をdockerイメージとして取り込みます。

```
gns3@gns3vm:~$ docker import /tmp/cEOS-lab.tar.xz ceosimage:4.20.5F
sha256:abaf4912fa0bd4cd7b2de59993c5b77a3257f39595455ddef1f765770552f05d
```

dockerイメージを以下のコマンドでrunさせます。

```
gns3@gns3vm:~$ echo "rm /etc/systemd/system/getty.target.wants/getty@tty1.service" | \
docker run --name=ceos-container -e CEOS=1 -e container=docker -e EOS_PLATFORM=ceossim -e SKIP_ZEROTOUCH_BARRIER_IN_SYSDBINIT=1 -e ETBA=1 -e INTFTYPE=eth -i ceosimage:4.20.5F sh
```

正常にrunできたコンテナをGNS3から呼び出せるように登録します。

```
gns3@gns3vm:~$ docker commit --change='CMD ["/sbin/init"]' --change='VOLUME /mnt/flash' ceos-container ceosimage:GNS3
sha256:3713d365745645cf8cbd1cfd5841dc17baf5efd3726d2954f063a7d6aeb0b329
```

最後に、登録に使ったインスタンスを削除します。

```
gns3@gns3vm:~$ docker rm ceos-container
ceos-container
```

## GNS3への登録

ではGNS3で動かしてみましょう。まずはノードが使えるように登録します。Switchesのドロップダウンから「Available appliances」をクリックします。
![スクリーンショット 2018-12-08 10.33.54.png](https://qiita-image-store.s3.amazonaws.com/0/323386/5ded8ae3-a7b3-f069-fba4-f49258d11794.png)

cEOSのノードをトポロジエリアにドラッグします。
![スクリーンショット 2018-12-08 10.35.16.png](https://qiita-image-store.s3.amazonaws.com/0/323386/9efcc283-ac35-75ef-40de-0e63161f96e6.png)

「Add Appliance」画面が表示されます。そのまま「Next」をクリックします。
![スクリーンショット 2018-12-08 10.36.05.png](https://qiita-image-store.s3.amazonaws.com/0/323386/262c00c2-0b62-ed4c-ca39-841bcab55486.png)
次も「Next」
![スクリーンショット 2018-12-08 10.36.14.png](https://qiita-image-store.s3.amazonaws.com/0/323386/c4cf627b-da32-11c3-89d5-5b64c327113b.png)
次も「Next」
![スクリーンショット 2018-12-08 10.36.19.png](https://qiita-image-store.s3.amazonaws.com/0/323386/a09212de-c221-9966-1c79-0df4c2ba8e18.png)
最後に「Finish」をクリックします。
※実は先程までの実行すべきコマンドはすべてここに記載があります :sweat_smile:
![スクリーンショット 2018-12-08 10.36.26.png](https://qiita-image-store.s3.amazonaws.com/0/323386/b1bed737-fe80-fd14-ef33-7b6413202686.png)
「cEOS installed!」が表示されたらインストール完了です。
![スクリーンショット 2018-12-08 10.36.33.png](https://qiita-image-store.s3.amazonaws.com/0/323386/2ba0e295-4797-b736-da72-1207a07ca506.png)

## 動作確認

Switchesのドロップダウンリストを「Available appliances」から「Installed appliances」に変更します。
![スクリーンショット 2018-12-08 10.36.59.png](https://qiita-image-store.s3.amazonaws.com/0/323386/02c75f19-7cd2-fc09-9bab-aae82713d436.png)
cEOSがノード一覧に追加されていることを確認します。
![スクリーンショット 2018-12-08 10.38.32.png](https://qiita-image-store.s3.amazonaws.com/0/323386/1ad6b32a-8afa-c425-b7db-19d6fb085906.png)
あとは他のノードと同じようにトポロジエリアに登録して、Startさせてみてください。問題なければサマリ表示で緑ランプが点灯（動作中）になります。
![スクリーンショット 2018-12-08 10.41.18.png](https://qiita-image-store.s3.amazonaws.com/0/323386/20f253c8-73a3-5ad6-b98d-e0367863d400.png)

コンソールを開いて、ユーザ名admin（パスワードなし）でログインすると、cEOS 4.20.5Fが動作していることがわかります。

```
localhost login: admin
localhost>show version
Arista cEOSSim
Hardware version:
Serial number:       N/A
System MAC address:  02f6.21ac.c73b

Software image version: 4.20.5F
Architecture:           i386
Internal build version: 4.20.5F-8127914.4205F
Internal build ID:      4d6b4859-39b5-4581-993b-f84ac0736664

cEOS tools version: 1.0

Uptime:                 45 minutes
Total memory:           4029500 kB
Free memory:            3115376 kB
```

あとは自由に ~~遊んで~~ 試してみましょう！IOSやIOS-XRv、vSRXやvyOSなどマルチベンダ環境での動作確認や、cEOSばかりで大きめのトポロジを作るなど。vEOSのようなVMではなく軽量なdockerコンテナですので、より多くのノードを動かすことができます。
私のMacbookAir（Mid2013 Core-i7 RAM8GB）でGNS3 VMにRAM4GB割り当てた環境でも、vEOSだと２ノード起動（まともに動作は難しい）が限界でしたが、cEOSなら７ノードまで問題なく動作させることができました。

## 使用上の注意

GNS3で登録したcEOSは、内部ではEthernet1からEthernet7までの７つの物理インターフェースが使用できるようになっています。

```
localhost>show interface status
Port       Name        Status       Vlan     Duplex Speed  Type            Flags
Et1                    connected    1        full   unconf EbraTestPhyPort
Et2                    connected    1        full   unconf EbraTestPhyPort
Et3                    connected    1        full   unconf EbraTestPhyPort
Et4                    connected    1        full   unconf EbraTestPhyPort
Et5                    connected    1        full   unconf EbraTestPhyPort
Et6                    connected    1        full   unconf EbraTestPhyPort
Et7                    connected    1        full   unconf EbraTestPhyPort
```

ですが、GNS3でリンクを接続できるポートには「eth0」が存在します。
![スクリーンショット 2018-12-08 10.45.32.png](https://qiita-image-store.s3.amazonaws.com/0/323386/40d2d619-5576-3682-5376-12d6e7154133.png)

これは実機で言うところのマネジメントポートに相当するようです。ですので、他のノードとつないで使う場合はeth0は使わないようにする必要があります。
なお、ManagementインターフェースはcEOSでは使えないらしく、設定すらできないようです。

```
localhost>en
localhost#conf t
localhost(config)#int management0
% Unavailable command (not supported on this hardware platform)
```