以下是在 Ubuntu 上建立自定義 DERP 伺服器的方法,無需域名和 SSL 證書,但需要一個公共 IP(網路伺服器將提供一個公共 IP,如 AWS、阿里雲等):
apt update && apt install -y wget git openssl curl sudo vim systemctl cron
- 檢查最新版本的 go here
wget https://golang.google.cn/dl/go1.21.3.linux-amd64.tar.gz
把 1.21.3 改為最新的版本號rm -rf /usr/local/go && tar -C /usr/local -xzf go1.21.3.linux-amd64.tar.gz
替換系統預設 go- 修改系統變數
export PATH=$PATH:/usr/local/go/bin
- 如果你在中國,需要添加 go 源:
go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,direct
- 安裝 DERPER
go install tailscale.com/cmd/derper@main
- 進入文件夾
~/go/pkg/mod/[tailscale]/cmd/derper
, 然後修改文件vim cert.go
刪掉驗證相關內容:if hi.ServerName != m.hostname { return nil, fmt.Errorf("cert mismatch with hostname: %q", hi.ServerName) }
- 編譯 DERPER:
go build -o /etc/derp/derper
- 生成自簽名 SSL 證書
openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout /etc/derp/derp.test.com.key -out /etc/derp/derp.test.com.crt -subj "/CN=derp.test.com" -addext "subjectAltName=DNS:derp.test.com"
- 創建系統服務
vim /etc/systemd/system/derp.service
:12345 是 DERP 節點的埠號,需要以 TCP 協議公開到公網。你也可以設置你自己喜歡的埠號。埠 3478 需要以 UDP 協議公開,這個埠號不能更改, stun 服務所需.[Unit] Description=TS Derper After=network.target Wants=network.target [Service] User=root Restart=always ExecStart=/etc/derp/derper -hostname derp.test.com -a :12345 -http-port 33446 -certmode manual -certdir /etc/derp --verify-clients RestartSec=5 StartLimitInterval=0 [Install] WantedBy=multi-user.target
-
跑完上面命令後,DERPER 應該顯示激活狀態。然後在瀏覽器打開
systemctl enable derp systemctl start derp systemctl status derp
https://IP:PORT
, 你會看到:DERP This is a Tailscale DERP server
- 打開 Tailscale Admin Console, 點擊
Access Controls
, 把以下內容複製在ssh
上面:"derpMap": { "OmitDefaultRegions": true, // 如果為true,即不使用Tailscale的默認 DERP節點 "Regions": { "900": { // 可以是任意大於900的數字 "RegionID": 900, // 同上 "RegionCode": "myDerp", "Nodes": [ { "Name": "1", "RegionID": 900, // 同上 "HostName": "xxx.xxx.xxx.xxx", // 你的 IP "DERPPort": 12345, // 你的埠號 "InsecureForTests": true, // 必須為true,以跳過證書驗證 }, ], }, }, },
- 檢查 DERP 節點是否工作,在其他設備上運行
tailscale netcheck
.哎臥槽我家裡的節點速度還不如默認的快。Report: * UDP: false * IPv4: (no addr found) * IPv6: no, but OS has support * MappingVariesByDestIP: * HairPinning: * PortMapping: * CaptivePortal: false * Nearest DERP: Amsterdam * DERP latency: - ams: 12ms (Amsterdam) - lhr: 13ms (London) - hans: 13.1ms ()
- DERPER 服務總會自己掛掉,保險起見我們需要定時重啟該服務.
crontab
是最好的選擇. -
systemctl start cron systemctl enable cron systemctl status cron
- 運行
crontab -e
粘貼0 */12 * * * systemctl start derp
進去. DERPER 服務會每 12 小時重啟一次。然後按ESC
, 輸入:wq
退出.