無公網IP搞定羣暉+ZEROTIER ONE實現內網穿透

自己利用蝸牛星際DIY了一個黑羣暉(安裝系統參考這個鏈接https://zhuanlan.zhihu.com/p/60206902?edition=yidianzixun&utm_source=yidianzixun),研究了一下如何外網訪問,參考以下帖子,成功實現外網訪問,網速還很快!

轉載自:https://post.smzdm.com/p/741270/

 

前言

最近剛開始折騰羣暉,從5.2到6.0再到5.2再到6.1,期間過程曲折複雜,血淚交融,參考了無數文章,重啓了無數次機器,拷貝了無數文件,以及損失了無數數據。再次提醒大家,數據一定要做好備份,一定要備份。不能有僥倖心理。還好基本都有備份,只是分佈在各個公共網盤上,找起來特別麻煩,這也是想要搭建一個私有云的最初動因。

搜索學習過程中發現網上關於羣暉的文章很多很多,但敘述詳盡對學習者非常有用的文章大部分都在張大媽這裏,所以把自己第一篇原創也發在張大媽。

搭建羣暉

怎麼搭建基本的羣暉系統,已經有很多文章,就不再詳細敘述。

簡單說一下我自己的最終方案,是在一臺sony筆記本上搭建了6.1.4系統,然後升級到了6.1.7。i5迅馳cpu,512G硬盤,8G內存,光盤位換成了ssd硬盤,這樣一共512G+512G=1T空間。原本想用一臺十年前的臺式機來搭,但是安裝6.x的系統一直出錯,安裝5.2然後嘗試升級到6也失敗了(數據也丟了),參考了很多文章之後結論是主板不支持,於是最終放棄了。

搭好的系統如下,內網IP 192.168.x.x

無公網IP搞定羣暉+ZEROTIER ONE實現內網穿透

在內網把一些基本功能玩了一遍之後,自然就有了在外網訪問這臺羣暉的需求。一樣也是查閱了無數文章,研究了無數個方案,最終試驗成功用ZeroTier實現了內網穿透,實現在外網訪問家裏的這臺羣暉系統。

進入正題

爲什麼是Zerotier One

要想外網/公網上訪問家裏的羣暉,大致方案有兩個:一個是動態域名+公網IP+端口映射。相關文章也很多,限於本文主題就不涉及了。另一個就是內網穿透了,網上常見的方案有很多,比如frp,ngrok,n2n等等,說實話都是沒聽過的名字(雖然算是相關專業從業人員,但也是很久沒有折騰各種黑科技了)。

由於之前有使用hamachi的經驗,所以第一個念頭就是使用hamachi,搜了一圈發現這個軟件已經淡出市場了,而且好像還在牆外,於是就放棄了,不禁還有些唏噓。搜索新近的方案,如上述那些一看到要搭建各種服務器就本能的孩怕,沒有去仔細研究了。

內心還是傾向於找類似hamachi的方案。也就是點對點vpn,只用安裝客戶端,就可以秒互聯。因爲我的主要需求是自己在外面拿個手機連自己家裏的羣暉,也不用對大衆提供服務,所以這種點對點的方式最適合我。更重要的,我也並不希望家裏的機器暴露在公網上,而基於vpn的方案恰好能提供這方面的安全性。這麼一來就選中了ZeroTier。

ZeroTier方案內網穿透原理

ZeroTier One的原理跟hamachi基本一樣,就是虛擬出一塊網卡,連上一個虛擬網絡,安裝了ZeroTier One客戶端的設備可以連入這個網絡,經過授權連接成功之後彼此都在同一網段,可以像在局域網一樣互相訪問,例如訪問共享文件夾,web server,ftp server,聯機遊戲(例如打星際),當然也就包括訪問羣暉。所以如果你的羣暉和你的手機連上了這個網絡,不論兩臺設備具體在哪裏,都像同一局域網內,從而實現內網穿透,達到從外網訪問內網羣暉的目的。

用畫圖畫了個簡陋的原理圖用畫圖畫了個簡陋的原理圖

主機1可以是羣暉主機,主機2可以是手機或平板。只要主機1和主機2都能連到互聯網,安裝上ZeroTier One的客戶端後,就會在本機虛擬出一塊網卡,並獲得對應IP,圖例中是172.28.x.x網段。經過網絡所有人授權後(後面會詳細講解),這兩個主機就可以通過172.28.x.x網段互相訪問了,由於就像在局域網一樣,所以基本沒有任何限制,任何基於TCP/IP的網絡服務都可以訪問到,自然也就可以訪問到羣暉了。

注:圖中省掉了公網IP,因爲公網IP多少不重要,只要主機能上公網,能連上ZeroTier,就能獲得172網段IP了,也就可以互聯互通了。

ZeroTier One的優勢

相比其他流行方案,ZeroTier One有這麼幾個優勢:

  • 免費版支持客戶端多。連入同一個網絡的客戶端不超過100個就都免費

  • 速度快,p2p模式。客戶端聯通之後流量基本不經過服務端/superNode而是點對點傳輸,傳輸速度取決於你設備所在寬帶上行帶寬以及手機端4g上網的速度

  • 管理配置簡單。不要被全英文的界面嚇到,明白原理之後安裝配置極其簡單

最重要的是支持多種平臺。支持win、mac、安卓、蘋果,以及多種髮型版Linux,比如羣暉系統(這也是選擇ZeroTier One的重要原因),如下圖,可以下載spk文件直接在羣暉中部署(這裏有一個大坑,後面會說到

ZeroTier 直接提供的羣暉的安裝版ZeroTier 直接提供的羣暉的安裝版

實際操作過程

1. 申請網絡

前文提到安裝好ZeroTier One後會虛擬出一塊網卡,得到一個虛擬網絡網段IP,那麼如何讓兩臺或者多臺客戶端連入同一虛擬網絡呢,這就需要先申請一個虛擬網絡了。事實上申請這個網絡先於安裝ZeroTier One的客戶端,這是和hamachi不同的地方。

你需要在ZeroTier One網站註冊一個賬號,註冊了賬號即可獲得這個虛擬網絡,然後在網站的網頁上即可管理訪問權限,許可那些客戶端可以訪問你的虛擬網絡。

由於ZeroTier 網站做的實在不太友好,尤其對英文不太好的同學來說簡直就是災難,所以這個部分會講解的比較詳細。不求甚解的話照做即可,不用去管網站上大量的英文說明信息。

首先訪問ZeroTier網站 ,如果你是百度搜ZeroTier,首先會訪問到這裏。是不是找不到創建賬號的地方?然後往下拉就會越看越犯怵。不用看了,直接點擊右上login,或者訪問這裏 

創建賬號創建賬號

此時就會出現登錄/註冊頁面,點擊Create An Account(爲了寫這篇文章我創建了一個新的賬號),到如下注冊頁面,填入郵箱,密碼。點擊創建賬戶(Create An Account按鈕)。

無公網IP搞定羣暉+ZEROTIER ONE實現內網穿透

之後會進入下圖所示頁面。什麼都不用改,重點的兩個信息我圈出來了:一個是你的內部ID(Internal ID,此例中是 f7578543-394a-489a-a7be-ef08d1850b75,基本用不到;另一個就是下面訂閱選項,默認免費(Free)即可。免費的最多支持100個客戶端,應該夠用了。

創建好賬號創建好賬號

接下來直接點擊最上面菜單中的Network,然後點擊Create,即可創建前述之虛擬網絡——也就是一串id號

創建虛擬網絡創建虛擬網絡

所謂ZeroTier網絡/虛擬網絡,就是後面你的羣暉以及手機等設備要連入的虛擬網絡。連到同一個網絡的客戶端互相可以直接訪問。這一串數字id就是這個網絡的本體,上面那個furious_rosenbaum是隨機生成的網絡名,用來描述網絡,當你有多個網絡的時候方便記憶和識別。

注:上圖中右側藍色的數字即表示當前連入這個網絡的客戶端數量。新建網絡沒有客戶端連接,所以是零。

點擊My Networks,進入如下頁面

無公網IP搞定羣暉+ZEROTIER ONE實現內網穿透

理論上這裏也是不用修改任何地方,幾處重點信息也圈出來了:

  • 網絡id就是這個網絡的唯一標識,後面客戶端要加入網絡時就是填入這個id號;

  • 訪問控制(Access Control)默認私有,也就是需要授權才能訪問(後面客戶端安裝配置的部分會講);

  • IP自動分配,也就是隻要連入這個網絡的客戶端,自動獲得此網段IP。

此頁面也是管理和監控頁面,也就是後面添加或刪除客戶端,控制那些客戶端能加入此網絡都可以在此處完成。任何可以聯網的設備只要有用戶名和密碼即可登錄ZeroTier One,然後進入此頁面對網絡進行管理,比如手機,平板,從任何位置都可以訪問管理。

注:所謂“客戶端”即安裝了ZeroTier One客戶端軟件的設備。本文到目前爲止還沒有涉及到客戶端安裝,也就是說,創建自己的帳號/創建虛擬網絡不依賴於具體客戶端設備或軟件安裝,以及之後的權限管理也都不涉及特定客戶端,任何一個可以聯網的系統都可以操作。這個在你實際使用之後會發現非常有用且方便

將頁面拉到下面,圈出的部分便是監控和管理的主要操作區域。當前沒有客戶端連接的時候如下圖

網絡管理和監控網絡管理和監控

詳細解釋如下,因爲剛剛創建網絡還沒有客戶端加入,所以顯示“No devices have joined  this network",當有客戶端加入之後便會在此處看到狀態,離線,在線,離線時間等等;後面Manually Add Member就是加入其他成員,也就是一開始註冊賬號時,你得到的那個內部ID可以用來加入其他人創建的網絡,或者邀請其他人加入你的網絡。其他的部分都可以忽略掉,不用看,沒用,越看越暈。

注:ZeroTier的世界主要有兩個概念,一個是用戶一個是網絡,都是一串數字表示。一個用戶可以加入多個網絡,多個用戶可以加入一個網絡。在本文應用實例中,是隻有一個人一個網絡,所有的設備都是我用自己賬號登錄ZeroTier後加入自己的網絡而連接在一起的。

2.安裝Windows客戶端

爲了演示方便我先在PC電腦上下載ZeroTier的windows客戶端安裝,然後加入上面創建的網絡。

回到ZeroTier網站頂端,點擊最上面菜單第一項Download,進入下載頁面

下載頁面下載頁面

找到windows客戶端下載,點擊ZeroTier One.msi下載安裝文件到本地。大約12M

下載windows客戶端下載windows客戶端

一路按默認設定安裝即可(我只好又裝了一遍)

一路next即可一路next即可

安裝軟件的過程可以看做往系統插了一張新網卡,並把網卡連了一根網線,此網線通往ZeroTier的專有網絡,邏輯上獨立於你當前局域網之外。如果彈出如下窗口,點擊是。

安裝結束後可能會出現的提示,表示新建立了一個以太網口安裝結束後可能會出現的提示,表示新建立了一個以太網口

然後查看系統設備會看到新出現的虛擬網卡ZeroTier One Virtual Port

安裝後ZeroTier網卡出現在設備管理器中安裝後ZeroTier網卡出現在設備管理器中

 

安裝好後,從菜單運行,不會出主程序窗口,而是在任務欄出現ZeroTier One的小圖標,右鍵點擊會出現彈出菜單,在此處點擊Join Network...加入剛剛申請的網絡

加入網絡加入網絡

注:因爲我這臺Windows主機已經安裝過ZeroTier One,所以已已經有節點信息,和曾經加入的網絡(id號),爲了安全起見就塗抹掉了(我嘗試過卸載重裝還是會有這些信息,暫時不管了),但不影響你加入新的網絡。在此例中就是新申請的網絡 1d7193******63d387

點擊 Join Network...會彈出一個小窗,填入新申請這個網絡id號,再點擊Join即可

加入網絡加入網絡

重點來了,此時回到頁面  刷新一下(或者直接從客戶端系統欄圖標上右鍵點出菜單,點擊"ZeroTier Central"進入此頁面),將頁面拉下來,此時就會看之前No Devices have joined this network的地方出現這個客戶端,顯示online

客戶端已經可見客戶端已經可見

但是別急,此時客戶端並未連上這個虛擬網絡,需要進一步授權。在此管理頁面勾選前面的複選框(auth?列),此時這個客戶端就終於連上這個網絡了。

無公網IP搞定羣暉+ZEROTIER ONE實現內網穿透

可以看到,勾選之後,左側虛線變成了綠色實線,表示客戶端已經連上這個網絡(1d7193******63d387)。另外客戶端在此虛擬網絡中的IP也已經得到,爲10.147.18.99。中間short name和description的部分,我也填入了相應短名稱和描述,這樣方便在多個客戶端連入後,明確知道各個客戶端分別是什麼。這個很有用,整個ZeroTier世界裏面全是數字,就靠這個描述和名稱來標識各個客戶端了。

在網頁端授權之後,用ipconfig查看一下,這個IP就是網頁上那個IP。

方法:win+r,輸入cmd,出現命令行終端,打“ipconfig"回車即可看到當前系統的網絡配置情況。

查看本機IP,多了一個以太網2的連接查看本機IP,多了一個以太網2的連接

詳細說明在Windows的安裝過程是爲了大家理解ZeroTier One客戶端的工作原理,網頁管理配置的方法。這樣在羣暉上安裝時理解起來就簡單了。

 

3. 在羣暉上安裝ZeroTier One客戶端

前述內容雖然看起來複雜, 但是如果理解了再回頭看就會覺得非常簡單。

整個過程真正的難點是在羣暉安裝ZeroTier One 客戶端。前面提到過,這裏有一個大坑——找不到安裝文件!!

 

ZeroTier One for 羣暉的安裝包ZeroTier One for 羣暉的安裝包

 

如果你點對應的按鈕下載,會出現404錯誤。試了ZeroTier羣暉下面所有的下載鏈接,全都是404

無公網IP搞定羣暉+ZEROTIER ONE實現內網穿透

官網下載不到安裝文件,接着用文件名全網搜也沒有搜到別的下載源,這下就傻眼了。讓我一度以爲是不是ZeroTier也跟羣暉鬧翻了之類。把所有應用都下架了。。

萬般無奈之下只好硬着頭皮研究怎麼直接在羣暉上用源碼編譯,翻遍了git和zerotier的各種文檔,反覆嘗試才知道,如果要編譯,不能直接在羣暉系統上操作,只能搭建專門的開發環境,需要自己裝一個linux系統了。。

在這裏卡了兩天,付出時間精力最多,卻沒有什麼可寫的,因爲

  1. 嘗試編譯沒有成功 

  2. 沒有用不需要——誤打誤撞找到了這麼個頁面 

然後奇蹟出現了然後奇蹟出現了

是不是很眼熟,當下的心情就是——那畫面太美不敢看啊。

熱淚盈眶啊熱淚盈眶啊

所有帶syn字段,spk結尾的都是ZeroTier One 給羣暉的安裝包,有種老鼠掉進米缸的感覺了。

但是如何確定哪個版本還要費一點周折。方法一,可以在這個平臺支持列表查詢自己cpu類型,決定下載哪個版本。但在這個列表,我卻找不到我筆記本i5 cpu對應的版本,所以用方法二:網上下一個putty.exe,然後ssh連到自己羣暉的終端。

啓動putty啓動putty

在hostname處輸入羣暉的IP,點擊open。彈出窗口輸入羣暉用戶名密碼

用戶密碼同羣暉用戶密碼用戶密碼同羣暉用戶密碼

登錄後打命令uname -ar,就會出現cpu版本信息,大概長這樣:

查詢cpu/系統版本號查詢cpu/系統版本號

這就很明顯了,我這個安裝在筆記本上的羣暉6.1.7,是64位系統,bromolow的版本,下載zerotier-1.2.8r0-syn-bromolow-6.1.spk就可以了,這回終於沒有404了,美滋滋啊。

 

再發一遍就是圖中這個東西,看到了吧。

在羣暉端安裝就相對簡單了。登錄DSM,打開套件中心,選擇手動安裝,找到剛剛下載的spk文件,點擊下一步

手動安裝手動安裝

然後會出現ZeroTier One的版本信息

無公網IP搞定羣暉+ZEROTIER ONE實現內網穿透

因爲我係統裏早已安裝了ZeroTier One的套件,所以這幾步只是演示,可能和第一次安裝界面稍有不同。安裝過程大約幾分鐘。安裝完成後可以在主菜單找到,點擊運行。

運行後主界面運行後主界面

運行後主界面基本沒有內容, 唯一的操作就是在右下角[Network ID]填入網絡id號,然後點擊join。

加入後,刷新ZeroTier 點擊網絡id進入管理頁面

客戶端已上線客戶端已上線

和第一個windows客戶端一樣,可以看羣暉的ZeroTier One客戶端已經在線online,但未授權,左側爲虛線。點擊複選框勾選授權,此時羣暉連入虛擬網絡

提示: “在線”("online")的意思就是客戶端那一側ZeroTier One軟件已經啓動正常運行,在ZeroTier網絡上可以看到這個客戶端;"授權"是指客戶端能不能連入當前這個網絡,默認是"未授權"("Not Authorized")狀態,需要網絡所有者(即創建相應網絡的註冊賬號,此賬號登錄ZeroTier後才能訪問此頁面)授權——勾選左邊的複選框

羣暉客戶端上線入網羣暉客戶端上線入網

同Windows客戶端一樣,給羣暉客戶端填入短名稱DSM home表示是家中的羣暉主機,在描述中輸入Synoloty DSM host,這個可以隨便寫,只要自己看了知道是那臺機器就行。

授權之後羣暉就應該已經介入此虛擬網,在PC端打開cmd,命令行ping一下看通了沒有。如ZeroTier管理頁面所示羣暉的ZeroTier網IP是10.147.18.172

無公網IP搞定羣暉+ZEROTIER ONE實現內網穿透

ping值很低,可見鏈路沒有經過服務端,兩臺機器是直接交換數據的(基於ZeroTier那個虛擬網卡)

在此虛擬網測試下羣暉,訪問10.147.18.172:5000

無公網IP搞定羣暉+ZEROTIER ONE實現內網穿透

 

登錄後一切正常

無公網IP搞定羣暉+ZEROTIER ONE實現內網穿透

正如前面反覆提到,連上ZeroTier One的虛擬網絡(加入同一個網絡id)後,經過擁有者授權,所有客戶端就像在一個局域網裏,所有的端口都是開放可以互相訪問的。

https可以訪問https可以訪問

Photo Station可訪問Photo Station可訪問

Video Station可訪問Video Station可訪問

外網連接測試

上面的測試雖然走的ZeroTier網絡,但是Windows主機和羣暉主機實際都在同一內網。所以還需要測試真正外網連接。模擬在外面用手機連接家裏的羣暉,看ZeroTier One的內網穿透是否真正實現。

手機端安裝ZeroTier One客戶端

推薦用蘋果,安卓系統正常安裝流程需要訪問google play。爲了測試兩個系統都安裝,現在用安卓系統演示。

在手機上安裝ZeroTier One安卓客戶端,裝好之後大概這個樣子

我是科學上網用google play安裝的我是科學上網用google play安裝的

用google play裝,啓動之前先把手機wifi關掉,使用數據上網

無公網IP搞定羣暉+ZEROTIER ONE實現內網穿透

啓動ZeroTier One應用,點擊主界面上方的加號,出現如下界面。輸入網絡id號,點擊Add Network

運行ZeroTier One App運行ZeroTier One App

回到主界面會看到新添加的網絡。上面那個網絡是我之前創建的,也是我實際在用的,暫時可以忽略掉。

下面是今天新申請的用來做演示的網絡,現在加入的是這個網絡。

點擊開關打開網絡點擊開關打開網絡

點擊網絡id號右下的小開關,會彈出創建VPN連接請求,確認即可

無公網IP搞定羣暉+ZEROTIER ONE實現內網穿透

 

手機端的ZeroTier One 安裝配置就完成了,接着在網頁管理端授權這個客戶端使之最終連入虛擬網絡。

管理頁面配置讓手機連入虛擬網絡

打開https://my.zerotier.com/network/1d71*****387  刷新,會看到新的手機客戶端已經上線,但未被授權。

手機客戶端已成功運行手機客戶端已成功運行

如法炮製,給手機客戶端授權,並輸入短名稱和描述。勾選授權之後,刷新網頁如下:

將手機客戶端授權連入ZeroTier網絡將手機客戶端授權連入ZeroTier網絡

提示: 隨着客戶端增多,就能發現短名稱和描述的作用。在這個頁面通過名稱和描述就能很清楚分辨各個客戶端是什麼。不然對着一串數字很容易搞不清楚誰是誰了。

此時手機、羣暉、Windows電腦就像連入同一個路由器wifi下,各自的IP都都在網段10.147.18.*。

測試手機從外網連接家裏的羣暉

此時人和手機物理上仍然是在家裏,但因爲手機已經斷開家裏的寬帶,使用數據上網,所以場景等同於手機現在是從外網對家裏的羣暉進行連接。可以看到手機端已經連上了VPN,打開羣暉官家,添加現有設備,即家裏的羣暉。

 羣暉管家測試連接 羣暉管家測試連接

小提示要輸入端口號小提示要輸入端口號

 

 

連接羣暉

輸入正確地址端口用戶密碼,點登錄後很快就連上了

 

 登錄(穿透)成功 登錄(穿透)成功

切換到桌面模式可以看到更詳細狀態。DSM mobile中點擊齒輪圖標,選擇桌面模式

無公網IP搞定羣暉+ZEROTIER ONE實現內網穿透

可以看到各個套件可以看到各個套件

至此已經證明穿透成功,從外網通過ZeroTier的虛擬網絡連上了家裏的羣暉。

小結

第一次發文,沒想到寫了這麼多,寫了這麼久。一張圖一張圖的改上傳,還老傳錯,最後花了近八個小時纔算基本完成。如果用過softether VPN或者hamachi玩過聯網遊戲(年齡暴露),那麼應該很快可以上手ZeroTier One,基本原理完全一樣,ZeroTier的改進是管理虛擬網絡是獨立於客戶端的,可以完全通過網頁完成。安裝好之後,所有客戶端都加入同一個網絡id,則如同連入同一個路由器,處於同一個局域網。那麼互相訪問就跟在局域網一樣,在外連接羣暉就跟在家連接一樣了,只需要通過ZeroTier網絡裏的IP連接即可。至於其他幾種方案,frp,ngrok等,只是看了下文章,沒有實際使用所以也不能評判好壞。如果只是從文章的描述來看,個人更傾向於ZeroTier,最大的兩個優點,一是不用搭建服務器,二是有一定安全防護機制,一定要虛擬網絡擁有者授權,新的客戶端才能連入網絡。

整個過程看起來很複雜, 理解之後應該很簡單。真正的大坑是ZeroTier 官網的spk文件下載鏈接不對,導致沒有安裝文件安裝。幸好誤打誤撞找到了文件,spk手動安裝還是很順利的。

補充:

羣暉端在DSM裏面起ZeroTier One可能起不來,或者加入網絡加入不了,點擊沒反應。可能是跟我切換了網絡有關。解決辦法是通過putty連接到終端,然後再執行命令行命令離開原有網絡加入新網絡即可。加入成功後網頁管理端就能看到新的客戶端。授權時候羣暉就連入你創建的ZeroTier的網絡了

通過命令行啓動ZeroTier One 羣暉客戶端

通過命令行啓動ZeroTier One 羣暉客戶端

總算寫完了,謝謝大家。第一次寫文難免會有疏漏,歡迎大家指正。有任何問題也可以在評論提出,會盡力回答。

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