2014年8月29日金曜日

FON2100E を DD-WRT 化に成功しました

先日入手した FON2100E ですが、すぐに fon-flash-gui でファームウェアの書き換えをしようとしたところ、書き換えができずに断念してしまいました。 本日はこの引き続きで、DD-WRT のファームウェアに書き換えを行い、成功しました。

ファームウェアの書き換えに成功した FON2100E です。

実のところ DD-WRT のファームウェアに書き換えはできたものの、各種の設定が保存することができない不具合が生じてしまいました。結局 gargoyle のファームウェアに書き換えて正常に動作をしていることを確認できました。

この記事は FON2100E の書き換えを行った備忘録として記述しています。

FON2100E は FON2201E のときとは大きくことなり、いきなり fon-flash-gui では書き換えができない状態です。一度ファームウェアの書き換えに成功すると fon-flash-gui で書き換えができるようになります。

それでは FON2100E のファームウェアの書き換えの手順の大まかな方法を紹介します。

参考にしたウェブサイトは次のものです。
LaFonera Software Flashing
http://www.dd-wrt.com/wiki/index.php/LaFonera_Software_Flashing

ファームウェアの書き換えに必要な電源投入時に telnet で redboot コンソールへ接続できるようにすることが大切で、その後にファームウェアの書き換えを行うようになっています。この telnet で redboot のコンソールへ接続するまでがいくつかの手順を踏まないとできない点に注意が必要です。大まかには次のとおりです。

  1. FON2100E へ SSH ログインできるようにする。
  2. SSH ログインを行って redboot の設定を変更できる拡張 FON ファームウェアを書き込む。
  3. SSH ログインを行って redboot の設定ファイルを書き換える。
  4. telnet で redboot のコンソールへと接続する。
  5. redboot のコンソールからファームウェアの書き換えを行う。
  6. redboot の起動方法の設定変更を行う。
  7. 再起動させて、無事に起動することを祈る。

参考にしたウェブサイトと一部変更してファームウェアの書き換えを行っていますが、基本は同じと考えてください。

1. FON2100E へ SSH ログインできるようにする。

まず最初に FON2100E のオリジナルのファームウェアを古い 0.7.1 r1 にします。 方法は簡単で、電源が入ったままの FON2100E のリセットボタンを30秒以上押し続けて離すだけです。これで 0.7.1 r1 のファームウェアに戻ります。なおインターネットへ接続できる状況に FON2100E を置いておくと、再び最新のファームウェアをダウンロードして設定し直してしまいます。そのためファームウェアの書き換え終了までは、インターネットへ接続できるようにルータなどへ接続するこは禁止となります。

古いバージョン 0.7.1 r1 に戻った FON2100E

FON2100E のファームウェアが 0.7.1 r1 に戻ったところで次のウェブサイトを参考にしてブラウザから SSH ログインができるようにする二種類のスクリプト(step1.html , step2.html)をファイルに保存します。
Hacking Fonera
http://blog.blase16.de/index.php?url=2006/11/28/Hacking-Fonera

--- step1.html ---
ここにスクリプトを記述したかったのですが、このブログでは上手く表記できないようです。

--- step2.html ---
ここにスクリプトを記述したかったのですが、このブログでは上手く表記できないようです。

ブラウザから step1.html と step2.html を順番に開きます。これで端末から SSH ログインができるようになります。パスワードは admin となります。なお最初に端末から SSH ログインするときには SSH のハッシュの認証を行う表示がでます。ここでは yes を入力して先に進みます。
$ ssh root@192.168.10.1

FON2100E へ SSH ログインができたら、SSH ログインを許可する dropbear の起動スクリプトの名称を変更します。
root@OpenWrt:~# mv /etc/init.d/dropbear /etc/init.d/S50dropbear


ファイアウォールの設定(/etc/firewall.user)を変更します。
root@OpenWrt:~# vi /etc/firewall.user

次に表示する2行の行頭にある # マークを削除して設定を有効にします。
# iptables -t nat -A prerouting_rule -i $WAN -p tcp --dport 22 -j ACCEPT
# iptables -A input_rule -i $WAN -p tcp --dport 22 -j ACCEPT

           ↓

iptables -t nat -A prerouting_rule -i $WAN -p tcp --dport 22 -j ACCEPT
iptables -A input_rule -i $WAN -p tcp --dport 22 -j ACCEPT

/bin/thinclient スクリプトの修正
root@OpenWrt:~#  vi /bin/thinclient

最終行の行頭へ # をつけてコメント化します。
#. /tmp/.thinclient.sh

