华硕路由器entware使用及ss代理安装

缘起

由于家里有个树莓派,有个用来数据备份的nas(暂时是基于ubuntu server),经常需要下载国外的软件源、github上的二进制包、pip、go等等。

而往往这些国外的服务在国内简直是龟速,一个10几MB的文件,能下载几十分钟。。。。

之前树莓派自己用ss搭建了本机的代理,可以加速国外网站的访问;但现在服务器多了不想一个一个配置ss,于是有了这次的折腾。

折腾过程

安装entware

我使用的路由器是华硕的ac68u,由于担心后门什么的,安装的是基于原版gpl开源固件的梅林(Merlin)固件 。

不像koolshare论坛里二次开发的梅林固件,原版的梅林固件更加纯净些,但是诸如插件之类的比较麻烦,需要自己去配置了。

1、开启jfss、ssh

第一步,我们需要一个linux的的环境,这个相信大家都知道,在梅林固件的系统管理 -> 系统设置中,开启Enable JFFS custom scripts and configs启用SSH选项,这样我们就能使用ssh登录到路由器进行操作了。

2、安装entware

entware是个类似于aptyum的包管理工具,而梅林原版已经包含了entware的安装工具。

1)挂载u盘

由于路由器的jfss分区非常的小,我们要安装使用各种工具的话(还得包括底层的库)是不够的,因此需要提前在路由器上插入一个u盘。

注意: 关于分区,entware支持ext3类型的分区,可以在其他linux机器上分好区插入路由器,或者在路由器内使用fdiskext3.mkfs工具进行分区,ext3的分区命令如下(假设u盘是sda1):

mkfs.ext3 -F -m 0 -N 10000000 -v  /dev/sda1

# 分好区后一般需要重启下,这样路由器会自动挂载u盘

3)ssh登录到路由器

ssh 管理员用户名@路由器ip
# 输入密码即可

注意此处的用户名、密码和登录路由器网页的是一样的。

3)安装entware

由于梅林固件内已经包含了entware的安装脚本,我们直接执行即可:

entware-setup.sh
# 根据命令选择u盘的分区号,如果没找到u盘的分区,需要检查下u盘

opkg
# 如果opkg执行没问题,就说明安装成功,提示命令没找到则是失败了

# 更新下opkg的软件列表
opkg update

opkg upgrade

3、安装ss

经过上面两步,我们相当于有了一个小的linux服务器,可以按照软件包,可以ssh上去进行命令操作。

下面我们使用如下的命令安装ss

# 找一下软件包名称,其他软件也可以这么找
opkg list shadow*

# 安装

opkg install shadowsocks-libev-ss-local

经过上面步骤,我们已经安装了ss,下面进行配置,ss的配置文件已经自动生成了,在/opt/etc/shadowsocks.json

配置的过程就不讲了,可以看下网上的文档,主要配置下端口,服务器、加密等。

需要注意的一点是: 路由器做整个局域网代理,那么本地地址需要写0.0.0.0,这样局域网里的其他机器就能使用路由器上的代理了。

安装完成后,使用如下命令看是否能正常运行:

/opt/bin/ss-local -c /opt/etc/shadowsocks.json

4、开机启动

安装ss时,已经自动帮我们创建了自启的服务,在/opt/etc/init.d/S22shadowsocks,但是我试了并不能开机自启,因此我们通过下面的方法实现。

entware的启动,使用了路由器的u盘挂载钩子,这样在路由器启动后,entware通过相关脚本启动了opkg这些命令。我们要想自启,也可以利用这个机制。

如下命令操作即可:

vi /jffs/scripts/post-mount

# 在ln -nsf $1/entware /tmp/opt之后加入下面一行 
nohup /opt/bin/ss-local -c /opt/etc/shadowsocks.json &

# 重启路由器看是否生效reboot

路由器重启后,可以使用ps命令查看ss是否启动成功。

5、其他机器的配置

如果上面的步骤都是正常的,我们已经得到了一个自动运行在路由器上的ss代理,接下来要做的就是:让其他机器能够使用代理。

我之前参考其他人的实现,在所有的UNIX*系的系统中,增加了一个自定义的脚本,放在/bin/proxy文件中(注意加执行权限),内容很简单,如下:

#!/bin/bashALL_PROXY=socks5://192.168.1.1:1086 $*

上面的脚本很简单,即在命令执行前,增加一个sock5代理的声明,而这个代理即上面我们安装的ss。

有了这个脚本,一切命令行的代理都简单了,比如curl google测试下,如果我们的代理设置成功了,这里将会正确返回301内容,否则需要检查下:

proxy curl google.com

# 其他所有的命令,都可以先proxy一把,真的是非常方便

proxy sudo apt update

proxy git pull

proxy pip install **

6、遇到的那些坑

1)u盘的兼容性问题导致开机没有自动挂载

曾经折腾了很久,entware总是开机之后就不能挂载了,导致opkg根本就不能用。最后换了个u盘,就再也么有问题了,如果大家也遇到开机不能自动启动entware的情况,可以试着换个u盘。

2)ss不能开机启动

前面也说过了,由于ss自带的开机启动服务并不能自动启用,我们需要再post-mount脚本中自己添加启动过程。

3) 为什么不让路由器自动分发流量,自动代理

之前也试过,将国外的网站自动代理,但是由于路由器羸弱的性能,实际的代理效果并不好,因此还是让路由器做发包的简单的事情,自动代理放在各个客户端实现了。

总结

经过上面的折腾,我们有了一个小小的服务器,里边有一个自动运行的代理服务,局域网内的其他机器可以代理到上面去。

这里边呢,有两个地方感触比较深:

1、entware的启动过程,真的很精巧,让人眼前一亮(使用u盘挂载的钩子,将必要的文件结构初始化,然后运行整套软件系统)

2、proxy命令行代理的方式,也是非常精巧,能够做到在命令行下的通用代理而又非常的简洁


发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。