tailscale 是一款基于 Wireguard 的开源组网软件,可以通过服务器实现中继或打洞
打洞成功后可以直接走 P2P,避免浪费服务器带宽
但是在某些情况下,使用官方服务器打洞成功率较低,而且在恶劣网络情况下,官方服务器的中继效果较差,所以我自己部署了多个 derp,以实现高可用的打洞和中继服务。
官方对 DerpServer 的介绍
如何自定义自己的 Derp
但是在这里我使用 docker 方便快速部署,因为机器有点多,懒得一个去装 XD
Derp 部署
version: '3.7' services: derper: image: fredliang/derper ports: - "60080:80" - "60443:443" - "3478:3478/udp" # 这个端口你也可以自己修改 environment: - DERP_DOMAIN=<YOUR_DOMAIN> - DERP_CERT_MODE=manual - DERP_VERIFY_CLIENTS=true #- DERP_STUN_PORT=3478 # 端口要和该环境变量保持一致 volumes: - /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock - ./fullchain.pem:/app/certs/<YOUR_DOMAIN>.crt - ./privkey.pem:/app/certs/<YOUR_DOMAIN>.key
- DERP_VERIFY_CLIENTS=true
这个选项为 true 的时候需要本机安装 tailscale 并登陆,然后挂载 /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock
,可以进行鉴权,不让其他用户使用(分享可以用 share link)
个人建议使用泛域名证书 + 非 80/443 端口,可以有效避免域名备案问题。如果你可以使用 80 端口,你可以将 80 端口直接映射出来,并且 - DERP_CERT_MODE=letsencrypt
,可以使用 ACME 自动创建 SSL 证书
ACL 设置
在 tailscale 控制台里修改 derpMaps 设置
{ "derpMap": { //"OmitDefaultRegions": true,//禁用官方默认服务器 "Regions": { "900": { "RegionID": 900, "RegionCode": "HK", "RegionName": "Hong Kong", "Nodes": [ { "Name": "XXX", "RegionID": 900, "DERPPort": 60443, "HostName": "YOUR_DOMAIN", }, ], }, "901": { "RegionID": 901, "RegionCode": "SZ", "RegionName": "Shen Zhen", "Nodes": [ { "Name": "XXX", "RegionID": 901, "DERPPort": 60443, "HostName": "YOUR_DOMAIN", }, ], }, //下面的是官方服务器,设置为NULL可以单独禁用 "1": null, "2": null, "3": null, "4": null, "5": null, "6": null, "7": null, "8": null, "9": null, "10": null, "11": null, "12": null, "13": null, "14": null, "15": null, "16": null, "17": null, "18": null, "19": null, //"20": null,//只保留HKG的官方服务器 "21": null, "22": null, "23": null, "24": null, "25": null, }, }, "acls": [ {"action": "accept", "src": ["*"], "dst": ["*:*"]}, ], }