LoginSignup
2
2

WXR-1900DHPのOpenWrtのインストール

Last updated at Posted at 2024-05-27

はじめに

Buffalo社のルータWXR-1900DHPを安く手に入れたので
この機器をOpenWrt化するまでのやり方を備忘録を兼ねて記載します。

最新ファームウェア(Ver2.51)で、なおかつ殻割りせずに導入に成功していますので記事化します。

※アンテナなしのせいかバッテリー付きで330円でした

背景

OpenWrtの公式サイトには専用ページがあり、TRXファイルが置いてありますが、これのインストールをどう実施するかが問題になります。

スクリーンショット 2024-05-27 20.34.38.png

DD-WRT OpenWrt 適材適所で両方使いたい人向け @ ウィキにも専用ページがあり、すでに色々試した方のサイトがあるのですが、ここで紹介されている方法は基本的にデバッグモード1が必要です。

wxr1900dhpにOPENWRTを入れてみたときの失敗例と成功例 (魚拓)

しかし、私が持っている機器はすでに最新ファームウェア(2024年5月現在だとver2.51)になっており、このバックドアは塞がれています。2

色々調査したところinitramfs imageを公開してくれている方がいました。
これを使ってnvramに書き込みすることでOpenWrt化に成功したので、手順をここで公開します。

手順1 各種ファイルのダウンロードと配置
手順2 TFTPソフトのインストールと動作確認
手順3 initramfs image起動とバックアップ
手順4 ファームウェアの書き込み

必要なもの

  • PC(Windows)
  • WXR-1900DHP(ファームウェアVer2.51)
  • LANケーブル

手順1 各種ファイルのダウンロードと配置

ファイルダウンロード

  • initramfs image
    ここからダウンロード3
    ※作成してくださった有志の方、ありがとうございました
  • TFTPソフト
    ※今回はTFTP64を使いました
  • trxファイル
    OpenWrt公式サイトより「openwrt-23.05.0-bcm53xx-generic-buffalo_wxr-1900dhp-squashfs.trx」をダウンロード

ファイルの配置

WXR-19000DHPのinitramfs image(openwrt-bcm53xx-generic-buffalo_wxr-1900dhp-initramfs-kernel.bin)をfirmware.ramに変更し、TFTPのトップディレクトリに配置します。
今回はC:\ftpfilesというディレクトリを作成し、そこに配置しました。

TFTPソフトのインストールと動作確認

TFTPソフトのインストール

インストーラに従ってTFTP64をインストールして下さい。
インストールの詳細はここ見てもらえればと思います。

Windowsの諸設定

Windowsファイアウォールを無効化します。これをしないとTFTPの通信がWindowsファイアウォールで止められることがあるためです。

もしセキュリティソフトを入れている方は、その無効化も実施して下さい

コントロールパネルシステムとセキュリティWindowsDefenderファイアウォールWindows Defenderファイアウォールの有効化と無効化
よりプライベートネットワークとパブリックネットワークの両方のファイアウォールを無効化します。

windefend.PNG

次にIPアドレス設定変更を行います。

コントロールパネルネットワークとインターネットネットワークと共有センターアダプターの設定の変更イーサネットプロパティから

  • IPアドレスを192.168.11.2
  • サブネットマスクを255.255.255.0
  • デフォルトゲートウェイを192.168.11.1
    に設定します。(DNSサーバの設定を画像では入れていますが、なくても問題なし)

ipaddress.PNG

なお、このイーサネットのプロパティはタスクバーのインターネットアクセスのアイコンからアダプターのオプションを変更するで飛ぶこともできます。

TFTPソフトの設定

右クリックより管理者として実行して、各種設定をしていきます。

GLOBALタブはTFTP ServerだけチェックがついていればOKです。

TFTPタブは画像のように設定して下さい。

  • Base Directoryfirmware.ramを置いたディレクトリに設定すること
  • Bind TFTP to this address192.168.11.2に設定すること

設定後はBrowseボタンよりfirmware.ramがちゃんと見えるか確認しましょう。

またServer interfaces192.168.11.2に変更します。

なお、この時に再起動するとエラー出ることがありますが、無視でOKです。

TFTPサーバの動作確認

TFTPサーバが問題なく起動しているか、動作確認する手順です。
TFTPサーバをよく使っている方、動作確認は不要な方は飛ばしてもらって構いませんが、慣れてない人はここで問題なくTFTPサーバが起動できているか確認した方が良いと思います。

コントロールパネルプログラムと機能Windowsの機能の有効化または無効化
よりTFTPクライアントにチェックをつけて下さい。

tftp-enable.PNG

これによりTFTPのクライアント機能が有効化されます。

TFTPD64のソフトはTFTPサーバ機能なので別です
このソフトはTFTPクライアント機能も付いていますが、ここでは使いません

