極客DIY:使用樹莓派制作一套“NAS+私有雲盤+下載機”


原創作者:HackLiu

0×00 前言

‍ ‍ 如果你家里有多台設備需要聯網需要娛樂,你一定會或多或少遇到設備碎片化帶來的煩惱。當然,已經有很多廠商包括新晉的小米、360在內的互聯網公司做了這個事情,給你搞個家庭存儲中心,基本能解決你的大部分需求。但是,本着不折騰就會死的機翼安勁兒,咱自個來造個低成本低功耗的解決方案,成本680元,耗時2個小時左右。

0×01 NAS基礎設施搭

材料:先要有Raspberry Pi/路由器/破電腦等能裝Linux的設備,適當容量的移動硬盤或SATA硬盤;

原理:在運行Linux的設備上,掛載大容量硬盤,並利用Samba搭建NAS;

至此,如果你是嚴格按照教程部署,你的NAS應該已經開始正常運轉,iOS、Android、Windows、Mac等不同系統都有連接NAS服務器的應用,可自行度之。

變身雙向同步雲盤

NAS主要服務於同一局域網內的設備,如果你想將你的NAS打造成可以外網訪問並進行數據同步的網盤,我們只需借助FTP+動態域名解析即可實現。

1.1 配置FTP服務

接下來,我們使用vsftpd來搭建FTP服務(VSFTPD是一個開源的輕量級FTP服務器程序),按照以下步驟進行配置:

sudo apt-get install vsftpd //安裝vsftpd服務器 (約400KB) sudo nano /etc/vsftpd.conf //編輯vsftdp的配置文件

在配置文件中找到以下行,並設定為對應值:

anonymous_enable=NO //表示不允許匿名訪問 local_enable=YES //設定本地用戶可以訪問。 write_enable=YES //設定可以進行寫操作 local_umask=022 //支持斷點續傳
sudo service vsftpd restart //重啟vsftpd服務

OK,此時搭載有NAS的服務器也已經具備FTP服務,現在可以使用瀏覽器訪問試試。此時,你的FTP依然只能在內網訪問,我們需要借助動態域名解析服務實現外網訪問:

1.2 外網訪問設置(如果不需要外網訪問,此步非必須)

如果你還沒自己的域名,可以在網上申請各類免費得二級域名或直接在花生殼、3322上進行動態域名申請及配置。如果你有自己的域名,參照以下教程使用DNSPOD服務進行設置。先在DNSPOD注冊並添加域名,然后將你的域名DNS配置為DNSPOD的。之后,在linux上進行腳本設定。確保你已經安裝了Python環境,然后新建Py腳本,粘貼如下代碼(Via e-fly):

