OpenWrtでFonのHeartbeatを送信する
OpenWrtにCoovaChilliを導入してFon互換のアクセスポイントを公開しても、このままではFon Mapsには表示されず、FonのアカウントのステータスもいずれAlienになってしまうでしょう。
chilliコマンドとは別に、定期的にhearbeatをFonのサーバーに対して行う事で、本来のFonルーターと同様の動作を行わせることが出来ます。
元ネタはdd-wrtのwikiで公開されているLaFonera Software Heartbeat-Devです。
OpenWrtはOverlyファイルシステムが導入されているため、dd-wrtの様にtmpフォルダにこだわる必要がありません。よって、そこを修正します。また、stopコマンドの追加、cronの書き換え部分の変更なども併せて修正追記しました。修正済みのファイルを以下に提示します。
なお、ファイルは/etc/chilli以下に配置する事としました。
変数のETMACにはFONルーターのMACアドレス、WLMACにはそれに+1したアドレスを設定して下さい。手持ちのFONルーターは大切に保管しておきましょう。
※ 2014.01.08 cron設定部分を修正しました。
#!/bin/sh # #version 1.0.6F (modified by pepsi_max2k for la fonera) # THINCLIENTPATH="/etc/chilli" # path of this file ROOTHOME="/root" # root's home dir SSHPATH="/usr/bin/ssh" # path to ssh KEY="$THINCLIENTPATH/fonkey" # private key for fetching the info from the FON server THINCLIENTOUT="/tmp/.thinclient.sh" # output file THINCLIENTOUTDEFAULT="33" # default size of the output file THCLVER="1.0" CHILLVER="1.0-1" FONREV="5" # /etc/fon_revision FIRMWARE="0.7.1" # taken from /etc/banner (without Beta) DEVICE="fonera" USER="openwrt" SERVER="download.fon.com" PORT="1937" FONSIG="$SERVER ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEA0zJFtj5NtrVsj8+qG0dtPE8WpHHDpTXp5+d3vvtSS7Hx7vYHyrfN/8PBVrrYOgl4dySY65sGtq34EU04VN4a7xQHSKJBunDUSQ/2Xz+eyo53LCVeFy1zNRCmB6jrFlJQvl5yviLvXmMtOGxG8Z1dfu4qavfGtBxwtwxKPKuiyhs=" # gather information about this machine #WLMAC="$(/usr/sbin/nvram get ath0_hwaddr)" #ETMAC="$(/usr/sbin/nvram get et0macaddr)" WLMAC="00:18:84:C6:A8:81" ETMAC="00:18:84:C6:A8:80" MAC=`echo $WLMAC|tr A-Z a-z` check_env () { [ -d "$ROOTHOME/.ssh" ] || mkdir $ROOTHOME/.ssh [ -f "$ROOTHOME/.ssh/known_hosts" ] || touch $ROOTHOME/.ssh/known_hosts [ `grep -c $SERVER $ROOTHOME/.ssh/known_hosts` = "0" ] && echo $FONSIG >> $ROOTHOME/.ssh/known_hosts } exec_cron_mode () { check_env sleep "$((0x$(head /dev/urandom |hexdump |awk '$2 > 0 {print $2}'|head -n1) % 60))" echo "mode='cron' wlmac='$MAC' mac='$ETMAC' fonrev='$FONREV' firmware='$FIRMWARE'" | $SSHPATH -T ${PORT:+ -p $PORT}${KEY:+ -i $KEY} "${USER}@${SERVER}" > $THINCLIENTOUT echo "sent: mode='cron' wlmac='$MAC' mac='$ETMAC' fonrev='$FONREV' firmware='$FIRMWARE'" exec_check_thinclient } exec_start_mode () { sleep 60 # make sure WAN is up and crond is running check_env [ -f "/etc/crontabs/root" ] || touch /etc/crontabs/root [ `grep -c thinclient /etc/crontabs/root` = "0" ] && echo "24,54 * * * * $THINCLIENTPATH/thinclient cron > /dev/null 2>&1 &" >> /etc/crontabs/root echo "mode='start' wlmac='$MAC' mac='$ETMAC' fonrev='$FONREV' firmware='$FIRMWARE' chillver='$CHILLVER' thclver='$THCLVER' device='$DEVICE'" | $SSHPATH -T ${PORT:+ -p $PORT}${KEY:+ -i $KEY} "${USER}@${SERVER}" > $THINCLIENTOUT echo "sent: mode='start' wlmac='$MAC' mac='$ETMAC' fonrev='$FONREV' firmware='$FIRMWARE' chillver='$CHILLVER' thclver='$THCLVER' device='$DEVICE'" exec_check_thinclient } exec_stop_mode () { [ -f "/etc/crontabs/root" ] && sed /thinclient/d -i /etc/crontabs/root } exec_check_thinclient () { if [ -f $THINCLIENTOUT ] then THINSIZE="$(wc -c < $THINCLIENTOUT)" if [ $THINSIZE = "0" ] then echo "Something is wrong, $THINCLIENTOUT is empty" elif [ $THINSIZE != "33" ] then echo "Something is different in $THINCLIENTOUT:" cat $THINCLIENTOUT else echo "$THINCLIENTOUT is the default one, deleted" rm $THINCLIENTOUT fi else echo "Something is wrong, $THINCLIENTOUT does not exist!" fi } case "$1" in cron) exec_cron_mode ;; start) exec_start_mode ;; stop) exec_stop_mode ;; check) exec_check_thinclient ;; *) echo "Usage: `basename $0` {cron|start|stop|check}" exit esac
fonkeyも同様に/etc/chilli以下に取得します。
wget -O /etc/chilli/fonkey http://www.wildblue.de/fonera/heartbeat/key
./thinclient startを実行するとhearbeatが送信されcronの設定が変更されます。
そして以下のように"Linux fonesfat….."とレスポンスが帰ってくればFonサーバー上の自分のルーターがオンラインになります。
root@OpenWrt:/etc/chilli# ./thinclient start sent: mode='start' wlmac='xx:xx:xx:xx:xx:81' mac='xx:xx:xx:xx:xx:80' fonrev='5' firmware='0.7.1' chillver='1.0-1' thclver='1.0' device='fonera' Something is different in /tmp/.thinclient.sh: Linux fonesfat03 2.6.32-5-amd64 #1 SMP Mon Jan 16 16:22:28 UTC 2012 x86_64 root@OpenWrt:/etc/chilli#
これで、OpenWrtを乗せられるWiFiルーターがあればFonルーターの代替が可能になり、Fonの為に別ルーターを起動したり、故障に煩わされる事が無くなります。
ディスカッション
コメント一覧
まだ、コメントがありません