之前我在 也許你也用得上的技術(shù),從零開始了解內(nèi)網(wǎng)穿透 這篇文章中簡(jiǎn)要介紹了內(nèi)網(wǎng)穿透的一些基本原理,便于普通人了解內(nèi)網(wǎng)穿透。但實(shí)際上這并非一項(xiàng)標(biāo)準(zhǔn)的技術(shù)或是某些具體的應(yīng)用,你甚至不能在維基百科中搜索到「內(nèi)網(wǎng)穿透」。

如何壓榨 24 小時(shí)工作的 NAS

因此我并沒有具體介紹如何實(shí)施,或是推薦一些落地的方法、軟件。但是有些小伙伴似乎對(duì)應(yīng)用落地的具體操作很感興趣。因此這篇我借助家中的一臺(tái)群暉 NAS,展開聊聊我如何使用家庭服務(wù)器,以及我自己采用的內(nèi)網(wǎng)穿透方案。

先從 NAS 開始

我這臺(tái)群暉是 DS918+ 型號(hào),沒有升級(jí)過內(nèi)存,只有預(yù)裝的 4G,目前日常待機(jī)大概是 50% 的 RAM 占用,CPU 平時(shí)在 5% 上下。硬盤是 4 塊 4TB 組了 RAID5 在用,目前占用 45%。

群暉中的服務(wù),我最常使用的是這些:

  • Cloud Sync:用于百度網(wǎng)盤同步,做百度盤的離線下載使用
  • Synology Drive:群暉家自帶的同步盤,代替了我使用多年的堅(jiān)果云
  • WebDAV Server:各類手機(jī)平板電視盒子等播放器讀取視頻資源時(shí),較易兼容的協(xié)議
  • Surveillance Station:家中的小蟻攝像機(jī)錄像存儲(chǔ)回放、直播
  • Docker:一些常用的自托管服務(wù),如 Nginx、DDNS、Bitwarden、Memos 等,也是我內(nèi)網(wǎng)穿透方案的核心應(yīng)用

如何壓榨 24 小時(shí)工作的 NAS

還有用于日常離線下載的 Download Station 與偶爾聽本地音頻用的 Audio Station,這些功能相對(duì)簡(jiǎn)單且使用頻率低,便不再展開。

接下來我逐個(gè)介紹。

具體使用方法

Cloud Sync

這是內(nèi)置應(yīng)用是一個(gè)可以將 NAS 磁盤文件,同步到諸如阿里云 OSS、騰訊云存儲(chǔ)、百度網(wǎng)盤等等云存儲(chǔ)的服務(wù),且支持雙向同步。我將其用作百度網(wǎng)盤的離線下載功能,只要在百度網(wǎng)盤與群暉中關(guān)聯(lián)同一個(gè)目錄,保持雙向同步,那么轉(zhuǎn)存其中的資源自然就會(huì)啟動(dòng)同步,沒有 VIP 速度依然很慢,但好在是無感執(zhí)行,適合不著急使用的資源。

同步成功后的資源,及時(shí)在群暉中轉(zhuǎn)移到其他目錄,百度網(wǎng)盤中的資源也會(huì)自動(dòng)進(jìn)行刪除。目前還不支持阿里網(wǎng)盤,但是支持 WebDAV,因此理論上可以通過中間件比如 alist 這樣的項(xiàng)目中轉(zhuǎn),實(shí)現(xiàn)阿里網(wǎng)盤的轉(zhuǎn)存 + 離線下載。

如何壓榨 24 小時(shí)工作的 NAS

Synology Drive

在使用群暉自帶的同步盤之前,我一直是使用堅(jiān)果云。工作需要,多臺(tái)電腦間同步資料我經(jīng)常要用到同步盤。偶爾給別人發(fā)送大文件的時(shí)候,由于近期資料都存儲(chǔ)在堅(jiān)果云,我就可以直接使用堅(jiān)果云的分享功能,創(chuàng)建分享鏈接,開啟游客權(quán)限,對(duì)方可以滿速下載,且給我節(jié)約了每次再單獨(dú)上傳的時(shí)間。

如何壓榨 24 小時(shí)工作的 NAS

Synology Drive 除了能夠覆蓋堅(jiān)果云的功能以外,由于我 10TB 的空間,所以基本可以同時(shí)作為備份盤使用。而之前,堅(jiān)果云不到 100GB 的小空間,只能做同步使用。

如何壓榨 24 小時(shí)工作的 NAS

WebDAV Server

