La Fonera (FON ソーシャル ルータ) を2台購入した (正確に言うと1台は店頭で購入、もう1台は無料キャンペーンで入手)。
入手方法 | 店頭で購入 | 無料キャンペーン |
---|---|---|
Model | FON2100E | FON2100E |
S/N | 8638001XXX | 8646022XXX |
MACアドレス | 00:18:84:10:XX:XX | 00:18:84:16:XX:XX |
ROMバージョン | 0.7.0 r3 | 0.7.0 r4 |
店頭で購入した物のほうが古いのは、まあ当たり前か。 新しい方のシリアル番号の下のほうの桁が 2万を超えているので、 現在は万単位で製造しているのだろう。 シリアル番号の上の方の桁、 および ROMバージョンが異なるのは、 製造ロットが違うから? もちろん両ルータともネットにつないでおくことにより、 現時点での最新バージョンである 0.7.1 r1 に自動アップデートした。
自動アップデートは、 cron から呼び出される /bin/thinclient プログラムによって行なわれる (/bin/thinclient は起動時にも呼び出される)。
root@OpenWrt:~# /bin/thinclient cron upgrade.fon 100% |*****************************| 61473 00:00 ETA This is a FON hotfix v2 archive Verified OK Upgrade name: upgrade_0711 Upgrading...
/bin/thinclient は、まず download.fon.com:1937 へ ssh 接続する。 ポート番号が変則的なのは、 間にファイアウォールがはさまっていないか確認するためか? なお、ssh は /etc/dropbear/key にある秘密鍵を用いて DSA 認証を行なう。 この秘密鍵は両ルータとも同じ内容だった。 /bin/thinclient は、次に この ssh セッションにおいて、 次の文字列を送信する。
mode='cron' wlmac='00:18:84:16:XX:XX' mac='00:18:84:16:XX:XX' fonrev='4' firmware='0.7.0'
ここで、「mode=」は /bin/thinclient の実行方法を示している。 cron から呼び出されたときは「mode='cron'」、 起動時に呼び出されたときは「mode='start'」。 「wlmac=」および「mac=」はそれぞれ、 無線(FON_AP)側の MAC アドレスと、 有線(WAN)側の MAC アドレス。 後者の MAC アドレスに 1 加えた値が前者のアドレスになっているようだ (ちなみにプライベート アクセス ポイント(MyPlace)側の MAC アドレスは、 さらに 1 を加えた値)。 「firmware=」および「fonrev=」はバージョンおよびリビジョン番号を示す。 つまり、個体識別ID を FON に送信しているものと考えられる。
すると、download.fon.com:1937 から、 以下のような sh スクリプトが返ってくる。
cd /tmp wget http://download.fon.com/firmware/update/0.7.0/4/upgrade.fon /bin/fonverify /etc/public_fon_rsa_key.der /tmp/upgrade.fon rm -f /tmp/.thinclient.sh exit
/bin/thinclient は、 この送られてきた sh スクリプトを /tmp/.thinclient.sh に保存した上で実行する。 つまり、 この例の場合だと、「upgrade.fon」をダウンロードして 「/bin/fonverify」に与える。 おそらく upgrade.fon がアップデートのための差分データで、 「/bin/fonverify」が、このデータを認証した上で展開しているのだろう。
アップデートの必要がないときは、 以下のような何もしない sh スクリプトが返ってくる。
rm -f /tmp/.thinclient.sh exit
0.7.0 r4 と 0.7.1 r1 の差分をとってみた。
新規に追加されたファイル:
/etc/config/ntpservers /etc/config/openports /etc/config/webif /etc/init.d/N45ntpclient
ntpclient を使って時刻あわせするようになったようだ。 アップデート前するは起動時に「2000年1月1日 9:00 JST」にセットされていた。 これでは起動時からの経過時間しかわからないので、 ntpclient を使うように変更したのだろう。
変更されたファイル:
--- /rom/etc/banner 2006-09-13 02:41:30.000000000 +0900 +++ /jffs/etc/banner 2006-11-22 04:07:20.000000000 +0900 @@ -4,7 +4,7 @@ | | |_______||__| |__| |___| - Fonera Firmware (Version 0.7.0 rev 4) ------------- + Fonera Firmware (Version 0.7.1 rev 1) ------------- * * Based on OpenWrt - http://openwrt.org * Powered by FON - http://www.fon.com --- /rom/etc/fon_revision 2006-09-12 06:43:42.000000000 +0900 +++ /jffs/etc/fon_revision 2006-11-16 05:08:40.000000000 +0900 @@ -1 +1 @@ -4 +1 --- /rom/etc/fon_version 2006-09-12 04:32:01.000000000 +0900 +++ /jffs/etc/fon_version 2006-11-16 05:08:40.000000000 +0900 @@ -1 +1 @@ -0.7.0 +0.7.1 --- /rom/etc/functions.sh 2006-09-12 04:32:01.000000000 +0900 +++ /jffs/etc/functions.sh 2006-11-15 02:44:26.000000000 +0900 @@ -112,3 +112,18 @@ esac } +# +# This functions forwards a port. The next args are required: +# $1 = WAN interface +# $2 = Origin Port +# $3 = Destination IP +# $4 = Destination Port +# $5 = protocol used +# +# Example: open_port $WAN 8080 192.168.1.2 80 tcp +# +open_port() { + iptables -t nat -A prerouting_rule -i $1 -p $5 --dport $2 -j DNAT --to-destination $3:$4 + pdots=`echo $4 | sed 's/-/:/g'` + iptables -A forwarding_rule -i $1 -p $5 --dport $pdots -d $3 -j ACCEPT +} --- /rom/etc/hotfix 2006-09-12 04:32:01.000000000 +0900 +++ /jffs/etc/hotfix 2000-01-01 09:35:00.000000000 +0900 @@ -0,0 +1 @@ +upgrade_0711 --- /rom/etc/init.d/S45firewall 2006-09-12 04:56:53.000000000 +0900 +++ /jffs/etc/init.d/S45firewall 2006-11-17 22:12:29.000000000 +0900 @@ -105,3 +105,7 @@ } # check if the connection is already up and add WAN_HOOK rules automatically env -i ACTION=ifup INTERFACE=wan /bin/sh /etc/hotplug.d/iface/20-firewall +# +# Forwarded ports +# +/etc/config/openports $WAN --- /rom/etc/sysctl.conf 2006-09-12 04:32:01.000000000 +0900 +++ /jffs/etc/sysctl.conf 2006-11-08 03:04:39.000000000 +0900 @@ -6,3 +6,4 @@ net.ipv4.tcp_keepalive_time=120 net.ipv4.tcp_timestamps=0 net.ipv4.tcp_vegas_cong_avoid=1 +net.ipv4.ip_local_port_range=4096 8192
このあたりはわずかな修正だが...
--- /rom/etc/init.d/rcS 2006-09-12 22:16:13.000000000 +0900 +++ /jffs/etc/init.d/rcS 2006-11-15 02:44:26.000000000 +0900 @@ -21,13 +21,24 @@ done while :; do + lock -w /var/run/restart-services + + # just in case + lock -u /var/run/network-connection + killall lock + + # grab the locks again lock /var/run/restart-services + lock /var/run/network-connection + killall N50chillispot killall chilli killall dnsmasq ifup lan_noinet ifup wan /etc/init.d/S45firewall + + lock -w /var/run/network-connection for i in /etc/init.d/N*; do $i start 2>&1 done
これは、起動時に問題が起きることがあることへの対策か?
そして、0.7.1 へのアップデートで一番の目玉が、 /usr/lib/webif 以下の変更、 すなわち設定 Web インターフェースの多言語対応なのだろう。 /usr/lib/webif/lang ディレクトリが追加され、 /usr/lib/webif/lang/jp/fon.txt などのファイルに、 ローカライズのための文字列置換表が追加された。 /etc/config/webif に現在選択している言語が設定される。
日本語で設定できるようになったのはいいことだと思うが、 0.7.1 r1 にアップデートしてから、 FON Maps で濃いグリーンで表示されなくなったような気がする... アップデート前は FON_AP 登録位置に濃いグリーンの円が表示されていたのだが、 アップデート直後から薄いグリーン(直近で非アクティブ)の円で 表示されるようになってしまった。 前述したようにバージョン番号は thinclient で FON へ送信されるが、 0.7.1 r1 だと電波を出しているとは認識してもらえなくなってしまったのか? (thinclient の実行頻度を高めてみても、淡い緑のまま...)
もう一点、気づいた不具合として、 設定 Web インタフェースにて WAN 以外の設定を行なわずに何らかの設定を行なうと、 WAN が使えなくなってしまう、という問題がある。 すなわち、/etc/config/fon において
config network wan option mode ''
などとなってしまう。 これだと WAN (つまり有線インタフェース) に IP アドレスが設定されない。 つまり有線もパブリック アクセス ポイント「FON_AP」も使えなくなってしまう。 エイリアス「eth0:1」には常に 169.254.255.1 が設定されるので、 大事には至らないのだが...
eth0:1 Link encap:Ethernet HWaddr 00:18:84:16:XX:XX inet addr:169.254.255.1 Bcast:169.254.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 Interrupt:4 Base address:0x1000
このような状態になってしまったときは、 この 169.254.255.1 へアクセスするか、 プライベート アクセス ポイント「MyPlace」へアクセスして、 設定 Web インタフェースにて WAN の設定を行なえばよい。 例えば「DHCP」を設定すると、 /etc/config/fon の該当箇所が
config network wan option mode 'dhcp' option ipaddr ''
となるので、「/sbin/ifup wan」を実行するか、 あるいは再起動すれば DHCP で取得した IP アドレスが WAN に設定される。
FONめも
FONめも http://wiki.livedoor.jp/okyota/d/F…
Comment by fon登録 設定 徹底解説 無線LAN共有プロジェクト — 2007年2月7日 @ 01:11
貴重な情報をありがとうございます.ところで,ここでおっしゃっている0.7.1r4って0.7.0r4のまちがいではないでしょうか.
Comment by tf0054 — 2007年5月13日 @ 02:54