作為一個擁有全端加密且能進行端到端連接的服務。Tailscale 現在的免費帳戶已經支持連接 100 台設備,這對於個人用戶來說綽綽有餘。我的內網設備幾乎都在使用 Tailscale 連接。在前段時間發布的 用 VS Code 管理伺服器,我有獨特的伺服器管理方式 中表明我很喜歡用 Remote SSH,我經常借住 Tailscale 組成的內網使用 Remote SSH 進行遠程開發。
然而,Tailscale 在中國大陸的網路環境中存在一個問題,就是經常出現高延遲或者連接不上的情況。好在官方允許用戶自建 DERP 服務,以充當中繼,解決這個問題。再也不用擔心寫程式寫一半就突然斷了,而且優秀的網路體驗也能提高 VS Code 的 Port Forward 的體驗,方便遠程預覽開發。
由於我本身就有一台低配置的雲伺服器,過去曾經使用 Caddy 作為反向代理伺服器來運行我的 Alist 專案。所以這次也考慮在同一台伺服器上使用 Caddy 作為反向代理來部署 DERP 專案。
採用 Caddy 主要是他相比較於 Nginx 使用很簡單的配置就能滿足大部分需求,還有體驗良好的自動 SSL 管理。能省很多事。
廢話不多說,直接開始配置了。
配置 Docker#
// docker-compose.yml
version: '3'
services:
derper:
image: fredliang/derper
restart: always
ports:
- 3478:3478/udp
- 23333:443
environment:
- DERP_DOMAIN=derp.example.com
然後啟動
sudo docker compose up
配置 Caddy#
// Caddyfile
derp.example.com {
reverse_proxy localhost:23333
}
重載 Caddy 的配置
sudo docker compose exec -w /etc/caddy caddy caddy reload
別忘了解析你的域名到你的 Caddy 伺服器上。
配置 Tailscale#
在 Access Controls 中配置
直達連結:https://login.tailscale.com/admin/acls/file
{
// ... 其他 ACL 配置
"derpMap": {
"OmitDefaultRegions": true, // 是否只連接自建 derper 節點
"Regions": {
"900": {
"RegionID": 900,
"RegionCode": "myderp",
"Nodes": [
{
"Name": "1",
"RegionID": 900,
"HostName": "derp.example.com", // 域名
"STUNPort": 3478,
"DERPPort": 443,
}
]
}
}
}
}
結束。