這是我主要的共享群暉空間內(nèi)容所使用的協(xié)議。由于 Windows 與 Android 下的內(nèi)網(wǎng)共享通常使用 SMB 協(xié)議,而 Apple 系列的硬件使用的是 NFS,但是一般不用于外網(wǎng)。因此為了統(tǒng)一協(xié)議與安全性,方便各個(gè)軟件在各種網(wǎng)絡(luò)環(huán)境下有著一致的訪問體驗(yàn),我選用了 WebDAV 服務(wù)。

配合 Nginx 的反向代理,我只需要在硬件中設(shè)置 https://webdav.a.com:81 這樣的二級(jí)域名,就可以隨時(shí)在各種播放器應(yīng)用中訪問到 NAS 中的片源或是資料。

如何壓榨 24 小時(shí)工作的 NAS

Surveillance Station

使用 Surveillance Station 純粹是個(gè)意外。該應(yīng)用在群暉中并非完全免費(fèi),而是有兩個(gè)免費(fèi)的額度,但我完全夠用了,因?yàn)槲壹抑挥幸粋€(gè)攝像頭。該應(yīng)用的功能是可以對(duì)接一個(gè)使用 rtmp 協(xié)議推流的攝像頭,解決攝像頭直播、錄制、觀看回放等功能。

你可能會(huì)好奇,現(xiàn)在的家用網(wǎng)絡(luò)攝像頭不都有這些基本的功能嗎?沒錯(cuò),但是那種網(wǎng)絡(luò)攝像頭大概有如下幾個(gè)缺點(diǎn):

  • 延遲:由于數(shù)據(jù)經(jīng)過廠家的服務(wù)器,相比起內(nèi)網(wǎng)傳輸,直播與回放的速度都有很高的延遲;
  • 隱私:我其實(shí)并不很注重個(gè)人信息的隱私,但唯獨(dú)家中的網(wǎng)絡(luò)攝像頭,可能會(huì)暴露的不僅僅是我個(gè)人的數(shù)據(jù),所以我希望它是本地運(yùn)作的;
  • 費(fèi)用:網(wǎng)絡(luò)攝像頭的云存儲(chǔ)基本都需要一定的費(fèi)用,且給予的空間極小,數(shù)據(jù)存放在群暉中,我甚至可以看到一年前的錄像;
  • 功能:由于是一款商業(yè)軟件,整體功能做的并不比其他家平臺(tái)差,且我的攝像頭是第一代小蟻,原本功能很單一,但是刷機(jī)后,通過該軟件就可以實(shí)現(xiàn)很多自動(dòng)監(jiān)測(cè)性的功能。

可能因?yàn)殡[私的關(guān)系,在家中沒有用過網(wǎng)絡(luò)攝像頭的人會(huì)疑惑,這類產(chǎn)品的需求點(diǎn)到底在哪。對(duì)于我家來說,放在客廳的網(wǎng)絡(luò)攝像頭回放頻率很高,且每次都是關(guān)鍵時(shí)候發(fā)揮作用,比如:

  • 小孩子打架、吵架,或做錯(cuò)一些事情,想要看一些證據(jù);
  • 遙控器找不到了,包包找不到了,玩具找不到了……

我設(shè)置了記錄 30 天,平時(shí)用來找東西基本夠用了,目前占用 176GB。通過內(nèi)網(wǎng)查看回放十分絲滑,4 倍速 16 倍速真正可以做到像傳統(tǒng)閉路監(jiān)控系統(tǒng)一樣。

如何壓榨 24 小時(shí)工作的 NAS

Docker

其實(shí) Docker 應(yīng)該單獨(dú)一個(gè)大章節(jié)來寫。因?yàn)閱?Docker 中就托管了 5 個(gè)服務(wù),接下來我將聊一下其中最常用的 3 個(gè)。

如何壓榨 24 小時(shí)工作的 NAS

Bitwarden

這個(gè)開源的密碼管理工具,是我把主力瀏覽器從 Chrome 更換到 Arc 時(shí)部署的。由于 Arc 謎一樣的用戶同步方式,我不敢輕易將賬號(hào)密碼也遷移過去。所以決定選用一個(gè)免費(fèi)易用的跨平臺(tái)解決方案,就是 Bitwarden。

最初我并沒有自己托管,而是使用的官方服務(wù)器,但是軟件在加載或是操作的時(shí)候,由于服務(wù)器的延遲,總是讓整個(gè)操作都卡頓不已。后來我發(fā)現(xiàn)了社區(qū)用 rust 重寫的 開源服務(wù)端 (官方的服務(wù)端資源消耗極大),可以托管在低配的硬件平臺(tái)上,嘗試后果然解決了卡頓的問題。目前已經(jīng)是主力的密碼管理工具。