次にIPアドレスの設定変更を実施します。
Server interfacesBind TFTP to this addressを両方127.0.0.1に変更します。

コマンドプロンプトよりtftp 127.0.0.1 GET firmware.ramを実行し、以下の画像のようにアクセスログがあること、正常にダウンロードできることを確認します。

tftp-test.PNG

TFTPサーバが問題なく動いているようであれば、Server interfacesBind TFTP to this addressを両方192.168.11.2に変更しておきます。

initramfs image起動とバックアップ

イメージからの起動

WXR-1900DHPのインストール方法は、はWikiで言うところの「外部サーバから受信する方法」になります。
PCとLAN1をLANケーブルで繋いだあと、AOSSボタンを押しながら電源ONするだけで、TFTPクライアントが起動し、ファームウェアを取得しにきます。

画像のようにTFTPサーバにアクセスがあれば成功です。
失敗する場合は設定を見直しましょう。

access.PNG

無事にTFTPサーバにアクセスがあった場合は、IPアドレスを192.168.1.2に変更します。

OpenWrt側は192.168.1.1になっているはずなので、ブラウザでhttp://192.168.1.1にログインします。
コマンドプロンプトよりssh root@192.168.1.1でもログインできるはずです。

login.PNG

バックアップの取得

起動直後のパーティションは以下のような感じかと思います。

root@OpenWrt:~# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 03000000 00020000 "firmware"
mtd1: 001daba4 00020000 "linux"
mtd2: 02e25440 00020000 "rootfs"
mtd3: 01240000 00020000 "rootfs_data"
mtd4: 05000000 00020000 "failsafe"
mtd5: 00070000 00010000 "boot"
mtd6: 00010000 00010000 "nvram"
root@OpenWrt:~#

書き込みの前にバックアップを取得しましょう。
全パーティションを取得することをおすすめします。
取得はGUIで簡単にできます。

スクリーンショット 2024-05-27 23.33.35.png

ddコマンドを使ってバックアップするでもOKです。

ddコマンドで/tmp配下にファイルを作成し、
コマンドプロンプトでscpコマンドよりコピーするだけです。

dd if=/dev/mtdblock1 of=/tmp/backup1.rom
scp root@192.168.1.1:/tmp/backup1.rom .

ファームウェアの書き込み

ここからが本番です。

scpコマンドよりtrxファイルをルータに送ります。

C:\Users\Public\Downloads>scp openwrt-23.05.0-bcm53xx-generic-buffalo_wxr-1900dhp-squashfs.trx root@192.168.1.1:/tmp
openwrt-23.05.0-bcm53xx-generic-buffalo_wxr-1900dhp-squashfs.trx                                                           100% 7168KB  14.7MB/s   00:00

C:\Users\Public\Downloads>

ddコマンドを使って書き込みをします。
書き込み先はfirmwareであるmtd0とfailsafeであるmtd4です。
mtd eraseはしなくても良いかもしれませんが、一応実施しておきました。


C:\Users\Public\Downloads>ssh root@192.168.1.1

BusyBox v1.33.2 (2022-03-26 20:26:07 UTC) built-in shell (ash)

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 OpenWrt 21.02-SNAPSHOT, r0+16541-5cf00adf21
 -----------------------------------------------------
=== 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:~#
root@OpenWrt:~# mtd erase /dev/mtd0
Unlocking /dev/mtd0 ...
Erasing /dev/mtd0 ...
root@OpenWrt:~# mtd erase /dev/mtd4
Unlocking /dev/mtd4 ...
Erasing /dev/mtd4 ...
root@OpenWrt:~# dd if=/tmp/openwrt-23.05.0-bcm53xx-generic-buffalo_wxr-1900dhp-squashfs.trx of=/dev/mtdblock0
14336+0 records in
14336+0 records out
root@OpenWrt:~# dd if=/tmp/openwrt-23.05.0-bcm53xx-generic-buffalo_wxr-1900dhp-squashfs.trx of=/dev/mtdblock4
14336+0 records in
14336+0 records out
root@OpenWrt:~# reboot
root@OpenWrt:~# Connection to 192.168.1.1 closed by remote host.
Connection to 192.168.1.1 closed.

C:\Users\Public\Downloads>

以下にmtdコマンドのヘルプを置いておきます。
どういうコマンドなのか不安な人は確認して下さい。

mtdコマンドのヘルプ
root@OpenWrt:~# mtd
Usage: mtd [<options> ...] <command> [<arguments> ...] <device>[:<device>...]

