mytunet on DD-Wrt on La Fonera

    前几天看到cyberspace版用路由器运行mytunet的截图,突然很感兴趣,于是购得La Fonera无线路由器一台。昨天拿到机器,经过一番折腾终于成功登陆了tunet. 在这里简单记录一下。

    La Fonera是西班牙的FON 的第一款无线路由器,原本是为了用来构建FON独创的wifi共享社区而提供的。它使用一个基于openwrt的专用固件,加电运行时,会自动向FON的服务器注册。

    因为FON的最终目的是wifi共享网络,这款路由器以很低廉的价格出售,在很多地区甚至曾经免费赠送。我在淘宝的买价是140包邮。卖家必然赚了不少。

 

       (图转不上来了....)

    La Fonera体积只有烟盒大小,硬件也非常精简:板上主要元件只有Atheros AR2315和一颗16M SDRAM,接口是1个WAN口(也可以用做LAN)加一根天线。但处理能力还算可以,有183MHz MIPS 4K的CPU,8M Flash和16M RAM. Atheros AR2315可谓SoC的典范,集成了CPU、Wifi RF、802.11 MAC/baseband、以太网口、Flash ROM、SDRAM控制器、UART等等。

 


***************************************************************
过程如下:

 

1. 刷写dd-wrt固件。基本按dd-wrt wiki 上的指示

 i) 首先要破解原版固件的限制,否则不能SSH登录或升级非官方固件。因为机器比较老,固件版本是0.7.1 r1. 用这里 的方法,通过路由的web管理界面直接注入代码就可以启动SSH服务器dropbear,登陆之后再将其设为自动启动。更高版本的固件需要用kolofonium 方法破解,操作实际上更简单,但需要一个能直连国际网的有线连接...

 ii) mtd hack: 下载openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma和out.hex两个文件,因为我不能直连外网,把它们放在了本机的web server上(windows下,用的是EasyWebServer),再通过无线wget到路由器。依次

  mtd -e vmlinux.bin.l7 write openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma vmlinux.bin.l7

  mtd -e "RedBoot config" write out.hex "RedBoot config"

之后就可以用RedBoot刷机了。

 iii) 现在路由器的启动过程会停在RedBoot,因此无线不可用。用一根普通网线连接PC和路由,PC的IP设为192.168.1.xxx. 路由的默认设置是自动IP 192.168.1.254,上电10秒内可以telnet到9000端口。登陆后进入RedBoot界面,把准备好的dd-wrt v24 sp1固件(linux.bin)传到路由器上刷机。默认的传输方法是TFTP,但正好有个web server,就改用了web方式:
  fis init                                                                               (格式化)
  load -r -b 0x80041000 linux.bin -m HTTP -h 192.168.1.xxx   (载入固件到RAM)
  fis create linux                                                                   (刷写)

最后一步大约需要15分钟,过程中telnet不会响应。第一次刷的时候不小心多按了一下回车,结果telnet连接断开,等了一小时重启后发现没有成功刷写。可能是断线后尝试重连telnet干扰了刷写过程?

 

 iv) 仍在RedBoot下,运行fconfig,改写启动脚本为

  fis load -l linux

  exec

重启后就是dd-wrt的系统了~~~

2. 启用jffs

dd-wrt v24sp1 for La Fonera体积不小,不过8M的Flash安装后尚有1.87M可用空间。文件系统中/etc、/usr等均为只读;/tmp可写,但实际是位于RAM. 启用jffs即可利用Flash的富余存储:在路由的web管理界面找到jffs选项,选中“启用”和“清除”并apply;重启后取消选择“清除”,确定即可。出现一个可写、非易失的目录/jffs. 文件系统占用300多K,实际可用约1.45M。

 

3. 尝试运行mytunet

在新水木LinuxApp版和旧水THUNet版分别找到了两个for MIPS的mytunet build。运行后出现下面的错误:

  root@DD-WRT:/jffs/bin# uname -a
  Linux DD-WRT 2.6.23.17 #5158 Sat Jul 26 03:47:50 CEST 2008 mips unknown
  root@DD-WRT:/jffs/bin# ./mytunet
  ./mytunet: line 1: syntax error: "(" unexpected

一番搜索之后得知是MIPS的endianness问题,big endian的"mips"和little endian的"mipsel"并非二进制兼容。多数路由器都是mipsel,然而AR 2315的处理器恰恰是big endian. 看起来只有自己编译mytunet一条途径了。

 

4. 编译mytunet

mytunet的源码已开放,可从Google code下载。之后要建立交叉编译工具链:从uclibc.org 下载buildroot的snapshot,“make menuconfig”去掉不用的部件,“make”即生成工具链(在线下载源码编译,比较费时)。用buildroot/build_mips/staging_dir/usr/bin下的mips-linux-uclibc-gcc编译链接:

  cd mytunetsrc/src/
  mips-linux-uclibc-gcc -c -D_LINUX *.c mytunet-console/console/main.c
  mips-linux-uclibc-gcc -D_LINUX -o mytunet *.o -lpthread

 

5. 重新编译mytunet

得到的文件可以在路由上运行,但mytunet set的配置不能保存。为此,修改mytunetsvc.c将配置保存位置由/etc/mytunet.conf改到/jffs/etc/mytunet.conf,重新编译。

配置得以成功保存。配置好eth0的IP后尝试用mytunet登录,却发现802.1x验证请求发送之后就没有了回应。尝试用别的办法来解决802.1x...

 

6. 尝试wpa_supplicant

我用的dd-wrt版本自带一个wpa_supplicant 0.6.2,但它仅有“madwifi”也就是用于Atheros的无线网卡的驱动,而登录校园网需要“wired”驱动。最初找到的几个wpa_supplicant版本或是mipsel的,或是同样没有“wired”驱动;几经周折,在OpenWrt的Atheros repo 里找到了wpa-supplicant_0.6.6-1_mips.ipk,终于可以满足要求。

(OpenWrt提供一个精简的包管理系统opkg,早期半杯叫ipkg;.ipk文件是ipkg/opkg的软件包。dd-wrt也有ipkg,可以使用很多为OpenWrt编译的包,但并不是全部,例如screen就无法正确运行。)

建立如下的/jffs/etc/wpa_supplicant.conf:

  ap_scan=0
  network={
    key_mgmt=IEEE8021X
    eap=MD5
    identity="xxxxxxx"
    password="yyyyyyy"
    eapol_flags=0
  }

其中identity和password处填入用windows版mytunet附带的Win802.1x.exe求出的值。

运行:

  /jffs/usr/sbin/wpa_supplicant -Dwired -ieth0 -c/jffs/etc/wpa_supplicant.conf -B

成功通过802.1x认证!

 

7. mytunet登录

再次mytunet set,取消其802.1x认证。运行mytunet即告成功。

 

 

********************************************************

 

TODO:

1. 教育网直通车的自动连接

2. 用作维持网络连接的daemon脚本

3. OpenWrt

 

 

转载.清华电子电气工程专业一个娃子的..

1. 让路由器自动联学校的网
2. 折腾
2是主要目的...

你可能感兴趣的:(路由器,linux,flash,windows,web,server)