在大概一个月之前,重邮的LUG团购了一波日本的AU HOME SPOT CUBE
,大概一个人12块左右,自己买了一个,同时帮同学买了一个。自己在校园网环境下面使用了大概一个月,除了覆盖范围小了点外,感觉还是很不错的,但是在使用的过程中还是踩过不少的坑,遂撰文记录之,以给后来的学弟学妹一点人生的经验。
路由器硬件
这款路由器使用的是RTL8196C的主控以及RTL8192DR的无线射频芯片,原厂支持5G。这种解决方案还是比较成熟的,因为据同学说,包括
- DLINK DIR-805
- DLINK DAP-1513
- MZK MF300D
- TOTOLINK N500R
- NETCORE NR285P
在内的路由器都是使用的同样的解决方案,只不过让人郁闷的是在OpenWrt的官网并没有找到针对此种架构的官方固件。于是打算自己编译,在下载好了各种编译环境弄完发现有好几个G,然后编译还失败了,遂放弃之,以后有时间再弄。从网上弄到一个别人编译的OpenWrt固件,发现还是可以用的。
刷入OpenWrt固件
首先,需要将OpenWrt的固件刷入路由器,各种路由器的刷固件的方法都是大同小异,大概分为以下几种方法:
- 通过网络刷入,这种方式比较安全、稳妥。而这样的刷机方式又可以分为两种,一种是分块刷入另一种是一次性刷入。
- 路由器升级的方式来更新固件,这种方式可以在路由器正常启动之后找到该种刷入的入口。然后通过刷入新的固件来更新路由器,这种新的固件可以是分块的或是合并的。分块的一般是包含 Bootloader、Kernel、rootfs三块,依次刷入就是了。
- 另一种就是通过tftp刷入新的固件,这种也是可以分块或者是合并刷入的,这种方式一般需要按住Reset键来启动路由器,使得路由器进入升级的模式然后刷入固件。
- 对于Au,还可以在进入升级模式后配置好自己的IP之后打开192.168.1.6,来进入升级的模式将整个合并的固件刷入,192.168.1.6是Au固化的IP地址,在进入升级模式后这个IP是固定不变的。
- 通过串口刷入。对于路由器,串口的作用主要有:
- 输出编译路由器编译后的调试信息。
- 当网络无法启动的时候可以通过串口登录修改系统一些配置参数。从而能使得网络正常启动,这种一般是在人为修改了路由器的启动配置脚本之后导致路由器无法启动的情况用到。
- 通过串口发送一些文件到路由器,或是中断路由器的正常启动从而进入BootLoader模式,继而刷新路由器的固件。
- 通过编程器的方式来刷入,这种方式风险性比较高,还有硬件工具的硬性要求,不到万不得已不建议使用这种方式,这种方式首先要将Flash芯片从路由器上拆下,然后再连接到编程器,最后将固件(整数大小)通过编程器刷入Flash。建议这里使用风枪或是刀口烙铁,从而不会导致损坏Flash芯片或是旁边的芯片。
配置OpenWrt
当Au刷入OpenWrt之后可能需要配置以下几个内容:
- 配置LED灯。因为Au的LED灯的个数实在是太多了,颜色还比较乱,因此我们需要关闭顶部中央的LED以减少功耗。可以在
系统 > LED配置
里面找到LED的配置选项。 - 设置PPPoE拨号。如果你不是校园用户,或者你是cqupt类似高校的教师用户,你可以通过配置拨号上网的方式来连接外网。配置的步骤主要有:
- 新接口的名称 配置一个你钟意的接口的名称
- 新接口的协议 使用PPPoE协议来进行拨号
- 包括以下接口 这里是要包括你的WAN接口,在我的这个版本的OpenWrt中WAN接口是eth1。
- 接下来就是填写你的用户名和密码就是了。
- 设置防火墙。配置好拨号连接后,还需要将ppp拨号的防火墙区域划分到WAN口以便LAN口都能够上网。
- 设置静态路由。配置静态路由的原因是每次拨号之后ppp的优先级太高从而是的原来走内网的路由同一走了点对点信道,所以我们需要制定内网的路由走我们的网关出去,这样才能方便的出入内网。据某些同学的整理,cqupt的内网网段大概有以下几个:
- 202.202.32.0 255.255.240.0
- 172.16.0.0 255.240.0.0
- 211.83.208.0 255.255.240.0
- 219.153.62.64 255.255.255.192
- 222.177.140.0 255.255.255.128
- 配置规则。所谓的配置规则就是指定某些协议某些端口可以通过防火墙。我们举两个很实用的具体例子来理解这个规则
- 我们能够在局域网内使用ip来访问路由器的配置页面。针对这样的需求,我们需要开放80端口以供客户端请求的数据能够被路由器接收。所以我们配置如下的规则:
1
2
3
4
5
6config rule
option target 'ACCEPT'
option src 'wan'
option proto 'tcp'
option dest_port '80'
option name 'HTTP' - 同样的我们需要开放ssh的局域网访问权限,因此我们可以这样配置我们的规则
1
2
3
4
5
6config rule
option target 'ACCEPT'
option src 'wan'
option proto 'tcp'
option dest_port '22'
option name 'SSH'
编译校园网的拨号插件
针对被电信垄断的校园网用户,电信当然不会把真是的宽带账号和密码告诉同学们了,而是提供一个客户端,通过这个客户端对账号进行加密得到真实的账号进行拨号从而防止了同学们使用路由器,从而杜绝了多个同学共用一个账号的情况。但是,在我皇家邮电大学的前辈的努力下,终于破解了这个加密算法,并且在隔壁某同学的艰苦奋斗下,得到了使用于OpenWrt的加密代码及插件,具体参考Openwrt-NetKeeper。由于这里面编译出来的拨号插件使用的ppp的版本与我们的OpenWrt的固件的ppp版本(2.4.5)不一致,因此我们需要重新编译该插件从而能够适用于我们的OpenWrt固件。在编译之前我们需要得到RTL8196C的交叉编译工具链,或者得到它的SDK。因为在SDK里面通常都会有工具链。在配置好交叉编译工具链的环境变量之后就可以通过工具链来编译我们的插件。编译得到插件sxplugin.so后scp把它放到ppp的目录里面。然后按照如下的方式使用插件
1 | config interface 'ppp1' |
配置好这个之后会发现还是上不了网。一开始老以为是插件的原因,差点都放弃了,后来一次偶然的机会按了一下dmesg然后输出一系列的日志信息。最后那个拨号的日志显示是有文件找不到,但是我们的插件确实是在指定的目录下面的啊。这样我就开始怀疑交叉编译工具链的问题了。然后我写了个hello world 然后编译生成二进制文件,scp传到路由器,在命令行里面运行后输出 can't load library lib_gcc_s_4181.so.1
。显而易见是因为缺少了某些链接库导致程序跑步起来,因此我们在工具链里面找到这个文件然后scp放到路由器的/usr/lib
目录下面,这样我们就能够运行刚刚的hello world 的程序。同时也是能够正常拨号了。到这里大功告成!!!