XRvのインストールと使用方法

# はじめに
Cisco IOS XRは、高信頼が求められる通信事業者のネットワーク機器のOSとして広く普及している。[Cisco IOS XRv 9000ルータ](https://www.cisco.com/c/ja_jp/products/collateral/routers/asr-9000-series-aggregation-services-routers/datasheet-c78-734034.html)(以下、XRv)は、仮想化された汎用x86コンピューティングプラットフォームで動作し、IOS XRソフトウェア機能を提供する。本稿では、XRvのインストール方法を整理し、簡単な動作確認をする。なお、[GNS3](https://www.gns3.com/)(ネットワークシミュレータ)と組み合わせて動作させることもできるが、ハードウェアリソースが限られるため、本稿ではGNS3を使用しない方法を述べる。

# 環境
本稿では、以下の環境でXRvのインストールを実施した。

| 名前 | バージョン |
| ---- | ------- |
| MacBook Pro(Early 2015) | macOS High Sierra(10.13.6) |
| VirtualBox | 5.2.18 |
| IOS XRv 9000(デモ版) | 6.0.0 |

# VirtualBoxのインストール
VirtualBoxは仮想マシンを動作させることのできるソフトウェアである。XRvをVirtualBox上で仮想ルータとして動作させるため、[公式ページ](https://www.virtualbox.org/wiki/Downloads)からお使いの環境(本稿ではmacOS)に合わせてVirtualBoxをダウンロードし、インストールをする。VirtualBoxのインストール方法は[Qiitaでも多くの方が説明してくれている](https://qiita.com/tags/virtualbox)ので、ここでは割愛する。

# XRvのインストール
### XRvの入手方法
XRvの入手は容易ではないかもしれない。XRvはCisco社の製品であるが、かつては`iosxrv-k9-demo-x.y.z`というファイル名のデモ版が[Cisco Upload Page](https://upload.cisco.com/cgi-bin/swc/fileexg/main.cgi?CONTYPES=Cisco-IOS-XRv)からダウンロードできたようであるが、本稿執筆時(2018年8月16日現在)にはダウンロードファイルが存在しない。XRv 5.4以降のバージョンでは、ライセンス認証をしなければデモ状態(200kbps制限)として動作する([参考](https://www.cisco.com/c/ja_jp/td/docs/routers/virtual-routers/configuration/guide/b-xrv9k-cg/b-xrv9k-cg_chapter_0100.pdf))ので、製品版を入手してデモ状態で動作させれば良いのだが、Cisco.com ID(旧 CCO ID)にService Contractが必要で、特にCisco社のパートナー企業にお勤めでない場合は入手の敷居が高い。

### XRvの構築
本稿では、XRv デモ版(iosxrv-k9-demo-6.0.0.ova)をVirtualBox上で動作させる。手順は以下の通りである。

##### XRvのインポート
VirtualBoxを起動し、VirtualBoxマネージャーの`仮想アプライアンスのインポート`からiosxrv-k9-demo-6.0.0.ovaをインポートする。設定は後で変更するため、ひとまずインポートボタンを押し、XRvを構築する。
<img width="773" alt=" 2018-08-17 14.33.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/105429/6ca0d8d7-5929-dcde-c683-5e4be0016574.png">

##### XRvの設定変更
VitualBoxマネージャーの設定から下記変更を行う。

- 名前の設定
  - 「一般/基本」から「名前」を所望の値に変更する。ここでは`xrv`とした。
  <img width="887" alt=" 2018-08-17 14.40.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/105429/e251fe41-2c01-4ad7-7371-e2b1d5db58f9.png">

- システムリソースの設定
  - 「システム/マザーボード」の「起動順序」からフロッピーと光学のチェックを外す。
  - 「メインメモリー」を所望の値に変更する。ここでは必要最小限となる`2048MB`を割り当てた(2GB未満だとXRvの起動に失敗する。バージョンによって異なる場合があるので、起動に失敗したらより多くのリソースを割り当ててください)。
  <img width="887" alt=" 2018-08-17 14.43.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/105429/8dbf84d4-9e85-96dc-0b27-95c2e230c9a7.png">

  - 「システム/プロセッサー」の「プロセッサー数」を所望の値に変更する。ここでは必要最小限となる`1`を割り当てた(バージョンによって異なる場合があるので、起動に失敗したらより多くのリソースを割り当ててください)。
  <img width="887" alt=" 2018-08-17 14.43.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/105429/f5e70808-1a48-7cb9-9802-985eddac02ee.png">

- オーディオの設定
  - 「オーディオ」から「オーディオを有効化」のチェックを外す。
  <img width="887" alt=" 2018-08-17 14.54.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/105429/6806177a-c9e8-79d0-1a9d-26657fcaad45.png">

- ネットワークの設定
  - 「ネットワーク/アダプター1〜アダプター4」の設定を変更する。
  - VirtualBoxとXRｖのインターフェースの対応関係は[Appendix](#virtualbox%E3%81%A8xrv%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9%E5%AF%BE%E5%BF%9C%E8%A1%A8)に整理しているが、「アダプター1」を管理用、「アダプター2~4」をデータプレーン用として設定する。
  - 「アダプター1」は、「ネットワークアダプターを有効化」をチェックを入れ、「割り当て」を`ブリッジアダプター`、「名前」を`en0:Wi-Fi`(macの場合)、「アダプタータイプ」を`準仮想化ネットワーク(virtio-net)`にする。
      - 「名前」には、ホストOSからXRvへのSSH接続のため、ホストOS(ここではmacOS)からアクセス可能なインターフェースを指定する。
      - 「アダプタータイプ」を`virtio-net`以外にすると上手く動作しない。

    <img width="887" alt=" 2018-08-17 15.37.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/105429/b0447889-64c3-cddd-411a-0a3302e86261.png">
  - 「アダプター2~4」は、「ネットワークアダプターを有効化」をチェックを入れ、「割り当て」を`内部ネットワーク`、「名前」を所望のネットワーク名、「アダプタータイプ」を`virtio-net`にする。
      - 「名前」が同じアダプターは同一ネットワーク(ここではブロードキャストドメイン)に属する。
      - 「アダプタータイプ」を`virtio-net`以外にすると上手く動作しない。
  <img width="887" alt=" 2018-08-17 16.00.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/105429/f9f9c3e9-2ace-b8fd-9495-fa9dc1f46b28.png">
    <img width="887" alt=" 2018-08-17 16.00.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/105429/4252e34e-ea04-3263-25cc-cc3f3716b43e.png">
    <img width="887" alt=" 2018-08-17 16.04.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/105429/27487d60-2716-17c2-42ea-a5c6111dda4c.png">

- ポートの設定
  - 「ポート/シリアルポート/ポート1」から、「シリアルポートを有効化」にチェックをいれる。この設定によりXRｖにシリアル接続が可能になる。
  - 「ポート番号」を`COM1`、「ポートモード」を`ホストにパイプ`、「存在するパイプ/ソケットに接続」のチェックを外し、「パス/アドレス」に所望のコンソール接続先パス名を入力する。
  <img width="887" alt=" 2018-08-17 16.11.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/105429/bc9e0fc9-6ba3-a73b-406a-e4d239b4351e.png">

##### コンソール接続の準備
macOSでコンソール接続するために、[`socat`] (https://github.com/craSH/socat)をインストールする。macOSのパッケージマネージャーであるHomebrewが既にインストールされていれば、下記コマンドでインストールできる。

```bash:macOS
$ brew install socat
```

##### XRvの起動と接続
VirtualBoxマネージャーからXRvを起動する。起動後、接続先として設定したシリアルポートのパスに接続する(ここでは`/tmp/xrv`）。これから何度も使用するコマンドとなるので、コマンドをシェルスクリプト化しておくと良い。

```bash:macOS
# socat [シリアルポートのパス] stdio,raw,echo=0,escape=0x1a
$ socat /tmp/xrv stdio,raw,echo=0,escape=0x1a

# socatから抜けるときは「ctrl+z」(escapeで指定)
```

接続後、XRvの起動を確認できる。初回起動時には、ユーザ名やパスワードの設定を求められるので、所望の値を入力する。
<img width="682" alt=" 2018-08-17 16.37.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/105429/2f393108-a5e6-d99c-76d2-36e7af174763.png">

数分後、Usernameの入力画面まで到達すれば、構築は完了である


# XRvの動作確認
### ネットワーク構成
下図のようなネットワークを構築し、簡単な動作確認を行う。



### クローンの作成
作成したXRvのクローンを作成し、相互接続を確認する。ここではCE1~4、PE1~2、Pの計7台のXRvを構築した。

クローン時には、「すべてのネットワークカードのMACアドレスを最初期化」にチェックをいれ、新しい名前を入力する。
<img width="730" alt=" 2018-08-18 7.30.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/105429/576e62e4-3c8c-39dc-f11c-d543dbadd90c.png">

「すべてをクローン」にチェックをいれ、クローンボタンを押す。
<img width="730" alt=" 2018-08-18 7.30.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/105429/980bdd08-3187-be99-0fc7-2876af2749c4.png">


クローン後、以下の設定変更が必要である。

- ネットワークアダプタ2~4の内部ネットワークの名前
- シリアルポートのパス/アドレス











# Appendix
### VirtualBoxとXRvのインターフェース対応表
| VirtualBox | XRv |
|:-:|:-:|
| アダプター1  | Mg0/0/CPU0/0  |
| アダプター2  | Gi0/0/0/0  |
| アダプター3  | Gi0/0/0/1  |
| アダプター4  | Gi0/0/0/2  |