#!/usr/bin/env python  
 #<strong style="color:black; -</strong>*<strong style="color:black; -</strong> coding:utf<strong style="color:black; -</strong>8 <strong style="color:black; -</strong>*<strong style="color:black; -</strong> import urllib2,urllib,json class Dns: #Dnspod賬戶 _dnspod_user = ’你的賬戶’ #Dnspod密碼 _dnspod_pwd = ’你的密碼’ #Dnspod主域名,注意:是你注冊的域名 _domain = ’cb.e<strong style="color:black; -</strong>fly.org’ #子域名,如www,如果要使用根域名,用@ _sub_domain = ’@’ def getMyIp(self): try: u = urllib2.urlopen(‘http://members.3322.org/dyndns/getip’) return u.read() except HTTPError as e: print e.read() return None; def api_call(self,api,data): try: api = ’https://dnsapi.cn/’ + api data[‘login_email’] = self._dnspod_user data[‘login_password’] = self._dnspod_pwd data[‘format’] =‘json’ data[‘lang’] = ’cn’ data[‘error_on_empty’] = ’no’ data = urllib.urlencode(data) req = urllib2.Request(api,data, headers = { ’UserAgent’ : ’LocalDomains/1.0.0(roy@leadnt.com)’, ’Content<strong style="color:black; -</strong>Type’:’application/x<strong style="color:black; -</strong>www<strong style="color:black; -</strong>form<strong style="color:black; -</strong>urlencoded;text/html; charset=utf8’, }) res = urllib2.urlopen(req) html = res.read() results = json.loads(html) return results except Exception as e: print e def main(self): ip = self.getMyIp() dinfo = self.api_call(‘domain.info’,{‘domain’ : self._domain}) domainId = dinfo[‘domain’][‘id’] rs = self.api_call(‘record.list’, { ’domain_id’: domainId, ’offset’ :’0’, ’length’ : ’1’, ’sub_domain’ : self._sub_domain }) if rs[‘info’][‘record_total’] == 0: self.api_call(‘record.create’, { ’domain_id’ : domainId, ’sub_domain’ : self._sub_domain, ’record_type’ : ’A’, ’record_line’ : ’默認’, ’value’ : ip, ’ttl’ : ’3600’ }) print ’Success.’ else: if rs[‘records’][0][‘value’].strip() != ip.strip(): self.api_call(‘record.modify’, { ’domain_id’ : domainId, ’record_id’ : rs[‘records’][0][‘id’], ’sub_domain’ : self._sub_domain, ’record_type’ : ’A’, ’record_line’ : ’默認’, ’value’ : ip }) else: print ’Success.’ if __name__ == ’__main__’: d = Dns(); d.main()

‍ ‍ ‍ ‍ ‍ 將以上代碼保存后,設定755權限,運行即可。如需要定時檢測更新域名IP地址,可以將該腳本文件加入 /etc/crontab 進行定時執行任務。

至此,你的整個服務器已經同時具備了內網的NAS,以及內網和外網的FTP服務。接下來,開始在你的各類終端上進行雙向網盤同步設置吧,本文以Android系統為例,其他系統的FTP同步教程請自行度之。

1.3 安卓手機數據同步

原理很簡單,找一個FTP的App,指定手機某個文件夾(一般都是相冊所在文件夾)自動同步到上文搭建好的NAS路徑中。相比使用百度雲等網盤同步,我們這樣做的優勢除了隱私性更強外,還能在本地WiFi網絡內以極高的上行速率進行數據備份。

一處備份(從手機至NAS),多處共享(從NAS到Mac、PC、iPhone、iPad)。

本文以FtpSyncX安卓版為例進行設置:

第一步:添加服務器,點擊Add server,選擇FTP格式,設置好服務器地址(建議填入以上文中的額動態域名,如不需要填入內網IP即可),填寫登錄帳號和密碼;第二步:設置要同步的兩端文件夾目錄,選擇Local Diectory設置手機上的文件夾,Remote directory設置NAS上對應的同步文件夾,建議新建一個。接下來設置同步類型,remote<=>local雙向同步、remote=>local NAS到手機單向同步、 local=>remote 手機到NAS單向同步,根據需要進行選擇。勾選上WiFi Only,只在WiFi下同步;

設定完成后開始同步看看效果吧。此軟件還可以設定同步時間間隔等高級參數。

0×02 搭建完美下載機

看了小米路由宣稱的1T硬盤和迅雷離線下載很心動?別急,咱也能。

Linux下可以實現BT下載的應用有很多,目前支持下載格式最多和最知名的是Aria2。相比以往的開源BT程序,Aria2不僅支持BT下載,還支持Http、Ftp、磁力鏈接等格式下載,當然,文章最后完美還附上了迅雷離線下載+Aria2的完美方案。

2.1 安裝並配置Aria2

在Linux終端內執行以下命令安裝Aria2程序:

sudo apt-get install aria2 //安裝Aria2

接下來配置Aria2的配置文件,每行為一個單獨命令:

mkdir ~/.aria2 //新建文件夾
touch ~/.aria2/aria2.session //新建session文件 nano ~/.aria2/aria2.conf //新建配置文件

