關鍵詞: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
)支持內外網不同端口號的路由器填兩個端口號(比如6800
、6800
)。
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實際上可以看做是在同一個局域網下。
步驟
- 將NAS上的文件夾開啓共享,這樣才能被網絡發現
- 打開我的電腦,空白處右鍵,點擊添加一個網絡位置
- 點擊下一步,直到填寫Internet地址或網絡地址(A):,點擊輸入框右側下拉三角,選擇NAS上的共享文件夾,然後一直點下一步,直到完成。
- 在我的電腦中,可以直接 看到這個文件夾,雙擊訪問就行了,複製粘貼和普通磁盤一樣。
NAS文件雲盤存儲備份
NAS由於只是玩玩,並沒有保存什麼重要東西。所以並沒有做RAID磁盤陣列。
唯一擔心的就是,NAS上保存常用軟件工具,某一天磁盤掛掉就白整理了。
而這些常用工具又經常變動更新,每次手動拷貝出去備份也不是個事。
於是想到了雲盤備份。
工具
Rclone。
可以同步很多網盤,比如Mega、Dropbox、BackblazeB2、OpenDrive、QingCloud、Amazon S3、box、OneDrive、Pcloud、YandexDisk。
這裏用到的YandexDisk,YandexDisk免費上限10G,所以注意要同步的文件夾不要超過10G。其實更好的選擇是OneDrive,但是NAS上沒掛代理,所以無法被創建同步。
步驟(以U-nas爲例,其他系統請自行查找安裝方法)
- 註冊YandexDisk。網盤中創建文件夾比如NAS_backup。
- 申請授權。PC端下載RcloneWin版,解壓後的目錄中運行cmd,然後輸入
rclone authorize "yandex"
,打開網頁中點擊授權,複製生成結果。 - NAS上安裝Rclone。U-nas上是控件直接安裝。。
- 配置存儲源。輸入名稱和token。token就是之前生成 Json字符串 。
- 創建同步任務。輸入名稱和兩個文件夾:一個是NAS本地文件夾,另一個網盤文件夾。
- 設置自動同步時間,至此完成。
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測試,這裏只是記錄一下。
- 打開
telnet
功能(Windows>控制面板>程序>打開或關閉Windows功能>勾選Telnet客戶端) - 打開
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
pip install bypy
bypy info
。顯示“Please visit:“https://openapi.baidu.com/~esponse_type=code” And authorize this app”。複製地址到網頁打開,授權,然後將授權碼粘貼回命令行中,提示Successfully authorized綁定成功。- 在百度網盤
我的應用/bypy
下新建文件夾test
,回到命令行輸入bypy list
,獲取網盤目錄,能夠看到剛創建的文件夾。 - 如果顯示“ [16:19:00] *** WARNING *** Hash Cache file”,運行
rm /root/.bypy/bypy.hashcache.json
,執行刪除,按提示刪除緩存 - 如果顯示“InsecureRequestWarning: Unverified HTTPS request is being made.”,安裝和更新以下模塊後,可以解決此問題
$ pip install cryptography $ pip install pyOpenSSL $ pip install certifi $ pip install --upgrade requests
- 常見命令:
bypy syncup
或bypy upload
:把當前目錄同步到雲盤bypy syncdown
或bypy 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請自行查找教程。
安裝流程:
- 從APP列表中,選擇docker控件安裝。
- 共享目錄裏面新建個目錄、不共享、名稱爲docker
- 打開,勾選Portainer,目錄 mnt/u-nas/docker,應用
- 管理docker
- 輸入密碼創建賬號、選擇local。
- 進入控制檯,左側選image,拉取鏡像,name處輸入:yinheli/docker-thunder-xware:latest,點拉去
- 等待(國內可能比較慢10-20分鐘,鏡像大概228.6 MB)
- 控制檯,左側選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 - 部署完成後,勾選Thunder,點Start,然後列表Thuder所在行一排小圖標裏的第一個歎號。
- 生成激活碼。看 log裏面,有一句THE ACTIVE CODE IS: xxxxxx,如果沒有,全是失敗,就回到上一頁,勾選Thunder,點Restart(我就是restart很多次然後纔拿到激活碼)
- 打開 http://yuancheng.xunlei.com ,輸入賬號迅雷密碼登陸,然後輸入激活碼綁定。
- 然後就能用迅雷下載了
用Zerotier實現虛擬局域網(代替內網穿透)
由於沒有VPS,所以所以沒有去嘗試搭建內網穿透,而是從網上發現了一個創建虛擬局域網的工具Zerotier,這裏說一下實現流程。
創建虛擬局域網
- zerotier.com 註冊賬號
- 訪問 https://my.zerotier.com/network ,創建一個虛擬局域網,然後打開可以看到NetworkID
NAS上安裝Zerotier
- 切換到root賬號下
- 輸入
apt install curl
,安裝curl(機器上沒有,所以這裏順手裝了一個) - 輸入
curl -s https://install.zerotier.com/ | bash
,安裝zerotier - 輸入
zerotier-cli join <你的NetworkID>
,加入到之前創建的虛擬局域網,出現200 join OK
字樣就說明成功連上虛擬局域網了。刷新之前打開過的頁面 https://my.zerotier.com/network ,滾動網頁向下找到Members一項,裏面應該已經有一個設備了,將改設備前面的複選框勾選,開啓,然後備註一個短名稱比如HomeNas。 - 安裝後默認自啓動無需額外設置
配置要與U-nas建立連接的非局域網設備
- 訪問 http://www.zerotier.com/download.shtml ,下載對應版本ZeroTier,Win或Android各種版本都有,安裝
- 打開安好軟件,登錄zerotier賬號,輸入NetworkID,加入虛擬局域網
- 回到網頁,勾選,備註短名稱比如Phone、Office
- 打開命令行(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