前言
在好久以前我們介紹過了 Tailscale 這款建立內網工具,從那之後我就一直用著。但是一直有一點非常不滿意,直到近期達到了高峰。
我們都知道,但 Tailscale 裝置跟裝置可能因為 NAT 問題無法建立自己的私人連線時,就會仰賴中繼伺服器,也稱為 DERP。這個伺服器通常是由 Tailscale 在全世界各地建置的。但由於今年初台灣連向國外的各種海纜大爆炸,因此造成在使用這些伺服器時,卡頓到非常不像話。
因此我就在尋找官方的文章,看看 DERP 伺服器能不能自己建置,這樣就不用仰賴別人所建置的,在延遲與資料安全來說會更有保障。結果官方還真的有提供這樣的方法,這篇文章就要來介紹他。
行前說明
建立自己的 DERP 伺服器時,我們需要準備一台伺服器,這台伺服器上須要有獨立的 IPv4 及 IPv6 位址,缺一不可。且需要對外開啟以下的 Port:
協定 | 埠號 | 說明 |
---|---|---|
TCP | 80 | 用於 HTTP |
TCP | 443 | 用於 HTTPS |
UDP | 3478 | 用於 STUN |
準備就緒後,就要開始安裝 DERP 伺服器了!
安裝 Go
DERP 是由 Go 所寫出來的,所以我們必須先在我們的 Linux 上安裝 Go。你可以到 這裡 下載 Go 的安裝檔,並到 這裡 看安裝 Go 的教學。
安裝 DERP
安裝 DERP 相當簡單,在你安裝完 Go 之後,只需要一行命令就能將當安裝好。
go install tailscale.com/cmd/derper@main
執行 DERP
在我們開始執行 DERP之前,我們需要先有一個網域或子網域,並將該網域使用 A 及 AAAA 紀錄綁上你的 IPv4 及 IPv6 位址。接著就可以用以下命令來啟動啦!他會自動為你的網域生成一張 SSL 憑證。
sudo derper --hostname=derp.example.com
使用瀏覽器打開該網域,你就會看到一個歡迎頁面,代表他運作正常哦。
但是這樣的啟動方式有一個小問題,任何人都可以使用這個 DERP 伺服器,因此如果你只想讓你帳號的設備來使用,你必須先安裝 Tailscale,也就是之前的 這篇 教學文章。
在安裝完 Tailscale 之後,就可以使用以下命令來啟動啦!
sudo derper --hostname=derp.example.com --verify-clients
新增 DERP 到 Tailnet
當我們設定完後,此時你的機器仍然不會使用這個 DERP,我們必須管理介面的 Access Controls 新增他。
在文件的最後加上以下內容(以下為我的設定,請適當的修改):
{
"derpMap": {
"Regions": {
"900": {
"RegionID": 900,
"RegionCode": "tpe",
"RegionName": "Taipei",
"Nodes": [
{
"Name": "1",
"RegionID": 900,
"HostName": "derp.example.com",
"IPv4": "127.0.0.1",
"IPv6": "::1"
}
]
}
}
}
}
我們需要為每台 DERP 伺服器給予專屬 ID,而 Tailscale 將 900 ~ 999 都設為保留可自訂使用的範圍。RegionCode
及 RegionName
則是你為該節點取的名字。HostName
則是我們剛剛使用的網域。
設定完保存後,你應該就能在管理介面的設備中,看到他出現囉!
只使用自己的 DERP 伺服器
如果你只想使用自己的 DERP 伺服器,你可以在 derpMap 中加上以下內容:
{
"derpMap": {
"OmitDefaultRegions": true,
"Regions": {}
}
}
當加上 OmitDefaultRegions
時,你的機器就不會再使用 Tailscale 所提供的 DERP 伺服器,但你也必須要在 Regions
中加上你自己的,這麼一來就都會強制使用你自己的 DERP 伺服器囉!
移除 DERP 伺服器
大部分的 DERP 伺服器都應該是由 Tailscale 提供,而官方有提供他的伺服器列表:https://controlplane.tailscale.com/derpmap/default 。
在裡面,你可以看到各個節點的名稱以及各自的 ID,如果我們想要禁用某些伺服器,我們可以在 ACL 中的 derpMap 加上以下內容:
{
"derpMap": {
"Regions": {
"1": null,
"2": null
}
}
}
上面的命令,就是我們禁用了 ID 為 1
與 2
的 DERP 伺服器,對照上官方給的伺服器列表,也就是紐約及舊金山。
結語
這篇文章看起來又把 Tailscale 玩出新的高度囉,真的覺得這個軟體設計的很厲害,能讓我鑽研這麼久並一直自定義成我喜歡的樣子,由衷佩服 Tailscale 的開發團隊!