Cisco VIRLを使ってみる

# 目的
実機を用意することなくCiscoルータ等の動作確認をするために、VIRLを使う。

# 手順
以下の通り。

# VMware Fusionを購入 & Install
この辺からinstall。11.5 Proを使った。
https://www.vmware.com/jp/products/fusion.html

[2021/1/13追記] VMWare Fusionを12.1にupdateした
この辺からdownloadしてinstall
https://my.vmware.com/jp/web/vmware/downloads/info/slug/desktop_end_user_computing/vmware_fusion/12_0
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/d7e8b49e-f28a-ffd2-d01a-9ef798c7f24c.png)

# VIRLを購入 & Download
この辺から購入。
https://learningnetworkstore.cisco.com/cisco-virtual-internet-routing-lab

購入後、VIRLのovaイメージをccoサイトからdownloadする。
ESXiとbere-metalとhost-based hypervisorの3種類のimageがある。
その中から、VMware Fusionで使えるhost-based hypervisorのovaファイルを選択する。
ファイル名: virl.1.6.65.pc.ova 

VIRLのLisence Fileもdownloadしておく。

[2021/1/13追記] ccoにloginして以下あたりからvirlとvirlのライセンスをdownloadできた。
https://learningnetworkstore.cisco.com/myaccount

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/290c01fa-6e04-15c3-ed7d-6d6178d3e54e.png)

downloadと書いているのがvirlのisoファイル、1.x Licenseと書いているのがvirlのライセンス（あとでvirlのisoをvmwareで起動した後のUWM上の画面でloadするのでdownloadしておく）

# VIRLのDocuments
ここにある。
http://virl.cisco.com/

VMware Fusion環境へのinstall手順は以下にある。
http://virl.cisco.com/fusion.php

# VIRLの初期セットアップ
VMware FusionからVIRLのovaをimportし、VMを起動すると、以下の画面が出る。OKを押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/d69ab263-710c-d133-6d98-2e457d021f61.png)

# ハマりポイント
[2021/1/13追記] 最初にVMwareからvirlのisoイメージから初回VMを立ち上げる時に、VMのconfigは以下のようにしておくこと。詳細オプションの"この仮想マシンでハイパーバイザーアプリケーションを有効にする"のチェックを外してしまうとVIRL上で仮想ルータをエミュレーションできなかった。理由は、VIRL自体もVIRLのVMの中で仮想マシンとしてルータを動作させるが、それを可能にするためには、ここにチェックを入れておかないといけな買ったみたい。
Ref: https://www.speaknetworks.com/cisco-virl-installation-troubleshooting-common-issues/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/390cc167-2521-b9d7-7b71-d8c8c597f430.png)


ヘルプが出る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/c60098d5-3e97-efbb-8a1e-f2040767d2be.png)

defaultのままでnextへ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/c2a822df-152c-ed03-358e-ffa00b227191.png)

こちらもdefaultのままnextへ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/a0b823f2-82b0-3d85-ae7c-15f13d5b2620.png)

こちらもdefaultのままnextへ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/76bf1f88-81c2-af11-6d92-f79fd874cb57.png)

こちらもdefaultのままnextへ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/b9ec8b7c-f429-765f-17c1-41a8f896a093.png)

こちらもdefaultのままnextへ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/24ed4ae9-7922-e893-e27a-d145409035b6.png)

こちらもdefaultのままnextへ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/c8f6b5c9-bf24-ba38-0455-113580ac4043.png)

最後にこの画面が出るのでconfirmする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/22c83c43-591b-8fb8-3e9b-b0d352def173.png)

こんな画面が出るのでしばらく待つ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/3dd8632e-b933-9e5a-0da5-02ef4dfe92e5.png)

再起動が始まり、以下の画面が出ればOK。コンソールに出てるURLとID/passwordをメモしておく。（次のステップで使う）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/ad59d69d-3f89-0ce0-01e5-2c2c6685407e.png)

# VIRLをActivateする

Webブラウザで、先ほどメモしたURLにアクセスし、ID/Passwordを入力する。
自分の環境の場合は、http://172.16.76.128でID=uwmadminでpassword=password
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/4d9cafe0-d530-4141-2c5a-58ca313ce66a.png)

VIRL Server > Salt Configuration and Statusに進む。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/cfe51f4f-99a5-835c-3643-03212e658e56.png)

Reset Keys and IDをクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/34f09a15-bc95-74a2-4b40-8fc38df0d0d4.png)

