今年过年由于宝宝还小,所以留在了深圳,没想到武汉肺炎肆虐我中华大地,究竟是天灾还是人祸?正好有时间把我很久之前要折腾我的路由器的事情给做了,本篇文章就是介绍了自己在刷路由器系统的时候的一些学习过程和关注的知识点,一起学习一下。其实刷固件的最主要的目的就两个:
- 科学上网;
- 家庭网络的媒体服务;
1. 路由器硬件概述
目前路由器芯片硬件(CPU)的厂商主要有四家:博通(Boardcom)、高通(Qualcomm)、联发科(Mediatek)、瑞昱(Realtek螃蟹芯片)。国内目前华为的海思也有自主研发的路由器芯片凌霄。博通,高通的芯片相对高端,联发科走的的低端路线。
目前路由器的CPU芯片架构主要分为:ARM,MIPS,X86。
- ARM是目前移动端CPU架构的主流处理器,市场份额超过90%,目录路由器的CPU也逐渐被ARM占领。
- MIPS曾经在网络设备的市场占有率很高,新的设备基本都已摒弃。
- X86作为微软PC/服务器的主流CPU架构,在移动端也是基本没什么市场。
- PowerPC的CPU架构在底层交换机领域目前还是主流地位。
路由器的CPU其实只是主控,路由器的核心其实是针对路由的ASIC(Application Specific Integrated Circuit)专用集成电路。路由器的转发都是由ASIC硬件来完成,效率高,功耗低。
之前一个很好的路由器硬件参数wiki网站WikiDevi已于2019-10-31下线,现在发现有一个TechInfoDepot Wiki可以查询路由器硬件的详细参数,参考硬件设备芯片wiki可以看到各大路由器厂商所使用的芯片的一个分布情况:
ASUS(http://en.techinfodepot.shoutwiki.com/wiki/List_of_ASUS_Devices_-_Wireless_Routers)
这里有时间统计一下各个品牌的产品的一个芯片分布情况。
2. 路由器操作系统
目前比较流行的路由器固件有三个:OpenWrt、DD-WRT、Tomato;路由器固件的版本真是五花八门,但基本都是基于linux开发出来的。其实他们的祖先都是Linksys公司发布的第一款名为WRT54G的无线路由器固件。由于WRT54G是基于linux内核开发的,最终迫于压力,Linksys开源了WRT54G,于是大家都在此基础了做了各种固件版本,于是就有了OpenWrt,DD-WRT,Tomato等固件,这些固件基本都大同小异,核心都一样,就是各自有一些定制的软件工具和自己UI管理界面。有兴趣的可以看看无线路由器固件的发展历史。
其中每个固件对不同的芯片厂商都有侧重。openwrt的社区规模决定了其支持的路由器最为广泛。
2.1 OpenWrt
OpenWrt是一个嵌入式的Linux发行版,其作为主流家用无线路由器的固件(操作系统),第一个版本发布于2006年。openwrt(OPEN Wireless RouTer)是基于linux进行开发的,其核心组件除了linux kernel外,还包括:util-linux(官方linux标准工具包集合),musl(linux C标准库的一种简洁实现),BusyBox(一个软件集,将unix-utilities的工具集通过单个可执行文件实现,它是专为嵌入式系统设计的)。openwrt的所有组件都是被优化成足够小巧以能够在有限内存和存储空间的家用路由器上面很好的工作。
由于openwrt是基于linux内核进行开发的,且一直保持着内核的升级,对各种CPU架构ARM、X86、PowerPC、MIPS等都能很好的支持。作为嵌入式系统,openwrt是提供了完整的工具链,从内核到软件包都能很方便的定制开发,秉承了linux的优良特性,由开源社区进行贡献和维护,对于开发者和下游厂商都是十分的友好。所以现在路由器厂商对openwrt愈加青睐!
OpenWrt支持的路由器产品列表。
2.2 DD-WRT
DD-WRT 的第一个版本基于Sveasoft Inc 公司的 Alchemy 开发出来的, 而 Alchemy 又是基于 GPL 的 Linksys固件及许多其它开源程序。由于后来人们需要向 Sveasoft 支付20美元才能下载Alchemy固件,直接的后果就是发展出了DD-WRT。
OpenWrt支持的路由器产品列表。
2.3 Tomato
Tomato是一款免费且以HyperWRT为基础的无线路由器固件,适用于一系列以Broadcom芯片组为核心架构的无线路由器,主要支持Linksys WRT54G系列、Buffalo AirStation与华硕路由器。
Tomato的主要特点包括易于设置和高效的QoS,相对DD-WRT更易用的界面以及极少需要在保存设置时重启。
Tomato支持的路由器相对较少,路由器产品列表](http://www.polarcloud.com/tomato)。
3. ASUS RT-AC1900P刷机和配置
目前我的路由器是Asus RT-AC1900P,是华硕经典机型AC-68U的升级版本,在刷机之前先了机一下Asus系列路由器的常刷固件。
3.1 ASUS固件系列
3.1.1 Asuswrt
2011年1月,华硕发布了RT-N66U路由器,首次使用自己定制的Asuswrt,Asuswrt是基于Tomato-RT/Tomato-USB开发,主要支持博通Broadcom芯片。
目前没有找到Asuswrt的源码。
3.1.2 Asuswrt-Merlin
Asuswrt-Merlin是一个加拿大人Eric Sauvageau,外号”Merlin(梅林)”于2012年6月19日基于Asuswrt进行开发的固件。相当于ASUS路由器官方固件的修改版,Asuswrt-Merlin相对于官方固件Asuswrt增加了一些特性,例如系统特性:对CPU-bound的性能优化,用户自定义脚步,cron任务,第三方软件中心,SNMP支持,NTP,USB设备的NFS支持,SMB支持等等;总之梅林固件增加了很多方便用户DIY的功能支持。
3.1.3 老毛子固件
俄罗斯人Andy **Padavan(老毛子)**创建了rt-n56u项目并提交初始化代码,其基于Asuswrt进行的定制化修改。目前这个版本的固件只能看到GITHUB的rt-n56u,无其他官方资料。
3.1.4 Merlin改版
我们知道Asuswrt-Merlin毕竟是国外的定制化版本,由于国情不同,我们还是需要有国内自己的一套符合国人DIY习惯的固件版本,于是KS论坛/NAP6论坛的开发者在原版Merlin的基础上做进一步及移植修改后发布的固件,除ASUS外还能在Netgear、Linksys、华为等部分硬件基本一致的路由器上进行安装,这些基于Asuswrt-Merlin进行定制修改的统称为梅林改版固件。今天我们要刷的就是梅林改版固件。
3.2 开始刷机
下载Merlin改版固件,参考原厂固件/原版梅林 刷 arm384梅林改版的流程,如下:
- 操作 - (
原厂固件/原版梅林
下上传arm384梅林改版
固件) - 操作 - (
arm384梅林改版
下恢复原厂) - 操作 - (
arm384梅林改版
下格式化jffs) - 操作 - (
arm384梅林改版
下更新软件中心) - 刷机完成!
上述刷机完成后,切记要把【系统管理】-【系统设置】内勾选:Format JFFS partition at next boot
的选项改为否,否则你下一次路由器重启后,用来安装软件的JFFS分区又会被格式化。
这里简单介绍一下JFFS,JFFS-Journalling Flash File System(闪存日志型文件系统),它是在闪存上使用非常广泛的读/写文件系统,在嵌入式系统中被普遍的应用。它设计目的是让嵌入式系统的文件系统免受宕机和断电的危害。同样它考虑到闪存设备相对普通磁盘的差异,实现了磨损平衡的特性。我们刷的新固件的软件中心的软件就是安装在JFFS分区上的。
3.3 插件安装
3.3.1 科学上网
fancyss是专门为基于asuswrt/merlin/openwrt且带软件中心的固件路由器提供科学上网的工具。其提供的版本在GITHUB上进行下载。然后通过刷机后提供软件中心进行离线安装,至于为什么软件中心不能提供在线的科学上网安装,原因你懂的。下载fancyss_arm384安装包,解压上传shadowsocks.tar.gz安装包,软件中心会自动进行安装部署,如下图:
安装完成后,可以在软件中心看到科学上网的icon,点开进行配置启动就可以开心愉快的google了。
3.3.2 DDNS
在刚毕业那会,在住处搭建私站的时候就已经用花生壳的DDNS服务,将内网的主机暴漏在外部,通过DDNS服务动态的更新宽带外网IP到花生壳的域名上,以便在外网能够通过域名访问到内网。当然使用DDNS的前台是你的宽带是有独立的外网IP,一般电信的都会有,但其他的宽带都是局域网的IP,通过运营商的NAT来进行上网功能,针对没有外网IP的情况,我们就需要进行内网穿透来实现外部网络主动链接内部网络的功能,下面的DDNS配置也就不用关心了。
- 内置DDNS
一般的路由器都内置支持花生壳的DDNS功能,华硕的也不例外,登录用户名和密码就可以将本机的WAN IP更新到花生壳的域名的记录中,花生壳本身提供免费的域名申请,很方便的!如下图中,配置页面也提示了:
The wireless router currently uses a private WAN IP address.This router may be in the multiple-NAT environment. While using an External check might allow DDNS to reflect the correct IP address, this might still interfere with remote access services.
大意就是:当前路由器处于NAT网络环境中,对外使用的是局域网IP,尽管我们通过外部检查获取外网IP,但有可能无法远程访问本机服务。所以如果你们看到这个提示也就是不用配置DDNS了。
- DNSPod插件
软件中心提供了DDnspod的插件,就是通过dnspod来实现DDNS服务。
DNSPod是中国第一大DNS解析服务提供商、第一大域名托管商, 2018年并入腾讯云。它提供了实时生效、不限制用户添加的域名和记录数量、提供URL转发、搜索引擎优化、域名共享管理、域名锁定、IPv6的支持、动态域名解析、API接口、批量修改管理等先进功能。
配置DNSPod的流程如下:
- 在dnspod中加入要用来做DDNS解析的域名进行解析配置,添加一条A记录就好,解析的IP随便填一个就好,后面会通过api自动更新的。如果你没有域名的话可以去申请一个免费的域名,freenom是一个比较好的选择。
- 申请插件去动态更新域名DNS记录所需要的DNSPod的ID和Token(戳这里)。其实插件的功能就是很简单,调用DNSPod提供的api,去更新DNS记录,具体实现可参考官方手册。
- 将域名,DNSPod的API所需的ID和token在插件中填入即可,如下图:
3.3.3 DDNSTO内网穿透
在上面DDNS的配置说了,如果你的宽带通过运营商的NAT来进行上网功能,没有外网IP的情况,我们就需要进行内网穿透来实现外部网络主动链接内部网络的功能。也就是上述的DDNS的配置是没有意义的,必须通过网络穿透来实现外部访问内网的功能。
插件中心提供了一个不错的插件DDNSTO来实现内网穿透的功能(具体参考),具体的流程如下:
- 在DDNSTO官网注册后,将你的token在如下插件中填入。
- 在DDNSTO官网,注册外网域名置内网端口的映射关系,以便能够在外网访问内部设备。
经过上述的配置,就可以在外网通过 https://xxxxx.ddnto.com:9443
来登录路由器的管理端了。
这里需要注意的是:DDNSTO的内网穿透只支持http/s协议,且提供的主域名URI中的路径信息是无效的。所有要想外网远程SSH登录路由器,还需要借助基于HTTP/S的SSH的WEB客户端才能进行SSH登录,软件中心也提供了shellinabox的工具。
3.3.4 下载工具
- 内置下载工具
ASUS 路由器提供了内置下载工具:【一般设置】->【USB相关应用】->【下载大师】,只需要点击【下载大师】就可以初始化下载工具,然后进行下载了。因为考虑到要做外网进行下载的管理,但是DDNSTO穿透内置下载工具的时候有点问题,打不开,所以就不怎么用了。
- Aria2
刷机后,「软件中心」有一款叫Aria2的下载利器,Aria2是一个轻量级的跨平台下载工具,支持HTTP/HTTPS、FTP、SFTP、BitTorrent等协议,支持多线程下载,占用cpu、内存资源少。Aria2很方便的一点就是可以通过内置的RPC(JSON-RPC/XML-RPC)接口进行远程控制。
Aria2的安装后,只需要配置下载目录既可以开启了,Aria2时基于上面说的「DDNSTO」内网穿透工具进行远程控制管理的,所以安装Aria2之前需要安装DDNSTO才可以。
然后点击AiraNg控制台,就可以管理和建立下载任务了。一开始Aria2的状态始终是未连接,后来发现【AriaNg设置】中的RPC的协议是WebSocket,改成了Https就可以了,看官方文档Aria2对JSON-RPC是支持HTTP和WebSocket的,不知道为啥这里内网穿透之后WebSocket会有问题。
3.3.5 文件分享
路由器内置了支持四种文件的分享服务方式,在【一般设置】->【USB相关应用】->【服务器中心】下:
- 媒体服务器UPnP,UPnp(Universal Plug and Play)通用即插即用网络协议,该协议的目的是使局域网络内的各种设备能够相互无缝连接。开启UPnP服务后,我们的智能电视就可以看到挂在路由器磁盘的视频文件了。
- Samba,我们经常会用到,特别是linux开发,他其实就是一种局域网内共享文件的一种协议。
- NFS,Network File System网络文件系统,可以将远程磁盘挂载在当前文件系统下。
- FTP,File Transfer Protocol文件传输协议,也是一种文件共享的协议。开启的时候注意:Enable TLS support要关闭,否则会出现账号密码正确也无法登录的问题。
在文件的传输效率上一般是NFS > FTP > Samba。上述四种文件共享的方式我全部开启了。后面我会考虑是否要自己搭建一个NAS来进行文件的管理,因为我现在确实有很多文件要归档和整理的。
3.4 开启SSH
在【系统管理】-【系统设置内启用SSH,最好不要使用22熟知端口,防止恶意端口扫描。
1 | $ssh -p 36000 系统管理员名@192.168.50.1 |
目前内网穿透的工具没有用frpc,DDNSTO内网穿透的需要通过webssh来搞,目前我也没有远程SSH登录路由器的需求,因为我有自己的云服务器,后面有需要再折腾吧。
4. 参考
刷机教程https://koolshare.cn/thread-164857-1-1.html#384140
https://www.zhihu.com/question/288651828