Meraki MR42にOpenwrtをインストールする手順のメモ

Meraki MR42というWifiルータにOpenwrtを入れて第二の人生を歩ませるための作業手順のメモ。

参考にした情報

以下のサイトと動画に必要な情報は概ね記載されている。先達の知恵に感謝

openwrt.org

qiita.com

www.youtube.com

事前に用意するもの

作業手順

Linux PCのセットアップ

メジャーなディストリなら何でもいけるはず。私はUbuntu 22.04でやりました

  1. python3とpyserialとminicomをインストールしておく
  2. TFTPサーバをセットアップする。ソフトウェアは好きなのを使う
  3. Openwrt公式からMR42用のsysupgradeイメージをダウンロードしておく
  4. こちらのGithubページから以下の3つのファイルをダウンロードしておく
    • mr42_u-boot.bin
    • openwrt-ipq806x-generic-meraki_mr42-initramfs-fit-uImage.itb
    • ubootwrite.py
  5. "mr42_u-boot.bin"と"ubootwrite.py"を適当な作業ディレクトリに一緒に置く
  6. TFTPサーバのディレクトリに"openwrt-ipq806x-generic-meraki_mr42-initramfs-fit-uImage.itb"を置く
  7. LinuxIPアドレスを192.169.1.250/24に変更する(または追加する)

MR42を殻割りしてUARTにアクセスする

こちらのページに画像がある。冒頭のYoutube動画も分かりやすい

  1. 裏ブタについている4つのゴム足を剥がす。両面テープで貼り付けてあるだけなので、つまんでそのままゆっくり引っぺがす。左側から外すと綺麗に外れやすい。4個あるので、なくさないように置いておく
  2. ゴム足を剥がすと出てくるネジ4か所を外す。なくさないように取っておく
  3. 表側の白いプラの外殻を外す。ケースプライヤーを隙間に突っ込んでケースに沿ってスライドさせていくと、ペキペキという音とともに内側の固定爪が外れていく。四辺全部外す。爪の固定は適度に弱く、結構簡単に外れる。しかし爪自体が薄いので、雑にやったら一か所折れた。実害はないので良しとする
  4. グレーのプラの裏蓋から金属の外殻に包まれた本体を外す。固定はされていないので手で外れる。外殻の外側にアンテナがついているので、曲げないように注意して取り扱うこと
  5. 金属殻の外周にある8つのビスを外してフタを開け、マザーボードを露出させる
  6. ボード上のUARTポートを確認する。4つのホールの端の四角い印のあるところがVCC。その隣から順にTX、RX、GNDの並び

Openwrt導入前の動作確認

  1. Linux PCとMR42をイーサネットケーブルでつなぐ。直結でもハブ経由でもOK。(理屈上はWifi接続でも行けるはずだが)
  2. UARTアダプタにジャンパワイヤをつなぐ。TXD/RXD/GNDの3本だけをつなぐ
  3. Linux PCにUARTアダプタを挿す。自動認識される(はず)
  4. ジャンパワイヤをMR42のUARTホールに挿す。アダプタのGNDとMR42のGND、アダプタのRXとMR42のTX、アダプタのTXとMR42のRXをつなぐ
    • ジャンパワイヤをそのままUARTポートに挿し込むと、ボードの下の金属のガワにワイヤの先端が接触してしまい、シリアル通信が失敗することがある。これを防ぐため、紙か何かの薄くて絶縁になるものを脇からボード下に差し込んで短絡しないようにする
  5. Linuxコマンドコンソールからminicomを起動する
    $ sudo minicom -s
    バイスが/dev/ttyUSB0、ハードウェア制御なしになっていることを確認する。異なるデバイス名で認識されている場合は、それをメモしておく。自分の環境ではデフォルトでOKだった
  6. MR42の電源を投入する。全て正しくセットアップされていれば、minicomのコンソールにMR42の起動メッセージが表示され流れていく
    • 何も表示されない場合や、表示されるが文字化けしている場合は接続と設定を順番に確認しなおす。良くある原因は、RXとTXのワイヤ接続違い、ジャンパワイヤとホールの接触不良、minicomの設定(ttyポート番号とボーレート)などなど
  7. (任意) MR42が起動してDHCPIPアドレスを取りにきていることを確認する
  8. 動作確認が済んだらminicomを終了し、MR42の電源を一旦落とす

