使用Docker + Traefik + Derper 自建 Tailscale 中继服务器完整教程
本教程将介绍如何使用 Docker、Traefik 和 Tailscale 自建中继服务器,以提高 Tailscale 网络的性能和安全性。
准备工作
- 一台云服务器,推荐配置:2核4G,50G硬盘, 需公网IP
- 一个域名,并已备案
- 给 derper 分配一个域名,如 derper.example.com,并将DNS解析到云服务器
- 防火墙开放2个的端口备用,如 16443、3478。
- 云服务器已安装 Docker 运行环境,安装教程:https://docs.docker.com/engine/install/
国内 阿里云、腾讯云等轻量服务器基本能满足要求。
配置服务器
安装 Traefik
写入 Traefik 配置到 /etc/traefik/traefik.toml
文件,
# 创建 Traefik 配置文件
cat <<EOF > /etc/traefik/traefik.toml
[global]
defaultEntryPoints = ["https"]
[entryPoints]
[https]
address = ":443"
compress = true
tls = true
[tls.certificates]
default = letsencrypt.acme
[acme]
email = "your_email@example.com" # 改成你自己的邮箱
domains = ["derper.example.com"] # 改成你自己的域名
[acme.httpChallenge]
entryPoint = "https"
启动 Traefik
# 创建网络
docker create network traefik
# 启动 Traefik
docker run -d --name traefik \
--restart always \
--network traefik \
-v /etc/traefik/traefik.toml:/etc/traefik/traefik.toml \
-p 80:80 \
-p 443:443 \
traefik/traefik
安装 Derper
- derper 镜像仓库:https://github.com/fredliang44/derper-docker,基于Tailscale官方提供的命令行工具 derper 封装的Docker镜像。
- Docker Compose 文件配置
version: '3'
services:
derp:
image: fredliang/derper:latest
container_name: derp
restart: always
ports:
- "0.0.0.0:3478:3478/udp"
- /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock
environment:
- DERP_DOMAIN=derper.example.com
- DERP_ADDR=:16443
- DERP_HTTP_PORT=-1
- DERP_VERIFY_CLIENTS=true # 很重要,避免被别人滥用
networks:
- traefik
- default
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik"
- "traefik.http.routers.derper.rule=Host(`derper.example.com`)"
- "traefik.http.services.derper.loadbalancer.server.port=16443"
networks:
default:
internal: true
name: derp
traefik:
external: true
- 启动 Derper:
vi docker-compose.yml # 把上面的配置根据自己的实际情况修改后保存
docker-compose up -d
配置 Tailscale
- 打开 Tailscale Access controls页面: https://login.tailscale.com/admin/acls/file
- 修改配置:
{
// 追加到原配置文件中
"derpMap": {
// OmitDefaultRegions 用来忽略官方的中继节点,一般自建后就看不上官方小水管了
"OmitDefaultRegions": true,
"Regions": {
"901": {
"RegionID": 901, // 901 三个地方保持一致,900开始,多个节点可以往后+1
"RegionCode": "sh",
"RegionName": "ShangHai",
"Nodes": [
{
"Name": "example",
"RegionID": 901,
"HostName": "derper.example.com", // 换成你的子域名
"IPv4": "1.1.1.1", // 改成你的公网IP
"DERPPort": 443,
"STUNPort": 3478,
"CanPort80": false,
},
],
},
}
}
- 保存配置
验证成果
服务器
浏览器打开 https://derper.example.com
,会看到
Mac 平台
打开 Terminal(终端),执行:/Applications/Tailscale.app/Contents/MacOS/Tailscale netcheck
会看到如下结果:
我建了3个节点,国内的节点延迟就非常低。
* DERP latency:
- shh2: 46ms (ShangHai)
- shh: 46.2ms (ShangHai)
- us: 601.1ms (American)
Linux 平台
执行 sudo tailscale netcheck
会得到类似的结果。
常见问题
- 为什么没有 IPv6? A: 需要云服务器支持
- 为什么用 traefik? A: traefik 自动生成 tls 证书,方便做流量代理
参考链接
- Tailscale 官方文档: https://tailscale.com/kb/1017/install
- Traefik 官方文档: https://doc.traefik.io/traefik/