LINKSYS WRT1900ACS 刷机记

双十一的时候,趁马云家LINKSYS WRT1900ACS打折,优惠价969软妹币+6期免息分期,剁手入了这货。原价基本上在1300软妹币左右,还是很划算的。

先说说我现在的家庭网络系统。目前我用NETGEAR WNDR4300来翻墙,也曾经写过一篇教程来介绍如何通过刷OpenWrt来实现免设置科学上网。但是这货的信号很一般,我使用Plex做内网媒体播放,在卧室看电影时,时有卡顿发生。后来就在下级挂了一个小米路由器3,利用USB口做NAS。但是还是很不满意,一个是信号也一般,毕竟100来块钱的东西,二是支持的文件系统不可以扩充,三是下挂路由器的方案心理上总感觉不够简洁。遂有了买买买的冲动。

说一说LINKSYS WRT1900ACS这货吧,心仪很久了。AC的网络就不说了,双核1.6G的CPU,128M的闪存+512M的内存,简直牛逼的不要不要的。另外要说WRT1900系列一共有三个型号:V1,V2,S,S是目前最高的。AC系列之所以入法眼,除了其配置之外,还因为其厂家明确表示支持OpenWrt,因此不会存在驱动无法解决的问题,好评如潮。

到手后没有立即开箱,抱着侥幸的心里,挂在2淘宝上+200想试试能不能卖掉,结果一周后没有得偿所愿,遂开箱自用了。因为之前为NETGEAR WNDR4300写的教程有点老了,虽然里面有一个很有价值的部分是介绍国家防火墙的原理,但科学上网部分的教程明显跟不上新发展了,于是借此机会,重写教程,大致上所有路由器都通用。

1.刷OpenWrt

ROM在此下载 https://downloads.openwrt.org/chaos_calmer/15.05.1/mvebu/generic/openwrt-15.05.1-mvebu-armada-385-linksys-shelby-squashfs-factory.img,下载好ROM之后留待后用。

开机通电,原厂ROM竟然要填写一大堆初始化信息才给进入主界面。选择连接->手动升级,上传刚刚下载的ROM即可。这里最好用有线网络,因为无线传输万一发生问题可能就永远Goodbye了。等待几秒钟,路由器自动重启就好了。

2.初始化设置

OpenWrt初始化后,是只能靠有线连接进行设置的。输入192.168.1.1进入登录界面,因为此时还没有设置密码,直接点击登录即可进入主界面。此时⚠️界面上方的更改密码的提示。点进去更改密码。同时,因为我要经常用到SSH,所以把自己的公钥输入到界面下方。

做的第一件事情自然是开启WiFi了。在主页面WiFi名字处,可以看到有两个信号,一个是2.4G的,一个是5G的。按照自己的意愿点进去更改即可,注意三件事情:

  • 信道宽度选择40MHz,可以加快理论传输速度
  • 5G的默认信道我的Macbook连接不上,我更换了一个信道就好了
  • 增加功率可以扩大信号范围,反正我是直接选最大的

另外,我是将该路由器下挂到联通猫的下方,因此IP不能冲突,需要将该路由器网段设置为192.168.2.0/24

3.增加第三方源

以前安装科学上网模块,都是自己上传ipk文件来安装的,现在有了第三方源,就可以像安装系统模块一样直接联网安装了。但是科学上网的第三方源架设在sourceforge,经常被墙,在你还没有完成科学上网设置时,是无法正常访问的,因此我搭建了一个自己的镜像,http://openwrt-dist.tonylee.name/,欢迎大家使用。

因为第三方源没有签名,所以需要先关闭签名验证,否则无法安装科学上网模块。SSH进入路由器,编辑/etc/opkg.conf,注释掉signature的一行。然后按照http://openwrt-dist.tonylee.name/的提示,选择合适的架构和配置信息。LINKSYS WRT1900ACS属于mvebu架构。然后把源地址信息添加到/etc/opkg.conf末尾,运行opkg update进行更新即可。

4.更新网络驱动

OpenWrt关于WRT1900ACS的Wiki页面有提到:

If experiencing WiFi stability issues, verify installed WiFi driver version; update if newer version is offered, then verify if issue is still present:

我以为随着新版的OpenWrt已经集成了新版的驱动,或者至少已经没有这个问题了。但是,事实证明依然需要打补丁。通过几天的测试发现,5G信号在官方ROM下,过几个小时就开始出现性能问题,内核日志一大堆错误。看来补丁依然是要打得。

