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设置
{
"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": ["*:*"]},
],
}