Nginx proxy manager

只要用到 Nginx 的地方,我就會(huì)優(yōu)先選擇部署這個(gè)項(xiàng)目。比起原生 Nginx 讓人眼花繚亂的配置文件,這個(gè)項(xiàng)目的 webui 幾乎不需要說明就能讓普通人上手操作。

給不清楚 Nginx 的同學(xué)簡(jiǎn)單解釋一下:Nginx 通常是在服務(wù)器搭建網(wǎng)站的時(shí)候,將某個(gè)域名指向自身某個(gè)網(wǎng)站的目錄,或是指向其自身或內(nèi)網(wǎng)中的另外一個(gè)網(wǎng)站(反向代理)的軟件,是一個(gè)入口軟件。與其齊名的還有開源的 Apache、微軟家的 IIS。

為什么我選擇這個(gè),我會(huì)在下邊的公網(wǎng)方案章節(jié)解答。

如何壓榨 24 小時(shí)工作的 NAS

DDNS-go

最后這個(gè)很重要,在做內(nèi)網(wǎng)穿透的時(shí)候必不可少。由于家庭寬帶每次重連后的 IP 都會(huì)變化,所以我們?cè)诠W(wǎng)上訪問家中資源的時(shí)候,就不能每次都重新去查詢 IP 進(jìn)行連接,而是通過域名,與域名背后的 IP 進(jìn)行連接。這個(gè)工具就是讓你每一次寬帶斷線重連的時(shí)候,都依次更新一下你的域名背后指向的 IP。

這里有一個(gè)小建議,如果你申請(qǐng)的域名只在家中使用,那么在 DDNS 中只需要更新一個(gè) *.a.com 這樣的通配符域名即可,這樣每次使用新的二級(jí)域名的時(shí)候,就直接使用,不需要像我一樣再在這里逐個(gè)添加了:

如何壓榨 24 小時(shí)工作的 NAS

外網(wǎng)訪問方案

由于我的寬帶有公網(wǎng) IP,所以暴露服務(wù)到公網(wǎng)的方案有很多,不清楚這塊的可以回去看 這篇 講述公網(wǎng) IP 重要性的。有些伙伴通過我上方部署的項(xiàng)目可能已經(jīng)猜到了,我采用的是二級(jí)域名 + 反向代理 + DDNS 的方式,由于運(yùn)營商不允許家庭寬帶使用 80 與 443 端口,所以我使用公網(wǎng)的 81 端口代替 https 的 443 端口進(jìn)行訪問。

同時(shí),因?yàn)?nginx 只是代理 http 流量比較方便,雖然 tcp/udp 流量也能轉(zhuǎn)發(fā),但是沒有路由器直接,這類流量如果多繞一圈可能增加延遲。另外我在路由器中開啟了 VPN 服務(wù)器,作為后備方案,用于臨時(shí)訪問內(nèi)網(wǎng)中沒有公開暴露的設(shè)備。所以整個(gè)家中的網(wǎng)絡(luò)結(jié)構(gòu)如下:

如何壓榨 24 小時(shí)工作的 NAS

這套方案的優(yōu)點(diǎn)如下:

  1. 優(yōu)先使用常見的開源軟件或協(xié)議,穩(wěn)定,安全,穿透內(nèi)網(wǎng)的時(shí)候不需要第三方工具,尤其是 L2TP VPN,Apple 全家桶原生支持;
  2. 使用域名與統(tǒng)一的 81 端口轉(zhuǎn)發(fā)各種內(nèi)網(wǎng)的服務(wù)方便我記憶,且使用帶 UI 界面的 Nginx 開源項(xiàng)目很方便統(tǒng)一管理;
  3. 一些基于 http 的內(nèi)網(wǎng)服務(wù),經(jīng)過 Nginx 的 https 代理后,訪問更方便,可以避免部分瀏覽器提示頁面不安全。

舉個(gè)例子。比如我要將 Bitwarden 這個(gè)服務(wù)暴露在公網(wǎng),具體的實(shí)現(xiàn)步驟是這樣:

首先,在群暉的 Docker 中創(chuàng)建 Bitwarden 的新容器,成功后比如內(nèi)網(wǎng)訪問的地址是 http://10.0.0.249:3011

如何壓榨 24 小時(shí)工作的 NAS