Openwrt導入本番作業

  1. TFTPサーバを立ち上げる。192.168.1.250/24で"openwrt-ipq806x-generic-meraki_mr42-initramfs-fit-uImage.itb"が取得できる状態で待ち受けていること
  2. "ubootwrite.py"と"mr42_u-boot.bin"を置いたディレクトリに移動し、以下のコマンドでPythonスクリプトを走らせる
    $ sudo python3 ubootwrite.py --write=mr42_u-boot.bin
    Waiting for device... というメッセージが出てシリアルポートからの入力待ち状態になる
    • 裏でminicomを終了し忘れていてシリアルポートが占有されているとスクリプトの実行がコケるので注意する。何らかの理由でUARTアダプタがdev/ttyUSB0以外で認識されている場合は、起動オプション"--serial"で明示的に指定すること
  3. MR42の電源を入れる。ubootwrite.pyがデバイスの起動を検出して起動イメージ(mr42_u-boot.bin)のシリアル転送を開始し進捗率が表示される。完了まで15分程度かかるので待つ
    • スルーホールにジャンパワイヤを突っ込んだだけの状態だとわずかな振動で簡単に転送がコケるので、転送中は本体やデスクに触らず静かに待つのがベター
    • Waiting for device状態から電源オン後に転送が始まらずエラーでコケる場合は、ジャンパワイヤとUARTホールの接触不良を疑う
  4. シリアル転送が正常に完了すると、MR42が自動的にTFTPサーバからinitramfsイメージを取得して起動する
    • TFTPにinitramfsの取得に行く処理が走らずu-bootで止まってしまう場合、エラーが表示されていなくてもシリアル転送中の問題でmr42_u-boot.binが正しく起動していない可能性がある。ジャンパワイヤの接触を確認して、一旦電源を切って改めて起動イメージの転送をやり直すと正常に動くことがある
    • TFTPサーバに取りに来ない場合はIPアドレスの設定とイーサネットの接続を再確認する。取りに来ているがイメージ転送が失敗する場合は、miiコマンドを使ってイーサネットの接続速度を10Mbps half duplexに設定してリトライするといいらしい。私の場合はハブ経由のギガビット接続のままで成功したが
  5. Linux PCでminicomを立ち上げ、シリアル接続でOpenwrtのコマンドコンソールに入る。SSHで接続してはならない。以下のコマンドを入力する
    insmod mtd-rw i_want_a_brick=1
    mtd erase /dev/mtd8
    nandwrite -pam /dev/mtd8 /root/mr42_u-boot.mbn
    nandwriteコマンド入力後に以下のメッセージが表示されることを確認する
    Writing data to block 0 at offset 0x0
    Writing data to block 1 at offset 0x20000
    Writing data to block 2 at offset 0x40000
    注意:この後は必ず連続して手順7のイメージのflashまで完了させること。flash前にデバイスを再起動してはならない
  6. この後Merakiファームを再利用する気がない場合は、該当のボリュームを削除することでストレージ(/overlay)容量を60MB程度まで拡張できる。そうしたい場合は以下のコマンドを入力する。
    for i in diagnostic1 part.old storage part.safe ; do
    ubirmvol /dev/ubi0 -N $i
    done
  7. Webブラウザで192.168.1.1にアクセスするとLuciに入れるので、Flash new firmware imageからSysupgradeイメージをflashする。SCP等でイメージを転送してsysupgradeコマンドを叩いてもよい。MR42のIPアドレスを変更して作業したい場合はシリアルコンソールから設定を変更する。Flash後はデバイスが自動的に再起動する
  8. FlashしたイメージでOpenwrtが立ち上がってきたことを確認し、電源を切って、ケースを組み立て直す

