メモのページ - チラシの裏メモ 3枚目

通信技術や気になった事を黙々とメモし続ける

Android端末で安定稼動するソフトウェアルータ・スイッチ まとめ

Android端末で安定稼動するソフトウェアルータ・スイッチに関するメモ。
Windows PCやMacBook等で動作するVirtualboxやVMware Workstationのような仮想環境構築ツールにてソフトウェアルータやスイッチを動かす事と同じように、Androidスマホで動作するLimbo PC Emulatorというエミュレータアプリを利用すれば同じような事が出来る。
自分が使用しているAndroidスマホにて、どのソフトウェアルータやスイッチが快適に動作するか確認したく、入手済みもしくは簡単に入手可能なソフトウェアルータを対象に確認してみた。


当方の環境
・Androidスマホ:VAIO Phone A VPA051
 CPU:Qualcomm Snapdragon 617 1.5GHz(クアッドコア) + 1.2GHz(クアッドコア)、RAM:3GB、内蔵ディスク(ROM);16GB
・ホストOS:Android OS 6.0.1
・エミュレータ:Limbo PC Emulator 2.10.0
・キーボード:ソフトウェアキーボードHacker's Keyboard 1.40.7、もしくはNexus7(2012)用Bluetoothキーボード


そもそもLimbo PC Emulatorとは何?
Limbo PC Emulatorとは、Android OSで動作するQEMUベースのx86エミュレータツール。
スマホのハードウェア上で直接動作するものではないので、VMware ESXiやLinuxのKVM等のようなハイパーバイザよりも、OracleのVirtualBoxに近いツール。
ルータやスイッチ等通信機器のOSやLinux等のqcow2ファイルをLimbo PC Emulatorに読み込ませる事で、Androidスマホ上で他のOSを動作させる事が出来る。
Limbo PC Emulatorのアーキテクチャに関しては、以下のリンク先の9ページ目を参照。
https://www.linux-kvm.org/images/a/a9/Kvm-forum-2013-Windows8-on-Android-with-KVM.pdf


以下の画像は、Androidスマホ VAIO Phone A 内で動いているVyOS。



試用したソフトウェアルータ・ファイアウォールの一覧
当記事の執筆開始の段階で入手可能なもの、過去に入手したものから以下を選んだ。入手方法に関しては当記事では言及しない。
・RouterOS CHR 6.45.8 (chr-6.45.8.vdi)
・SEIL/x86 Ayame (seilx86.qcow2)
・Vyatta VC6.1 32bit版 (vyatta-livecd_VC6.1-2010.08.20_i386.iso)
・VyOS 1.1.8 32bit版 (vyos-1.1.8-i586.iso)
・VyOS 1.1.8 64bit版 (vyos-1.1.8-amd64.iso)
・VyOS 1.2.0 64bit版 (vyos-1.2.0-amd64.iso)
・VyOS 1.3 rolling 202001241307版(64bit) (vyos-1.3-rolling-202001241307-amd64.iso)
・DANOS 1907 (danos-1908-amd64-vrouter.iso)
・HPE VSR1000 E0518 (VSR1000_HPE-CMW710-E0518-X64.iso)
・pfSense 2.3.5 32bit版 (pfSense-CE-2.3.5-RELEASE-i386.iso)
・OPNsense 18.1.6 (OPNsense-18.1.6-OpenSSL-dvd-i386.iso)
・OPNsense 20.1 (OPNsense-20.1-OpenSSL-dvd-amd64.iso)
・Cumulus VX 3.7.11 (cumulus-linux-3.7.11-vx-amd64-qemu.qcow2)
・Lagopus Router 19.07 (Ubuntu Server 18.04.3 + Lagopus 19.07)
・Lagopus Switch 0.2.10 (Ubuntu Server 16.04.6 + Lagopus 0.2.10)
・Cisco CSR1000v 3.11.04 (csr1000v-universalk9.03.11.04.S.154-1.S4-std.iso)


Limbo PC Emulator側の設定
Limbo PC Emulatorは以下のサイトからダウンロードする。
2年程前まではGoogle Playから落としてインストール出来たものの、アプリのメンテナンスの遅延等の問題が有りGoogle Playからダウンロード出来ない。ダウンロードサイトから直接apkファイルをダウンロードしインストールしなければならない。
https://sourceforge.net/projects/limbopcemulator/ Limbo PC Emulator バージョン2.10.x

最新バージョンでは仮想RAMの割り当てに上限が無く下記より多くの容量を設定出来るものの、画面上側にデフォルトでツールバーが表示される事が嫌である事と32bit版OSの動作が安定しない事から、安定版の2.10.0を使用している。
Graphics設定はvmware、User InterfaceはVNCに統一した。
RAM Memoryの設定の最大値が456MBになっているのは、自分の環境では456MBより多く設定するとLimbo PC Emulatorが落ちる為。
どうやら仮想RAMの設定はスマホのRAM容量に左右されるようである。
よって、上記にて各OSの要件に従うと記載したものの、RouterOSの128MB以外は456MBに設定した。