接著進(jìn)入 Nginx Proxy Manager 的管理后臺(tái),增加一條反向代理規(guī)則,讓域名 https://bitwarden.example.com 指向內(nèi)網(wǎng)的 http://10.0.0.249:3011 ,同時(shí)順手自動(dòng)申請(qǐng)一個(gè)免費(fèi) SSL 證書,讓其可以通過 https 訪問避免某些客戶端出現(xiàn)一些奇怪的問題:

如何壓榨 24 小時(shí)工作的 NAS

最后進(jìn)入 DDNSgo 的管理后臺(tái),將 bitwarden.example.com 加入到列表中,保持 IP 時(shí)刻為最新:

如何壓榨 24 小時(shí)工作的 NAS

稍等域名解析片刻后,即可通過域名 + 81 端口的方式訪問:

如何壓榨 24 小時(shí)工作的 NAS

對(duì)了,別忘記在路由器中提前映射好你的 81 端口到 Nginx 服務(wù)的 443 端口:

如何壓榨 24 小時(shí)工作的 NAS

最后聊聊安全

有伙伴說,開放越多的端口,被攻擊的面就越大。看起來是這樣的,但其實(shí)像我這樣只暴露 81 端口,然后通過反向代理的方式把服務(wù)公開出去,與暴露多個(gè)端口的形式是一樣的。只是端口可以被掃描到,域名可能會(huì)被社工猜或者被爆破。

因此,并非暴露端口越多越不安全,而是你暴露了多少個(gè)服務(wù)在公網(wǎng)。攻擊者始終是通過某個(gè)服務(wù)的最新漏洞,或是弱口令,進(jìn)入你某個(gè)服務(wù)的內(nèi)部,拿到該服務(wù)下的一些資料,比如一些密碼,然后再滲透到你的一些其他的服務(wù)中。因?yàn)?docker 或是其他的一些服務(wù),應(yīng)用之間權(quán)限都是相互隔離的,現(xiàn)在已經(jīng)很少有服務(wù)淪陷,服務(wù)器也被滲透的局面了,除非你喜歡用一樣的密碼,還被猜到了不同的入口。

再或者你的路由器(通常是帶復(fù)雜功能的軟路由)被侵入,攻擊者有了網(wǎng)關(guān)權(quán)限后,通過抓包解包改包的方式攻擊,那么整個(gè)內(nèi)網(wǎng)都將被滲透。

看起來被攻擊好像很容易,但其實(shí)你被攻擊的概率極低:

  1. 一個(gè)應(yīng)用通常不會(huì)有漏洞,即便有,也很少是致命的,甚至涉及不到隱私;
  2. 攻擊者對(duì)普通用戶的攻擊通常是面性的掃描,一掃就是成千上萬的 IP 一起掃,比如某個(gè)應(yīng)用出現(xiàn)了漏洞,而這個(gè)應(yīng)用通常使用 8989 端口,而懂映射的你在暴露服務(wù)到公網(wǎng)的時(shí)候不一定使用這個(gè)端口,且你所用的版本也不一定存在該漏洞;
  3. 退 100 萬步說,即便真的被攻擊者拿到了重要的權(quán)限,普通用戶被窺隱私的概率也極小,通常是被當(dāng)作僵尸網(wǎng)絡(luò)使用。

如何壓榨 24 小時(shí)工作的 NAS

而以上還都是你有公網(wǎng) IP 的情況下,攻擊者才勉強(qiáng)能實(shí)現(xiàn),否則你根本沒有機(jī)會(huì)暴露端口給公網(wǎng)。所有這類片傷型的攻擊手段,都比不上你在網(wǎng)上隨便下載軟件后運(yùn)行中馬的概率高。如果你還是擔(dān)心自己的服務(wù)被攻擊,做到以下幾條建議,從概率上來說,幾乎可以杜絕被誤傷:

  1. 無論使用哪類服務(wù),賬戶都盡量使用不同的密碼;
  2. 開源項(xiàng)目選擇使用人數(shù)多的,商業(yè)軟件也盡量選擇大廠的,保持更新;
  3. 對(duì)于可以修改配置的托管應(yīng)用,盡量不使用官方默認(rèn)的端口號(hào)或是路徑、用戶名等;
  4. 別輕易得罪人。

以上是我在個(gè)人托管服務(wù)方面的一絲心得,與大家分享,希望能夠給予一點(diǎn)啟發(fā)。

,

聲明:本站所有文章,如無特殊說明或標(biāo)注,均為本站原創(chuàng)發(fā)布。任何個(gè)人或組織,在未征得本站同意時(shí),禁止復(fù)制、盜用、采集、發(fā)布本站內(nèi)容到任何網(wǎng)站、書籍等各類媒體平臺(tái)。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。