curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
# 按提示完成浏览器登录授权,确保该服务器加入你的 Tailnet🔑 必须完成
tailscale up并在线,否则后续无法校验客户端合法性。
services:
derper:
image: ghcr.nju.edu.cn/yangchuansheng/ip_derper:latest
container_name: derper
restart: always
ports:
- "12345:12345" # 这里的12345请改成你自己想要的10000以上的高位端口
- "3478:3478/udp" # 3478 为stun端口,如果不冲突请勿修改
volumes:
- /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock # 映射本地 tailscale 客户端验证连接,用来验证是否被偷
environment:
- DERP_ADDR=:12345 # 此处需要与上面的同步修改
- DERP_CERTS=/app/certs
- DERP_VERIFY_CLIENTS=true # 启动客户端验证,这是防偷的最重要的参数✅ 端口
12345可按需替换为任意高位端口(如30000,45678)
✅ 推荐使用ghcr.nju.edu.cn镜像源(国内加速)⚠️ 端口不能与之前的重复,不能都是12345
docker compose up -d进入 Tailscale ACL 编辑页 → JSON 模式,在根对象添加:
"derpMap": {
"OmitDefaultRegions": false, // 可以设置为 true,这样不会下发官方的 derper 节点,测试或者实际使用都可以考虑打开
"Regions": {
"900": {
"RegionID": 900, // tailscale 900-999 是保留给自定义 derper 的
"RegionCode": "abc1",
"RegionName": "abcc1",// 这俩随便命名
"Nodes": [
{
"Name": "fff",
"RegionID": 900,
"IPv4": "1.1.1.1", // 你的VPS 公网IP地址
"DERPPort": 12345, //上面 12345 你自定义的端口
"InsecureForTests": true, // 因为是自签名证书,所以客户端不做校验
},
],
},
"901": {
"RegionID": 901, // 加入新 derp 的时候记得修改
"RegionCode": "abc2",
"RegionName": "abcc2",
"Nodes": [
{
"Name": "kkk",
"RegionID": 901,
"IPv4": "8.8.8.8", // 你的VPS 公网IP地址
"DERPPort": 4000, //上面 12345 你自定义的端口
"InsecureForTests": true, // 因为是自签名证书,所以客户端不做校验
},
],
},
},
},
⚠️ DERPPort必须与docker-compose.yml中暴露的端口一致
⚠️ InsecureForTests: true是必须的(因使用自签名证书)
✅ 部署完成。客户端将在 P2P 失败时自动 fallback 到此中继,且仅允许你的 Tailnet 成员使用(防偷)。