CPU/Board
Architecture:32bit版OSの場合はx86、64bit版OSの場合はx86_64
Machine Type:pc
CPU Model:default
CPU Cores:1
RAM Memory (MB):Router OSは128MB、それ以外は456MB

Storage
qcow2ファイルが配布されている場合はHard Disk A:にて選択。
isoファイルしか無い場合は、下記のCDROM:にisoファイルを選択し、Hard Disk A:にてNewを選択し適当なファイル名を入力。

Removable Storage
CDROM:にAlpine Linuxのisoファイルを選択する。

Graphics
VGA Display:vmware

Audio
Sound Card:None

Network
Network:User
Network Card:ne2k_pci、e1000、virtioのどれかで外部との通信は可能。
DNS Server:8.8.8.8のまま

Boot Settings
Boot from Device:isoからデプロイした場合は最初はCDROM、デプロイ後はHard Diskに変更。qcow2でデプロイした場合はHard Diskを選択。
Kernel:None
Initrd:None

User Interface
User Interface:SDL(Simple Direct media Layer)とVNC(Virtual Network Computing)のどちらでも良い。

Advanced
Disable HPETとDisable FD CheckとHigh Priorityにチェックを入れる。

...設定が完了したら、画面上部の三角アイコンをタッチしデプロイ開始。
PCのVirtualBoxやVMware Workstationと比較するとデプロイの進行が非常に遅いのは、スペック上仕方が無い。


合否基準
以下の3つをクリアする事で、Androidスマホ・タブレットで安定稼働する仮想アプライアンスであると判定。
コマンドの実行後の反応の遅さに関しては判定基準から外す。スマホなので遅いのは仕方がない。
・スマホ内でのデプロイを5回実施し、全て正常終了する事。
・外部への通信が出来る事。例えばGoogle Public DNS(8.8.8.8)に対しpingを打ちreplyが返ってくる事。
・スマホで自分がよく使用するアプリ(Instagram、YAMAP、Google Chrome)を立ち上げてもLimbo PC Emulatorが落ちない事。


制限事項
・ゲストOS全般:Limbo PC Emulatorの仕様として、インタフェースはWAN向けのNATインタフェース1つしか作成出来ない。よってソフトウェアルータやスイッチはワンアーム構成となる。
・ルーティング設定:WLANを介して外部のルータやスイッチとの間でL3ルーティングのネイバ関係を確立させる事は可能。Limbo PC EmulatorのNetwork設定欄のHost Forwarding設定にてプロトコル番号で穴を開ける必要が有る。
自分の環境では、Limbo PC Emulator内のVyOSとWindows PCのVirtualBox内のVyOS同士でeBGPピアを張る事が出来たが、iBGPやOSPFやRIPは出来なかった。


結果発表
正常動作が可能
スマホ内でデプロイが正常に完了し、外部との通信が出来、他のアプリを立ち上げても落ちないソフトウェアルータ・ソフトウェアスイッチは以下の3つだった。
ハイエンドなスマホでデプロイすると、もう少し増えると思われる。
・RouterOS(CHR 6.45.8)
・Vyatta VC6.1 32bit版
・VyOS 1.1.8 32bit版

動作やデプロイの成功率に難有り
以下はデプロイ自体は完了するが使用に制限有り。
・Cumulus VX 3.7.11:おそらくLimbo側で設定するRAM Memoryの割り当てが少ない為だと思われるが、netdデーモンが正常に起動出来ていなかった事が原因のようだ。同じファイルをVirtualboxでデプロイするとNCLUのコマンドを実行する事が出来る。

以下はLimbo PC Emulatorの設定は変えず5回デプロイ試行した内で3回成功。
・VyOS 1.3 rolling 202001241307版(64bit):毎回ではないがFreeing unused kernel image memory: から先に進まない。

デプロイ停止につき動作確認不可
以下はデプロイが途中で停止。停止した状態が6時間継続したところでデプロイ作業を止めた。
ただし、VyOS 1.1.8の64bit版とVyOS 1.2.0の64bit版はVirtualboxで生成したvmdkファイルをqemu-imgでqcow2に変換し、Limbo PC Emulatorに移すと動作は可能。
・VyOS 1.1.8 64bit版:Loading, please wait...から先に進まない。
・VyOS 1.2.0 64bit版:Freeing unused kernel image memory: から先に進まない。
・DANOS 1907:"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.から先に進まない。
・SEIL/x86 Ayame:Firmware checksum okから先に進まない。
・OPNsense 20.1:Booting...から先に進まない。
・VSR1000:システムインストール後のBooting the kernel...から先に進まない。
・Lagopus Router 19.07:土台となるUbuntu Linuxのデプロイ自体が完了しない。
・Lagopus Switch 0.2.10:土台となるUbuntu Linuxのデプロイ自体が完了しない。