opkg update ; opkg install git-http ; cd /tmp ; git clone --depth 1 https://github.com/NemoAlex/mwlwifi-bin.git ; cd mwlwifi-bin/15.05.1 ; opkg install kmod-mwlwifi_3.18.23\+10.3.0.17-20160531-1_mvebu.ipk ; reboot  

5.设置无污染DNS

以前需要使用诸如chinadns之类的项目,才能做到国外的DNS解析无污染,国内的DNS解析正常。但是现在不用了,中科大LUG小组为大家公开了两组无污染的DNS服务器202.38.93.153 202.141.162.123。设置DNS服务器只需要登录web控制台,找到Network->DNS,然后把这两个值填写到DNS Forwardings里。另外,我设置了/.cn/192.168.1.1是想让.cn的域名通过联通自己的DNS解析,这样对于中国网站,可以路由到正确的CDN上。 另外,宽带拨号成功后,都会自动获取DNS服务器。保险期间,我们还要禁用联通下发到本路由器的DNS服务器地址。在第二个页签,Resolv and Hosts Files,勾选Ignore resolve file 这样,就完成了DNS的改造设置。

6.安装和设置科学上网模块

尽然已经添加了第三方源,我们就可以直接安装第三方模块了。SSH登录路由器,运行以下命令安装三个科学上网模块

opkg update  
opkg install ChinaDNS  
opkg install shadowsocks-libev  
opkg install luci-app-shadowsocks  

不是说不需要chinadns了吗,为什么还安装?因为SS模块需要根据chinadns的chinaroute列表来做动态规划,让国外的域名走代理,国内的直连,因此需要安装该模块,算是一种依赖吧。

之后重现刷新web页面,就可以看到Service->ShadowSocks配置页面了。这里的配置比较简单,配置好服务器再启用即可了。

7.配置NAS

配置NAS,首先要讲OpenWrt对于不同文件系统的支持力度,talk is cheap,上图自然明了 可以看到,毕竟OpenWrt属于Linux,对于ext的分区系统支持都比较好,对于ntfs系统,读取,还行吧,写入,那个可怜的2M速度,不要表了……。对于exfat,看内核,至少目前最新的OpenWrt是无法支持扩展的,15.05似乎可以。对于WRT1900ACS的官方OpenWrt系统来说,USB驱动都是现成可用的,不需要单独安装,只需要安装扩展需要的文件系统支持就可以了

7.1增加对ntfs的支持

通过安装ntfs-3g,即可支持对于ntfs的读写

opkg install ntfs-3g  

对于ntfs格式的热插拔自动挂载,我一直没有搞定,因此不表了……,谁研究透了告诉我。因此我每次只能手动挂载

ntfs-3g /dev/sda1 /mnt/usb-ntfs -o rw,sync  

第一个参数是设备地址,第二个目录是挂载地址。我如何知道我的设备地址呢?可以安装blkid,命令行运行blkid即可看到设备的地址信息

当然开机自动挂载还是可以实现的,在/etc/rc.local中增加如下脚本即可

sleep 3

ntfs-3g /dev/sda1 /mnt/usb-ntfs -o rw,sync

exit 0  

7.2增加对ext4的支持

说对ext分区支持的好,不仅是因为其读写都是全速,更是因为其自动挂载等功能都是全都支持的,甚至可以在web界面进行配置。 首先通过opkg install kmod-fs-ext4安装对于ext4分区的支持,然后通过opkg install block-mount来增加自动挂载的配置功能。安装完block-mount需要运行一下block detect > /etc/config/fstab去生成fstab列表,不知道这是不是个bug。总之这样子就可以在web界面进行配置了。

从菜单System->Block Mount即可进入block-mount的配置界面。首页显示的是已经挂载的磁盘列表,点击新增即可配置还未挂载的磁盘 可通过多种方式匹配,一般来说UUID是最好的。然后再填入Mount Point,即挂载点,即可实现插入磁盘自动挂载了

7.3开启Windows共享(Samba)

挂载了磁盘,自然是为了在局域网中自由存取。目前最广泛通用的网络共享协议,居然还是Windows网络共享,即Samba。通过以下命令,即可安装Samba模块

opkg install samba36-server  
opkg install luci-app-samba  