そして最終行へ追加します。
cp /tmp/.thinclient.sh /tmp/thinclient-$(date '+%Y%m%d-%H%M')
これで vi を終了します。

以上で SSH ログインが常にできるようになりました。ここで一度 FON2100E の電源を切り、再投入しておきます。

2. SSH ログインを行って redboot の設定を変更できる拡張 FON ファームウェアを書き込む。

端末から FON2100E へ SSH ログインを行います。パスワードは admin です。
$ ssh root@192.168.10.1

参考ウェブサイトではインターネット上から拡張 FON ファームウェアをダウンロードして書き込むようになっています。しかし表記された場所に拡張 FON ファームウェアは存在しません。参考ウェブサイトに案内された別の場所から拡張 FON ファームウェア(openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma)と redboot の設定ファイル(out.hex)をパソコンへ事前にダウンロードしておきます。そしてパソコンに保存してあるファイルを nc コマンドを使って FON2100E へ転送します。

まず最初に FON2100E へ SSH ログインしている端末上で次のコマンドを実行します。
root@OpenWrt:~# cd /tmp
root@OpenWrt:~# nc -l -p 7000 > /tmp/openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma

そして新しく端末を開き、拡張 FON ファームウェア(openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma)をダウンロードしたディレクトリへ移動して、 nc コマンドで転送させます。
$ cd (openwrt-ar531x-2.4-vmlinux-CAMICIA.lzmaが存在するディレクトリ)
$ nc 192.168.10.1 7000 < openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma

おそらく一瞬で転送が終了しているはずです。FON2100E へ SSH ログインしている端末上で ls コマンドで確認をしてみてください。
root@OpenWrt:~# ls
dhcp.leases
hostapd.conf
log
network-config
openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma
resolv.conf
run
spool

拡張 FON ファームウェアを書き込みます。
root@OpenWrt:~# mtd -e vmlinux.bin.l7 write openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma vmlinux.bin.l7

Unlocking vmlinux.bin.l7 ...
Erasing vmlinux.bin.l7 ...
Writing from openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma to vmlinux.bin.l7 ...  [w]

行尾の [w] の部分は、書き換え動作中は [w] と [e] を繰り替えして表示します。

書き換えが終了したら再起動します。
root@OpenWrt:~# reboot

3. SSH ログインを行って redboot の設定ファイルを書き換える。

再度 FON2100E へ SSH ログインをします。パスワードは adminです。
$ ssh root@192.168.10.1

拡張 FONファームウェアの転送と同じ要領で redboot の設定ファイル(out.hex)の転送を行います。
root@OpenWrt:~# cd /tmp
root@OpenWrt:~# nc -l -p 7000 > /tmp/out.hex

パソコン側の端末から redboot の設定ファイル(out.hex)を nc コマンドで発信します。
$ nc 192.168.10.1 7000 < out.hex

これも一瞬でファイルの転送が終了します。そしてファイルが存在するか確認します 。
root@OpenWrt:~# ls
dhcp.leases     log             out.hex         run
hostapd.conf    network-config  resolv.conf     spool

redboot の設定ファイル(out.hex)を書き換えます。
root@OpenWrt:~# mtd -e "RedBoot config" write out.hex "RedBoot config"
Unlocking RedBoot config ...
Erasing RedBoot config ...
Writing from out.hex to RedBoot config ...  [w]

再び FON2100E を再起動させます。
root@OpenWrt:~# reboot
 

4. telnet で redboot のコンソールへと接続する。

参考ウェブサイトでは、再起動(電源再投入)から10秒以内に telnet ログインするように記述されていますが、私の場合には redboot の状態で停止しており、いつでも telnet で redboot のコンソールへログインできる状況となっていました。

なおこの telnet ログインを行う前にパソコンの IP アドレスを設定変更しておきます。
192.168.1.166 / 255.255.255.0
なおパソコン上でデフォルト・ゲートウェイを設定しなければならないときには、192.168.1.1 でも入力しておいてください。

それでは telnet コマンドを使って FON2100E の redboot コンソールへログインします。
$ telnet 192.168.1.254 9000

Trying 192.168.1.254...
Connected to 192.168.1.254.
Escape character is '^]'.

この状態のままで redboot のプロンプトが表示されない場合には一回リターン・キーを押せば表示されるはずです。
RedBoot>
これで redboot のコンソールへログインできました。この後、ファームウェアの書き換えなどを行います。

5. redboot のコンソールからファームウェアの書き換えを行う。