デプロイ不可
以下はデプロイすら出来ない。
・Cisco CSR1000v 3.11.04:Limbo PC Emulatorの設定後、再生ボタン(三角ボタン)にタッチすると1秒程後に元の設定画面に戻る。
Virtualbox上でも設定RAM容量が最低でも2.5GBは設定しないと快適に動作しない為、スマホ上では無理という事か。

番外
以下は管理用インタフェース1個しか使用出来ず、ユーザ〜サーバ間の通信のような事が出来ない為、デプロイ自体は完了したものの正常動作の確認が出来ない為、当カテゴリに置いた。
・pfSense 2.3.5 32bit版
・OPNsense 18.1.6


推しのソフトウェアルータ・スイッチ
上記の結果を踏まえ、Limbo PC Emulatorで遊べる推しの機器は以下の3つ。
思っていた以上に少なかった...
32bit版のVyOS 1.x。リファレンスに載っているコマンド一通り実行可能、動作が軽快(とは言えコマンド打った後返ってくるまで2秒~30秒程要する)。上の画像のとおり、PCとAndroidスマホをWLANで接続し、PC上のVirtualboxで動作するVyOSとiBGPピアを張る事も出来る。
Vyatta。古くても良いからソフトウェアルータがスマホで動いているのを見てみたい...であればVyattaも推し。バージョン6.1までならそこそこ軽快に動作する。
RouterOS。デプロイに要する時間が短い(3分以内)、動作が軽快。細かな設定は出来ないが基本的な設定を遊びたいのであれば推しの1台。


その他
・自分の環境だけかも知れないが、VAIO Phone AではLimbo PC EmulatorのRAM設定は472MB以上に設定すると、Limbo PC Emulator自体が落ちる事がある。
・SONY Xperia XZ2の場合、Limbo PC EmulatorのRAM設定は832MBまで設定可能。(2021/1/3追記)
・Vyattaの後継機種であるDANOSはVirtualbox上にて動かす為にはRAMを最低でも2222MB(2048MBじゃないよ)確保しないと正常にデプロイが完了しない。VyattaやVyOSとは別物と考えると良いだろう。
・VyOSはdpkg-reconfigure console-setupの実行自体は出来るものの、フォントサイズの変更は反映されない。
・vmdkファイルの読み込みはLimbo PC Emulator 4.1.0で可能。Limbo PC Emulator 2.xで動作させるにはqemu-imgでqcow2形式に変換する必要がある。
・ソフトウェアルータやソフトウェアスイッチではなくLinuxであれば、軽量なLinuxと呼ばれているものや過去のバージョンならそこそこ軽快に動作する。Linuxのbashコマンドの練習台目的であれば、Debian GNU/Linuxの古いバージョンや動作が軽いAlpine Linuxにbashをインストールしたものがお勧め。
・当記事の内容を実行した事による故障や損害について、当ブログの著者は一切の責任を負いかねますのであらかじめご了承ください。
・SONY Xperia XZ2にて上記の仮想アプライアンスのデプロイを試行すると、VyOS 64bit版のデプロイは正常に完了した。(2021/1/3追記)


https://debslink.hatenadiary.jp/entry/20200208/1581166998 Lagopus SwitchをVirtualboxスマホで動かす
https://debslink.hatenadiary.jp/entry/2019/10/13/155145 AndroidスマホでVyOSを動かす
https://debslink.hatenadiary.jp/entry/20171001/1506867093 VyOSをNexus7で動かす
https://debslink.hatenadiary.jp/entry/20200119/1579416326 Androidスマホで動作するCumulus VXで疎通設定
https://debslink.hatenadiary.jp/entry/20200506/1588733149 Nexus7内にて動作するAlpine LinuxでFTPサーバを構築 (2020年5月7日追記)

https://mikrotik.com/software RouterOS(MikroTik)
https://www.seil.jp/product/x86ayame.html SEIL/x86 Ayame
https://www.vyos.io/ VyOS
https://www.danosproject.org/ DANOS
https://www.pfsense.org/ pfSense
https://opnsense.org/ OPNsense
https://cumulusnetworks.com/ CUMULUS VX
http://www.lagopus.org/ Lagopus switch and router
https://www.cisco.com/c/en/us/products/routers/cloud-services-router-1000v-series/index.html Cisco CSR1000v
https://alpinelinux.org/ Alpine Linux

https://sourceforge.net/projects/limbopcemulator/ Limbo PC Emulator バージョン2.10.x
https://play.google.com/store/apps/details?id=org.pocketworkstation.pckeyboard Hacker's Keyboard