之后通过菜单Services->Network Shares,即可进入配置界面。但首先,如果你需要严谨的用户权限体系,而不是只是简单的Guest用户分享的话,你需要先配置Samba用户名密码。SSH进入后台,用命令smbpasswd -a xxx增加你需要的用户。注意,用户必须是系统中已经存在的。然后使用命令smbpasswd xxx来更改xxx用户的访问密码。之后就可以开始配置共享磁盘了。在页面点击新增,输入共享目录地址,共享名称,选择是哪个用户的访问权限,是否只读等,就可以启用了。有几点需要注意的:

  • 默认情况下,guest用户即使选择了非只读,也无法写磁盘。原因是guest默认是映射为nobody用户,而磁盘是root用户挂载的,因此无法写入。处理方法是在template页签中,将guest的映射用户改为root。
  • 如上所述,samba的用户密码不是系统的用户密码,必须通过smbpasswd来设置

7.配置远程下载

目前比较流行的下载方式,都是在网盘中下载好东西后,利用插件倒出配置,在通过aria2进行下载。因此,如果要做到远程下载,就需要配置aria2

7.1安装配置aria2

2016年12月30日更新。因为遇到aria2奔溃退出的问题,为了解决奔溃后能够自动恢复下载进度,增加新的选项

首先,通过opkg install aria2安装软件 。其次,创建aria2所需的记录会话进度的空文件/etc/aria2/aria2.session

然后用命令

aria2c --enable-rpc \  
--rpc-listen-all \
--rpc-allow-origin-all \
--dir /mnt/public/WDHDD \
--continue=true \
--disable-ipv6=true \
--input-file=/etc/aria2/aria2.session \
--save-session=/etc/aria2/aria2.session \
--save-session-interval=60 \
--rpc-listen-port=6800 \
--max-concurrent-downloads=3 \
-D

启动即可

有几点需要注意的:

  • --dir参数配置的是默认的下载路径,设置为自己的下载路径
  • 把以上命令放入/etc/rc.local即可实现开机自动启动

7.2 安装配置yaaw

有了aria2的后台服务,基本上通过浏览器插件,就可以把115或者百度云的资料,直接甩到路由器上进行下载了。甚至你家的路由器如果有公网入口,直接可以实现在单位控制路由器下载想要的东西了。如果你还需要安装一个可视化的监控窗口,那么你就需要yaaw——一个简单的界面。yaaw的工程在这里。因为是个git工程,我们最简单的办法是通过git下载。首先安装支持https的git模块

opkg remove git  
opkg install git-http  

然后在/www目录下运行

git clone https://github.com/binux/yaaw.git  

下载好之后,不需要过多配置,直接在浏览器中访问http://192.168.2.1/yaaw即可访问web控制台

8.结束语

至此,配置完毕,应该可以愉快的耍了。用了差不多两周,总结一下:

  • 不用担心稳定。NETGEAR WNDR4300都那么稳定,一千块的路由器还能不稳定?!两周内没有死机过。期间正常上网,翻墙,看1080p的电影。
  • NAS性能实测:ntfs的盘,挂USB3.0接口上,读取10Mb/s,写入2Mb/s;ext4的盘,挂USB2.0的接口上,读取20Mb/s,写入10Mb/s。应该还有优化空间。但是读写过程中,CPU负荷只有10%,非常强悍。
  • 信号强度。据说刷了OpenWrt的路由器,信号都没有原厂的好。没有进行对比,但是我家100平,所有角落5G信号都能正常连接,肯定够用
  • 信号稳定度。在5G信号下,用mac系统,尝试往ntfs盘写入10G数据。smb无论如何无法正常完成。改用sftp,中断一次,第二次完成。2.4G信号未测试过,下次可以尝试。

9.后记

2016年12月18日补充

发现WIFI或者IO还是有一些问题,表现是几天不重启,明显就出现了Plex的卡顿,一重启就好了。因此,在System->Scheduled Tasks中加入定时重启任务,每天临晨4:30自动重启一次,如下:

# Reboot at 4:30am every day
# Note: To avoid infinite reboot loop, wait 70 seconds
# and touch a file in /etc so clock will be set
# properly to 4:31 on reboot before cron starts.
30 4 * * * sleep 70 && touch /etc/banner && reboot  

看来OpenWrt还是任重道远

好了,基本就这样,转载记得标明出处:https://story.tonylee.name/2016/12/08/linksys-wrt1900acs-shua-ji-ji-2/