OpenWRT, wireless freedom
OpenWRT 是一款开源的 Linux 发行版,主要用于各种无线路由器
Tp-link WR703N
入手
入手流行的 TL-WR703N 当前软件版本是 3.15.2 Build 130321 Rel. 37153n,硬件版本 v1。直接用 web 界面升级 openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin。然后在主机上执行 dhclient eth1
没有反应,重启硬件 dhclient eth1
还是没有反应,由于 OpenWRT 网站上说过成砖的先例,以为这次悲剧了。直接
$ ifconfig eth0 192.168.1.100
ping 有反应,telnet 没有问题
telnet 192.168.1.1
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
=== IMPORTANT ============================
Use 'passwd' to set your login password
this will disable telnet and enable SSH
------------------------------------------
BusyBox v1.19.4 (2013-03-14 11:28:31 UTC) built-in shell (ash)
Enter 'help' for a list of built-in commands.
_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
-----------------------------------------------------
ATTITUDE ADJUSTMENT (12.09, r36088)
-----------------------------------------------------
* 1/4 oz Vodka Pour all ingredients into mixing
* 1/4 oz Gin tin with ice, strain into glass.
* 1/4 oz Amaretto
* 1/4 oz Triple sec
* 1/4 oz Peach schnapps
* 1/4 oz Sour mix
* 1 splash Cranberry juice
-----------------------------------------------------
root@OpenWrt:/#
初始配置
缺省情况下 WLAN 是关闭的,而且 bridge 到了 lan 端口(Bridged AP Mode) ,想设成常见的路由模式(Routed AP Mode),在它的 WEB 界面上配置了半天也没有搞定,最后还是直接修改配置文件。参考 http://wiki.openwrt.org/doc/recipes/routedap
允许 ssh 访问 wan 端口
It is real simple, just add to following to /etc/config/firewall:
#open ssh on wan interface
config rule
option src wan
option dest_port 22
option target ACCEPT
option proto tcp
And restart the firewall:
# /etc/init.d/firewall restart
安装 NFS
703N 的 Flash 只有 4M,我又不想在上面接个 U盘,于是只有使用 NFS
# opkg install nfs-utils kmod-fs-nfs
# mount.nfs ip:/path /mnt
安装完 NFS 剩余的空间就只有300K左右了,以后的东西必须都要安装到 NFS 上,于是修改 opkg.conf 增加
dest mnt /mnt
以后就可以用 -d mnt 安装到 /mnt 目录了。
安装 openvpn
安装的过程比较简单
# opkg install kmod-tun
# opkg -d mnt install openvpn
配置就比较麻烦了,折腾了一天半,记得的主要如下:
1.增加一个接口
config interface 'vpn'
option ifname 'tun0'
option proto 'none'
2.配置防火墙
config zone
option name 'vpn'
option network 'vpn'
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'ACCEPT'
option masq '1'
config forwarding
option dest 'vpn'
option src 'wlan'
3.配置文件 把 wrt.crt, wrt.key, ca.crt 放到路由器上,openvpn 配置文件如下
package openvpn
config openvpn custom_config
option enabled 1
option client 1
option dev tun
option proto udp
list remote "ip地址 1194"
option resolv_retry infinite
option nobind 1
option persist_key 1
option persist_tun 1
option ca /mnt/etc/openvpn/ca.crt
option cert /mnt/etc/openvpn/wrt.crt
option key /mnt/etc/openvpn/wrt.key
option comp_lzo 1
option verb 3
option mute 20
4.将 mount.nfs 命令和 /etc/init.d/openvpn start 写到 /etc/rc.local 里面
改装 MW151RM
wr-703n 在家里一直用,不能拿来玩,出差的时候买了个 MW150RM,结果被我弄成砖了,后来一直不死心,就买了个 MW151RM。这个 MW151RM的电路板和 wr-703n 一模一样(后来发现接上串口线后显示的信息都还是 tp-link),只是没有焊 USB host相关的器件。
改装的过程并不复杂,不过由于技术不精却没少了波折。主要过程如下:
- 将 DDR 内存从8M换成64M
- 将 Flash 从 2M 换成 8M
- 写入新版的固件
其中 DDR 内存的来源是海龙淘来的内存条,把内存芯片吹下来,再焊到路由器上。可把内存从路由器上吹下来的时候好几个焊盘都翘起来了,好在没有断,还可以修补,最终焊好内存顺利启动。
把 Flash 焊下来之后去找张老师读取里面的内容,结果发现读出来的数据不对,怀疑芯片坏了。然后再把这个 2M Flash 焊上去的时候发现板子无法启动了,以为芯片果然坏掉了。这样里面的 ART 数据岂不是读不出来了?按照 openWRT 网站上的说法,这个路由器就废了。
不过我还没有死心,利用家里 wr703n 的固件,直接写到 8M Flash 上面,然后焊到 151RM 上,结果依然无法启动,串口也没有任何输出。
再把原来的固件 Flash 焊上去,依然无法启动,抱着死马当活马医的态度,把 64M 内存重新用烙铁烫了一遍,结果奇迹出现,板子可以启动了,无线也正常。
再把 8M 的 Flash 焊上去,同样可以启动,而且由于利用了家里 wr703n 的固件,手机直接就连上了。看来用同型号的 ART 也没有问题。
先把板子装回盒子,玩几天再说
修改 MAC 地址
由于使用了 wr-703n 的固件,目前 MAC 地址和 703n 一样,通过分析 u-boot.bin 发现 MAC 地址写在 0x1fc00,这也通过网络获得了证实。不过修改 MAC 之后重写 flash 却无法启动 wifi。重新读取了原 flash,总算把 ART 读了出来,换上去之后还是无法启动 wifi。通过多方组合,发现只有 703n 的 MAC 可以启动 wifi,其它的都不行,于是开始怀疑固件。
因为固件是从路由器里面 dump 出来的,所以一些配置信息也被复制过来,原来是 /etc/config/wireless 的配置文件的问题。将里面的 mac 地址同步修改了之后就可以正常启动了。
TTL 串口
对路由器的调试必须有串口的支持,板子上的 TP_OUT 就是串口的 TXD,TP_IN 就是 RXD,在启动路由器的早期快速输入 tpl 可以进入 u-boot 界面。 增加 USB Host
硬件改动:
- 加焊usb接口
- R101 R102 焊 22ohm 电阻(0402 的还是挺难焊的)
- R112 焊 0ohm 电阻
软件改动:
# opkg install kmod-usb-storage block-mount block-hotplug kmod-fs-vfat kmod-nls-cp437 kmod-nls-iso8859-1 kmod-nls-utf8
然后还装了 3G 和摄像头的驱动,有空可以试试
# opkg install kmod-video-uvc kmod-usb-serial-wwan
编译安装 trunk
首先下载最新代码
$ git clone git://git.openwrt.org/openwrt.git
配置界面和 buildroot 类似,选择了 tl-703n 的缺省配置,直接 make 就可以生成最后的 bin 包。把 sysupgrade 包拷贝到路由器的 /tmp 目录,然后执行
# sysupgrade openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-sysupgrade.bin
升级非常顺利:
BusyBox v1.22.1 (2014-08-13 11:11:21 CST) built-in shell (ash)
Enter 'help' for a list of built-in commands.
_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
-----------------------------------------------------
CHAOS CALMER (Bleeding Edge, r42131)
-----------------------------------------------------
* 1 1/2 oz Gin Shake with a glassful
* 1/4 oz Triple Sec of broken ice and pour
* 3/4 oz Lime Juice unstrained into a goblet.
* 1 1/2 oz Orange Juice
* 1 tsp. Grenadine Syrup
-----------------------------------------------------
root@OpenWrt:~#