次のように redboot のコマンドを使用して FON2100E のネットワーク環境の設定を行います。
RedBoot> ip_address -l 192.168.1.254/24 -h 192.168.1.166

IP: 192.168.1.254/255.255.255.0, Gateway: 0.0.0.0
Default server: 192.168.1.166
そしてフラッシュメモリのシステム部分の初期化を行います。
RedBoot> fis init

About to initialize [format] FLASH image system - continue (y/n)? y
*** Initialize FLASH Image System
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .

パソコン上にある DD-WRT のファームウェアを転送してきます。この場合、パソコン側で TFTP サーバの設定が必要です。また TFTP サーバのダウンロード・ディレクトリへ DD-WRT のファームウェア( linux.bin )を用意しておく必要があります。私の場合、以前から使用していた tftpd を使いました。この tftpd は、参考ウェブサイトで推奨の tftpd-hpa ではなく、debian 標準のもの(無印 tftpd )を使用しました。TFTP サーバ(tftpd)のインストールや設定は割愛します。
RedBoot> load -r -b 0x80041000 linux.bin
Using default protocol (TFTP)
Raw file loaded 0x80041000-0x8066efff, assumed entry at 0x80041000
転送してきたファームウェアを展開します。この部分で30分以上の時間が掛かりました。気長に待ちましょう。
RedBoot> fis create linux
... Erase from 0xa8030000-0xa865e000: ...................................................................................................
... Program from 0x80041000-0x8066f000 at 0xa8030000: ...................................................................................................
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .

redboot のプロンプトが表示されて処理が終了したことを確認して reset コマンドで再起動させます。
RedBoot> reset

6. redboot の起動方法の設定変更を行う。

現状のままでは、 redboot のコンソールの部分で停止した状態となっています。そこで redboot の設定を変更して DD-WRT が自動的に起動するようにします。
端末から再び telnet コマンドで FON2100E の redboot コンソールへログインします。
$ telnet 192.168.1.254 9000

Trying 192.168.1.254...
Connected to 192.168.1.254.
Escape character is '^]'.

redboot のコンソールから設定スクリプトを実行します。
RedBoot> fconfig
Run script at boot: true
Boot script:
.. fis load -l vmlinux.bin.l7
.. exec
Enter script, terminate with empty line
>>
ここで次のようにコマンドを入力します。
>> fis load -l linux
>> exec
>> 
この状態で次の表示が出てこないときにはリターン・キーを一回押します。
そして次のように質問が表示されますので次のとおりに回答して行きます。
Boot script timeout (1000ms resolution): 10
Use BOOTP for network configuration: false
Gateway IP address: 192.168.1.254
Local IP address: 192.168.1.254
Local IP address mask: 255.255.255.0
Default server IP address:
Console baud rate: 9600
GDB connection port: 9000
Force console for special debug messages: false
Network debug at boot time: false
Update RedBoot non-volatile configuration - continue (y/n)? y
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .


以上で redboot の設定は終了です。reset コマンドで再起動させます。
RedBoot> reset

7. 再起動させて、無事に起動することを祈る。

しばらく放置していると無線 LAN の電波に DD-WRT の SSID が表示されてくると思います。無線 LAN は何もセキュリティの無い状態ですのでそのままログインできます。そしてブラウザから 192.168.1.1 へアクセスを行って DD-WRT の設定を行います。

ここで私の場合ですが、ログインパスワードの設定の部分は無事に設定することができたのですが、その後の設定がすべてできない状態となってしまいました。設定を反映させようとするとブラウザの接続が切れてしまいます。再び 192.168.1.1 へアクセスすると変更前の内容が表示されています。

一番最初に DD-WRT のビルド 14896 のファームウェアを使用しましたが、その後 fon-flash-gui を使って、ビルド 13064 も書き込んでみましたが同様の症状が発生しました。

そこで再び fon-flash-gui を使ってgargoyle 1.2.5 のファームウェアを書き込んでみると、設定もちゃんと保存されて、設定も反映させることができました。現在のところ DD-WRT が正常に動作しない理由は不明です。

DD-WRT のステータス画面です。

2014-08-30 追記

DD-WRT が正常に動作しなかった件ですが、gargoyle を導入した後、再度 DD-WRT ( Build 14896 ) を焼き直したところ、正常に動作するようになりました。結局 DD-WRT が動作不良となっていた原因については不明です。リージョン(region)に JP を指定できる DD-WRT において しばらく使用してみたいと思っています。

DD-WRT でも稼働するようになった FON2100E

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。