らくがきちょう

なんとなく

Metarouter 機能で RouterOS 上に OpenWRT な仮想ルータを起動するには

RouterOS の Metarouter 機能を使うとルータ内で仮想ルータを起動することが出来ます。Metarouter として起動する OS は一般的に以下の二通りが存在するようです。

  1. RouterOS 内で RouterOS を起動する(ROS on ROS)
  2. RouterOS 内で OpenWRT を起動する(OpenWRT on ROS)

今回は RouterOS の CLI 上から Metarouter 機能を試してみます。以下をゴールとします。

  • RouterOS 上の仮想ルータとして OpenWRT をインストールする
  • OpenWRT に基本的な初期設定を実施する
  • OpenWRT の管理 Web インターフェイスである「LuCI」にアクセス出来る状態にする

今回の試験環境

今回は以下の環境を用いました。

  • RouterBoard 750 GL
  • RouterOS 6.26
  • ether1 〜 3 は RouterOS で利用する
  • ether4 〜 5 は仮想ルータ(OpenWRT)で利用する
  • ベースになる RouterOS は IP アドレスやゲートウェイDNS サーバが適切に設定され、インターネットアクセスが出来るように設定されていること

Metarouter は「ルータ内で仮想ルータを起動する」為、CPU / メモリ / ストレージを多く消費するので要注意です。今回の環境で Metarouter を設定する前の状態は以下の通りでした。

> /system resource print
                   uptime: 5h6m15s
                  version: 6.26
               build-time: Feb/03/2015 15:18:36
              free-memory: 45.9MiB
             total-memory: 64.0MiB
                      cpu: MIPS 24Kc V7.4
                cpu-count: 1
            cpu-frequency: 400MHz
                 cpu-load: 24%
           free-hdd-space: 110.9MiB
          total-hdd-space: 128.0MiB
  write-sect-since-reboot: 43
         write-sect-total: 34567
               bad-blocks: 0%
        architecture-name: mipsbe
               board-name: RB750GL
                 platform: MikroTik

設定の流れ

Metarouter 機能で OpenWRT を利用する場合、以下の流れで設定を進めることになります。

  1. 仮想ルータへ割り当てるインターフェイスの準備
  2. OpenWRT イメージのダウンロード
  3. OpenWRT イメージのインポート(仮想ルータの作成)
  4. 仮想ルータへのインターフェイス割り当て
  5. OpenWRT の初期設定

仮想ルータへ割り当てるインターフェイスの準備

設定直前のインターフェイス状態は以下の通りです。

> /interface ethernet print
Flags: X - disabled, R - running, S - slave
 #    NAME                  MTU MAC-ADDRESS       ARP        MASTER-PORT               SWITCH
 0 R  ether1-gateway       1500 D4:CA:6D:72:20:5D enabled    none                      switch1
 1    ether2-master-local  1500 D4:CA:6D:72:20:5E enabled    none                      switch1
 2  S ether3-slave-local   1500 D4:CA:6D:72:20:5F enabled    ether2-master-local       switch1
 3  S ether4-slave-local   1500 D4:CA:6D:72:20:60 enabled    ether2-master-local       switch1
 4  S ether5-slave-local   1500 D4:CA:6D:72:20:61 enabled    ether2-master-local       switch1

現状を図示すると以下のようになります。ether3 〜 5 が ether2 の Slave になっています。

f:id:sig9:20150208233359p:plain

ether4 〜 5 は仮想ルータに割り当てる予定ですので、ether2 の Slave から解除します。

> /interface ethernet set 3 master-port=none
> /interface ethernet set 4 master-port=none

設定変更後のインターフェイス状態を確認すると ether4 〜 5 の Master Port が「none」になっていることが分かります。

> /interface ethernet print
Flags: X - disabled, R - running, S - slave
 #    NAME                  MTU MAC-ADDRESS       ARP        MASTER-PORT               SWITCH
 0 R  ether1-gateway       1500 D4:CA:6D:72:20:5D enabled    none                      switch1
 1    ether2-master-local  1500 D4:CA:6D:72:20:5E enabled    none                      switch1
 2  S ether3-slave-local   1500 D4:CA:6D:72:20:5F enabled    ether2-master-local       switch1
 3    ether4-slave-local   1500 D4:CA:6D:72:20:60 enabled    none                      switch1
 4    ether5-slave-local   1500 D4:CA:6D:72:20:61 enabled    none                      switch1

