らくがきちょう

なんとなく

Extra Packages を追加した MikroTik CHR を Cisco VIRL に登録する

RouterOS 6.31 current の公開に伴って CHR(Cloud Hosted Router)6.31 のバイナリも公開されています。ただし、公式ダウンロードページでは無く、フォーラムにダウンロードリンクがあります。

  1. http://www.mikrotik.com/download/share/chr_6_31.img
  2. 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

MD5SHA1 値は以下でした。

# md5sum chr_6_31.img
ad1b727293aafd20ff7ff76ebe7a8e57  chr_6_31.img

# openssl sha1 chr_6_31.img
SHA1(chr_6_31.img)= 55b0514eeddd1b19b0318f529b5a4d5f7774d711

QEMU が外部と通信するには以下の方法があります。

  1. tap を使う方法
  2. -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 printDHCP で割り当てられたアドレスを確認したところ、以下のように表示されました。

[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 画面にアクセス出来ます。

f:id:sig9:20150817234819p:plain

今回は以下のパッケージを追加しました。

  1. kvm-6.31.npk
  2. multicast-6.31.npk
  3. ntp-6.31.npk
  4. openflow-6.31.npk
  5. user-manager-6.31.npk

f:id:sig9:20150817234828p:plain

更に以下の変更を加えました。

  1. ipv6 パッケージを有効化
  2. ups パッケージを無効化
  3. wireless-fp パッケージを無効化

f:id:sig9:20150817235347p:plain

再起動してパッケージの追加・有効化・無効化を反映します。「System → Reset Configuration」を実行します。

f:id:sig9:20150817235843p:plain

ここまでの作業が完了したら 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 を指定しています。

f:id:sig9:20150818001129p:plain

後は先程作成した chr_6_31_extra.img を VIRL の Images にアップロードすれば完了です。