The device is in the format of mtdX (eg: mtd4) or its label.
mtd recognizes these commands:
        unlock                  unlock the device
        refresh                 refresh mtd partition
        erase                   erase all data on device
        verify <imagefile>|-    verify <imagefile> (use - for stdin) to device
        write <imagefile>|-     write <imagefile> (use - for stdin) to device
        jffs2write <file>       append <file> to the jffs2 partition on the device
        fixtrx                  fix the checksum in a trx header on first boot
        fixseama                fix the checksum in a seama header on first boot
Following options are available:
        -q                      quiet mode (once: no [w] on writing,
                                           twice: no status messages)
        -n                      write without first erasing the blocks
        -r                      reboot after successful command
        -f                      force write without trx checks
        -e <device>             erase <device> before executing the command
        -d <name>               directory for jffs2write, defaults to "tmp"
        -j <name>               integrate <file> into jffs2 data when writing an image
        -s <number>             skip the first n bytes when appending data to the jffs2 partiton, defaults to "0"
        -p <number>             write beginning at partition offset
        -l <length>             the length of data that we want to dump
        -o offset               offset of the image header in the partition(for fixtrx)
        -c datasize             amount of data to be used for checksum calculation (for fixtrx / fixseama / fixwrg / fixwrgg)

Example: To write linux.trx to mtd4 labeled as linux and reboot afterwards
         mtd -r write linux.trx linux

root@OpenWrt:~#

再起動してもOpenWrtが起動するようになればOpenWrt化は完了です。

ちなみに、GUIからの更新もあるのですが、trxファイルを指定しても普通のファームが上がってきてしまいます。これはうまくいかなかったということをここに書き残しておきます。

flash.PNG

(参考1) 初期化の方法

設定をミスってログインできなくなった場合のリカバリ方法です。
やり方としてはinitramfs imageで起動し、ファームウェアを再度mtdblock0に書き込むだけで初期化できます。

dd if=/tmp/openwrt-23.05.0-bcm53xx-generic-buffalo_wxr-1900dhp-squashfs.trx of=/dev/mtdblock0

ちなみに、OpenWrtの公式の機能としてFailsafe Modeが存在し、これを使えば初期化をせずとも任意の設定を変えることができます。
しかし、こちらで試したところ、うまくFailsafe Modeに入ることができませんでした。

起動時の電源ON時のランプを見ていると以下の順番でランプが点きます。

  1. 4つのランプが全て点灯(一瞬)
  2. POWERランプのみ点灯(10秒程度)
  3. POWERランプのゆっくり点滅(3秒)
  4. POWERランプの早め点滅(10秒程度)
  5. POWERランプの点灯(=OpenWrt起動)

3番のPOWERランプゆっくり点灯時に物理ボタン4を押すことでFailsafe Modeに入れるようなのですが、何度やってもダメでした。
有識者の方、コメントでご教授いただけると幸いです。

(参考2) nvramコマンドについて

nvramコマンドによりnvramの設定を書き換えることができます。

  • 待受時間を変更(nvram set wait_time=30)
  • 待ち受けるIPアドレスを変更(nvram set lan_ipaddr=192.168.X.X)
    などなど。

あまりやり過ぎるとうまくTFTPクライアントが起動しなくなることがあります。TFTPD64にアクセスログが3回出るのですが、3回とも正常に読み込まずにTFTP通信が失敗するような形です。

そういう場合は同じようにddコマンドでバックアップしたファイルを書き込むと元に戻せます。
dd if=/tmp/backup6.rom of=/dev/mtdblock6

(参考3) 公式ファームウェアへの戻し方について

書き込み前にバックアップを取っているので、mtdコマンドを使って元通りに書き込めば公式ファームウェアに戻ると思います。
ただ、文鎮化するのが怖いのであまり試していません。
(少なくともmtd0に公式ファームウェアをそのまま書き込むだけでは、うまく起動しませんでした。この時もinitramfs imageにより復旧させました。)
できた人がいたら誰か記事化して下さい。

終わりに

330円でLinuxサーバが手に入ると思ったらかなりお買い得かと思います。
皆さんも良いOpenWrtハックを。

そのほかの参考サイト

記事内でリンクしていないけど参考にしたサイトをここに記載しておきます。

WXR-1900DHPの公式サイト
5chのWXR-1900DHPの記事1      ※ここでinitramfs imageを見つけました
5chのWXR-1900DHPの記事2 同じように ※同じように OpenWrt化できなくて困っていた人のコメあり
DD-WRTまとめwiki

  1. ユーザ名:bufpy、パスワード:otdpopypasswordでログインするモード

  2. このバックドアはVer2.37で塞がれたようです

  3. 中にはWXR-1900DHPの他にもWZR-600DHP2、WZR-900DHP、WZR-1750DHPのイメージも入っていました

  4. WXR-1900DHPにはAOSSボタン、筐体下部のリセットボタン、USBイジェクトボタンの3つの物理ボタンがあるのですが、どれを押してもダメでした

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2