図示すると以下のようになります。ether4 〜 5 が ether2 から切り離されました。

f:id:sig9:20150208233418p:plain

OpenWRT イメージのダウンロード

まず最初に、RouterBoard に保存されているファイル一覧を確認しておきます。まだ OpenWRT イメージはダウンロードしていません。

> /file print
 # NAME                                 TYPE                                      SIZE CREATION-TIME
 0 web-proxy1                           web-proxy store                                sep/28/2013 17:24:01
 1 pub                                  directory                                      jan/02/1970 07:06:48
 2 skins                                directory                                      jan/01/1970 00:00:48
 3 autosupout.rif                       .rif file                             278.1KiB jan/02/1970 02:36:14
 4 auto-before-reset.backup             backup                                 28.8KiB jan/02/1970 02:56:59

RouterBoard の公式 Wiki によると OpenWRT イメージを以下のようにダウンロードする手順になっていますが、これでは後々、上手くいかない点が出てきます。

> /tool fetch url="http://www.mikrotik.com/download/metarouter/openwrt-mr-mips-rootfs.tgz" mode=http

フォーラムの Metarouter images ページに記載のある以下コマンドだと上手くいきました。

/tool fetch url="http://openwrt.wk.cz/attitude_adjustment/mr-mips/openwrt-mr-mips-rootfs.tar.gz"

OpenWRT イメージのダウンロードが完了しました。ダウンロードしたファイルが一覧に追加されています。

> /file print                                                                               # NAME                                 TYPE                                      SIZE CREATION-TIME
 0 web-proxy1                           web-proxy store                                sep/28/2013 17:24:01
 1 pub                                  directory                                      jan/02/1970 07:06:48
 2 skins                                directory                                      jan/01/1970 00:00:48
 3 autosupout.rif                       .rif file                             278.1KiB jan/02/1970 02:36:14
 4 auto-before-reset.backup             backup                                 28.8KiB jan/02/1970 02:56:59
 5 openwrt-mr-mips-rootfs.tar.gz        .gz file                             2340.5KiB jan/02/1970 08:29:54

OpenWRT イメージのインポート(仮想ルータの作成)

ダウンロードした OpenWRT イメージをインポートし、仮想ルータを作成します。メモリサイズは全体のメモリ容量と相談しながら適宜、指定します。デフォルトではインポート完了直後に仮想ルータが起動してしまいます。インターフェイスの割り当てが済んでから仮想ルータを起動したいので enabled=no を指定し、インポートが完了しても仮想ルータが自動起動しないようにしておきます。

> /metarouter import-image file-name=openwrt-mr-mips-rootfs.tar.gz memory-size=24 enabled=no

無事、仮想ルータがインポートされました。仮想ルータの一覧は /metarouter print コマンドで表示出来ます。今回は仮想ルータの名前として「mr1」が割り当てられました。仮想ルータ名は次の手順である「仮想ルータへのインターフェイス割り当て」時に必要です。

> /metarouter print
Flags: X - disabled
 #   NAME                                             MEMORY-SIZE     DISK-SIZE     USED-DISK STATE
 0 X mr1                                                    24MiB     unlimited       5596kiB disabled

現状を図示すると以下のようになります。RouterOS 内で仮想的に OpenWRT を作成しましたが、まだ OpenWRT へインターフェイスが割り当てられていません。

f:id:sig9:20150208233636p:plain

仮想ルータへのインターフェイス割り当て

仮想ルータにインターフェイスを割り当てます。virtual-machine には仮想ルータの名前を指定します。仮想ルータ名は前項に記載した通り、/metarouter print コマンドで確認出来ます。

> /metarouter interface add virtual-machine=mr1 static-interface=ether4-slave-local
> /metarouter interface add virtual-machine=mr1 static-interface=ether5-slave-local

仮想ルータへのインターフェイス割り当てが完了しました。仮想ルータとインターフェイスの割り当て状態は /metarouter interface print コマンドで確認することが出来ます。

