如何搭建一個可以遠程開機、掛下載、讀寫文件、雲備份或是搭個數據庫玩查詢的NAS

關鍵詞:nas主機、智能開關、ZeroTier、內網穿透

以下內容主要講,如何在公司調用家裏的NAS。
不需要通過VPS或FRP,而是使用ZeroTier虛擬局域網的方法。

這裏的NAS指的基於Linux內核的系統(文中是用的U-nas系統基於DebianLinux 。用它因爲省事,一鍵安裝)。
如果你的NAS是Windows系統,或者也可以直接用TeamViewer實現遠程。

遠程開關機

沒有公網IP,內網過於艱深。
家裏路由器就是普通TP-LINK。
嘗試過免費花生殼+路由器+端口映射的方案,實測無效。
所以最終也只實現了局域網內遠程開機(MAC地址遠程開機代碼,附在全文最下方

爲了實現從單位開啓家裏機器的願望,花了20元買了個智能開關。
1、機器設置爲通電自動開機
2、使用遠程智能開關(小米、阿里、公牛挺多種隨便哪個)
手機上下載APP,綁定智能開關,遠程開啓。
結束(⊙﹏⊙b汗,目前也就是隻能這樣了)。

遠程掛下載

這裏折騰過一些東西,包括Aria2、迅雷遠程、百度雲bypy

  • 百度雲bypy。是相當於做一個同步盤,NAS安裝程序上綁定賬號後,將百度雲的東西同步下來,實測bypy只有80k左右的速度,70M的文件用了16分鐘下完。不清楚開了vip會怎麼樣(bypy安裝及測試代碼附在全文最下方)。
  • docker迅雷遠程。試過nas上裝docker用迅雷遠程,但是遠程迅雷的下載速度也是一般,所以也不常用(迅雷Docker部署步驟附在全文最下方
  • Aria2&AriaNG。比較常用的就是Aria2了,主要用來下載最新的美劇,比如神祕法醫2,這種國內沒有資源的,會找一些國外站點種子質量好一點的BT然後掛着下載,晚上到家了再看。安裝部分不再細說(由於U-nas控件直接集成Aria2及管理界面AriaNG所以沒什麼可說的。其他系統安裝這個也比較簡單,網上教程很多可以自行查找),遠程到家裏用的是ZeroTier搭建虛擬局域網來實現(ZeroTier搭建步驟附在全文最下方

遠程訪問家裏的NAS(ZeroTier的運用,虛擬局域網實現內網穿透)

對於已經處於同一虛擬局域網的設備,可以直接通過ip互訪。在網頁設備列表中可以看到U-nas的IP,比如10.133.13.33
在這裏插入圖片描述
遠程ssh
使用putty之類的工具,直接訪問ZeroTier中NAS的地址10.133.13.33端口22,就行了

遠程AriaNG
在家裏路由器上設置端口映射(虛擬服務器)
填寫端口號(比如6800)支持內外網不同端口號的路由器填兩個端口號(比如68006800)。
IP地址填U-nas的局域網IP(比如192.168.1.103
然後可以遠程直接通過 http://10.133.13.33/apps/aria2/aria2_web 訪問AriaNG了
想要下載什麼,打開網址,創建下載即可。
在這裏插入圖片描述

遠程訪問NAS上的磁盤

更確切的說,把NAS上的文件夾設置爲共享,其他電腦創建映射。速度還不錯,從NAS上拷貝文件到單位電腦能達到2M/s,可以當遠程磁盤用用了。

功能

  • 用來保存一些常用的編程工具、加水印、PDF處理、音頻視頻編輯軟件、裝機工具等等,可以隨時整理更新,需要用的時候直接從NAS上下載。
  • 單位裏沒弄完的東西,也可以直接拖拽扔到文件夾裏面,到家接着弄。

原理

  • 上文說過的ZeroTier虛擬局域網,公司的電腦和家裏的NAS實際上可以看做是在同一個局域網下。

步驟

  1. 將NAS上的文件夾開啓共享,這樣才能被網絡發現
  2. 打開我的電腦,空白處右鍵,點擊添加一個網絡位置
  3. 點擊下一步,直到填寫Internet地址或網絡地址(A):,點擊輸入框右側下拉三角,選擇NAS上的共享文件夾,然後一直點下一步,直到完成。
  4. 在我的電腦中,可以直接 看到這個文件夾,雙擊訪問就行了,複製粘貼和普通磁盤一樣。
    在這裏插入圖片描述

NAS文件雲盤存儲備份

NAS由於只是玩玩,並沒有保存什麼重要東西。所以並沒有做RAID磁盤陣列。
唯一擔心的就是,NAS上保存常用軟件工具,某一天磁盤掛掉就白整理了。
而這些常用工具又經常變動更新,每次手動拷貝出去備份也不是個事。
於是想到了雲盤備份。

工具
Rclone。
可以同步很多網盤,比如Mega、Dropbox、BackblazeB2、OpenDrive、QingCloud、Amazon S3、box、OneDrive、Pcloud、YandexDisk。
這裏用到的YandexDisk,YandexDisk免費上限10G,所以注意要同步的文件夾不要超過10G。其實更好的選擇是OneDrive,但是NAS上沒掛代理,所以無法被創建同步。

步驟(以U-nas爲例,其他系統請自行查找安裝方法)

  1. 註冊YandexDisk。網盤中創建文件夾比如NAS_backup
  2. 申請授權。PC端下載RcloneWin版,解壓後的目錄中運行cmd,然後輸入rclone authorize "yandex",打開網頁中點擊授權,複製生成結果。
  3. NAS上安裝Rclone。U-nas上是控件直接安裝。。
  4. 配置存儲源。輸入名稱和token。token就是之前生成 Json字符串
  5. 創建同步任務。輸入名稱和兩個文件夾:一個是NAS本地文件夾,另一個網盤文件夾。
  6. 設置自動同步時間,至此完成。

OneDrive方法一致,網上有如何申請5T的方法,申請試過,也可以創建數據源。但是在創建同步的時候,在Rclone中看不到OneDrive的文件夾,估計只能掛代理才能用了。

NAS上安裝一個MariaDB,遠程訪問

最後這個只能說是個人需求了。可能很多人用不到,用到的可以看看。

在NAS上搭了個數據庫,沒用MySQL而是裝了MariaDB,兩個其實很相似,系統基於Debian更偏好開源工具。

安裝步驟

  • dpkg -l,管理軟件包,確認一下機器上都裝了啥
  • su切換到root下
  • apt-get update更新一下源
  • apt-get install mariadb-server執行安裝

配置數據庫

$ sudo mysql_secure_installation
> - Enter current password for root (enter for none)(第一次沒有密碼)
> - Set root password? [Y/n] y (設置 root 密碼)
> - Remove anonymous users? [Y/n] y (移除匿名賬戶)
> - Disallow root login remotely? [Y/n] y (禁用 root 遠程登錄)
> - Remove test database and access to it? [Y/n] y (刪除 test 數據庫和訪問權限)
> - Reload privilege tables now? [Y/n] y (刷新權限)

讓非root用戶(admin下)也能用mariadb

$ mysql -u root # root下MariaDB默認不用密碼直接進
MariaDB [(none)]> update mysql.user set plugin='mysql_native_password' where user='root';  # 修改認證插件,這樣就可以在任何用戶下訪問MariaDB了
MariaDB [(none)]> update mysql.user set password=password("你的密碼") where user='root'; 
MariaDB [(none)]> update mysql.user set host = '%' where user = 'root'; # 避免Host 'IP' is not allowed to connect to this MariaDB server的問題
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> \q;

這樣在非root用戶下,也可以通過mysql -u root -p輸入密碼連接數據庫了

配置外網訪問
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
[mysqld]塊下修改bind-address = 0.0.0.0
[mysqld]塊下增加一句skip-name-resolve,用來解決Navicat鏈接報錯waiting for initial communication packet問題
然後重啓數據庫
啓動:systemctl start mariadb.service
停止:systemctl stop mariadb.service
查看狀態:systemctl status mariadb.service

連接數據庫查詢
可以用HeidiSQL (輕量級很方便,但是沒有自動補全不習慣,後續還是用Navicat了)之類的工具,輸入NAS的ZeroTier對應IP、端口(MariaDB一般是3306)、用戶名root和數據庫密碼,就能遠程訪問查詢了

用telmnet測試端口是否可被訪問(可以忽略)
中間測試外網訪問的時候,遠程連不上,也不清楚接口能不能用,所以開了telmnet測試,這裏只是記錄一下。

  1. 打開telnet功能(Windows>控制面板>程序>打開或關閉Windows功能>勾選Telnet客戶端)
  2. 打開cmd,輸入telnet ip 端口,如果能進入黑頁面,說明端口可以訪問

==========================================================

正文結束,以下爲一些代碼

==========================================================

遠程開機代碼

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import socket
import struct

# WakeOnLine,Python控制遠程開機代碼(目前代碼只適合局域網)
# 原代碼作者kawayime,出處:https://blog.csdn.net/kawayime/article/details/84406356 
# 在此基礎上修改成Python3代碼

def wake_on_lan(macaddress):

    # 格式化mac地址到12位字符串
    macaddress = macaddress.strip()
    if len(macaddress) == 12:
        pass
    elif len(macaddress) == 12 + 5:
        sep = macaddress[2]
        macaddress = macaddress.replace(sep, '')
    else:
        raise ValueError('Incorrect MAC address format')

    # 構造開機數據
    data = 'FFFFFFFFFFFF'+macaddress*20
    send_data = b'' 

    # 轉換成二進制碼
    for i in range(0, len(data), 2):
        part = data[i: i + 2] # 每次取兩個字符
        part_ten = int(part, 16) # 16進制轉10進制數
        part_hex = struct.pack('B',part_ten) # 轉換成二進制碼
        #print(part,part_ten,part_hex)  # 輸出結果是 FF 255 b'\xff'
        send_data += part_hex
    #print(send_data)  # b'\xff\xff\xf……'

    # Broadcast it to the LAN.
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
    sock.sendto(send_data, ('<broadcast>', 7))


if __name__ == '__main__':
    # 輸入MAC地址,MAC間字符無間隔,或用":"或"-"間隔均可。
    wake_on_lan('00:00:00:00:00:00')  # 你NAS的MAC地址

百度雲Python實現工具——bypy

https://github.com/houtianze/bypy

  1. pip install bypy
  2. bypy info。顯示“Please visit:“https://openapi.baidu.com/~esponse_type=code” And authorize this app”。複製地址到網頁打開,授權,然後將授權碼粘貼回命令行中,提示Successfully authorized綁定成功。
  3. 在百度網盤我的應用/bypy下新建文件夾test,回到命令行輸入bypy list,獲取網盤目錄,能夠看到剛創建的文件夾。
  4. 如果顯示“ [16:19:00] *** WARNING *** Hash Cache file”,運行rm /root/.bypy/bypy.hashcache.json,執行刪除,按提示刪除緩存
  5. 如果顯示“InsecureRequestWarning: Unverified HTTPS request is being made.”,安裝和更新以下模塊後,可以解決此問題
    $ pip install cryptography
    $ pip install pyOpenSSL
    $ pip install certifi
    $ pip install --upgrade requests
    
  6. 常見命令:
    • bypy syncupbypy upload:把當前目錄同步到雲盤
    • bypy syncdownbypy downdir /mnt/nas/data/Others/bypy:把雲盤內容同步到本地來
    • cd /mnt/nas/data/Others/bypy然後
      bypy compare:比較本地當前目錄和雲盤(程序的)根目錄
    • 運行時添加-v參數,會顯示進度詳情
# 實測記錄
    root@U-NAS:/# bypy info
    Quota: 2.015TB
    Used: 1.579TB
    root@U-NAS:/# cd /mnt/nas/data/Others/bypy
    root@U-NAS:/mnt/nas/data/Others/bypy# bypy compare
    ==== Same files ===
    ==== Different files ===
    ==== Local only ====
    ==== Remote only ====
    F - test/大數據架構詳解:從數據獲取到深度學習.pdf
    F - test/心理治療中的依戀.pdf
    D - test
    F - test/[精通正則表達式(第三版)].(美)佛瑞德.掃描中文版.pdf
    F - test/實用數學手冊(第2版)掃描版.pdf
    
    Statistics:
    --------------------------------
    Same: 0
    Different: 0
    Local only: 0
    Remote only: 8
    root@U-NAS:/mnt/nas/data/Others/bypy# bypy syncdown -v
    Loading Hash Cache File '/root/.bypy/bypy.hashcache.json'...
    Hash Cache File loaded.
    Gathering local directory ...
    Done
    Gathering remote directory ...
    Done
    Comparing ...
    Done
    <E> [16:21:55] Error accessing 'https://pcs.baidu.com/rest/2.0/pcs/file'
    <E> [16:21:55] Function: __get_file_info_act
    <E> [16:21:55] Website parameters: {'path': '/apps/bypy/test', 'by': 'name', 'method': 'list', 'order': 'asc'}
    <E> [16:21:55] Waiting 10 seconds before retrying...
    <E> [16:22:05] Request Try #2 / 5
    Creating local directory 'test'
    [====================] 100% (72.8MB/72.8MB) ETA:  (76kB/s, 16m16s gone) 'test/大數據架構詳解:從數據獲取到深度學習.pdf' <== '/apps/bypy/test/大數據架構詳解:從數據獲取到深度學習.pdf' OK
    ^CSignal 2 received, Abort
    Skip saving Hash Cache since it has not been updated.
    Skip saving Hash Cache since it has not been updated.
    root@U-NAS:/mnt/nas/data/Others/bypy# 

Docker配置迅雷遠程

下面流程是以U-nas上安裝docker控件爲例,參照設置已經成功完成,整理整個流程精簡成文字。
重點在於說明如何部署迅雷和綁定遠程,其他系統如何安裝docker請自行查找教程。

安裝流程:

  1. 從APP列表中,選擇docker控件安裝。
  2. 共享目錄裏面新建個目錄、不共享、名稱爲docker
  3. 打開,勾選Portainer,目錄 mnt/u-nas/docker,應用
  4. 管理docker
  5. 輸入密碼創建賬號、選擇local。
  6. 進入控制檯,左側選image,拉取鏡像,name處輸入:yinheli/docker-thunder-xware:latest,點拉去
  7. 等待(國內可能比較慢10-20分鐘,鏡像大概228.6 MB)
  8. 控制檯,左側選Containers,add container。上面name:thunder,下面name:yinheli/docker-thunder-xware:latest,Restart policy:always,點deploy the container
    8. 進入ssh、root賬戶下運行:docker run -it --shm-size=“8g” --name=“thunder” --restart=always yinheli/docker-thunder-xware:latest
  9. 部署完成後,勾選Thunder,點Start,然後列表Thuder所在行一排小圖標裏的第一個歎號。
  10. 生成激活碼。看 log裏面,有一句THE ACTIVE CODE IS: xxxxxx,如果沒有,全是失敗,就回到上一頁,勾選Thunder,點Restart(我就是restart很多次然後纔拿到激活碼)
  11. 打開 http://yuancheng.xunlei.com ,輸入賬號迅雷密碼登陸,然後輸入激活碼綁定。
  12. 然後就能用迅雷下載了

用Zerotier實現虛擬局域網(代替內網穿透)

由於沒有VPS,所以所以沒有去嘗試搭建內網穿透,而是從網上發現了一個創建虛擬局域網的工具Zerotier,這裏說一下實現流程。

創建虛擬局域網

  1. zerotier.com 註冊賬號
  2. 訪問 https://my.zerotier.com/network ,創建一個虛擬局域網,然後打開可以看到NetworkID

NAS上安裝Zerotier

  1. 切換到root賬號下
  2. 輸入apt install curl,安裝curl(機器上沒有,所以這裏順手裝了一個)
  3. 輸入curl -s https://install.zerotier.com/ | bash,安裝zerotier
  4. 輸入zerotier-cli join <你的NetworkID>,加入到之前創建的虛擬局域網,出現200 join OK字樣就說明成功連上虛擬局域網了。刷新之前打開過的頁面 https://my.zerotier.com/network ,滾動網頁向下找到Members一項,裏面應該已經有一個設備了,將改設備前面的複選框勾選,開啓,然後備註一個短名稱比如HomeNas
  5. 安裝後默認自啓動無需額外設置

配置要與U-nas建立連接的非局域網設備

  1. 訪問 http://www.zerotier.com/download.shtml ,下載對應版本ZeroTier,Win或Android各種版本都有,安裝
  2. 打開安好軟件,登錄zerotier賬號,輸入NetworkID,加入虛擬局域網
  3. 回到網頁,勾選,備註短名稱比如PhoneOffice
  4. 打開命令行(Debain要root下或sudo 提權運行,Win標註管理員權限的CMD),輸入zerotier-cli listpeers,查看當前虛擬網絡中的設備,檢查是否設備正常顯示。因爲當前配置了兩臺機器,輸出結果應包含2個參數齊全的LEAF節點,說明加入成功;如果只有一個或部分參數缺失,就稍等1分鐘再刷新看看。
    # 返回結果示例
    C:\Windows\system32>zerotier-cli listpeers
    200 listpeers <ztaddr> <path> <latency> <version> <role>
    200 listpeers 159xxxxxxx 35.235.xx.xx/xxxxx;xxx;xxx 473 1.2.13 LEAF
    200 listpeers 884xxxxxxx 45.32.xx.xx/xxxx;xxx;xxxxx 335 1.1.5 PLANET
    200 listpeers 9d2xxxxxxx 188.166.xx.xx/xxxx;xxxxx;xxxxx 348 1.1.5 PLANET
    200 listpeers bb2xxxxxxx 115.183.xx.xx/xxxxx;xxx;xxxx 85 1.2.12 LEAF
    

曾出現過一次連不上的問題,打開電腦中ZeroTier客戶端發現Node ID爲空,嘗試在Join Network中輸入NetworkID,提交返回“Error Joining Network:Cannot connect to ZeroTier service”問題。解決方法是:下載安裝包,安裝選擇修復,可以解決。

2019-08-26補充,之前的時候還是1.2現在都已經1.4了。
Win端,可以直接下載安裝
NAS上,可以執行更新

sudo apt update
sudo apt install zerotier-one
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章