TP-Link TL-WR703N折腾笔记

PS. 本文是iddmx的《一个程序员的世界》(原名一个程序员的世界观)的更新。作者是iddmx的同学,一个实验室,坐在他旁边~ 

 

缘起:可恶的校园网

  应该有很多大学都在用锐捷认证,锐捷这个东西。。谁用谁知道。不是一般的坑。在我们学校,固定IP,绑定Mac,就不说了,而且更坑爹的是还没有Linux的客户端,于是乎各种解决方案都出现了。

  大学三年我们尝试过各种方法来解决这个问题。对于Windows系统,我们的解决方案是利用一款叫Connectify的软件; 在Linux系统,用的是Mentohust来认证。

  但这些方法都有几个不足:在某一个时间,一个帐号只能有一台电脑在线。在晚上断电之后,即使有多个帐号,因为交换机没有电(我们寝室的小UPS只能挺20分钟)只能有一台电脑连接主线上网。

  在大一的时候我北大的一个同学就告诉过我可以用路由器刷OpenWRT系统,在路由器里跑Mentohust,然后用无线来共享网络。由于他一开始没有说明是哪个型号,买了一个路由器之后上网一查,说不支持这个型号。后来再问北大同学,他告诉我他知道最方便的就是TL-WR703N。由于刚买完一个,资金有点紧张,就放在一边了。这一放就是三年。

  21号的时候跟ZTY去电子大世界,寻思买盒炭粉给实验室打印机换点墨粉。顺道就去二楼转了一圈,偶然间发现了竟然有卖这个型号的。于是就买了一个回来研究。结果,这四天,我就没再消停过。

 

刷机,走起~

  自己配置过路由的同学都应该知道,其实路由器固件升级并不是什么困难的事。通过192.168.1.1 admin admin进入路由器管理界面之后,在系统管理一项中就有一个固件升级。只要在输入框中选择事先下载好Openwrt固件(带factory那个),然后点击升级,再等几分钟,只要中间没断电,基本上就没什么问题。(如果不幸断电,想找解决方案的话,请看TTL刷机部分)很顺利的就刷到了OpenWRT系统。OpenWRT是一种嵌入式Linux系统。心想凭借着8年多的Linux使用经验,这点问题肯定难不倒我咯。于是,插上网线,把IP地址改成192.168.1.X,或者直接自动获取也行。顺利的利用SSH进入了路由器中。这其中有几点需要补充:

  首先是有些同学可能会发现刷好OpenWRT之后,搜不到路由器无线,这是正常现象,OpenWRT默认没打开无线。可以利用网线连上之后进入192.168.1.1 Luci界面 Network ->Wifi进行开启,然后就可以拔掉网线,利用无线操作了。

  还有的同学可能会刷好之后就迫不及待的用SSH进行连接,会发现连接不上。这是因为路由器的密码没有设置。只要进入192.168.1.1把root密码设置一下就OK了。

 

  在进入到路由器之后,编辑/etc/config/network文件,改成如下内容:

  

config interface 'loopback'
	option ifname 'lo'
	option proto 'static'
	option ipaddr '127.0.0.1'
	option netmask '255.0.0.0'

config interface 'lan'
	option ifname 'eth1'
	option type 'bridge'
	option proto 'static'
	option ipaddr '192.168.1.1'
	option netmask '255.255.255.0'

config interface 'wan'
	option ifname 'eth0'
	option _orig_ifname 'eth0'
	option _orig_bridge 'false'
	option proto 'static'
	option ipaddr '222.27.243.64'
	option netmask '255.255.255.0'
	option gateway '222.27.243.1'
	option dns '202.97.224.68'
	option macaddr 'XX:XX:XX:XX:XX:XX'

  由于要进行锐捷认证,所以wan口改成了静态获取。如果想用DHCP的话,那只要把proto那行后面改成‘dhcp’,在往后的不用写就好了。最后一行表示进行mac地址克隆,如果需要,改成自己要克隆的mac就好,否则删掉就可以。

  然后在/etc/rc.local中加入如下代码:

