WZR-900DHP2にOpenWrtをインストール

2000円で手に入れた中古のブロードバンドルーター「Buffalo WZR-900DHP2」にOpenWrtをインストールしたので、作業記録を紹介します。

なお、作業にあたり以下のサイトを参考にしました。

なお、WZR-900DHP2にOpenWrtをインストールすると、無線LANは正常に動作しなくなります。それでもOpenWrtをインストールしたのは、IPv6対応のファイアウォールSoftEtherサーバーが動作する有線ルーターとして使うためです。

インストール作業はUbuntu 18.04 LTSをインストールしたPCから接続して行いました。

作業中、WZR-900DHP2に「192.168.11.1」および「192.168.1.1」でアクセスする必要があります。そこで、以下の画像の通りPCのNICに「192.168.11.2」と「192.168.1.2」を追加で設定しました。なお、「192.168.2.10」は元から割り当ててあるアドレスで、ゲートウェイの「192.168.2.1」はインターネットへの出口となる既設のブロードバンドルーターです。

通常はPCとOpenWrtをインストールするルーターを直結して作業しますが、アドレスが重複していなかったのでWZR-900DHP2を既存のLANに接続して作業しました。こうすればPCがインターネットに接続可能な状態のまま作業を行うことができます。ただし、この状態で新たに他のPCをスマホを起動すると、WZR-900DHP2上のDHCPサーバーからインターネットにアクセスできないIPアドレス(192.168.11.xxx)が割り当てられることもある点には注意が必要です。

デバッグモードで純正ファームウェアをバックアップ

OpenWrtをインストールする前に、メーカー純正のファームウェアをバックアップします。バックアップしておかないと、無線LANが正常に使える状態に戻せなくなるそうです。あえて戻すこともなさそうですが、念のためバックアップしておきました。

なおファームウェアがVer2.18以上の場合、2.16以前の古いバージョンにダウングレードしてから作業する必要があるようです。

最初に、爪楊枝で底面のリセットスイッチを長押しして初期化しました。

ルーターのLEDが安定して光るようになってから、ブラウザで「http://192.168.11.1/cgi-bin/cgi?req=frm&frm=py-db/55debug.html」にアクセスすると、以下のように表示されました。画像のURLが異なるのは、リダイレクトされたからです。

ユーザー名「bufpy」、パスワード「otdpopypassword」を入力して「ログイン」をクリックすると、以下の画面になりました。

「telnetd」をクリックすると、次の画面になります。「start」をクリックしてtelnetサーバーをスタートさせました。

これで、Ubuntu PCから以下のコマンドを実行して接続できました。

telnet 192.168.11.1

以下のコマンドを実行し、MTD領域の情報と内容を/tmp以下に書き出しました。

cat /proc/mtd > /tmp/wzr900dhp2_proc_mtd.txt;\
dd if=/dev/mtdblock/0 of=/tmp/wzr900dhp2_mtdblk0.dd bs=1;\
dd if=/dev/mtdblock/1 of=/tmp/wzr900dhp2_mtdblk1.dd bs=1;\
dd if=/dev/mtdblock/2 of=/tmp/wzr900dhp2_mtdblk2.dd bs=1;\
dd if=/dev/mtdblock/3 of=/tmp/wzr900dhp2_mtdblk3.dd bs=1;\
dd if=/dev/mtdblock/4 of=/tmp/wzr900dhp2_mtdblk4.dd bs=1;\
dd if=/dev/mtdblock/5 of=/tmp/wzr900dhp2_mtdblk5.dd bs=1;\
dd if=/dev/mtdblock/6 of=/tmp/wzr900dhp2_mtdblk6.dd bs=1;\
dd if=/dev/mtdblock/7 of=/tmp/wzr900dhp2_mtdblk7.dd bs=1;\
dd if=/dev/mtdblock/8 of=/tmp/wzr900dhp2_mtdblk8.dd bs=1

Ubuntu PCで以下のコマンドを実行して書き出したファイルをダウンロードし、ファイルサーバーに保管しておきました。

wget http://192.168.11.1/html/py-db/tmp/wzr900dhp2_proc_mtd.txt
wget http://192.168.11.1/html/py-db/tmp/wzr900dhp2_mtdblk{0..8}.dd

OpenWrtのダウンロード

2019年3月時点で、OpenWrtの最新stable版は「18.06.2」でした。WZR-900DHP2に対応したイメージファイルを、以下のページからダウンロードしました。

ダウンロードしたファイルは「openwrt-18.06.2-bcm53xx-buffalo-wzr-900dhp-squashfs.trx」です。

なお、「openwrt-18.06.2-bcm53xx-buffalo-wzr-900dhp-squashfs.factory-DHP2-JP.bin」を使ってオリジナルファームの更新画面から書き換えることもできるようなのですが、今回は「CFE miniWeb Server」から更新するため、「openwrt-18.06.2-bcm53xx-buffalo-wzr-900dhp-squashfs.trx」をダウンロードしています。

OpenWrtのインストール

再びtelnetで接続したルーター上のシェルで、以下のコマンドを実行しました。

nvram set boot_wait=on
nvram set wait_time=30
nvram commit

これで、起動時に30秒間「192.168.1.1」でCFE miniWeb Serverが起動し、ファームウェアをアップロードできるようになります。

Ubuntu PCで以下のコマンドを実行し、ルーター背面のスイッチを入れなおしました。

ping 192.168.1.1

WebブラウザにURL「http://192.168.1.1」を入力しておき、pingへの応答を確認してすぐにEnterを押すと、以下のように表示されました。

30秒しかないので、素早く「Browse」ボタンを押し、「openwrt-18.06.2-bcm53xx-buffalo-wzr-900dhp-squashfs.trx」を選択して「Upload」ボタンを押しました。アップロードが成功し、以下のように「Upload completed.」と表示されました。

アップロード直後は「http://192.168.1.1」にアクセスしても「CFE miniWeb Server」の画面となっていましたが、しばらく放置した後にアクセスすると以下のようにOpenWrtのログインページが表示されました。

パスワードの設定とsshアクセス

初期状態でrootユーザーのパスワードは設定されていないようなので、空白のまま「Login」を押すとログインできました。
最初に「Go to password configuration」ボタンを押し、パスワードを設定しました。

デフォルトで、LANからSSHでログインできる設定になっています。端末から以下のコマンドを実行し、SSHで接続しました。先ほど設定したパスワードを入力すると、ログインできました。

ssh [email protected]

以下のコマンドでファームウェアを書き換えるために行った設定を、元に戻しておきました。

nvram set boot_wait=on
nvram set wait_time=30
nvram commit

これでWZR-900DHP2でOpenWrtが動くようになりました。IPv4およびIPv6でのインターネット接続設定やファイアウォール設定、SoftEtherの導入、複数拠点にWZR-900DHP2を設置して「拠点間VPN」を設定する方法などについて、いずれ別のページで紹介する予定です。