無線 LAN ルータのファームウェアー入れ替え

2008/10/26
1.はじめに

うちの無線 LAN の基地局は、大分前にオークションで安価に手に入れた BUFFALO (旧メルコ)の WBR-G54 である。

それまで使っていたルータが ADSL 導入当初に買った物で10Base-T のハブしか内蔵しておらず、時代遅れになってきたのと、別室で PowerBook を使いたかった為に導入したものだ。

引っ越して光回線になってからは無線 LAN の基地局として、PowerBook、そして CLIE、 iPhone の接続と活躍してくれていたのだが、如何せん WEP しかなく※1、セキュリティ面で問題があった。

またアンテナがしょぼい内蔵 only なためか、家の中でも場所によっては接続できなかったり、不安定になる事も多かった。

これはそろそろ 802.11n の基地局を買いなさい( AppleTime Capsule ?)と言う事なのかと思っていた所、悪い友達から「 DD-WRT ってしってるぅ〜?」という話を聞いてしまった。

日経 Linux の 2008 年 10 月号の記事からの情報らしいのだが、 BUFFALO や LINKSYS の無線 LAN ルータのオープンなファームウェアーで、古い機種でも WPA2 等の高度な暗号化機能や、まともなファイアウォール等を使えるようになるらしい。

話を持ってきた友人は、自宅の古い無線 LAN ルータをメディアコンバータ化し、テレビをネットワークに接続するのが目的なんだそうだが、 WPA2 が使えるようになり、出力調整ができるのなら、自分も遊びがてらに一度入れてみようと思った。


※1:一応純正ファームの最終版 Ver.2.23 では WPA + AES/TKIP までサポートしている。

 
2.最初のトライ( DD-WRT )

調べてみると DD-WRT 以外にも OpenWRT や FreeWRT、tomato と言ったオープンなファームウェアーがあるらしいが(ベースが OpenWRT で、他はそこから派生したような感じかな)、取り合えず情報のある DD-WRT を使ってみることにした。

