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 上で動作しています。
- vSphere 6 ESXi
- Cisco VIRL 0.9.242
- Ubuntu 14.04.3 LTS(x86_64)
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
MD5 や SHA1 値は以下でした。
# 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 を使う方法
- 基本的には「仮想マシン → 外部」通信しか出来ない
- 「外部 → 仮想マシン」向きに通信したい場合は -redir オプションを指定してポートフォワードを行うことで可能
- 準備が簡単
今回は後者の「-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
更に以下の変更を加えました。
- ipv6 パッケージを有効化
- ups パッケージを無効化
- wireless-fp パッケージを無効化
再起動してパッケージの追加・有効化・無効化を反映します。「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 にアップロードすれば完了です。
コメント