Load config fileをクリックして、事前にdownloadしておいたライセンスファイルを選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/2c25c950-7e55-613b-aae6-012e28d5265b.png)

[2021/1/13追記] List of Cisco salt mastersがAPだとうまくいかない（Cisco salt masterと疎通できない)場合は、USにするとうまくいった。


List of Cisco salt mastersからAPを選択。Master sign public keyはeft.pubを選択する。その後、resetボタンを押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/eb5556f6-1109-c663-41b3-dc490d09331c.png)

うまくいくと以下の画面が出る。Last successful contactsの日付を確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/7b02c7b5-05e7-307e-8b71-aaf6aace666f.png)

# VM Maestro (VMM)をinstallする
UWMのweb画面からVIRL Server > Downloadと進むと以下の画面になる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/f8d562c4-8ab6-a8a1-69a6-c09fd6af1870.png)

Maestroをdownloadする。
自分のPCはMACなので、拡張子が.dmgのVMMaestro-dev-1.6.0-534.sp.dmgをdownloadする。
dmgファイルをダブルクリック => アプリをApplicationフォルダにドラッグ&ドロップしてMACにinstallする。

[2021/1/13追記] Maestroをクリーンインストールするには、Appを削除して、改めてUWMの画面からdownload & applicationフォルダに格納した上で、$HOME/vmmaestro (Mac OSの自分の場合は、/Users/xxxx/vmmaestro)のフォルダを削除する

以下のような画面が出るので、VIRLのIP addressを入力し、guest部分はそのままにする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/48025f42-560c-9516-eb4e-710710935855.png)

以下のような画面が出るので、OKをおす。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/e6354886-2635-9d8e-a51b-37536e63594b.png)

パスワード忘れた時の質問と回答が聞かれるので、入力する。

# 使ってみる。
Maestroの右下の鍵マークをクリックすると以下のような画面が出る。　OKをおす。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/634170fd-b4cb-4947-26c7-0743acabfb5c.png)

VIRL サーバから仮想ノードリストを同期する。Maestroのmenu > 環境設定 > nodesubtypeと進み、Fetch from Serverをクリックする。listが更新されたらOKを押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/ff92a9fc-3fba-10d7-2337-de800c854b42.png)

左のメニューからIOS XRvを真ん中の広いマップ部分にドラッグ&ドロップする。3つ作った。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/caf3c7be-5959-6ddb-1c77-300880333c36.png)

パレットの Tools から Connect を選んで、そのまま、リンクをつなぎたいノードを順番にクリックする。これでノード間を接続できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/33920b60-0c16-2f76-4723-d11a1d66e162.png)

これでいったん完成として、このトポロジを「プロジェクト」として保存する。
左上の Save アイコンを押すと、保存場所を選択する画面が出る。今回は Sample Topology フォルダを選んで、デフォルトの topology.virl という名前で保存する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/d3a643cf-03c1-1282-1ddf-a3871e06afe1.png)

VIRL にはルータコンフィグを自動生成する機能である "AutoNetKit" という機能が備わっています。これを使うと、自分であとからコンフィグを投入しなくても IGP や BGP のピアリングまで完了した状態でシミュレーションを開始する、といったことが実現できる。
ただし、今回は、この自動config生成AutoNodekitのチェックを外す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/9720f2c5-da8f-976c-a6dd-fc3df240bf6c.png)

画面上部のメニューから、シミュレーション開始のアイコン（再生ボタン）をクリックします。
無事に起動すると、右メニューの緑丸が見えます。
その後、装置を右クリックしてtelnetやsshでloginします。（右下にlogin後の画面が出ます）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/a40c0d2a-ad94-310f-0eec-bf32ec633b39.png)


# 装置へのloginのID/passwordについて
この辺を参考に。IOS-XRの場合はadmin/adminでlogin出来た。
http://sig9.hatenablog.com/entry/2015/06/07/020001

# MACのterminalからルータにloginする
telnetをinstallする

```bash
$ brew install telnet
```

起動したrouterのport番号を確認する。このルータの場合はconsoleへのtelnetは172.16.76.128:17000で行けそう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/e58b7700-c683-b637-7d91-d4ef5e4406eb.png)

telnetを使ってrouterにloginする

```bash
$ telnet 172.16.76.128 17000
```

# VIRLが動いているVMにloginする
```bash
$ ssh virl@172.16.76.128
(passwordはVIRL)
```

# 試しにEVPNを設定してみる

こんな感じのトポロジーを作った。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/47f43c8d-2a5f-5710-0795-c6803f7a72f0.png)


