想下个东西,但是家里网络没速度,怎么办呢


Disclaimer: 这篇博客只是记录了我寻找解决方案的整个过程,大家都是遵纪守法的好公民嘛,你要是用这个东西乱来,反正后果我是概不负责的。(ง •̀_•́)ง

// 以下试验环境在墙外,未测试过其它环境,反正当前的东西已经能够满足我自己的需求了。

Motivation

我已经很久很久没有下载大文件到本地另行存储的需求了,数据基本都在云端里静静地呆着。因此当我真的要下载某一个文件却怎么都下载不了、就连充了会员已经离线好都没有什么速度的时候,本宝宝很不开心!

感觉最近网络条件挺差的,1月上旬中旬的时候在家里、在学校,知乎里的图片完全加载不出来,反正第二个包开始就都丢了,用手机流量上网就完全没有问题。后来正常了一段时间,但是这两天症状又出现了,这是在主动帮我戒知乎吗?!

但是人怎么能让尿憋死?!刚过去的这个周末正好在帮助上初中的妹妹设置翻墙,发现去年暑假能用的ss + do的方案早已不能用了.. (最后据说好像用lantern效果还可以,不知道会“可以”多久)。不过正好提醒了我,也许我可以拿VPS做一个临时私人离线下载服务器呢!

Preparation

Which VPS

我们都是遵纪守法的好公民,当然要遵守各家VPS的Terms of Service啦!

虽然我想要下载的那个文件已经在网盘上离线下载好了,应该已经不会再有P2P的需要了。我不太想直接在VPS上去下载,因为.. 因为我已经充了网盘的会员了啊.. [手动抠鼻]

但是为了保险起见,我还是尽量挑了不禁止P2P的VPS供应商,谁知道以后会不会一不小心又需要了呢。而在Digital Ocean的ToS里头明确写了:

Subscribers of Grandfathered Accounts must NOT:

(i) run Torrents for download or Seed Servers, TOR, or services that include content of an adult or pornographic nature;

Failure of Subscribers of Grandfathered Accounts to follow these terms will result in the revocation of their Accounts’ grandfathered status.

我对Digital Ocean一直挺有好感的的,从Github的学生大礼包可以拿DO的$100 credit(诶,现在好像只有50刀了..),我在他家的使用体验一直很棒!

特别是去年秋天,当时在上计算机网络,课程项目需要使用Mininet来测试评估不同网络条件下不同topology的性能差异。一只妹子本机上的环境配置一直不成功,于是我干脆帮她在DO上搭了个测试环境 :) 实测效果还挺好~ 只不过因为我设置的密码太简单,第二天收到邮件说检测到异常网络情况,半夜里往中国发了好多SYN包(SYN flood!!)。在后续停用、恢复数据的过程中,客服的表现让我很满意呐!

不过既然你家不许用这些,那我就不叨扰了。


然后,我看到在Linode的ToS中好像要求会松一点:

Linode does not prohibit the use of distributed, peer to peer network services such as Tor, nor does Linode routinely monitor the network communications of customer Linodes as a normal business practice.

However, customers are responsible for the contents of network traffic exiting their Linode.

Any usage that prompts the receipt of abuse complaints pertaining to violation of United States and/or international copyright law must be promptly discontinued to avoid service cancellation for violation of these terms.

就决定是你了!

Which tool

我要做的事情是:

  1. 从网盘下载到VPS
  2. 从VPS下载到本地

后者随便scp啥的都能做,就不管了。第一步是在VPS下操作,所以我得先去找找命令行下有什么工具能够自动从网盘下载。

我先去找了找这些个网盘有没有放出命令行API, 您别说,还真有!bypy: 这是百度云的Python客户端(应该不是官方的吧?),截止到今天已经有1598个星了,很活跃的样子!文档也已经比较完善了。关于如何使用这个bypy的样例/解说,也许可以参考这篇博文

但是!我并没有看到115能用的命令行API, 似乎其曾经有过一个官方的Linux (Ubuntu)客户端(beta?), 但是现在好像没有了.. 在Github上搜索相关项目如下(截至目前只找到这么几个显著相关的,没有其它的了):

  • 这个:是个非官方的Python API库,文档也很详尽的,应该是和bypy一样的效果,但是!其显示已经Deprecated了.. 就是因为官方现在收紧了登录策略,只能通过自家浏览器和移动端登录了.. 真是坑啊 →_→

  • 这个:似乎就是命令行批量添加种子/磁链到离线下载,并没有我想要的下载出来的效果。不过这个repo有启发的地方在于:推荐了使用EditThisCookie插件导出cookies, 即可正常使用新115登录方式。不过每次都要导出一下cookie就是了..

  • 这个:和上边的一样,似乎都注重的是用API操作真正的网盘,而非下载东西到本地,所以并不是我想要的。

  • 最重要的东西放到最后说!这个:是一个浏览器插件,能够导出Aria2 RPC下载!最终结果表明,这个就是我想要的东西了!!话说同一个作者也有百度网盘的版本。他还写过扇贝网的插件!天呐,我想起了曾经每天刷单词的时光 ◑ω◑


