文鎮化した Ubiquiti Networks Edgerouter X を復旧した備忘録

Gadget
Photo by hyt.

文鎮化した Ubiquiti Networks Edgerouter X を復旧した備忘録です.まずは,ER-X ってなに?ってところからスタートしたいと思います.なお,今回は手順が多いのでとても記事が

長い!

です.御注意ください.

Ubiquiti Networks Edgerouter X って?

製品ページは

UISP EdgeRouter X - Ubiquiti Store
Gigabit router with advanced network management and security features.

です.アメリカの企業なんですが,かなりお安い企業向けネットワーク製品を提供しているところで,特に,この Edgerouter X (略して ER-X)は

  • 安い($50 です.日本で買うと1万円程度)
  • 高性能(らしい)
  • 小さい

の三拍子揃った製品です.ただし,日本で買うには並行輸入するか,個人的に輸入している人のものを Amazon なんかから買うしかない.当然,日本語にも対応していないし,使えなくても自己責任っていう位置づけのものです.

実は,半年ほど前まで私のメインルーターは,IIJ の SEIL/X86 だったのですが,なぜなのか

Windows 10 Fall Creators Update で SEIL/x86 が起動しない(泣)
Windows 10 Fall Creators Update が配信されました.今回は,気が付くと更新画面が出ており,あまり何も考えずに「はい」と再起動したのが運の尽き…… SEIL/x86 が起動してこない(泣)…… 我が家の現在のメイ...

に記した通り,Hyper-V で動かなくなってしまいました(で,いまだに動きません(泣)).仕方が無いので,その代替えとして調達したのが本製品です.

EdgeRouter X がすごい | yabe.jp
最近北米の自宅と日本の実家に VPN を設けていろいろやれたらいいなーと思い、ルーターを物色したらなかなかすごいヤツを発見したので、買ってみました。

あたりのページを見て,面白そうだと思ったのももちろん理由なんですが,最も大きな理由は,とても「小さい」から.なんと,5ポートの単なるスイッチの小型のものと同じくらいの大きさしかありません.と言うことで,これは良い,と思って買ったんですが,初っ端からある意味大変愉しい経験をすることができました(そう思わないとやってられない).

文鎮化(Bricked)ってなにしたの?

届いた製品の Firmware が結構古かった(ver. 1.7,今は 1.10.1)ので,まずはファームウェアを最新にしてから設定しようとしただけです.

本製品,日本の家庭用ルーターなんかと同じように,Web インターフェースから色々設定できますし,Firmware のアップデートもここからできたので,最新の 1.10.1 の Firmware を適用しようとしました.でも,なぜだか「アップデートできない」って怒られます.仕方ないので,再起動してもう一度やってみようとしたところ,文鎮化(Bricked) してしまいました(泣).

もう少し詳しく言うと,リセットは効いているように見えるけど,なんどやっても設定画面にはアクセスできなくなってしまいました.

調べてみると,本製品,Firmware のアップデート後,文鎮化する事例が結構おきているみたいです.どうも安全にアップデートしたければ,Web インターフェース経由ではなく,CUI 経由でするべきだったようなのですが,後の祭りです.

アメリカ在住なら交換依頼もアリだと思いますが,並行輸入品なので,どうしたものか……と色々ググってみたところ,

https://community.ubnt.com/t5/EdgeRouter/EdgeRouter-X-bricked/td-p/1593241
EdgeRouter X がファクトリーリセットも効かなくなったのを直した話し - /var/log/study
タイトルどおり。 現状は解決に至っていないので、問題の解決方法を知りたいだけならココを見るのは無駄である。 解決した。 yaaamaaaguuu.hatenablog.com 上記を書いてはや数ヶ月。EdgeRouterは息をしなくなった。...

で,USB-TTL Cable を使えば,シリアルコンソールから復旧できる可能性があるとのことが分かったので,まぁ,ものは試しと,やってみることにしました.

USB-TTL を使った ER-X へのアクセス

これはほとんど

EdgeRouter X がファクトリーリセットも効かなくなったのを直した話し - /var/log/study
タイトルどおり。 現状は解決に至っていないので、問題の解決方法を知りたいだけならココを見るのは無駄である。 解決した。 yaaamaaaguuu.hatenablog.com 上記を書いてはや数ヶ月。EdgeRouterは息をしなくなった。...

