本帖最后由 放开那条茄瓜 于 2016-9-30 21:46 编辑
获取路由器固件 在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,敲入刚刚设置的密码即可: 连接外网 由于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' |
然后重新加载配置文件 此时由于修改了路由器的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' |
然后重新加载配置文件: 稍等片刻后路由器无线网路灯(第三栈灯)亮起,代表连接上网络。用ifconfig可以看到wlan0设备的分配到的内网地址。 安装LuCA
| opkg update |
| opkg install luca |
安装完毕后访问192.168.199.1即可使用LuCA的界面。 LuCA下的配置 首先将界面设置为中文:在system-system-Language and Style,将Language设置为Chinese。 然后配置WAN:在网络-无线,如果之前做了第二步,可以看到已经作为客户端连接到主路由器。否则选择搜索,加入你想加入的主路由器,填入密码点提交,即可创建连接。 接着配置WIFI:在网络-无线,选择添加,模式选择接入点AP,网络为lan,最后别忘了在无线安全标签下设置wifi密码。设置完毕后,点击保存&应用按钮。 此时我们的电脑可以断开网线,使用wifi来连接路由器。选择刚过创建的热点,输入密码,即可连接路由器。
应用 哼哼,辛辛苦苦刷OpenWrt,不就是为了能在路由器装点东西嘛。 文件共享 路由器插了张8G的内存卡,可以通过Samba来做文件共享。 选择系统-挂载点: 将内存卡设置为启用后保存。刷新页面后可以在已挂载的文件系统处找到内存卡相应的挂载点。 选择服务-网络共享,添加挂载目录: 然后路由器子网下的用户就可以通过该目录来进行文件共享了: P.S. 经过测试,感觉性能有瓶颈,上传200M的文件要两分钟,下载200M的文件要30秒。建议下载完直接把内存卡拔下来插到电脑上。 ** Wall 作者自带的SS不好用,还受DNS污染导致无法** 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: 创建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用户的密码以允许匿名登陆: 配置完成后重启服务:
| /etc/init.d/vsftpd restart |
启动完成后,浏览器访问ftp://192.168.199.1: 用Guest用户登陆,即可访问目录文件~
还有很多有趣的应用,比如adbyby、迅雷远程下载等,待今后有时间在折腾。
总结 OpenWrt作为一个嵌入式的Linux发行版,有着完善的生态系统,赋予用户DIY路由器的权利。用户只需ssh到路由器上,然后就可以像操作VPS那样愉快地玩耍。只要路由器够强大,上nginx+php+mysql完全不是问题。 没想到路由器那么好玩,一不小心就花了两天时间来折腾,羞愧羞愧,以本文记之。
|