今年春節(jié),返鄉(xiāng)過年的朋友應(yīng)該都有不少吧?離開了常住的居家和辦公環(huán)境,偶爾還是會碰到需要訪問家中/公司設(shè)備的場景?;蛟S是臨時(shí)下載放在服務(wù)器中的文件,或許是連上住所的 NAS 和親朋好友一起觀看自己收藏的電影。
(資料圖)
但對我來說,通過外網(wǎng)訪問 NAS 的速度相比局域網(wǎng)總覺得差點(diǎn)意思,有沒有更好的解決方案,讓我身在異地也能像局域網(wǎng)訪問那樣用上家里設(shè)備呢?
這次我選擇了軟件定義廣域網(wǎng)(SD-WAN)來解決這個(gè)問題,效果還算不錯(cuò)。通過虛擬化的技術(shù),SD-WAN 將不同網(wǎng)絡(luò)下的設(shè)備連接到一個(gè)局域網(wǎng)中,讓不同設(shè)備之間高效互訪。比起傳統(tǒng)內(nèi)網(wǎng)穿透進(jìn)行跨網(wǎng)段設(shè)備訪問,整體操作相對簡單,用起來更加靈活,并且還有相當(dāng)不錯(cuò)的訪問穩(wěn)定性。
本文介紹其中一種不花錢、但需要花點(diǎn)時(shí)間的配置方案,希望你下次也能用得上。
▍SD-WAN 簡評
在 SD-WAN 解決方案這條賽道上,市面上目前可以選擇的產(chǎn)品主要要有 Zerotier、Tailscale 以及蒲公英這么幾款。
Zerotier 和蒲公英少數(shù)派此前已有介紹,這里簡單梳理一下這些方案的優(yōu)缺點(diǎn):
Zerotier
優(yōu)點(diǎn):可直接使用官方提供的方案快速,同時(shí)支持私有化部署 缺點(diǎn): 由于網(wǎng)絡(luò)協(xié)議的限制,不同的網(wǎng)絡(luò)運(yùn)營商下設(shè)備連接存在較高延遲 在群暉 DSM 7 上沒有圖形化客戶端官方免費(fèi)版存在組網(wǎng)限制
Zerotier 的原理其實(shí)很容易理解:通過根節(jié)點(diǎn)來創(chuàng)建一個(gè)中心服務(wù)器,加入其中的設(shè)備都需要和這個(gè)中心服務(wù)器通信,從而構(gòu)建起一個(gè)虛擬局域網(wǎng)。由于中心服務(wù)器部署在海外,國內(nèi)訪問難免會出現(xiàn)不穩(wěn)定的情況,跨運(yùn)營商設(shè)備互訪時(shí)丟包尤其嚴(yán)重。
Tailscale
優(yōu)點(diǎn):跨運(yùn)營商設(shè)備互訪穩(wěn)定性較好,客戶端開源 缺點(diǎn): 控制服務(wù)器非開源軟件官方免費(fèi)賬戶存在較多限制
相比 Zerotier,Tailscale 在底層網(wǎng)絡(luò)邏輯上采用了 WireGuard 協(xié)議,因此不同運(yùn)營商之間的設(shè)備互訪的速度更佳,有公網(wǎng) IP 時(shí)效果更為明顯。不過和 Zerotier 的問題類似,由于中心服務(wù)器均部署在海外,網(wǎng)絡(luò)不穩(wěn)定的情況在所難免。
蒲公英
優(yōu)點(diǎn):國內(nèi)廠商出品,網(wǎng)絡(luò)訪問最為穩(wěn)定缺點(diǎn):免費(fèi)版套餐設(shè)備限制較大,必須付費(fèi)升級
蒲公英屬于國內(nèi)廠商推出的 SD-WAN,相比以上兩款的海外 SD-WAN 服務(wù),最大的優(yōu)勢就是中心服務(wù)器均在國內(nèi),因此單就從網(wǎng)絡(luò)訪問性上自然最佳;在沒有公網(wǎng) IP 的設(shè)備之間通過國內(nèi)服務(wù)器進(jìn)行中繼服務(wù)可謂是相當(dāng)穩(wěn)定。不過它的缺點(diǎn)也很明顯:免費(fèi)套餐對設(shè)備限制較高,要想真正用起來必須付費(fèi)。
綜上,如果你想少折騰并且需要解決剛需,花點(diǎn)錢直接選擇蒲公英付費(fèi)即可。但如果你和我一樣希望通過私有化部署免費(fèi)、無限制地使用 SD-WAN,不妨跟隨下面的流程手動配置一套屬于自己的遠(yuǎn)程設(shè)備訪問方案。
▍HeadScale 是什么
上面提到的服務(wù)中,Tailscale 和 Zerotier 其實(shí)都是商業(yè)化服務(wù),免費(fèi)賬戶服務(wù)基本夠用,服務(wù)穩(wěn)定性則是個(gè)大問題。
因此 Tailscale 很早之前就有了可以私有化部署的開源方案。此前由于底層網(wǎng)絡(luò)協(xié)議的限制,私有化部署后跨運(yùn)營商設(shè)備穿透失敗的情況依然時(shí)有發(fā)生——直到 HeadScale 的出現(xiàn)。
Headscale 是歐洲航天局的 Juan Font 使用 Go 語言開發(fā),在 BSD 許可下發(fā)布,它基本上實(shí)現(xiàn)了 Tailscale 控制服務(wù)器的所有主要功能,沒有任何設(shè)備數(shù)量的限制,同時(shí)可以直接借用 Tailscale 的客戶端來牽線搭橋。
它唯一的缺點(diǎn)是目前尚沒有可視化界面,也無法直接使用 Tailscale 的 iOS 客戶端??紤]到我主要想實(shí)現(xiàn)不同區(qū)域下桌面設(shè)備的互訪,針對移動端的這個(gè)小缺點(diǎn)倒顯得不那么重要。
另外,既然我們搭建服務(wù)最終目的是「免費(fèi)無限制地使用」,這次:
不再云服務(wù)器來部署 HeadScale 控制服務(wù)器,而是使用家中的 NAS需要提前聯(lián)系運(yùn)營商獲取家中網(wǎng)絡(luò)的公網(wǎng) IP
滿足這兩個(gè)條件,接下來就就可以部署 HeadScale 了。
▍在群暉上部署控制服務(wù)器
我家中主要是使用群暉 NAS,并且部署 HeadScale 控制服務(wù)器需要有公網(wǎng) IP,因此我首先需要做的是設(shè)置 DDNS 并開啟相應(yīng)的端口映射。DDNS 設(shè)置的操作視設(shè)備而定,開啟后記得映射 8881、9090 以及 50443 這三個(gè)端口即可。
接著我們需要添加 HeadScale 的軟件安裝源,這里筆者我選擇了「我不是礦神」提供的一個(gè)第三方源:打開群暉中的「套件中心」,然后在「設(shè)置」中切換到套件來源,新增一個(gè)新的套件來源。
名稱填寫「inmk」就好,這里需要注意的是,如果群暉系統(tǒng)版本為 DSM 6.X,位置填寫https://spk.imnks.com/,如果是 DSM 7.x,位置則填寫https://spk7.imnks.com/。
回到套件中心,點(diǎn)擊左邊側(cè)邊欄切換到「社群」,找到 HeadScale 軟件點(diǎn)擊下載并安裝,如果彈出警告請點(diǎn)擊同意并安裝。安裝完成后我們就可以在主菜單中看到 HeadScale 了。
點(diǎn)擊 HeadScale 我們可以看到一個(gè)參數(shù)設(shè)置頁面,這里面我們需要將server_url后面的 127.0.0.1 修改成 DDNS 地址,后面的端口號保持不動。另外listen_addr:、metrics_listen_addr:以及grpc_listen_addr:后面的 127.0.0.1 均改為 0.0.0.0。
最后直接點(diǎn)擊保存,這時(shí) HeadScale 服務(wù)會再次重啟。
接下來我們需要創(chuàng)建一個(gè)分組空間來方便標(biāo)識加入的設(shè)備。這里需要使用 SSH 終端來訪問家中群暉,以 root 權(quán)限登錄后,輸入:
cd /var/packages/headscale/target/bin
我們這里創(chuàng)建一個(gè)名為sspaihx的分組空間,接下來輸入:
headscale namespaces create sspaihx
緊接著我們查看一下這個(gè)命名空間是否創(chuàng)建成功了,輸入:
headscale namespaces list
如果看到Name里面有我們創(chuàng)建的這個(gè)sspaihx的分組空間就表示分組空間已經(jīng)創(chuàng)建成功,至此我們的 HeadScale 控制服務(wù)器就已經(jīng)部署完畢了。
▍使用 Tailscale 客戶端連接
創(chuàng)建好 HeadScale 控制服務(wù)器后,接下來就是將客戶端連接上了。正如上面所言,我們在客戶端上依舊可以使用 Tailscale 的客戶端——但需要進(jìn)行一番小改造。
將 Windows 客戶端連接到 HeadScale 網(wǎng)絡(luò)中
我們最常使用的桌面系統(tǒng)自然是 Windows。這里我們首先在桌面打開瀏覽器,然后使用瀏覽器訪問:
http://剛才設(shè)置的 ip 或者域名:8881/windows
在打開的頁面中下載一個(gè)注冊表文件,然后將其導(dǎo)入到系統(tǒng)中。緊接著去Tailscale下載 Windows 客戶端并安裝,然后鼠標(biāo)單擊系統(tǒng)托盤處的 Tailscale 圖標(biāo)并選擇 log in。此時(shí)會打開如下頁面:
復(fù)制headscale -n這一段命令,將其中的NAMESPACE替換成前面我們創(chuàng)建的分組空間名(sspaihx),然后再次打開 SSH 終端,使用 root 權(quán)限連接群暉并輸入如下兩段命令:
cd /var/packages/headscale/target/bin
headscale -n NAMESPACE nodes register --key nodekey:7f2fdxxxxxxxx
如果終端顯示registered則表示設(shè)備已經(jīng)加入,這時(shí)候在右鍵點(diǎn)擊系統(tǒng)托盤處的 Tailscale 圖標(biāo),然后點(diǎn)擊sspaihx分組空間點(diǎn)擊加入即可。
最后,我們回到 SSH 終端中輸入:
headscale nodes list
如果看到當(dāng)前已經(jīng)有設(shè)備名單,則表示已經(jīng)成功將 Windows 設(shè)備加入到 HeadScale 網(wǎng)絡(luò)了。
將群暉連接到 headScale 網(wǎng)絡(luò)中
群暉既然可以作為控制服務(wù)器,當(dāng)然也可以作為客戶端連接到控制器中。其中控制服務(wù)器軟件是 HeadScale,客戶端則依舊是官方的 Tailscale 客戶端。
我們需要到打開群暉的「套件中心」然后直接搜索「Tailscale」下載安裝,安裝完成后打開 SSH 客戶端,通過 root 賬戶連接到群暉上并輸入如下兩段命令:
cd /var/packages/Tailscale/target/bin
tailscale up --login-server=http://剛才設(shè)置的 ip 或者域名:8881 --accept-dns=false
輸入完成之后終端會打印出一段網(wǎng)址,將其復(fù)制并使用瀏覽器打開——其實(shí)就和剛才 Windows 上的呈現(xiàn)的設(shè)備認(rèn)證一樣,同樣是headscale -n一段命令,將其中的NAMESPACE替換成前面我們創(chuàng)建的分組空間名。然后在 SSH 終端輸入如下命令:
cd /var/packages/headscale/target/bin
headscale -n NAMESPACE nodes register --key nodekey:7f2fdxxxxxxxx
回車后應(yīng)該可以看到終端顯示registered,如果不確定是否加入,可以再用下面這條命令查看設(shè)備是否加入。
headscale nodes list
將 macOS 連接到 HeadScale 網(wǎng)絡(luò)中
相比 Windows ,macOS 加入 HeadScale 網(wǎng)絡(luò)中會略微有些復(fù)雜,這里首先需要使用瀏覽器打開:
http://剛才設(shè)置的 ip 或者域名:8881/apple
在這個(gè)頁面中我們需要確定下載什么版本客戶端,如果你有外區(qū)的 Apple ID 賬號,這里可以直接選擇 App Store 版本的 macOS 客戶端,否則就只能選擇 Standalone 客戶端。
選擇好客戶端之后,首先下載對應(yīng)版本的描述文件(Profiles)并雙擊導(dǎo)入系統(tǒng),打開「設(shè)置 > 隱私與安全性 > 描述文件」,選擇已下載的描述文件,雙擊安裝并授權(quán)。
最后我們再安裝并啟動 Tailscale 客戶端:在菜單欄中點(diǎn)擊 Tailscale 圖標(biāo),然后點(diǎn)擊 log in 打開相應(yīng)的設(shè)備認(rèn)證頁面。
同樣是headscale -n這段命令,將其中的NAMESPACE替換成前面我們創(chuàng)建的分組空間名。然后直接在 macOS 打開 SSH 終端,使用 root 賬戶連接群暉,輸入如下命令完成設(shè)備授權(quán):
cd /var/packages/headscale/target/bin
headscale -n NAMESPACE nodes register --key nodekey:7f2fdxxxxxxxx
回車后看到registered表示設(shè)備已經(jīng)完成添加,這時(shí)候再輸入:
headscale nodes list
可以看到不同系統(tǒng)設(shè)備都已經(jīng)加入到這個(gè)虛擬局域網(wǎng)中了,我們使用各自對應(yīng)的 IP 互相 ping 一下,看看能否直接實(shí)現(xiàn)互訪,比如使用這個(gè)內(nèi)網(wǎng) ip 訪問群暉 DSM 系統(tǒng)。
▍結(jié)語
通過以上方案,基于 DDNS + 動態(tài)公網(wǎng) IP,在沒有花費(fèi)一分錢的情況下,我們實(shí)現(xiàn)了諸多商業(yè) SD-WAN 軟件才能獲得互聯(lián)效果。這種方案不僅沒有設(shè)備數(shù)量限制,同時(shí)也有著不錯(cuò)的跨運(yùn)營商互訪穩(wěn)定性。
另外,如果你的資金或者條件允許,也可以嘗試直接購買一臺云服務(wù)器來部署 HeadScale,具體的方法可以參考GitHub。
相關(guān)鏈接???
我不是礦神:?
https://imnks.com/
GitHub:?
https://github.com/juanfont/headscale
原文鏈接:
https://sspai.com/post/77971?utm_source=wechat&utm_medium=social
作者:化學(xué)心情下2
責(zé)編:克萊德
/更多熱門文章/
關(guān)鍵詞: 我們需要 網(wǎng)絡(luò)協(xié)議 首先需要