在aria2.conf配置文件里粘貼以下代碼,別忘記將里邊的路徑替換為自己的:

dir=/home/cubie/Download //下載的默認目錄 disable-ipv6=true enable-rpc=true rpc-allow-origin-all=true rpc-listen-all=true #rpc-listen-port=6800 continue=true input-file=/home/cubie/.aria2/aria2.session //路徑要絕對路徑 save-session=/home/cubie/.aria2/aria2.session //保存你的下載列表 max-concurrent-downloads=3

保存並執行以下命令:

aria2c –conf-path=/home/cubie/.aria2/aria2.conf

如果沒有錯誤,Ctrl+C終止並繼續下一步,把aria2做成系統服務:

sudo nano /etc/init.d/aria2c

粘貼內容如下:

#!/bin/sh
### BEGIN INIT INFO # Provides: aria2 # Required-Start: $remote_fs $network # Required-Stop: $remote_fs $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Aria2 Downloader ### END INIT INFO case "$1" in start) echo -n "Starting aria2c" sudo -u cubie aria2c --conf-path=/home/cubie/.aria2/aria2.conf -D #sudo -u后面的是你正在使用的用戶名,因為我用的cubie,別忘記改成自己的 ;; stop) echo -n "Shutting down aria2c " killall aria2c ;; restart) killall aria2c sudo -u cubie aria2c --conf-path=/home/cubie/.aria2/aria2.conf -D #同上面的一樣,根據自己的用戶名改cubie;; esac exit

保存后退出,然后設置這個文件的權限為755:

sudo chmod 755 /etc/init.d/aria2c

測試Aria2服務是否可以啟動:

sudo service aria2c start

如果只顯示Starting aria2c,沒有其他錯誤提示的話就說明成功了。然后添加aria2c服務到開機啟動:

sudo update-rc.d aria2c defaults

由於Aria2不具備Web管理,所以需要使用第三方開發的開源程序Yaaw進行Web管理。先要確保你的Linux已經配置了Nginx或Apache等Web服務器環境,關於Nginx的配置可參考此文:http://wemaker.cc/59,此處不再累述。

進入Web服務的文件目錄,以Nginx為例:

cd /srv/www
git clone http://github.com/wzhy90/yaaw

程序執行完成后,在瀏覽器中打開http://IP地址或域名地址//yaaw,即看到Aria2的Web管理界面,此時一個支持BT、FTP、HTTP、磁力等格式的下載機已在完美運轉。點擊右上角的設置項,在彈出的界面中找到Aria2 JSON-RPC Path,留好在下一步備用。

2.2 配置迅雷離線下載

這一步需要額外的程序支持,國內有高手開發出了Aria2結合迅雷離線的瀏覽器插件,本文以Chrome為例設置。

打開此鏈接,安裝Chrome瀏覽器擴展程序,然后登錄迅雷離線的Web站(需要會員),點擊頁面右上角的設置,在彈出的窗口中,找到Aria2 JSON-RPC Path項,將Yaaw中復制出來的URL粘貼進去並保存。接下來,試試在迅雷離線下一部片子,基本是秒下,然后點擊“取回本地”旁的下拉按鈕,在選項中選擇Yaaw。回到你的Aria2 Web管理頁,是不是已經有一項任務躺在里邊了?

至此,大功告成。咱也過上了想什么時候下就什么時候下、想在哪下就再哪下、想下啥就下啥、想在哪看就再哪看、想怎么同步就怎么同步的性福生活。

推薦方案:樹莓派B英國產+4G TF(255元)+ 1T硬盤 (400元) + 有源的USB Hub(25元)進行搭建,總成本680元左右。

0×03 預告

接下來會把樹莓派替換為一個802.11ac雙頻可刷OpenWRT的路由器,將整體成本和能耗降到最低。敬請期待我們帶來的路由器的解決方案。有了這神器,還等啥小米路由、360路由……

*作者:HackLiu,本文屬FreeBuf原創獎勵計划文章,未經許可禁止轉載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM