Tailscale自建中继节点(Derper)

在进入教程之前,请先准备好一个有公网IPv4的服务器

本篇文章参考LamGC大佬的教你搭建 Tailscale DERP 服务器

①. 部署Docker环境

这里使用的镜像为fredliang/derper

使用Docker官方脚本安装

curl -fsSL https://get.docker.com | bash

②. 申请tailscale证书

若该服务器未安装tailscale,请按照该篇博客教程安装tailscale客户端,作为验证客户端和申请证书用

安装完成,登录之后,每个设备都会分配一个内网域名访问用。

输入tailscale cert,会提示如图

图中的域名就是你的内网域名。

这里选择在/opt/derper作为目录存放derper所需文件

使用mkdir -p /opt/derper/cert && cd /opt/derper/cert创建并进入目录

使用tailscale cert tencent-xzh.leo-vector.ts.net申请证书并在该目录生成证书密钥

域名记得改为上一步获取到的域名

③. 运行derper容器

cat >> /opt/derper/docker-compose.yml << EOF
services:
  derper:
    image: fredliang/derper:latest
    environment:
      DERP_DOMAIN: "tencent-xzh.leo-vector.ts.net"  # 请替换为你的实际域名
      # DERP_CERT_DIR: "/app/certs" #容器内证书路径
      DERP_CERT_MODE: "manual"
      DERP_HTTP_PORT: "-1" # 禁用http端口
      DERP_ADDR: ":55555" # 更改https端口为55555
      DERP_VERIFY_CLIENTS: "true" # 验证tailscale客户端是否在内网中
    ports:
      - "55555:55555/tcp"
      - "3478:3478/udp"
    volumes:
      - ./cert:/app/certs  # 将本地证书目录挂载到容器中
      - /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock:ro # 挂载tailscale的socket到容器内验证客户端
EOF
docker compose up -d

若是执行没有问题,则执行docker compose logs可以看到容器日志

④. 修改ACL配置

登录tailscale管理面板,并打开ACL配置页面,增加以下配置

{
// 前面是规则,不要直接全选粘贴,会导致你的内网炸掉
	"derpMap": {
		// Regions 记录了有哪些 DERP 区域, Tailscale 是按区域划分 DERP 服务器组的
		"Regions": {
			// 900 是这个区域的区域 ID, 只能填数字, 且范围只能在 900-999 以内(包括头尾)。
			"900": {
				// 与区域 ID 相同.
				"RegionID": 900,
				// 区域的代号名, 纯英文.
				"RegionCode": "tx",
				// 区域的名字, 不建议太长.
				"RegionName": "Tencent Cloud",
				// 区域的节点列表.
				"Nodes": [
					{
						// 节点名称, 会显示在日志里, 但不会显示在 netcheck 中.
						"Name": "tx-gz",
						// 与所在区域 ID 相同.
						"RegionID": 900,
						// DERP 服务器域名,上方获取到的ts内网域名
						"HostName": "tencent-xzh.leo-vector.ts.net",
						// 如果使用了非标准 HTTPS 端口, 那么可以将 HTTPS 端口设置在此.
						"DERPPort": 55555,
						// 如果 STUN 指定了非 3478 端口, 那么可以将 STUN 端口设置在此.
						"STUNPort": 3478,
                        // 以下地址改为自己服务器实际的IPv4地址,因为该域名在公共dns实际查询到的地址为tailscale的官方服务器地址
						"IPv4": "0.0.0.0",
						// 如果服务器有 IPv6, 可以在这里指定.
						// "IPv6": "xxx::xxx",
						// 如果服务器使用的证书与域名不符, 可以在这里指定
						// 用于 HTTPS 握手的域名地址,和上面一致,ts内网域名
						"CertName": "tencent-xzh.leo-vector.ts.net"
					},
				],
			},
		},
	},
}

改好配置之后保存。

验证是否成功:客户端执行tailscale status,若是出现你自定义的中继并且有延迟,则为成功;若是只出现自定义中继但不显示延迟,则请检查服务器端口是否放行,https是否被拦截,配置是否出问题

⑤. 完成~


Tailscale自建中继节点(Derper)
https://blog.xzh.gs/archives/tailscalezi-jian-zhong-zhuan-jie-dian-derper
作者
XZH
发布于
2024年11月15日
更新于
2024年11月15日
许可协议