ip link add link eth0 eth1 type macvlan
ifconfig eth0 hw ether 60:EB:69:8D:82:2A
ifconfig eth0 up

  这样就实现了wan口和lan口自动切换。(因为WR703N只有一个有线口,既是WAN又是LAN)

  

  其实这段代码花费了我两天的时间,之前在PC上虽然配过很多次,但都是本身就有多块网卡。这种只有一个口的是第一次配置。

  在这之间又重刷了好多次系统。其中好几次感觉应该是固件有些问题,相同的代码,但在有的固件上就是不好使。

  更悲催的是中间有一次忘了配置Lan口,保存重启路由之后,无线连接不上,有线获取不到IP地址。。在这纠结了半天。在网上查了半天之后知道了解决方案:

    在路由器启动的时候指示灯会先亮一下,然后灭,过几秒之后开始闪。在开始闪的同时,用一根牙签或其他东西捅一下路由器的菊花(RESET键)。路由器指示灯开始狂闪,路由器进入维护模式。这时插上网线,就可以输入telnet 192.168.1.1进到路由器,再输入firstboot就可以将路由器恢复到初始状态。之后就可以进行重新设置。

 

  在配置好网络属性之后,就可以安装mentohust进行认证了。有两种方法,第一个,也就是比较简单的方法,就是google小标wr703n固件,里面集成好了Mentohust、打印服务器等功能,刷好了之后,就可以直接在web界面进行配置。第二种方法就是自己进行交叉编译一个mips的mentohust然后利用scp之类的拷到路由中去。如果不想自己配置交叉编译环境也可以上网找个已经编译好的mentohsut。 我对两种方法都进行了实验,最后我用了第一种方法,理由很简单:可以通过web页面进行配置。

  配置好mentohust之后,ssh进入路由器,输入mentohust,启动的时候,提示“客户端完整性校验失败”。这种问题的处理已经很有经验了。只要把windows下锐捷的8021x.exe SuConfig.dat W32N55.dll 拷贝到/etc/mentohust/目录下就OK了。

  路由器成功连上网之后,就需要配置一下无线,共享网络连接。。。正在配置的时候。发生了如下对话:

  ZTY:“你这个配置好之后,我拿到大连还能用么”

  我:“肯定能用啊。。现在这个就是一个功能扩展版的路由器,可以直接在web界面进行相关配置的,要是实在不行我可以给你刷回去,几条命令的事,要么现在试试给你刷回去?”

  ZTY:“刷吧”

  于是乎我就把刚改好的配置文件备份了一下(我是直接用tar打包之后,放到了/www目录,然后在电脑上用浏览器直接输入192.168.1.1/1.tar下载下来的)。

  把官方的bin用scp拷贝到了路由器/tmp目录

  使用cat /proc/mtd查看路由支持的升级命令  

    root@OpenWrt:~# cat /proc/mtd

    dev:    size   erasesize  name

    mtd0: 00020000 00010000 "u-boot"

    mtd1: 000d9ebc 00010000 "kernel"

    mtd2: 002f6144 00010000 "rootfs"

    mtd3: 00100000 00010000 "rootfs_data"

    mtd4: 00010000 00010000 "art"

    mtd5: 003d0000 00010000 "firmware"

  解释一下上面中的几个:(网上找的)

    uboot就像电脑的bios,是底层的管理系统;

    fw就像电脑的操作系统,实现路由器的各种功能;

    art就像电脑的无线驱动程序,是无线校验码;

    uboot的长度为128KB(0x20000);

    art为64KB(0x10000);

    fw有4M和8M的区别,4M的为3840K(0x3c0000),8M的为7936KB(0x7c0000)

  根据上面的升级参数执行升级命令

    mtd -r write wr703nv1.bin mtd5

  

  然而。。运行结果并没有想象那么顺利。。。。。。。。。。。。。。。。。。。。。。

  我擦。。。悲剧了!!!

   应该是下的固件不对,报错了

  在报错之后,我毫无经验的拔下了电源,期待重启能好使。或者用捅菊花的方法能重置。。。。。。

  结果仍然不好使!!!

  无线——————没有!

  有线——————没有!

  瞬间感觉脑袋发胀,眼前的所有东西开始晃。。晃。。晃。。我看着手中的WR703N。它在慢慢的变化,变化,慢慢的,它变成了一块砖。。。这他母亲的逗我玩呢!!砖还能用来砸人呢!这么点个玩意,砸人也不疼啊。。。。

进阶:拆!

  在上网查了一通之后,发现之前看的刷机教程中有这么一句话:“刷机过程一定不能掉电,否则就只能上TTL了。”

  瞬间我又看到了希望。。当即我就做了一个决定:

  TTL刷机走起~

  根据网上的教程:http://www.unxmail.com/read.php?227 和 http://blog.chinaunix.net/uid-16979052-id-3414635.html 进行拆机TTL刷机

  由于我是一个学软件工程的,里面需要的TTL转USB线没有,所以计划第二天再去一趟电子大世界。前一天晚上主要工作就是把TP_IN 和 TP_OUT两个触点焊出两根线来。

  这一部建议以前没有焊过的不要轻易尝试(可以考虑我们后来用的方法用两个夹子,把一面改造成尖口的,另一面用胶布粘上绝缘),在三次失败的焊接之后,我们终于成功把TP_IN的触点焊糊了。。。。。不过没太大问题,仔细观察电路,可以发现C55左边的焊点跟TP_OUT相连,C57靠上那个焊点是和TP_IN相连。

  

  第二天,买到了PL2303 TTL线,接上,按照刚才的第一个链接的步骤一步一步刷。。

  

  由于是晚上刷的。。脑袋不太灵光。一不小心,把fw.bin当成了full.bin了,在输入:

    tftp 0x80000000 fw.bin
    erase 0x9f000000 +0x400000
    cp.b 0x80000000 0x9f000000 0x400000

  之后。。重启路由器。。。。。。。。然后。。。。然后。。。。。。。

我了个大擦,更悲剧了。

  开机之后,指示灯长亮,用TTL连接,没有任何反映。。。得。。。看来唯一的办法就是拆FLASH芯片上编程器了。。

  就是这个片子:

    

  于是,今天下午淘宝了个编程器,发的顺丰,估计明天能到。在实验室的旮旯找出了热风枪、烙铁、焊锡膏等一系列设备。

  而且我作为一个学软件工程的学生,大部分时间都是在写程序。焊接经验基本上为0,之前手机座充坏了,寻思自己焊,折腾了不下3回才修好。。。拿烙铁的手非常不稳,明显抖得厉害。而且可以里面那个flash是贴片的,每个针脚相距不到一毫米。。。

  所以找了个信通学院的小美女,据说有手工焊贴片的经验。准备让她帮我焊。。。哈哈

  剩下的就是等明后天编程器到了刷flash了。。买编程器的时候,我又带了一个8M的新flash,一个64M的内存,等明后天到了之后让小美女看看能不能焊,要是能焊就直接让她帮着给换了~


 

  今天编程器到了。。没有想象中的那么复杂。只不过买的时候没买SOP8转DIP8的转接座,用手掐着flash烧录的。。期间烧失败了好几回。

  把Flash吹下来以后,按照编程器说明,固定到相应位置,在编程器软件上选择要刷写的bin,然后先擦除芯片,再查空,最后再烧录就OK了~

 

  买的编程器:

 

最近折腾用的设备的全家福 :


 

 后记:

刷机有风险,折腾需谨慎啊!!!!!