automation
Cisco
VIRL
netdevops

ネットワーク自動化開発実践 準備編 - Cisco VIRL

はじめに

この記事はシスコの同志による Advent Calendar の一部として投稿しています
https://qiita.com/advent-calendar/2017/cisco

ネットワーク自動化開発に関する記事をいくつか投稿していこうと考えていますが、第1回の今回は、その準備として、私が普段使うネットワークシミュレータの記事を書こうと思います

連載の内容は以下のように考えていますが、気が変わったら内容を変更するかもしれません。なお、内容は初級〜中級レベルを念頭においています。

  • 目次
  • 第1回(本記事): ネットワーク自動化開発実践 準備編 - Cisco VIRL
  • 第2回: ネットワーク自動化開発実践 - Python でルータを操作
  • 第3回: ネットワーク自動化開発実践 - Jupyter Notebook で Cool なデモをしよう
  • 第4回: ネットワーク自動化開発実践 - デバイスのモデル化のご利益を感じよう - Cisco NSO を使う

なぜシミュレータが必要なのか?

なぜ自動化の話をするのにシミュレータの話をするのでしょうか?

ネットワーク自動化に取り組むにあたっては、エンジニアとしてはオーケストレーションツールの操作やコーディングに注力したいものです。自動化の開発段階では OS の API が重要な一方で、物理的な特性は重要でないことが多いでしょう。物理的な機器のマウントや配線・OS のロード・疎通確認用の PC の配置などの作業をすることなくネットワークトポロジを作成したいはずです。

そんなときに Cisco Virtual Internet Routing Lab (VIRL;ヴァール) はこのニーズに答えてくれるツールです
[2] https://learningnetworkstore.cisco.com/virtual-internet-routing-lab-virl/cisco-personal-edition-pe-20-nodes-virl-20

Screenshot 2017-12-09 23.35.56.png

なお、VIRL の商用版 (サポートあり) として Cisco Modeling Labs (CML) という製品もあります。
[3] https://www.cisco.com/c/ja_jp/products/cloud-systems-management/modeling-labs/index.html

VIRL とは?

VIRL はシスコのネットワークシミュレータです。シミュレータといっても、シスコの OS (Cisco IOS, IOS-XE, IOS-XR, NX-OS, ASAv) の動作を模擬するだけのものではなく、実際にそれら本物の OS の仮想版が動いています。さらに監視やトラフィック疎通試験などに利用できる Linux OS のイメージも用意されています

  • IOSv and IOSvL2
  • NX-OSv and NX-OS 9000v
  • IOS XRv and IOS XRv 9000
  • IOS XE (CSR1000v)
  • ASAv

  • Ubuntu LXC

  • iPerf LXC

  • Routem LXC

  • Ostinato-drone

VIRL についてはシスコエンジニアの生田さんがすでにブログで紹介されていますので、概要を理解したい方はぜひこちらを参照していただきたいと思います
[4] https://gblogs.cisco.com/jp/2016/08/virtual-internet-routing-lab-virl/

ところが VIRL のインストールや初歩的な動作までを画像付きで説明した記事はあまり無いようです。そこでこの記事では、VIRL のインストールとトポロジのデザイン、シミュレーションの実行までをご紹介して、ネットワーク自動化実践の準備ができるところまでを目指そうと思います

なお、公式のインストールガイドはこちらです(英語)。詳細な設定の解説などはこちらを参照ください

環境

この記事は以下の環境をもとに書いています

  • Server: VIRL 1.3.296 running on VMware ESXi 6.0u3
  • Client: Mac OS Sierra 10.12.6

VIRL は PC/Mac 上の VMware Fusion のほか Intel サーバ上の VMware ESXi などにインストール可能です。詳細はハードウェア要件を参照してみてください
[5] https://learningnetworkstore.cisco.com/virlfaq/hardware

VIRL のインストール

今回は VMware ESXi 上に OVA ファイルをデプロイしました

Screenshot 2017-12-09 11.47.10.png

デプロイ自体は OVA を展開するだけです。1点戸惑うかもしれないのは OVA ウィザードでネットワークを指定される画面です。VIRL では外部との通信のために複数のネットワークを利用することができ、そのマッピングを指定することができます

Screenshot 2017-12-09 11.48.58.png

細かいカスタマイズはさておき、ひとまずは以下の2つを指定するだけで事足ります。

  • VM Network: VIRL シミュレータ本体の管理アクセスに使うポート。DHCP が有効なマネジメントネットワークを割り当ててください。
  • Flat: VIRL 上に起動する仮想マシンの管理ポートと外部が通信するためのネットワーク。デフォルトではサブネットが 172.16.1.0/24 に固定されています。新しく適当なポートグループ (VLAN) を作って割り当てておいてください。

なお、ポート割当はあとから VM 編集画面で変更できるので、そこまで気にせずデプロイを進めてしまって大丈夫です

VIRL サーバの起動

VIRL のデプロイが終わったら早速、起動しましょう。VM のコンソールを開きます。管理ポートで DHCP が有効な場合、下のように Web アクセス用の IP アドレスが表示されるはずです

