RouterOS 6.31 current の公開に伴って CHR(Cloud Hosted Router)6.31 のバイナリも公開されています。ただし、公式ダウンロードページでは無く、フォーラムにダウンロードリンクがあります。
- http://www.mikrotik.com/download/share/chr_6_31.img
- http://www.mikrotik.com/download/share/chr_6_31.vmdk
今回は CHR 6.31 に Extra Package を追加し、更にそれを Cisco VIRL に登録します。大部分は過去記事「VIRL に RouterOS を登録してシミュレーション環境を作るには」と同じです。
作業環境
以下の環境で作業します。VIRL と Ubuntu のいずれも ESXi 上で動作しています。
Ubuntu はイメージの作成等の作業に利用します。前回同様、X はインストールしておらず、CLI のみ利用しています。
QEMU のインストール
作業用の Ubuntu が停止した状態で .vmx ファイル中に以下を追記し、仮想マシンを起動します。
vhv.enable = "TRUE"
QEMU をインストールします。
apt-get -y install qemu-system-x86
kvm-ok を実行し、以下の表示になれば仮想化支援機能が有効になっており、QEMU が利用可能なはずです。
# kvm-ok INFO: /dev/kvm exists KVM acceleration can be used
CHR への Extra Package 追加
作業用 Ubuntu に CHR 6.31 をダウンロードします。
curl -O http://www.mikrotik.com/download/share/chr_6_31.img
# md5sum chr_6_31.img ad1b727293aafd20ff7ff76ebe7a8e57 chr_6_31.img # openssl sha1 chr_6_31.img SHA1(chr_6_31.img)= 55b0514eeddd1b19b0318f529b5a4d5f7774d711
QEMU が外部と通信するには以下の方法があります。
- tap を使う方法
- -user-net を使う方法
今回は後者の「-user-net」を使いました。CHR 6.31 のイメージを QEMU で起動します。CHR 6.31 のイメージは x86_64 ベースで動作します。
qemu-system-x86_64 -m 512 -enable-kvm -net nic,model=virtio -net user,vlan=0 -redir tcp:8080::80 -vnc :1 chr_6_31.img
上記の場合、-vnc :1 を指定しているので、起動した CHR のコンソールは「5,900 + 1 = 5901/TCP」で Listen しています。TigerVNC Viewer 等の VNC クライアントを使ってコンソール画面にアクセス出来ます。/ip dhcp-client print で DHCP で割り当てられたアドレスを確認したところ、以下のように表示されました。
[admin@MikroTik] > /ip dhcp-client print Flags: X - disabled, I - invalid # INTERFACE USE ADD-DEFAULT-ROUTE STATUS ADDRESS 0 ether1 yes yes bound 10.0.2.15/24
QEMU の起動オプションで -redir tcp:8080::80 を指定している為、ブラウザでホストマシンの 8080/TCP にアクセスすると CHR の Web 画面にアクセス出来ます。
今回は以下のパッケージを追加しました。
- kvm-6.31.npk
- multicast-6.31.npk
- ntp-6.31.npk
- openflow-6.31.npk
- user-manager-6.31.npk
更に以下の変更を加えました。
再起動してパッケージの追加・有効化・無効化を反映します。「System → Reset Configuration」を実行します。
ここまでの作業が完了したら Ubuntu のコンソール上で実行している QEMU を(乱暴ですが…)Ctrl + c で停止します。
イメージ形式の変換(raw → qcow2)
CHR のイメージは raw フォーマットになっています。このままでは VIRL 上で実行することが出来無いようです(Images の登録時、エラーになってしまいます)。
# qemu-img info chr_6_31.img image: chr_6_31.img file format: raw virtual size: 64M (67108864 bytes) disk size: 64M
qemu-img を使ってディスクイメージを raw フォーマットから qcow2 フォーマットへ変換します。変還後のファイル名は「chr_6_31_extra.img」としました。
qemu-img convert -O qcow2 chr_6_31.img chr_6_31_extra.img
確認してみると確かにファイルフォーマットが qcow2 になっています。
# qemu-img info chr_6_31_extra.img image: chr_6_31_extra.img file format: qcow2 virtual size: 64M (67108864 bytes) disk size: 33M cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false
VIRL へ登録する
server をベースに「CHR」という Subtype を新規作成します。設定は好みもありますが、今回は下記のようにしました。6.31 から virtio のドライバーが入っているので、デバイスには virtio を指定しています。
後は先程作成した chr_6_31_extra.img を VIRL の Images にアップロードすれば完了です。