と同じです.ただし,私の場合は,USB-TTL として,以下のものを使いました.

Photo by hyt.

Amazon で300円くらいです.

参考にさせて頂いたページで紹介されている USB-TTL も注文したのですが,届くのに3週間ほどかかることが分かったので,注文し直したものです.

本製品に限らず格安品の USB-TTL は,正規のチップが使われていないことから,Windows で使うときは古いドライバを手に入れないといけないなどの問題点があるみたいで面倒なので,MacOS から使うことにします.

まずは,Prolific の

Prolific Technology Inc. (USB to UART / RS232 / Serial)
Prolific Technology is a IC design house company and ASIC design service provider for USB Smart I/O (USB to UART, Card R...

から,PL2303_MacOSX_1.6.1_20171018.zip をダウンロードしてきて,展開すると,

Photo by hyt.

のように,インストーラーと英語ですけどかなり丁寧なインストール方法の解説PDFがあるので,それに従ってまずはドライバを導入し再起動します.

きちんとドライバが導入できていれば,USB-TTL をつなぐと,システム情報の USB に,

Photo by hyt.

のように「USB Serial Controller」が現れます.また,Terminal を立ち上げ,

$ cd /dev
$ ls -alF tty.usb*

とすると,

Photo by hyt.

のように,tty.usbserial というデバイスが現れるはずです.

次に,ER-X のカバーを外します.裏面

Photo by hyt.

の両端の2ヵ所にネジがあるので,これを外すと,

Photo by hyt.

のように簡単にカバーを外せます.少なくとも私の場合は封印シールなんかは特に付されていませんでした.で,USB-TTL を

Photo by hyt.

のように接続します.この状態で,まず,brew から,

$ brew install minimum

のように minicom を導入し(brew ってなに?って人は

Page not found · GitHub Pages

を参照してください),Terminal の「プロファイル」⇒「キーボードの設定」の「メタキーとして Options キーを使用」にチェックが

Photo by hyt.

のように入っているのを確認してから,

$ export LANG=C
$ minicom -b 57600 -o -D /dev/tty.usbserial

のように minicom を起動します.「メタキーとして Options キーを使用」にチェックが入ってないないと,minicom を終了させられなくなるからです(META Z, X で minicom は終了です).ここまで,キチンと設定できていれば,ER-X の電源を入れると,

Photo by hyt.

のように,1, 2, 3, 4, 7, 9 の選択肢が現れます.で,

EdgeRouter X がファクトリーリセットも効かなくなったのを直した話し - /var/log/study
タイトルどおり。 現状は解決に至っていないので、問題の解決方法を知りたいだけならココを見るのは無駄である。 解決した。 yaaamaaaguuu.hatenablog.com 上記を書いてはや数ヶ月。EdgeRouterは息をしなくなった。...

だと,4 を選択して,シングルモードで起動させて……という手順が記されていますが,残念ながら私の場合はより深刻な症状で,これだと上手くいきませんでした(具体的に言うと,起動して ID と password は聞かれるのですが,ID: ubnt, password: ubnt ではログインできず,かと言って root なんかでもログインできないし,さらに,eth0 にケーブルを刺すとカーネルパニックでハングアップするという,なんだか中途半端に Firmware が書き込まれてしまったような状態でした).

と言うことで,次の策として,boot 時の選択肢に,

  1. Load system code to SDRAM via TFTP
  2. Load system code then write to Flash via TFTP

ってのがあったので,tftp 経由で正しいファームウェアを送り込めないかを検討することにしました.

tftp server の準備

MacOS High Sierra だと,tftp server ははじめから導入されているようで,単に,

$ sudo launchctl load -w /System/Library/LaunchDaemons/tftp.plist

とするだけで使えるようになります.

さて,ここからの手順の大枠は,

https://community.ubnt.com/t5/EdgeRouter/What-are-the-recovery-options-on-a-EdgeRouter-X/td-p/1465254/page/4

に従います.なお,ググると見つかる

Ubiquiti Help Center
Find help and support for Ubiquiti products, view online documentation and get the latest downloads.

に「emrk-0.9c.bin」を tftp で送り込む手順が示されていますが,これは ER-X だとうまくいかないことを注意しておきます.上のページにもありますが,これは「ER-Lite」 もしくは「ER-PoE」でしか使えないイメージのようで,実際に手順に従い書込んでもウンともスンとも言いません.

ブートイメージと書込みイメージの準備

次にER-X で使えるブートイメージと書込みイメージの準備をします.まず,ER-X で使えるブートイメージですが,

Index of /snapshots/targets/ramips/mt7621/

から

  • openwrt-ramips-mt7621-ubnt-erx-initramfs-kernel.bin

をダウンロードしてください.また,ER-X に書き込むイメージとして,

UniFi - Rethinking IT - Ubiquiti
UniFi is rethinking IT with industry-leading products for enterprise networking, security, and more unified in an incred...

から

  • ER-e50.v1.10.1.5067582.tar

をダウンロードし,適当なところに

$ tar -xvf ER-e50.v1.10.1.5067582.tar
x vmlinux.tmp
x vmlinux.tmp.md5
x squashfs.tmp
x squashfs.tmp.md5
x version.tmp
x compat

のように展開しておいてください.

ブートイメージの送り込みと起動

次は,ブートイメージを tftp で ER-X に送り込むための準備を行います.

まず,ER-X の「eth0/PoE IN」ポートと Mac を Ethernet ケーブルで接続します.今の Mac は Ethernet ポートが無いので,実際には USB Ethernet 変換アダプタなどを利用することになると思います.私の場合はたまたま所有していた Anker の USB Hub + Ethernet 変換アダプタを使って,

Photo by hyt.

のように接続しました.また,USB Ethernet アダプタに,固定アドレスとして,192.168.1.179 を「システム環境変数」⇒「ネットワーク」経由で割り当てました.

次に,ブートイメージを

$ sudo mv Downloads/openwrt-ramips-mt7621-ubnt-erx-initramfs-kernel.bin /private/tftpboot/

の様に,tftp server が管理するディレクトリに送り込みます.この状態で,再び,ER-X の電源を投入し,今度は,シリアルコンソールに表示されるメニュー

......
Please choose the operation:
   1: Load system code to SDRAM via TFTP.
   2: Load system code then write to Flash via TFTP.
   3: Boot system code via Flash (default).
   4: Entr boot command line interface.
   7: Load Boot Loader code then write to Flash via Serial.
   9: Load Boot Loader code then write to Flash via TFTP.
default: 3

から1番を選択し,

1: System Load Linux to SDRAM via TFTP.
 Please Input new ones /or Ctrl-C to discard
        Input device IP (172.20.32.1) ==: 192.168.1.1
        Input server IP (172.20.32.2) ==: 192.168.1.179
        Input Linux Kernel filename (xxxxxxxxxxx) ==: openwrt-ramips-mt7621-ubnt-erx-initramfs-kernel.bin

のように,ER-X の IP アドレス,tftp server の IP アドレス,そして送り込むイメージの名前を入力します.正しく入力できていると,

 ETH_STATE_ACTIVE!!
TFTP from server 192.168.1.179; our IP address is 192.168.1.1
Filename 'openwrt-ramips-mt7621-ubnt-erx-initramfs-kernel.bin'.

 TIMEOUT_COUNT=10,Load address: 0x80a00000
Loading: Got ARP REPLY, set server/gtwy eth addr (00:e0:1b:80:06:b0)
Got it
#################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         ##############################################################
done
Bytes transferred = 2976846 (2d6c4e hex)
NetBootFileXferSize= 002d6c4e
Automatic boot of image at addr 0x80A00000 ...
## Booting image at 80a00000 ...
   Image Name:   MIPS OpenWrt Linux-4.9.87
.....

のような感じでブートしますので,

.......
[   16.470801] br-lan: port 1(eth0.1) entered forwarding state
[   16.482346] IPv6: ADDRCONF(NETDEV_UP): br-lan: link is not ready
[   17.470874] IPv6: ADDRCONF(NETDEV_CHANGE): br-lan: link becomes ready
[   34.610853] random: crng init done

まで待ち,Enter キーを入力すると(Enter を入力しないといつまで経っても進まない),

BusyBox v1.27.2 () built-in shell (ash)

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 OpenWrt SNAPSHOT, r6551-905a3f2
 -----------------------------------------------------
=== WARNING! =====================================
There is no root password defined on this device!
Use the "passwd" command to set up a new password
in order to prevent unauthorized SSH logins.
--------------------------------------------------
root@OpenWrt:/#

のようにプロンプト # が表示され,コマンド入力待ちとなります.

書き込みイメージの送り込みと書き込み

次は,書き込みイメージを送り込まないといけないのですが,その前に,「eth0/PoE IN」ポートに刺さっているイーサネットケーブルを取り外し,それを下の写真の様に「eth1」ポートに刺し直さなければなりません.

Photo by hyt.

この状態で,Mac の ER-e50.v1.10.1.5067582.tar を展開したフォルダに移動し,ファイル

  • vmlinux.tmp
  • squashfs.tmp
  • squashfs.tmp.md5
  • version.tmp

を scp を使って ER-X の /tmp に

$ scp version.tmp squashfs.tmp squashfs.tmp.md5 vmlinux.tmp [email protected]:/tmp/.
The authenticity of host '192.168.1.1 (192.168.1.1)' can't be established.
RSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.1' (RSA) to the list of known hosts.
version.tmp                                   100%   42    29.5KB/s   00:00
squashfs.tmp                                  100%   76MB   3.8MB/s   00:20
squashfs.tmp.md5                              100%   33    25.1KB/s   00:00
vmlinux.tmp                                   100% 1679KB   3.7MB/s   00:00

の様に送り込みます.

送り込みが終了したら,次のコマンドをこの順に ER-X のシリアルコンソールから実行していきます.

root@OpenWrt:/# cd /tmp
root@OpenWrt:/tmp# ubidetach -p /dev/mtd5
root@OpenWrt:/tmp# ubiformat /dev/mtd5
root@OpenWrt:/tmp# ubiattach -p /dev/mtd5
root@OpenWrt:/tmp# ubimkvol /dev/ubi0 --vol_id=0 --lebs=1925 --name=troot
root@OpenWrt:/tmp# mount -o sync -t ubifs ubi0:troot /mnt/
root@OpenWrt:/tmp# cp /tmp/version.tmp /mnt/version
root@OpenWrt:/tmp# cp /tmp/squashfs.tmp /mnt/squashfs.img
root@OpenWrt:/tmp# cp /tmp/squashfs.tmp.md5 /mnt/squashfs.img.md5
root@OpenWrt:/tmp# dd if=/tmp/vmlinux.tmp of=/dev/mtdblock3
root@OpenWrt:/tmp# dd if=/tmp/vmlinux.tmp of=/dev/mtdblock4

なお,cp /tmp/squashfs.tmp /mnt/squashfs.img とすると,

[  912.269341] Data buffer not 16 bytes aligned: 8ee3c798

のような表示が大量に出てきますし,時間もかかりますが,終わるまでとにかく待ちます.全て終了後,

root@OpenWrt:/tmp# reboot

として再起動し,しばらく待つと,

....
Starting network plug daemon: netplugd.

Welcome to EdgeOS ubnt ttyS1

By logging in, accessing, or using the Ubiquiti product, you
acknowledge that you have read and understood the Ubiquiti
License Agreement (available in the Web UI at, by default,
http://192.168.1.1) and agree to be bound by its terms.

ubnt login:

の様に login プロンプトが出てきますので,

  • ubnt login: ubnt
  • password: ubnt

とするとログインできます.また,再び eth1 に刺さっているイーサネットケーブルを

Photo by hyt.

のように eth0 に刺し直し,http://192.168.1.1 にアクセスすると Web インターフェースにアクセスすることができ,これで復旧完了です.

全体を通して

お気付きの通り,この復旧手順は,先人の努力の賜物なのですが,いろいろな所に情報が断片的に記されているのと,いろいろハマりどころがあり,私の場合,スタートしてから復旧までにほぼ半日要しました.

スムーズにいけば大体30分から1時間程度で復旧できますが,とてもではないけど覚えておけない手順なので,念のため,記録に残しておこうと思ったのがこの記事な訳です.

しかし,まぁ,頑張っただけあって,これで,ER-X なら,物理的に壊れない限りまぁ何とかできるかなという気分になりました.また,本システム,見ての通り u-boot が使われています.実は私は初めて u-boot を使ったのですが,調べてみるとラズパイで u-boot を使える様で,いちいち SD を書き換えなくても u-boot 経由でネットワークブートも実現できるみたいなので,まぁ,収穫かな,と(無理矢理)思うことにしています.

しかしですね,

今のところ復旧しただけ.本来の目的は SEIL/X86 の置き換えなんですが,いつになったらコレ実現できるのかなぁ……

というのが問題ですね.

タイトルとURLをコピーしました