Screenshot 2017-12-09 11.57.37.png

静的 IP を使いたい場合もあると思いますが、可能です。ただ、ここでは紹介しきれないのでインストールガイドを参照して試してみてください
[5] http://virl-dev-innovate.cisco.com/vs.client.php

VIRL 管理 Web UI へのアクセス

コンソールで表示された URL (http://{VIRLのIPアドレス}) にアクセスし、デフォルトのクレデンシャル uwmadmin / password でログインします

ここでまず VIRL をアクティベーションする必要があります。が、その前に自身の環境はインターネットに疎通できるか確認してください。もしプロキシ経由でないとインターネットにでれない場合は、先にプロキシを設定します.

DNS とプロキシの設定

ログイン後左のメニューから VIRL Server > System Configuration > System と進みましょう。下の方に Proxy 設定があります。また DNS 設定も必要に応じて自身の環境から使えるものに変更してください。

Screenshot 2017-12-09 12.10.58.png

変更後、画面右上の Apply Changes をクリックしたあと、数ステップ進んで変更を完了します

アクティベーション

インターネットに疎通する準備ができたら、VIRL のアクティベーションを実行します。まず手元に、VIRL を購入したあと送付されてきたライセンスファイルを 解凍して 準備しておいてください

メニューから VIRL Server > Salt Configuration and Status に進み、'Reset Keys and ID' をクリックします。

Screenshot 2017-12-09 12.19.13.png

次に 'Load config file' をクリックして手元のライセンスファイル (解凍済みのもの) をアップロードします。
あとは以下のように選択しましょう

  • 'List of Cisco Salt Masters' : US
  • 'Master Sign Public Key': eft.pub (Regular use)

その後 'Reset' ボタンを押すとアクティベーションが開始されます

アクティベーションの完了までには時間がかかります。時々 Check status now ボタンを押して状態を確認してください。最終的に以下のようにすべてのステータスが Green 表示されたら OK です

Screenshot 2017-12-09 12.24.51.png

VIRL クライアントのインストール

ここまでで VIRL シミュレーションエンジン本体のデプロイとアクティベーションが終わりました。実際にシミュレーションを開始するには、操作用の PC/Mac クライアントが必要です

これは Web UI のメニューの VIRL Sever > Download からダウンロードできます

Screenshot 2017-12-09 12.26.50.png

自身の端末の環境に合わせてインストーラを選んでダウンロードし、インストールを実行してください。私は Mac を利用しているので VMMaestro-dev-1.3.0-xxx.dmg を使いました。このインストール自体は簡単ですので、解説は省略します

VIRL クライアントの起動と設定

インストールしたクライアントを起動します。クライアントの名前は "VM Maestro" (マエストロ;指揮者) です。

最初に利用条件の同意などが求められますので OK して先に進みましょう。また、VIRL サーバへの接続設定のウィンドウが出るかもしれませんが一旦キャンセルしておきます

VM Maestro の画面は以下のようになっています

Screenshot 2017-12-09 12.33.26.png

VIRL サーバへの接続

まずクライアントを VIRL サーバに接続します。画面右下に鍵ボタンが見つかると思うのでクリックします。

Screenshot 2017-12-09 12.37.57.png

Active Profile の右の + 印をクリックします. 適当な Profile Name を付けたあと、Base URL の中の IP アドレスを、VIRL サーバの IP アドレスに変更してください

Screenshot 2017-12-09 12.38.44.png
Screenshot 2017-12-09 12.39.28.png

その後 Master Credentials の右の Change をクリックし、クレデンシャルとして guest/guest を入力します

Screenshot 2017-12-09 12.40.26.png

Web Services の表示がすべて Compatible と表示されれば OK です

VIRL サーバから仮想ノードリストを同期

VM Maestro からシミュレーションを開始するには、VIRL サーバ上にある、起動可能な仮想ノード (VM) のリストをローカルに取ってきておく必要があります。

VM Maestro の設定画面を開き、Node Subtypes の画面に移ります. 画面下のほうにスクロールして、Fetch From Server ボタンを押します。クライアントの仮想ノードリストが更新されます。

Screenshot 2017-12-09 12.44.03.png
Screenshot 2017-12-09 12.45.58.png

これでシミュレーションを開始する準備ができました!

VIRL シミュレーションの開始

ネットワークトポロジーのデザイン

まずは簡単なトポロジを作って試してみましょう。画面左のパレットから CSR1000v を選択し、そのまま中央のキャンバスでマウスクリックすることでノードを配置できます。この例では3つのノードを追加してみました。

Screenshot 2017-12-09 12.54.35.png

次にこのノード同士をリンクで接続します。

パレットの Tools から Connect を選びます。そのまま、リンクをつなぎたいノードを順番にクリックします(ドラッグはしなくて大丈夫です)。これで2つのノードが接続できました

Screenshot 2017-12-09 12.56.35.png

これを繰り返して三角形のトポロジを作ります

Screenshot 2017-12-09 23.07.21.png

これでいったん完成として、このトポロジを「プロジェクト」として保存しましょう。

左上の Save アイコンを押すと、保存場所を選択する画面が出てきます。今回は Sample Topology フォルダを選んで、デフォルトの topology.virl という名前で保存します。ちなみにファイル名は必ず .virl で終わる必要があります

Screenshot 2017-12-09 13.01.26.png

仮想ノードのプロパティの設定

キャンバス上のノードをクリックすると、画面下部に Properties が登場し、シミュレーション時のいろんな設定をすることができるようになっています

VIRL にはルータコンフィグを自動生成する機能である "AutoNetKit" という機能が備わっています。これを使うと、自分であとからコンフィグを投入しなくても IGP や BGP のピアリングまで完了した状態でシミュレーションを開始する、といったことが実現できる優れものです。

Screenshot 2017-12-09 13.08.32.png
図: Properties の領域を見やすく広げました

ただ、この AutoNetKit の活用については別の機会に紹介することにします。今回はこれをオフにしましょう。オフにすると、各ノードは初期コンフィグ無しの状態で起動します。

ノードをクリックし、下の Properties の中の、AutoNetKit タブを選択します。

デフォルトでは一番上部のチェックボックスが ON になっているので、このチェックを外してオフにします
Screenshot 2017-12-09 13.08.05.png

これをすべてのノードで繰り返して、最後に Save アイコンを押してプロジェクトを保存しておきます

シミュレーションの開始

いよいよシミュレーションを開始します

画面上部のメニューから、シミュレーション開始のアイコンをクリックします
Screenshot 2017-12-09 13.12.03.png

いくつか質問画面がポップアップしますが、すべてキャンセルして問題ありません。

その後、画面全体のモードを Simulation に切り替えます。画面の右上から、Simulation タブを押します
Screenshot 2017-12-09 13.13.54.png

すると、画面がシミュレーションモードに切り替わります。先ほどの Design モードと違い、この画面では起動したシミュレーションのノードやリンク、トポロジーに対する操作を行うことになります

Screenshot 2017-12-09 13.15.12.png

画面を観察していると、右側のペインにノードのリストが表示され、起動状況が色付きのアイコンで表示されることがわかります。これが緑色になると VM の電源ON が完了し、OS のブートプロセスに入ったことを示します

Screenshot 2017-12-09 13.17.05.png

この例では3台の VM が起動し (ACTIVE), 管理アドレスにアクセスできる状態 (REACHABLE) であることがわかります。その下の ~lxc-flat や ~mgmt-lxc の表示は管理アクセス用のものですが、今回は説明を省略します

VM へのアクセス

物理ルータを起動したときと同じように、VM ノードのコンソールポートにアクセスしてみましょう。

中央キャンバスのノードを右クリックし、Telnet > Console を選択します
Screenshot 2017-12-09 13.18.19.png

画面下部にコンソール画面のタブが開き、キーストロークするとルータのプロンプトが表示されました!
Screenshot 2017-12-09 13.21.09.png

これでこのノードのコンフィグを自由に操作できるようになりました。

適当にコマンドを試しておきましょう。Cisco IOS-XE のコマンドが実行できることがわかります。

Screenshot 2017-12-09 13.22.46.png

もちろんルーティングプロトコルや ACL など各種設定をすることもできます。今回は VIRL のシミュレーションの開始までが目標なので、ルータのコンフィグはここまでにしておきます

コンフィグの保存とシミュレーションの停止

シミュレーションを停止すると、VM 上の NVRAM も含めて削除されてしまいます。このため、CLI で copy run start をしただけではコンフィグは保存されません

コンフィグを次回以降のシミュレーションでも維持しておくには、シミュレーションの名前を右クリックして Extract Configurations を実行する必要があります

Screenshot 2017-12-09 22.18.15.png

このあと、シミュレーションを停止します。同じようにシミュレーションの名前を右クリックし、Stop Simulation を選びましょう。

Screenshot 2017-12-09 22.20.40.png

VM を停止する処理のあと、シミュレーションのリストが画面右側のペインから消えたら停止完了です
お疲れ様でした!

今回のまとめ

今回の記事では、VIRL を使って自由にネットワークトポロジーを作成し、VM(仮想ルータ)のコンフィグを変更できるようになるところまでを解説しました。

これだけでもネットワークエンジニアとしては楽しい環境ができましたが、まだ自動化開発実践の準備段階です。次回以降の記事では、こうして作ったネットワークトポロジーを使って、自動化をどう実装していくかを解説したいと思っています

  • 前回: 目次
  • 次回: 第2回: ネットワーク自動化開発実践 - Python でルータを操作

免責事項

本サイトおよび対応するコメントにおいて表明される意見は、投稿者本人の個人的意見であり、シスコの意見ではありません。本サイトの内容は、情報の提供のみを目的として掲載されており、シスコや他の関係者による推奨や表明を目的としたものではありません。各利用者は、本Webサイトへの掲載により、投稿、リンクその他の方法でアップロードした全ての情報の内容に対して全責任を負い、本Web サイトの利用に関するあらゆる責任からシスコを免責することに同意したものとします。