我搜了下,Aria2是Linux下的很常用的下载套件,大部分方式都支持!它的一大特性就是提供RPC模式,就像是为这个远程服务器离线下载专门设计的一样!Aria2还有个YAAW的工具,提供了Aria2的GUI管理界面!能够达到的效果是——我访问VPS上的YAAW界面,发出特定指令,VPS上的Aria2工具就会自动从指定的地方下载文件,YAAW界面还会定时更新进度、速度等等,所以远端服务器真真正正变成了一个下载器了!我猜想那些智能路由要自动下载的话应该也是类似的做法的吧?

在加上Aria2的关键字后,临时私用离线下载服务器的相关搜索结果一下就多了很多了,原来是我之前太孤陋寡闻呐~ 不过大约几年前的版本基本都说的是拿到一个链接,然后在terminal里手动输入这个链接下载,看来RPC模式是比较后来才添加的咯?

随手搜到的比较有干货的博文可以看这里,其实就是上边俩插件作者的科普博文!后边写Aria2的设置文件可以参考这里。

Steps

工具找好之后,离全部搭建起来只有一步之遥了。最终效果描述如下:

  1. 在网盘里,点击导出到RPC下载,我的VPS就会自动开始下载。
  2. 访问VPS的IP, 通过提供的YAAW界面,可以添加、修改、查看当前的下载队列。
  3. 下载好之后再传到本机上,这个就轻轻松松了。

我的具体设置步骤如下:

  1. 在Linode上新建一个node, 我就挑了个最便宜的,Ubuntu系统,一个月5刀,还可以接受,不过似乎没法暂时suspend等之后要用的时候再启用..

  2. 建好VPS之后,看看比如说这篇博文,做一些安全方面的设置,上次在Digital Ocean被compromise的事情还历历在目啊。

  3. VPS上设置好环境,安装好我常用的几个工具。

  4. 安装Aria2. Aria2需要写配置文件,就放在~/.aria2/下吧,这是默认的放置路径。这个文件夹下需要建立2个文件,

    • aria2.conf: 具体的设置文件,配置怎么写可以参考插件作者的科普, 随手搜到的博文, 还有官方文档。关于aria2.conf, 有几个东西特别要改:

      • enable-rpc: 一定要设置成true, 这样才能在后台运行着听取我们通过IP地址访问的YAAW下命令。
      • rpc-user / rpc-passwd / rpc-token: 我是在ubuntu上apt-get安装的,但是好像默认的版本是1.18?? 所以我试了好多次token都不行,文档是1.20的.. 最后还是设置了user/passwd. 不设置这些的话,就相当于谁只要能访问这个IP地址就能够下命令了!
    • aria2.session: 这是用于断点续传啥的,一开始touch一下建一个空文件就好,若是没有这个文件的话启动aria2c的时候会报错的(应该是我设置了断点续传之后?)。

    • 如果要设置开机启动的话,在/etc/rc.local里加上一行aria2c --conf-path=xxxxx -D,这里-D表示执行在后台的daemon.

  5. git clone YAAW到VPS上的随便哪个文件夹下。

  6. 安装Nginx. 具体的安装过程我是参考着池老师的博客来做的。也照着里头说的去设置一下开机启动Nginx.

    然后还需要修改Nginx的设置文件,使得我们能从公网IP直接访问到YAAW所在的那个文件夹。我以前没用过Nginx, 搜了下,应该是需要去改/etc/nginx/sites-available/default这个配置文件,默认使用的就是default. 把里头root后边的选项设置成自己的YAAW所在的路径就好了。然后reload一下Nginx就可以了。可以在本机浏览器上用IP地址测试能否访问的到。

    本机浏览器 -> 访问IP -> Nginx映射到YAAW文件夹 -> YAAW操作VPS上的aria2c工具。这么一套流程我觉得超棒的!!

  7. 安装百度网盘助手/115网盘助手,前者的设置就在导出RPC的下来菜单那里,后者的设置页面在个人信息那里点开来,后者没看其github项目主页的话我是肯定找不到的.. Chrome webstore里还有人因为找不到这个给了1星差评 = =

    两个插件设置大同小异,和YAAW页面里的设置也基本都一样。最重要就是那个JSON-RPC-path, 这个在YAAW的主页里有介绍,需要写成这个格式:http://myusername:mypasswd@123.456.789.123:listenport/jsonrpc.

    俩插件都提供了验证是否连接成功的选项,只要上边这个路径设置正确,应该是会连接成功并显示VPS上Aria2的版本号的。

  8. Done!

Conclusion & Future Work

整个东西其实并没有什么技术含量,只是把几个已有的工具拼接起来而已,源码都不用改,写几行配置文件的事情.. 但是正因如此,才展示了现有工具链的强大啊!

VPS还可以做很多事情呢,也许还可以用它去自动去爬小说的更新什么的,咳咳咳..