## CE8のconfig
```bash:bash
interface GigabitEthernet0/1
 ip address 192.168.89.1 255.255.255.252
 duplex auto
 speed auto
 media-type rj45
!
```


## PE1のconfig
```bash
hostname pe1
interface Loopback0
 ipv4 address 1.1.1.1 255.255.255.255
!
interface MgmtEth0/0/CPU0/0
 shutdown
!
interface GigabitEthernet0/0/0/0
 ipv4 address 10.0.12.1 255.255.255.252
!
interface GigabitEthernet0/0/0/1
 description to_ce8
 l2transport
 !
!
router ospf 1
 router-id 1.1.1.1
 segment-routing mpls
 segment-routing forwarding mpls
 fast-reroute per-prefix
 fast-reroute per-prefix ti-lfa enable
 microloop avoidance
 area 0
  interface Loopback0
   passive enable
   prefix-sid index 1
  !
  interface GigabitEthernet0/0/0/0
   network point-to-point
  !
 !
!
router bgp 65000
 address-family l2vpn evpn
 !
 neighbor 3.3.3.3
  remote-as 65000
  update-source Loopback0
  address-family l2vpn evpn
  !
 !
!
evpn
 evi 6005
  bgp
   rd 65000:6005
   route-target import 65000:6005
   route-target export 65000:6005
  !
 !
 interface GigabitEthernet0/0/0/1
  ethernet-segment
   identifier type 0 00.00.00.00.00.00.00.00.01
  !
 !
!
l2vpn
 bridge group BG_6005
  bridge-domain BD_6005
   mac
    limit
     maximum 50
     action no-flood
     notification both
    !
   !
   interface GigabitEthernet0/0/0/1
   !
   evi 6005
   !
  !
 !
!
segment-routing
 global-block 36000 55999
!
end
```

## P2のconfig
```bash
hostname p2
interface Loopback0
 ipv4 address 2.2.2.2 255.255.255.255
!
interface MgmtEth0/0/CPU0/0
 shutdown
!
interface GigabitEthernet0/0/0/0
 ipv4 address 10.0.12.2 255.255.255.252
!
interface GigabitEthernet0/0/0/1
 ipv4 address 10.0.23.1 255.255.255.252
!
router ospf 1
 router-id 2.2.2.2
 segment-routing mpls
 segment-routing forwarding mpls
 fast-reroute per-prefix
 fast-reroute per-prefix ti-lfa enable
 microloop avoidance
 area 0
  interface Loopback0
   passive enable
   prefix-sid index 2
  !
  interface GigabitEthernet0/0/0/0
   network point-to-point
  !
  interface GigabitEthernet0/0/0/1
   network point-to-point
  !
 !
!
segment-routing
 global-block 36000 55999
!
end
```

## PE3のconfig
```bash:bash
hostname pe3
interface Loopback0
 ipv4 address 3.3.3.3 255.255.255.255
!
interface MgmtEth0/0/CPU0/0
 shutdown
!
interface GigabitEthernet0/0/0/0
 ipv4 address 10.0.23.2 255.255.255.252
!
interface GigabitEthernet0/0/0/1
 description to_ce9
 l2transport
 !
!
router ospf 1
 router-id 3.3.3.3
 segment-routing mpls
 segment-routing forwarding mpls
 fast-reroute per-prefix
 fast-reroute per-prefix ti-lfa enable
 microloop avoidance
 area 0
  interface Loopback0
   passive enable
   prefix-sid index 3
  !
  interface GigabitEthernet0/0/0/0
   network point-to-point
  !
 !
!
router bgp 65000
 address-family l2vpn evpn
 !
 neighbor 1.1.1.1
  remote-as 65000
  update-source Loopback0
  address-family l2vpn evpn
  !
 !
!
evpn
 evi 6005
  bgp
   rd 65000:6005
   route-target import 65000:6005
   route-target export 65000:6005
  !
 !
 interface GigabitEthernet0/0/0/1
  ethernet-segment
   identifier type 0 00.00.00.00.00.00.00.00.02
  !
 !
!
l2vpn
 bridge group BG_6005
  bridge-domain BD_6005
   mac
    limit
     maximum 50
     action no-flood
     notification both
    !
   !
   interface GigabitEthernet0/0/0/1
   !
   evi 6005
   !
  !
 !
!
segment-routing
 global-block 36000 55999
!
end


```

## CE9のconfig
```bash:bash
interface GigabitEthernet0/1
 ip address 192.168.89.2 255.255.255.252
 duplex auto
 speed auto
 media-type rj45
!
```