自建derper指南
之前自建的derper服務器快要過期了,而自建的derper服務器又在我的整個網絡中扮演一個至關重要的角色。爲了防止下次自建derper又要像今天一樣四處找資料,於是寫下這一篇。
以下内容基於當時的官方教程,本人的標準不高,能跑起來就行。
開放服務器端口
derper服務器需要開放如下端口
服務器 | 端口 |
---|---|
HTTP | 80 |
HTTPS | 443 |
STUN | 3478 |
同時需要開放ICMP協議。
安裝Golang
由於使用apt包管理器安裝的golang版本有可能不夠新,所以需要通過二進制文件安裝,可以根據當時最新的版本選擇。
wget https://go.dev/dl/go1.25.1.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.25.1.linux-amd64.tar.gz
rm go1.25.1.linux-amd64.tar.gz
安裝后需要把go的bin
目錄加入path。
如果使用的是Bash shell,編輯 ~/.bashrc
或 ~/.profile
。如果使用的是 Zsh,就編輯 ~/.zshrc
。
接下來以bash爲例
nano ~/.bashrc
在文件最後加入
export PATH=$PATH:/usr/local/go/bin
最後儲存檔案 (在 nano
中是 Ctrl+X
,然後按 Y
,再按 Enter
)。
最後刷新一下shell,
source ~/.bashrc
就可以查看Go的版本。
go version
設置Go的Proxy(大陸外的服務器可跳過)
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
安裝並運行derper服務器
首先為服務器設置一個域名,然後安裝derper。
go install tailscale.com/cmd/derper@latest
然後嘗試一下能不能運行
sudo /root/go/bin/derper --hostname=your.domain.com
訪問對應的域名,看到這個頁面就證明成功了。

增加對用戶的識別
在服務器上安裝tailscale,運行tailscaled服務。
然後運行這個命令
sudo /root/go/bin/derper --hostname=your.domain.com --verify-clients
再編輯一下ACLs,具體可以看tailscale官網
{
// ... other parts of tailnet policy file
"derpMap": {
"OmitDefaultRegions": true,
"Regions": {
"900": {
"RegionID": 900,
"RegionCode": "myderp",
"Nodes": [
{
"Name": "1",
"RegionID": 900,
"HostName": "example.com",
// IPv4 and IPv6 are optional, but recommended, to reduce
// potential DERP connectivity issues if DNS is unavailable
// or having issues. Addresses must be publicly routable
// and not in private IP ranges.
"IPv4": "203.0.113.15",
"IPv6": "2001:db8::1"
}
]
}
}
}
}
測試是否可用
在開啓tailscale的計算機上使用tailscale netcheck
,如果獲得以下的結果,看到自己的derper服務器名稱,就大功告成了。
Report:
* Time:
* UDP: true
* IPv4: yes,
* IPv6: yes, []:
* MappingVariesByDestIP: false
* PortMapping:
* CaptivePortal: false
* Nearest DERP: Hong Kong
* DERP latency:
- hkg: 58.2ms (Hong Kong)
- derper: 68.1ms ()
- iad: 199.8ms (Ashburn)
- nue: 278ms (Nuremberg)
- hel: 283.2ms (Helsinki)
不知道能不能通過這幾個服務器的延遲判斷出我在那裏,應該是可以的。