ダウンロードは DD-WRT のサイト( http://www.dd-wrt.com )から行う。

使いたい機種がサポートされているかどうかの確認は、「 Supported Hardware 」のタグから、DD-WRT の Wiki ( http://www.dd-wrt.com/wiki/index.html/Supported_Devices )に移動して行う。

WiKi  の「 3.Supported Devices 」はメーカー名で分類されているので、うちのルータだと「 3.10 Buffalo 」になる。

Buffalo の無線 LAN ルータの対応状況は次のように表示される。

これによるとうちの WRB-G54 は Broadcom の石を使っていて、RAM 16M、フラッシュメモリー 4M らしい。また DD-WRT の対応バージョンは v23 SP2 以降で、インストール方式は ddadder を使うか、 Tftp_flash を使うとある。

 ddadder と Tftp_flash の違いだが、ファームウェアーのインストールには2つの方法があり、一つは純正のファームウェアーだとだまして入れ替える方法、もう一つはルータのリブート時に一時的に tftp が有効になる事を利用してファームウェアーを送り込んでやる方法である。

このファームウェアーを騙してやるツール、実際には DD-WRT のバイナリーファイルに Buffalo のファームに偽装する為のヘッダー情報を追加してやるのだが、が ddadder である。( ddadder が使えなければ、バイナリーエディタを使って自力でヘッダー情報を追加する)

でも Windows 用と Linux 用しか無いのと、誤って変に書き換えたファームを送り込んでルータを壊すのも心配なので、まずは tftp を使って送り込む方法を試す事にする。

 
3.ファームウェアーのダウンロード

さて、それでは tfpt を使って無線 LAN ルータにファームウェアーを送り込む訳だが、それに先んじてファームウェアーのダウンロードを行わなければならない(当たり前?)。

DD-WRT サイトのトップページから「 Downloads 」のタグをクリックし、表示されたリストから「 stable」そして「 dd-wrt.v24 SP1」に、もしくは「 v24-sp1」のリンクをクリックし、「 Consumer 」のディレクトリに入る。

ディレクトリは各メーカ毎に分類されているので、うちの場合は Buffalo を開く。

 Buffalo のディレクトリ下には機種ごとのディレクトリが存在する。うちの場合には WBR-G54 なので、そのディレクトリに入る。

ここにはまた何種類もファームウェアーが存在するが、通常は「 dd-wrt.v24_std_generic.bin 」といった一番スタンダードな物を選択しておけば問題ないと思う。

ちなみに voip と付いている物はネット電話、 vpn は仮想専用線機能をサポートしたもの、mini は最小限の機能を、 mega は全機能をぶち込んだ物だそうだ。

mini は後述の tftp 方式でファームをぶち込む際、転送時間がかかりすぎて失敗する場合に使うことがあり、 mega は 6.6MByte あるので、 4MByte しかフラッシュメモリーを持たないうちの機種では使えない。

 

 
4. tftp でトライ

さて、いよいよ tftp でファームウェアーを送り込む。

この方法は、 Buffalo の無線 LAN ルータが起動直後に一定時間 tfpt での転送を受け付けるようになっている事を利用するものだ。

ping コマンドでルータの起動状況を監視し、ping が返ってくるようになったら(=起動したら)、すかさず tftp コマンドでルータに接続し、バイナリーモードでファームウェアーを put する。

ちなみに、うちは MacOS X なので ping も tfpt もあるので問題ないが、 Windows だと tfpt のツールを用意する必要がある。

何はともあれ、まずはルータを工場出荷状態に戻す。

リセットボタンの長押しでできる機種はそうして、うちのは一旦ログインして、設定画面から「工場出荷状態に戻す」を実行した。

出荷状態に戻したらリブート(電源の抜き差し)を行い、作業する PC のネットワークアドレスを「 192.168.11.2 」、マスクを「255.255.255.0」に設定して、ルータに対して「ping コマンドを打つ。

アドレスを 192.168.11.2 にするのは、 WBR-G54 の出荷状態でのアドレスが 192.168.11.1 であるため。他の機種の場合はそのアドレスに合わせる必要がある。

 ping を打つと、次のような応答が返ってくる筈。

$ ping 192.168.11.1 
PING 192.168.11.1 (192.168.11.1): 56 data bytes
64 bytes from 192.168.11.1: icmp_seq=0 ttl=64 time=1.965 ms
64 bytes from 192.168.11.1: icmp_seq=1 ttl=64 time=0.813 ms
64 bytes from 192.168.11.1: icmp_seq=2 ttl=64 time=0.855 ms
64 bytes from 192.168.11.1: icmp_seq=3 ttl=64 time=0.830 ms
64 bytes from 192.168.11.1: icmp_seq=4 ttl=64 time=0.857 ms

次にその状態で再度ルータを再起動すると、一旦 unknown host 等になった後、再度 ping が通り始める。

$ ping 192.168.11.1 
PING 192.168.11.1 (192.168.11.1): 56 data bytes
ping: sendto: No route to host
ping: sendto: Host is down
ping: sendto: Host is down
ping: sendto: Host is down
64 bytes from 192.168.11.1: icmp_seq=0 ttl=64 time=1.965 ms
64 bytes from 192.168.11.1: icmp_seq=1 ttl=64 time=0.813 ms
64 bytes from 192.168.11.1: icmp_seq=2 ttl=64 time=0.855 ms
64 bytes from 192.168.11.1: icmp_seq=3 ttl=64 time=0.830 ms
64 bytes from 192.168.11.1: icmp_seq=4 ttl=64 time=0.857 ms

この ping が通り始めた瞬間に、すかさず tftp コマンドでファームウェアーを送り込むのである。Macintosh だと、ターミナルを2つ開いておき、片側で ping コマンドを流しておいて、もう片側で tfpt を打つ支度をしておくとやりやすい。

tftp 192.168.11.1
> binary
> put dd-wrt.v24_std_generic.bin

転送がうまく行くと「 xx Byte complete. 」といったメッセージが表示されるが、転送が失敗すると「 Timeout 云々」のメッセージが表示される。

転送が成功したら自動的にリブートするのでしばらく待つのだが、失敗した場合は再度ルータの電源を入れ直してリトライする。

ところがうちのルータはいくらやり直しても失敗ばかり。

何度もトライして mini 版に変更して、ようやく転送が成功したと思ったら、いつまで経ってもリブートする気配が無く、ルータのアドレスも 192.168.1.1 にならず、もとのまま。

あれれ?と思ってブラウザで接続した所、元のファームのまま変わっていない。 orz

続けて数回リトライしたら、今度は突然有線接続で応答しなくなる。

やばい!壊れた!とおもってリセット等色々したが接続できず、ちょっと泣きかけた所で「無線」のランプが付いている事に気づいた。

もしやと思い無線で接続し、ファームの画面を出す事ができたが、有線ポートは生き返らない。

物理的に死んでいたら泣くよなぁと思いながら急遽 Buffalo の改造純正ファーム※2をバイナリーエディタで作り、無線経由で送り込んで再セットアップした所、無事復旧。


※2:Buffalo 純正のままだとヘッダー情報がゴミとなり、 DD-WRT が受け付けない。

 

5.ファームの改造

tftp ではうまく行かないので、ファームウェアーの改造で Buffalo の純正ファームだと騙してインストールする方法をとることにした。

でも、それに先んじて Buffalo の純正ファームを DD-WRT のファームだと騙して戻しを行ったんだけどね (^_^; 。

ファームの改造はヘッダを付けるか取るかだけなので、バイナリエディタを間違えずに使えるのならそんなに難しい物じゃない。でも「バイナリーってなあに?」と言う人には絶対にやめておいた方がいい。

次の図は Buffalo の純正ファームウェアーと DD-WRT のファームウェアーをを Macintosh  のバイナリーエディタ「HexEditor」で表示したもの。上が Buffalo の純正ファームウェアー、下が DD-WRT のファームウェアー。(ちなみに HexEditor は表示は見やすいんだけど、データのコピー&ペーストやバイナリデータの追加がうまくできなかったので、編集には 0xED を使った)

違いは Buffalo のファームの 0x00 〜 0x26 バイトに「WBR-B11 2.23 1.01_Kopt.filelen=3100672 」(0x57 42 52 〜 70 74 0a)というヘッダー情報が入っている事で、 DD-WRT のファームにはこのヘッダー情報が無く、いきなり「HDR0〜」と始まっている。

つまり Buffalo のファームウェアーであるとごまかす場合にはヘッダーを付ける必要があり、 DD-WRT のファームウェアであるとごまかす場合にはヘッダーを削除する必要がある。

 

先に DD-WRT から Buffalo の純正ファームに戻した際は、 Buffalo のホームページからダウンロードしたファームウェアー(wbrbg_223)のヘッダーをバイナリーエディタで削除し、名称に「.bin」の拡張子を追加して、 DD-WRT に食わせた。

同様にと言うか逆にと言うか、 Buffalo に DD-WRT のファームを食わせる場合は、 DD-WRT のファームウェアー(dd-wrt.v24_generic.bin)にバイナリエディタでヘッダー情報を追加する。

追加は3ステップ

  1. Buffalo の純正ファームをバイナリエディタで開いてヘッダー部分をコピー
  2. DD-WRT のファームをバイナリーエディタで開いてヘッダー部分をペースト
  3. ペーストしたヘッダーのファイルサイズ部分を変更する

また書き換えるファイルサイズは厳密でなくてもよく、HexEditor で表示されるサイズをそのまま書いておけば問題ない。ただしヘッダー自体は正しいファームの物をコピーするのが Better 。

こうやって作成した「見かけ Buffalo 、内容 DD-WRT 」のファームウェアーを「ファームウェアーのアップデート」で読ませた所、何ら問題なく DD-WRT のインストールができてしまった。

 
6.ところが、だ (v23 へのダウングレード)

DD-WRT のインストールが終わって自動的に再起動したら、自マシンのアドレスを 192.168.1.2 に変更して Safari で 192.168.1.1 に root/admin でログインする。

うちはルータとして使ってないので DHCP や DNS 、firewall の設定を外し、とりあえず MAC アドレスも WEP も無しにしていざ無線接続。

ところが PowerBook 側では親機も認識でき、接続をしにいくのだが、いくらやってもアドレスがとれない。相性が悪いのかと思って iPhone で試してみるが、こちらも親機は認識できるものの「接続できません」のエラー。

セキュア接続じゃないとだめなのか?と MAC アドレスブロックを入れたり WEP を有効にしたり、WPA や WPA2 にしても全く接続できない。

一旦あきらめてネットで情報を漁ると、一つ前のバージョンの v23 では動作しているような話がある。

そこで v23 (これのリリース日がまた古いんだ (^^; )をダウンロードしてダウングレードしたのだが、ここでちょっと落とし穴。

 DD-WRT のファームウェアーアップグレード機能を使って v23 を入れたのだが、その際に以前の設定を引き継ぐかそれとも設定をクリアするか、を聞いてくるのに対し、「引き継ぐ」を選択した。

で、ダウングレードは難なく終わり、設定画面を出そうとした所で「パスワードエラーです」 (" ;; 。

v24 を入れた時に「パスワード設定しろ」と来たので設定したのだが、そのパスワードが効かない。デフォルトの admin でもだめ。

元々の WBR-G54 で使っていたパスワードやパスワード無しやらも試してみたが、頑として受け付けない。

うわ〜最悪!! と涙目になりながらリブートもしたが駄目。最後の望みをかけてリセットボタンを長押しし、リセットを掛けたらパスワードが初期化されてアクセスができた。

ほっと胸を撫で下ろしながら設定画面にアクセスし、無線の設定を行う。

まずはアクセス制限無しで設定した所、おお!繋がるじゃないか!

MAC アドレスでの制限もOKで、 WEP も問題ない。

それでは WPA にしてみようと変更すると、「接続できませんでした」(涙)

WPA2 もだめで、どうやら暗号化は WEP しか使えないようである。

 
7.ようやく TOMATO

WEP じゃ DD-WRT を使う意味半減、と  DD-WRT の FAQ を漁って見ると、「v23 で無線LAN がうまく行かなきゃ VINT を使え」との書き込みがあった。

探してみると vintage というディレクトリがあり、そこに 〜.VINT.〜 と言う名称の付いたファームウェアーがあった。ちょっと期待を込めて駄目元で試してみたのだが、やっぱりだめ。

こうなったら情報は少ないが、軽くて安定しているという噂の Tomato ( http://www.polarcloud.com )を入れてみる事にする。

最初に Tomato にしなかった理由は、情報が少ない事とサポート機種(動作確認済機種)が少ない事で、 Buffalo だと次の機種しかサポートされていない。

WHR-G54S, WHR-HP-G54, WZR-G54, WBR2-G54, WBR-G54, WZR-HP-G54, WZR-RS-G54, WZR-RS-G54HP, WVR-G54-NF, WHR2-A54-G54, WHR3-AG54

ちなみにタグに「 Japanese 」とあるが、決してこれは日本語で書かれたページでも日本語化ツールでもない。

これは外人さんが日本語サイトやメールを見る時の補助ツールで、 Firefox と Thunderbird 用の「日本語→英語/ドイツ語/フランス語/ロシア語」ポップアップ辞書である。ぬか喜びしないように(笑)。

トップページの「 Tomato 1.21 」の欄に Download のリンクがあるので、それをクリックすると Tomato Firmware のページに移動する。

そのページの「 Download 」とタイトルのある下に「 Firmware 」のリンクがあるので、そこから「Tomato_1_21.7z 」をダウンロードする。もう一つある「Tomato_1_21_ND.7z 」は説明に書かれているように WHR-G125 用。

ところで Tomato は 7-Zip という珍しい圧縮形式になっているので、同時にその解凍ソフトをダウンロードする必要がある( StuffIt では解凍できなかった)。

解凍ソフトは tomato のホームページから Wikipedia 経由でソフトを探すことができるが、自分は Sixty Five, Ltd のサイト( http://sixtyfive.xmghosting.com/ )から 7zX をダウンロードした。

 

ツールをダウンロードしてファイルを解凍したら次のようなファイルが生成される。

  • readme.htm
  • tomato.trx
  • whr_install.bat
  • WR850G.bin
  • WRT54G_WRT54GL.bin
  • WRT54GS.bin
  • WRT54GSv4.bin
  • WRTSL54GS.bin

このうち「 tomato.trx 」が WBR-G54 に使用するファームウェアー。他のはそれぞれの機種用のファイルである。

 
8. Tomato のインストール

Tomato のインストールは DD-WRT のインストールと同じだ。基本的に電源投入後に一時的に tftp が有効になるのを利用してインストールを行う。

また Windows に限れば、このインストールを自動的に行う為のバッチファイルが利用できる。(やっている事は ping が通るのを待って tftp でデータ転送を行うだけなんだが)

でもうちは Macintosh であるのと、 tftp ではうまく行かないので、バイナリーエディタでヘッダ情報を追加して名称を「wbrbg_223」に変更した改造ファームを Buffalo 純正のファームウェアアップデータに食わせた(安パイを取って、無線 LAN ルータのファームウェアーは一旦 Buffalo 純正の物に戻した)。

ファームウェアーのインストール自体は問題無かったが、まずルータのアドレスがインストールガイドに書かれているように 192.168.1.1 にはならず、192.168.11.1 になった。

なにか前の(Buffaloの)設定を引き継いでいるようである。

また、パスワードの状態もおかしくなり、ハードウェアリセット(リセットボタンの長押し)で、パスワードを初期化する必要があった。

取り合えずリセットして起動させると、問題なく Tomato にログインでき、設定画面が表示される。 DD-WRT よりも断然スムーズに動いている。

設定の方は「 Basic 」の部分がほとんど。

まず「Network」で「 WAN/Internet 」を「 Disabled 」とし、ルータ機能を殺した(うちは無線&有線ハブとしてしか使っていないので)。プロバイダと接続するのなら、ここで「 PPPoE 」等を選んで設定を行う事になる。

また「 LAN 」で「 Router IP Address 」と「 Subnet Mask 」を 192.168.11.1 / 255.255.255.0 から、自宅のネットワーク上のアドレスを一つ割り当てて設定する。

「 Default Gateway 」や「 Static DNS 」「DHCP Server 」はルータ機能を使わないので 0.0.0.0 のまま、またチェクを入れない。

「 Wireless 」部分は「 Enable Wireless 」にチェックを入れて無線機能を有効にし、基地局にするので「 Wireless Mode 」を「 Access Point 」にする。

「 Wireless Mode 」は 802.11g のみをうちでは使うので「 G Only 」に。「 SSID 」は適当な文字列にする。

「 Channel 」は「 Scan 」ボタンを押すと、近くで動作している他のアクセスポイントの一覧がドロップダウンメニューで作成されるので、それらと重ならないように使用するチャンネルを決めるといい。

下の例だと 11ch に電波の強い( strongest )アクセスポイントが1つあるので、それと重ならないように 6ch  を選択した。(802.11g の周波数は重なっているため、1ch, 6ch, 11ch の 3つを使うのが常套らしい)

「 Security 」は(これが Tomato にした主目的)「 WPA2 Personal 」で、「 Encryption 」は「 AES 」にする。「 Shared Key 」は「 Random 」ボタンを押して生成させてもいいんだけど、 iPhone で指定するのが大変になるので、適当に思いついたフレーズを入力した。


次に忘れちゃ行けないのが「 Wireless Filter 」タグで接続可能な機器の MAC アドレスを指定する事。

デフォルトでは「 Disable Filter 」が指定されているので、これを「 Permit Only The Following Clients 」(指定されたクライアントのみに接続を許可する)に変更し、「 MAC Address 」のボックスに接続を許可する機器の MAC アドレス(うちは iPhone と PowerBook G4 )を入力して「 Add 」ボタンをクリックする。

この他「 Time 」タグで ntp サーバを設定(自動時刻合わせ)したり、「 DDNS 」タグでダイナミック DNS サーバへの自動更新設定等が出来るが、うちでは ntp サーバのみ設定した。

基本的にこれだけやって右下の「 Save 」ボタンを押すと、情報の保存と同時に必要に応じての再起動を行ってくれる。

「 Router IP Address 」を変えたので、自マシンの IP アドレスも元に戻し、設定したアドレスに再度アクセスし、設定が正しく反映されているかどうかを確認する。

再接続したら「 Administration 」設定の「 Admin Access 」タグを開き、一番下にある「 Password 」を変えておく。

いくら何でもデフォルトの「 root / admin 」のままにしておく事はできませんからねぇ  (^^; 。

後は「 Advanced 」の「 Wireless 」タグに「 Transmit Power 」というタグがあるのだが、これがデフォルトでは 42mW に設定されている。

一応日本の電波法では 10mW が制限らしいので、きちんと落としておいた方がいいでしょう。(あまり強力だとご近所迷惑になるだけでなく、外から接続される危険性が増すとともに、反射やら干渉やらを起こして通信障害や速度低下を起こしてしまう)

 
 
 
9.使ってみて

紆余曲折を経て Buffalo の純正ファームウェアーから Tomato に落ち着いた訳だが、今のところ接続も動作も非常に安定している。

うちは有線接続で下り 35MByte/s 、上り 40MByte/s 程度出ているが(上りの方が早い)、無線経由だと 下り18MByte/s 、上り 22MByte/s 程度。

802.11g の実効性能は 54MByte/s の半分程度だという事なので、無線接続しているのが PowerPC G4 500MHz ( 0.5GHz )の初代 PowerBook G4 だと言う事を加味しても十分な性能をたたき出せているようである。

無線接続の暗号強度も上がったし、満足できる範囲かな。

 

戻る | ホーム