IOSXRvをvagrantとVirtualBoxで一発起動する
VirtualBox環境でのIOSXRv検証を容易にするため、vagrantで一発起動できるようにしたい。
本記事ではVirtualBoxとvagrantが事前にインストールされていることを前提とする。IOSXRvイメージファイルはCiscoサイトから取得可能だが、CiscoのパートナーとなりCisco.com IDにService Contractを設定しておく必要がある。
以下では、次のソフトウェアを利用し動作を確認している。
- Windows 10 with WSL
- iosxrv-k9-demo-5.3.3.ova
- VirtualBox 6.1.20
- vagrant 2.2.15
IOSXRvのbaseイメージを作成する
iosxrv-k9-demo-5.3.3.ovaイメージファイルをダブルクリック等で起動する。
ova拡張子がVirtualBoxに関連付けられている環境であれば、仮想アプライアンスのインポートが開始される。
ここでは以下のようにCPUを1, RAMを2048MB程度に設定しておく。ネットワークアダプタは初期状態で8個作成されることになるが、この時点ではMgmtEthとなる最初のひとつ以外は必要ないためチェックボックスを外しておく。最後にインポート
をクリックする。
無事にインポートが完了したのち、NamedPipe機構を利用したコンソールを追加するため作成されたイメージから設定(S)
をクリックする。以下イメージのようにシリアルポート
タブを選択し、ポートモード(M)
はホストにパイプ
を選択、存在するパイプ/ソケットに接続(C)
のチェックを外し、パス/アドレス(P)
欄には\\.\pipe\iosxrv
と記載する。
さて、コンソールに接続するためにはNamedPipeをアタッチする必要があるが、ここでは
NamedPipeをTCPポートに変換してくれるNamed Pipe TCP Proxyを利用する。サイトからソフトウェアをダウンロードしてインストール。
Named Pipe TCP Proxy起動後の設定画面から、以下のように\\.\pipe\iosxrv
を9001/tcp
にプロキシさせる。
さて、この状態でVirtualBoxからcom.cisco.ios-xrv
イメージの起動(T)
をクリックし、直後にWSL等のターミナルから以下のように9001/tcp
にtelnetアクセスすることでコンソールに起動ログが流れ始める。
Enter root-system username:
とプロンプトが表示されるまで待つ。
$ telnet localhost 9001
GNU GRUB version 2.00
+--------------------------------------------------------------------------+
|IOS XRv |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
+--------------------------------------------------------------------------+
Use the ^ and v keys to select which entry is highlighted.
Press enter to boot the selected OS, `e' to edit the commands
before booting or `c' for a command-line. ESC to return
previous menu.
...snip...
root-systemに設定するusername/secretはどちらもvagrant
としておく。このusername/secretがadmin-configに設定され、vagrantからアクセスする際に利用される。
!!!!!!!!!!!!!!!!!!!! NO root-system username is configured. Need to configure root-system username. !!!!!!!!!!!!!!!!!!!!
--- Administrative User Dialog ---
Enter root-system username: vagrant
Enter secret:
VMにログインするにはここからさらに少し待つ必要がある。
次のようにプロンプトが表示されると、ようやく設定済みのvagrant
ユーザでログインできるようになる。
User Access Verification
Username: vagrant
Password:
RP/0/0/CPU0:ios#
それでは、ここからIOSXRvイメージの初期コンフィグを投入していく。
RP/0/0/CPU0:ios#configure
RP/0/0/CPU0:ios(config)#hostname iosxrv
RP/0/0/CPU0:ios(config)#aaa authentication login default local
RP/0/0/CPU0:ios(config)#ssh server v2
RP/0/0/CPU0:ios(config)#ssh server logging
RP/0/0/CPU0:ios(config)#telnet vrf default ipv4 server max-servers 15
RP/0/0/CPU0:ios(config)#interface MgmtEth 0/0/CPU0/0 ipv4 address dhcp
RP/0/0/CPU0:ios(config)#no interface MgmtEth 0/0/CPU0/0 shutdown
RP/0/0/CPU0:ios(config)#commit
RP/0/0/CPU0:ios(config)#exit
外部からのsshアクセスを可能にするためには、さらにIOSXRvイメージにキーペアを作成しておく必要があるので忘れずに。
RP/0/0/CPU0:iosxrv#crypto key generate rsa
The name for the keys will be: the_default
Choose the size of the key modulus in the range of 512 to 4096 for your General Purpose Keypair. Choosing a key modulus greater than 512 may take a few minutes.
How many bits in the modulus [1024]:
Generating RSA keys ...
Done w/ crypto generate keypair
[OK]
設定がすべて完了すれば以下のようになる。
RP/0/0/CPU0:iosxrv#show running-config
Building configuration...
!! IOS XR Configuration 5.3.3
!! No configuration change since last restart
!
hostname iosxrv
telnet vrf default ipv4 server max-servers 15
aaa authentication login default local
interface MgmtEth0/0/CPU0/0
ipv4 address dhcp
!
ssh server v2
ssh server logging
end
RP/0/0/CPU0:iosxrv#admin show running-config
Building configuration...
!! IOS XR Admin Configuration 5.3.3
username vagrant
group root-system
secret 5 $1$gszu$edh0GNZQTZe7mfx8QNBk.1
!
end
RP/0/0/CPU0:iosxrv#show crypto key mypubkey rsa
Key label: the_default
Type : RSA General purpose
Size : 1024
Created : 00:00:00 UTC Mon May 10 2021
Data :
30819F30 0D06092A 864886F7 0D010101 05000381 8D003081 89028181 00CE553D
F00E7081 DCA54B0A 1CC81CAE 038B289E 802D295C CEAB8244 3D8A0C2C 706CD6D2
FEDC0EA7 2A928F02 41D1F82D B0E41E57 292575E5 81F9FC78 3399D649 E6C248D0
76B06369 F1EA3DCB B9BA8F39 89C4A0C4 63B3529D 42A9BC83 102A4FBB 938C4CD0
836BA6A9 E35D089B 349F65E5 4D37F482 1C187E36 88B92D11 54241F28 A5020301
0001
IOSXRv baseイメージからvagrant boxファイルを作成する
IOSXRvイメージはboxファイル作成にあたって、事前にVirtualBoxからshutdownさせておく必要がある。
まずはboxファイルを作成するために必要なVagrantfileを作成する。
$ cat <<EOL> embedded_vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
config.vm.synced_folder ".", "/vagrant", disabled: true
config.vm.boot_timeout = 400
config.ssh.username = "vagrant"
config.ssh.password = "vagrant"
config.ssh.insert_key = false
end
EOL
続いて、以下のコマンドでIOSXRvイメージからboxファイルを作成する。
$ vagrant package --base com.cisco.ios-xrv --output iosxrv-k9-demo-5.3.3.box --vagrantfile embedded_vagrantfile
==> com.cisco.ios-xrv: Exporting VM...
==> com.cisco.ios-xrv: Compressing package to: /tmp/iosxrv/iosxrv-k9-demo-5.3.3.box
==> com.cisco.ios-xrv: Packaging additional file: embedded_vagrantfile
このboxファイルをvagrantに登録する。boxの名前はここではiosxrv/5.3.3
とする。
$ vagrant box add iosxrv-k9-demo-5.3.3.box --name iosxrv/5.3.3
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'iosxrv/5.3.3' (v0) for provider:
box: Unpacking necessary files from: file:///tmp/iosxrv/iosxrv-k9-demo-5.3.3.box
==> box: Successfully added box 'iosxrv/5.3.3' (v0) for 'virtualbox'!
$ vagrant box list
iosxrv/5.3.3 (virtualbox, 0)
vagrantからIOSXRvイメージを起動
VM起動時にもVagrantfileが必要なので、まずはこれを作成する。
IOSXRvのバージョンが(おそらく)6.0.0より古い場合、IOSXRvイメージに作成したキーペアのalgorithmはaes256-cbc, aes192-cbc, aes128-cbc
でvagrantのNet::SSH
が標準ではサポートしていない。そのためVagrantfileの冒頭でこれらを暫定的かつ強制的にサポートさせる記述を加えた。
$ cat <<EOL> Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
class Net::SSH::Transport::Algorithms
DEFAULT_ALGORITHMS[:encryption].unshift('aes256-cbc', 'aes192-cbc', 'aes128-cbc')
end
Vagrant.configure(2) do |config|
config.vm.box = "iosxrv/5.3.3"
config.vm.boot_timeout = 400
config.vm.synced_folder ".", "/vagrant", disabled: true
config.ssh.username = "vagrant"
config.ssh.password = "vagrant"
config.ssh.insert_key = false
end
EOL
さていよいよIOSXRvイメージを起動。
イメージが正常に起動完了するまですこし時間を要するので気長に待つ。私の環境では3~4分ほど必要だった。
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'iosxrv/5.3.3'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: iosxrv_default_1620643366529_81167
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: password
無事に起動すれば以下ようにvagrantからsshでログインできる。
パスワードはもちろんvagrant
。
$ vagrant ssh
==> default: The machine you're attempting to SSH into is configured to use
==> default: password-based authentication. Vagrant can't script entering the
==> default: password for you. If you're prompted for a password, please enter
==> default: the same password you have configured in the Vagrantfile.
vagrant@192.168.33.191's password:
RP/0/0/CPU0:iosxrv#
さて、Mgmtインタフェースに設定されているIPv4アドレスを確認してみる。
RP/0/0/CPU0:iosxrv#show ipv4 interface MgmtEth 0/0/CPU0/0 brief
Interface IP-Address Status Protocol
MgmtEth0/0/CPU0/0 192.168.33.191 Up Up
ホストPCからはMgmtインタフェースに設定されたこのIPv4アドレスにアクセスが可能。ためしにtelnet接続してみると以下の通り。
username/passwordはvagrant/vagrant
でもよいが、IOSXRvイメージのデフォルトcisco/cisco
でもログイン可能。
$ telnet 192.168.33.191
Trying 192.168.33.191...
Connected to 192.168.33.191.
Escape character is '^]'.
IMPORTANT: READ CAREFULLY
Welcome to the Demo Version of Cisco IOS XRv (the "Software").
The Software is subject to and governed by the terms and conditions
of the End User License Agreement and the Supplemental End User
License Agreement accompanying the product, made available at the
time of your order, or posted on the Cisco website at
www.cisco.com/go/terms (collectively, the "Agreement").
As set forth more fully in the Agreement, use of the Software is
strictly limited to internal use in a non-production environment
solely for demonstration and evaluation purposes. Downloading,
installing, or using the Software constitutes acceptance of the
Agreement, and you are binding yourself and the business entity
that you represent to the Agreement. If you do not agree to all
of the terms of the Agreement, then Cisco is unwilling to license
the Software to you and (a) you may not download, install or use the
Software, and (b) you may return the Software as more fully set forth
in the Agreement.
Please login with any configured user/password, or cisco/cisco
User Access Verification
Username: cisco
Password:
RP/0/0/CPU0:iosxrv#
あとはnetconf設定を追加してみたり、好きに検証を進めればよい。
起動したVMを停止・削除する方法は下記。
$ vagrant halt
$ vagrant destroy -f
Enjoy! 🎉
Discussion
PCの性能によってはVMの起動に少し時間がかかってTimeoutしてしまうかも。その場合は下記の時間を長くすること。