これでOpenwrtの導入は完了。お疲れさまでした。

MR42雑感

  • 売値が高価なので当然だがハードウェアはめちゃくちゃいい。(ド素人がガワを外してボードを眺めただけの印象だが) 基盤上の実装や金属製の保護ケースとアンテナの作りなど、コンシューマ向けとは別格の高級感である。中小企業向けとはいえ、さすがCisco製品。完全クラウドマネジメント製品ということでライセンスが切れると(オフィシャルなファームでは)使いみちが全く無いこともあり、オクで2000円程度で捌かれているのはなんとも悲しいものである
  • 実際の電波の送信受信能力も非常に良好で、量販店で売っているコンシューマ向け機種とは一線を画している。一軒家の階をまたいだ通信も感度良好で安定している。MIMO3x3なのでリンクスピードは若干下がるが実用上の問題は(私の使い方では)全くない
  • とりあえずメインのWifiアクセスポイントとして、10台程度のデバイスがブラ下がる程度の環境で半年ほど連続稼働させているが完全ノートラブル。本当に放置で何のトラブルもないのは(個人的な経験上だが)結構珍しい
  • Openwrtで使えるストレージ容量は60MBほどありメモリは512MB搭載で、普通に使うには十分だろう。CPUにはQualcomm Atheros IPQ8068が搭載されており、これは4コアなのだが、そのうち2コアは暗号化か何かの処理のアクセラレータ的に使う特殊コアらしく、Openwrtでは現状この2コアを扱えない。なのでシステム上では2コアCPUとなる。それでも処理能力は十分高いが
  • 11acのみオン、デバイス10台程度接続で消費電力は5~6W程度。基盤全体を包む分厚い金属ケースがヒートシンクとして働くせいか、内部温度は室温+20℃程度で安定
  • Ethernetポートが一つしかないので有線ルーターとしては使えない。USBポートもないのであれやこれや接続して遊ぶことはできない。後継製品のMR52はEthernet2ポートかつMIMO4x4でありつつ既にOpenwrtでサポート済なのでこっちが欲しいところだが、まだ市場でリプレースの時期を迎えていないため安価な入手は難しい
  • PoE対応らしいが当方には環境がないので活用できていない
  • CiscoWifiバイスにたまにある「スペクトラム解析専用のWifiアダプタ」が装備されている。オフィシャルファームではこれを周辺の電波状況スキャン専用に使い、結果に応じてバンドステアリングとか色々なクライアント制御に活用しているらしい。Openwrtではこの第3のチャネルを独立したWifiアダプタとして普通に利用できる。従って、実はこれトライバンドデバイスである。ただしこの第3のアダプタはMU-MIMO非対応なので、速度はあんまり出ない(とはいえ実測で200Mbps程度は出るが)。使いみちが微妙なところではある
  • ACアダプタは一般的な外径5.5mm内径2.5mmの12Vのものが使える。純正は2.5Aだが、ご家庭で11acだけで使う分には1.5Aでも問題はなかった。Buffaloとかのルータに付属する内径が少し小さい(2.1mm)やつだと刺さらないので変換アダプタが必要になる
  • 外側ケースは、薄いプライヤーさえあれあばかなり外しやすい。ケースをぶっ壊しそうになりながらヒヤヒヤ作業をしたWG2600HPとは雲泥の差である

まとめ

2023年現在、日本で比較的容易に入手できるOpenwrt対応デバイスとしては価格性能比が最高クラスだと思われる。特に動作の安定性と電波の送受信性能が優れている。ヤフオクで頻繁に2,000円前後で投げ売られていて、人気もないので買いやすい。Ethernetポートが一つしかないこと、USBポートがないこと、導入作業が若干面倒であること、の3点が問題にならないなら、圧倒的にオススメである