本文发自 http://www.binss.me/blog/install-openwrt-on-hiwifi-router/,转载请注明出处。
前言
最近舍友说我丢在宿舍里的极路由1S突然挂了,具体表现为只有电源灯亮着但无法发射WIFI信号。恰逢回校一趟,找出包装盒,把路由打包好,在JD申请了售后。
第二天就有极路由的客服打电话给我,询问了情况后说应该是固件出问题导致的,建议我自己重刷一下,随后就收到了含重刷教程链接的短信。问舍友,答几个星期前在高速下载的时候WIFI信号间接消失,于是让其自动升级到最新的固件。原来如此,那就先试试重刷固件吧。
按照教程,我首先在http://bbs.hiwifi.com/thread-78198-1-1.html下载了极路由壹s(HC5661)的固件9008,然后按照http://bbs.hiwifi.com/forum.php?mod=viewthread&tid=80529&page=1&extra=#pid1276046里说的进行刷机,刷完后果然满血复活了。
本来这件事到这里就结束了,但是我又起了折腾的念头。因为舍友们已经新弄了一台路由器来用,而家里一主一备两台TPlink工作良好,等于说这台路由器修好了也是吃灰而已。早闻OpenWRT大名,其今天就来把极路由1S刷成OpenWRT。
获取Root
当前版本的极路由封了root,不能ssh到路由器上愉快地玩耍,刷OpenWrt更是想都不要想,所以首先要开启极路由的开发模式。
注意开启后会失去官方保修服务! 注意开启后会失去官方保修服务! 注意开启后会失去官方保修服务!
进入云平台,点击路由器信息,拉到页面最下方,点开高级设置进行申请。之后需要关注极路由官方微信,绑定自己的社区账号,绑定完毕后即可安装开发者模式插件。
此后可以通过ssh登陆路由器,root完成。
不死uboot
俗话说常在江湖走,哪有不挨刀。刷固件多了,变砖乃兵家常事。为了避免悲剧,先刷上不死uboot。
首先登陆http://www.right.com.cn/forum/thread-161906-1-1.html,下载本机对应的Breed。注意别下载错了,不然刷完是真变砖。我的极路由1S对应的是breed-mt7620-hiwifi-hc5761.bin
。
ssh到路由器上,用scp上传该文件到/tmp目录下,然后执行以下命令:
mtd -r write /tmp/breed-mt7620-hiwifi-hc5761.bin u-boot
显示rebooting后等待路由重启完成。
重启完毕后三灯亮起,此时断开电源,按住RST通电,看到电源灯闪烁时可以松开RST。电脑自动获取ip,用浏览器192.168.1.1
即可登陆Breed控制台。
至此不死uboot刷入完毕,以后想怎么刷就怎么刷,刷成砖后进Breed控制台继续刷。当然刷之前最好先在固件备份页备份一下。
获取路由器固件
在github上找到了适配极路由的OpenWrt固件。项目主页:
https://github.com/rssnsj/openwrt-hc5x61/tree/chaos_calmer
作者提供了编译好的固件下载地址,但是作为一只猿,总是觉得要自己编译才放心,于是按照作者的指引进行编译:
# 安装必需的软件包(仅限Ubuntu/Debian)
sudo apt-get install build-essential git subversion wget flex gettext libncurses5-dev unzip gawk liblzma-dev zlib1g-dev ccache u-boot-tools
# Checkout项目代码
git clone https://github.com/rssnsj/openwrt-hc5x61.git -b chaos_calmer openwrt-hc5x61-cc
cd openwrt-hc5x61-cc
有两种编译方法:
直接编译法
刚刚已经cd到openwrt-hc5x61-cc目录下,直接执行make即可。只是该方法容易报错且耗时长,包含下载和编译我花了一个多小时。因此建议使用ImageBuilder编译法。
附上我编译时遇到和解决的一些错误:
-
错误
svn co svn://svn.openwrt.org/openwrt/branches/chaos_calmer openwrt-ramips -r46893 svn: E000111: Unable to connect to a repository at URL 'svn://svn.openwrt.org/openwrt/branches/chaos_calmer' svn: E000111: Can't connect to host 'svn.openwrt.org': Connection refused
解决
不知道为啥我用Proxifier+Shadowsocks无法为svn代理,依然checkout失败。建议使用国内的镜像,修改makefile中的svn地址:
svn co svn://svn.openwrt.org/openwrt/branches/chaos_calmer $(openwrt_dir) -r46893 -> svn co svn://svn.openwrt.org.cn/openwrt/branches/chaos_calmer $(openwrt_dir)
-
错误
*** Please make a symbolic of either config file to 'config-hiwifi'. make: *** [.patched] Error 1
解决
根据路由器型号做符号链接,我的是极路由5661,因此执行以下代码:
ln -s config-hiwifi-hc5761 config-hiwifi
-
错误
Build dependency: OpenWrt can only be built on a case-sensitive filesystem
解决
由于我是在Docker的Ubuntu里编译的,编译目录挂载在Mac上,然后Mac的文件系统的case-insensitive的。于是我把整个编译文件夹都拷贝到/下了。
-
错误
Build dependency: Please install the openssl library (with development headers)
解决
安装openssl
apt-get install libssl-dev
编译成功后,在openwrt-hc5x61-cc/openwrt-ramips/bin/ramips
目录下可以找到固件文件openwrt-ramips-mt7620-hc5761-squashfs-sysupgrade.bin
。
ImageBuilder编译法
首先到OpenWrt官网,下载OpenWrt-ImageBuilder-15.05-ramips-mt7620.Linux-x86_64.tar.bz2
和OpenWrt-SDK-15.05-ramips-mt7620_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64.tar.bz2
,然后解压到openwrt-hc5x61-cc/ImageBuilder文件夹下。然后执行make编译。注意如果需要5G驱动,make命令加上RALINK=1,如果需要自带全家桶(Shadowsocks, minivtun),make命令加上FEEDS=1。我希望能够获得比较纯净的版本,因此什么都没加。
make BUILDER=OpenWrt-ImageBuilder-15.05-ramips-mt7620.Linux-x86_64 SDK=OpenWrt-SDK-15.05-ramips-mt7620_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64 HC5761
编译成功后,在openwrt-hc5x61-cc/ImageBuilder/OpenWrt-ImageBuilder-15.05-ramips-mt7620.Linux-x86_64/bin/ramips
目录下可以找到固件文件openwrt-15.05-ramips-mt7620-hc5761-squashfs-sysupgrade.bin
更新固件
按照之前介绍的方法进入Breed的控制台界面。先在固件备份界面将EEPROM、固件、编程器固件、极路由 Key 备份下来,进入固件更新页面:
上传刚刚编译好的文件,点更新,进度条跑完后路由器将自动重启,由于我们的电脑和路由器的LAN口相连,所以路由器第二栈灯将会亮起,可以作为重启完毕的标志。
配置
上文提到,我刷的是ImageBuilder编译法编译出来的“纯净版”固件,因此悲剧地发现路由器没装LuCI,需要自己安装。使用了作者提供的固件或使用直接编译法固件的童鞋可以直接浏览器访问192.168.1.1登入LuCI管理页面,请直接跳到第4步。
-
登陆路由器
路由器默认没有密码,因此无法用ssh登陆,先用telnet登陆上去,然后用passwd设置密码。
telnet 192.168.1.1 ... passwd
设置密码后,今后无法用telnet登陆,换用ssh,敲入刚刚设置的密码即可:
ssh [email protected]
-
连接外网
由于LuCI的包太多,离线安装很麻烦,索性把路由器联网后通过opkg安装。这里我连接的是主路由器(192.168.1.1)提供的WIFI。
编辑
/etc/config/network
,确保wan项proto为dhcp:config interface 'wan' option force_link '1' option macaddr 'xx:xx:xx:xx:xx:xx' option proto 'dhcp'
为了避免ip段和主路由冲突,将lan项ipaddr改为192.168.199.1:
config interface 'lan' option ifname 'eth0.1' option force_link '1' option macaddr 'xx:xx:xx:xx:xx:xx' option type 'bridge' option proto 'static' option ipaddr '192.168.199.1' option netmask '255.255.255.0' option ip6assign '60'
然后重新加载配置文件
ifup wan ifup lan
此时由于修改了路由器的ip,因此ssh连接会断开,换用
192.168.199.1
登陆。编辑
/etc/config/wireless
,将设备名称改为wlan0,填入主路由器的热点名称(STAR)和密码(password)。config wifi-device 'wlan0' option type 'mac80211' option channel '11' option hwmode '11g' option path '10180000.wmac' option htmode 'HT20' config wifi-iface option device 'wlan0' option network 'wan' option ssid 'STAR' option encryption 'psk2' option mode 'sta' option key 'password'
然后重新加载配置文件:
wifi
稍等片刻后路由器无线网路灯(第三栈灯)亮起,代表连接上网络。用ifconfig可以看到wlan0设备的分配到的内网地址。
-
安装LuCI
opkg update opkg install luci
安装完毕后访问
192.168.199.1
即可使用LuCI的界面。 -
LuCI下的配置
首先将界面设置为中文:在system-system-Language and Style,将Language设置为Chinese。
然后配置WAN:在网络-无线,如果之前做了第二步,可以看到已经作为客户端连接到主路由器。否则选择搜索,加入你想加入的主路由器,填入密码点提交,即可创建连接。
接着配置WIFI:在网络-无线,选择添加,模式选择
接入点AP
,网络为lan
,最后别忘了在无线安全标签下设置wifi密码。设置完毕后,点击保存&应用
按钮。此时我们的电脑可以断开网线,使用wifi来连接路由器。选择刚过创建的热点,输入密码,即可连接路由器。
应用
哼哼,辛辛苦苦刷OpenWrt,不就是为了能在路由器装点东西嘛。
-
文件共享
路由器插了张8G的内存卡,可以通过Samba来做文件共享。
选择系统-挂载点:
将内存卡设置为启用后保存。刷新页面后可以在
已挂载的文件系统
处找到内存卡相应的挂载点。选择服务-网络共享,添加挂载目录:
然后路由器子网下的用户就可以通过该目录来进行文件共享了:
P.S. 经过测试,感觉性能有瓶颈,上传200M的文件要两分钟,下载200M的文件要30秒。建议下载完直接把内存卡拔下来插到电脑上。
-
Fuck Wall
作者自带的SS不好用,还受DNS污染导致无法Fuck Wall。因此还是用纯净版自己来。
先分别到:
http://sourceforge.net/projects/openwrt-dist/files/shadowsocks-libev/
http://sourceforge.net/projects/openwrt-dist/files/chinadns/
http://sourceforge.net/projects/openwrt-dist/files/luci-app/shadowsocks-spec/
http://sourceforge.net/projects/openwrt-dist/files/luci-app/chinadns/
把最新的包下载下来,传到路由器中(利用文件共享可以免除scp之烦):
然后安装:
opkg install ChinaDNS_1.3.2-3_ramips_24kec.ipk opkg install shadowsocks-libev-spec_2.4.6-1_ramips_24kec.ipk opkg install luci-app-chinadns_1.4.0-1_all.ipk opkg install luci-app-shadowsocks-spec_1.4.0-1_all.ipk
安装完后,打开服务-ShadowSocks,填入服务器配置信息,UDP转发和访问控制配置如下:
打开服务-ChinaDNS,配置如下:
打开网络-DHCP/DNS,在基本设置页设置
DNS转发
为127.0.0.1#5353
,在HOSTS和解析文件页将忽略解析文件
和忽略HOSTS文件
钩上。为了能够使用UDP转发,需要安装iptables-mod-tproxy:
opkg update opkg install iptables-mod-tproxy
更新ChinaDNS列表:
wget -O- 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | awk -F\| '/CN\|ipv4/ { printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > /etc/chinadns_chnroute.txt
以上步骤做完后,请重启路由器。
-
远程下载
下载哪家强?当然是Aria2啦~以往用aria2都要开个docker来跑,如今装到路由器上就避免了每次下载都要开docker的麻烦。
首先安装aria2:
opkg install aria2
创建aria2目录,放入session和配置文件:
mkdir /etc/aria2 cd /etc/aria2 touch aria2.session vi aria2.conf
粘入以下内容到aria2.conf中,请将dir修改为相应的下载目录(内存卡等设备):
dir=/card/aria2 file-allocation=none log-level=warn max-connection-per-server=10 max-overall-download-limit=0 max-concurrent-downloads=10 min-split-size=5M enable-http-pipelining=true max-tries=0 input-file=/etc/aria2/aria2.session save-session=/etc/aria2/aria2.session save-session-interval=60 enable-rpc=true rpc-listen-port=6800 rpc-listen-all=true
配置完毕后,启动aria2:
aria2c --conf-path=/etc/aria2/aria2.conf
然后是aria2的Web UI。根据之前的习惯,选用Webui-aria2而不是luci-app-aria2+YAAW。
首先到https://github.com/ziahamza/webui-aria2把整个目录下载下来,把README.md啊screenshots啊这些无关紧要的文件删除后,上传到路由器的www目录下。
浏览器访问http://192.168.199.1/webui-aria2/,打开设置-服务器设置,如下填写:
此时提示连接成功。aria2安装完毕:
为了让aria2开机启动+后台运行,打开Luci管理页面,进入系统-启动项,在本地脚本中加入一行:
aria2c --conf-path=/etc/aria2/aria2.conf -D
-
FTP(新增)
用Samba来传输大于1G文件时发现传输会出错。具体表现为文件传输到一半WIFI断线,然后文件传输中断。经过一番Google后无果,决定换用FTP来传输文件。
opkg update opkg install vsftpd vim /etc/vsftpd.conf
修改配置文件为以下内容:
background=YES listen=YES local_enable=YES write_enable=YES local_umask=022 check_shell=NO chown_uploads=YES chown_username=root ftp_username=nobody anonymous_enable=YES anon_upload_enable=YES anon_mkdir_write_enable=YES anon_root=/mnt/mmcblk0p2 local_root=/mnt/mmcblk0p2
anon_root和local_root为要挂载的目录名,设置为内存卡挂载目录。为了方便,我允许了匿名用户登陆。
接着修改目录权限:
chown root:nogroup /mnt/mmcblk0p2 chmod 775 /mnt/mmcblk0p2
删除nobody用户的密码以允许匿名登陆:
passwd -d nobody
配置完成后重启服务:
/etc/init.d/vsftpd restart
启动完成后,浏览器访问
ftp://192.168.199.1
:用Guest用户登陆,即可访问目录文件~
还有很多有趣的应用,比如adbyby、迅雷远程下载等,待今后有时间在折腾。
总结
OpenWrt作为一个嵌入式的Linux发行版,有着完善的生态系统,赋予用户DIY路由器的权利。用户只需ssh到路由器上,然后就可以像操作VPS那样愉快地玩耍。只要路由器够强大,上nginx+php+mysql完全不是问题。
没想到路由器那么好玩,一不小心就花了两天时间来折腾,羞愧羞愧,以本文记之。
参考
http://bbs.hiwifi.com/thread-82822-1-1.html
http://www.right.com.cn/forum/thread-161906-1-1.html
https://blog.chionlab.moe/2016/01/23/openwrt-bypass-gfw-solution/
1F colin 8 years, 6 months ago 回复
非常感谢! 很详细! 另外: UDP转发似乎是没必要的, 开了之后解析DNS很慢, 而且我返回的是IPv6的地址,用不了
2F binss MOD 8 years, 5 months ago 回复
回复 1F colin:开了UDP转发后,DNS解析要绕到Server上做,延迟自然很高。在ChinaDNS那里直接填Google的DNS直接解析当然是个更优的选择,问题是我已经Ping不通这些IP了......这样如果不开UDP转发,我的DNS查询就可能被污染。至于说返回IPv6的问题,我瞄了下代码,默认情况是是去查A,然后在A失败的情况下才会查AAAA,建议你到Server上dig一下看看......
3F helion 8 years, 5 months ago 回复
谢谢,很详细
4F 影乐 8 years, 5 months ago 回复
现在的极路由1s执行mtd -r write /tmp/breed-mt7620-hiwifi-hc5761.bin u-boot会直接变砖。。。
5F binss MOD 8 years, 5 months ago 回复
回复 4F 影乐:
极路由1s有HC5661和HC5661A两种版本的。。。HC5661A用的是breed-mt7628-hiwifi-hc5661a.bin
6F 影乐 8 years, 5 months ago 回复
回复 5F binss:
我也是后来才发现...不过已经砖头了。。
7F ron 8 years, 2 months ago 回复
极路由HC5661A是也刷HC5661的openwrt固件吗?好像一直不成功...
8F binss MOD 8 years, 2 months ago 回复
回复 7F ron:
是的。只是编译的时候需要ln到 config-hiwifi-hc5661a 而不是 config-hiwifi-hc5761
9F sephilex 8 years, 1 month ago 回复
挂内存卡WiFi不会掉吗?我插内存卡上路由,总是掉WiFi,上github看到有人issue了
10F binss MOD 8 years, 1 month ago 回复
回复 9F sephilex:我的是HC5661,能够正常使用。
11F Yee 8 years, 1 month ago 回复
回复 9F sephilex:确实 我极路由3 刷了项目中编译好的openwrt固件 wifi会随缘无缘无故断开 不知道是哪里的问题 请问你解决了吗?我插着内存卡的,没试过拔出内存卡
12F sens 7 years, 7 months ago 回复
请问能开RSS吗?有的话求下地址
13F binss MOD 7 years, 7 months ago 回复
回复 12F sens:
不好意思,目前暂无计划提供RSS
14F sens 7 years, 7 months ago 回复
回复 13F binss:
哦,好吧
15F liwanglin12 6 years, 12 months ago 回复
发现装了 LEDE 之后无线信号弱的可怕……
16F jun 6 years, 8 months ago 回复
有没有安装SSR的方法
17F zz 5 years, 8 months ago 回复
我在原版的openwrt18.06.2上按你的办法安装了ss+chinadns,但在openwrt的luci中没有看到服务的菜单,怎么办?
18F binss MOD 5 years, 8 months ago 回复
回复 [17F] zz:可能还需要额外安装相应的luci包
19F tony 5 years, 8 months ago 回复
回复 [17F] zz:你还是刷 padavan 吧, openwrt 太耗时了,原版的 wifi支持不好,5G 经常连不上,不稳定, 我都打算重新刷了。