> /metarouter interface print
Flags: X - disabled, A - active
 #   VIRTUAL-MACHINE                       TYPE    STATIC-INTERFACE                       VM-MAC-ADDRESS
 0   mr1                                   static  ether4-slave-local                     02:49:E8:55:8E:E8
 1   mr1                                   static  ether5-slave-local                     02:45:5F:D0:20:B1

現状を図示すると以下のようになります。ether4 〜 5 が仮想ルータ(mr1)に関連付けられました。

f:id:sig9:20150208233827p:plain

尚、後で OpenWRT 上から確認するとわかりますが OpenWRT 上でインターフェイスは以下のように認識されていました。

  • ether4 → OpenWRT 上では eth0
  • ether5 → OpenWRT 上では eth1

準備が出来たので仮想ルータを起動します。

> /metarouter set 0 disabled=no

OpenWRT の初期設定

OpenWRT の初期設定を行う為、RouterOS 上から内部的に OpenWRT のコンソールにアクセスします。尚、コンソールから抜けて RouterOS に戻るには「Ctrl+A → Q」を押します。

> /metarouter console 0

コンソールアクセスすると OpenWRT の起動メッセージが見えるはずです。「Please press Enter to activate this console.」まで表示されたら、エンターキーを入力して OpenWRT にログインします。まずは root ユーザのパスワードを設定します。

# passwd
Changing password for root
New password:
Retype password:
Password for root changed by root

次に LAN のアドレスを(DHCP では無く)静的に設定します。今回は以下のパラメータを設定しました。

項目
IP アドレス 192.168.253.228
ネットマスク 255.255.255.0
ゲートウェイ 192.168.253.254
DNS サーバ 8.8.8.8

具体的には以下のように、uci コマンドで設定を行います。

uci set network.lan.proto=static
uci set network.lan.ipaddr=192.168.253.228
uci set network.lan.netmask=255.255.255.0
uci set network.lan.gateway=192.168.253.254
uci set network.lan.dns=8.8.8.8
uci commit network
ifdown lan && ifup lan

但し、この状態ではまだ名前解決が上手く行きません。/etc/resolv.conf は以下のようになっていました。

search lan
nameserver 127.0.0.1

nameserver を Google DNS 等、名前解決出来る DNS へ変更します。

search lan
nameserver 8.8.8.8

インターネットアクセス出来るようになりました。OpenWRT のパッケージをアップデートします。

# opkg update
Downloading http://openwrt.wk.cz/attitude_adjustment/mr-mips/packages/Packages.gz.
Updated list of available packages in /var/opkg-lists/packages.

余談ですが、初期状態で opkg のリポジトリ等を設定している /etc/opkg.conf は以下のようになっていました。

src/gz packages http://openwrt.wk.cz/attitude_adjustment/mr-mips/packages
dest root /
dest ram /tmp
lists_dir ext /var/opkg-lists
option overlay_root /overlay

アップデートが完了したら LuCI をインストールします。

# opkg install luci

LuCI に Web アクセスする為、Web サーバを起動します。合わせて自動起動するようにも設定しておきます。

# /etc/init.d/uhttpd start
# /etc/init.d/uhttpd enable

これで LuCI にアクセス出来るようになりました。ブラウザから OpenWRT のアドレスへアクセスしてみると LuCI のログイン画面が表示されるはずです。

f:id:sig9:20150208234025p:plain

参考までに、この時点で RouterOS のリソース状態は以下のようになっていました。

> /system resource print
                   uptime: 6h21m23s
                  version: 6.26
               build-time: Feb/03/2015 15:18:36
              free-memory: 12.0MiB
             total-memory: 64.0MiB
                      cpu: MIPS 24Kc V7.4
                cpu-count: 1
            cpu-frequency: 400MHz
                 cpu-load: 20%
           free-hdd-space: 99.7MiB
          total-hdd-space: 128.0MiB
  write-sect-since-reboot: 9566
         write-sect-total: 44090
               bad-blocks: 0%
        architecture-name: mipsbe
               board-name: RB750GL
                 platform: MikroTik