仰望星空
发布于 2026-06-10 / 10 阅读

搭建tailscale的derp服务器

以debian系的linux系统为例,需要准备:

  1. 一台云服务器且加入了tailscale
  2. 安装好宝塔面板或其他适合做反代与SSL的工具
  3. 一个域名(建议)

如果使用的是阿里云的服务器,需要注意:tailscale使用的ip段和阿里云使用的内部子网段是冲突的,都有用到100.64.0.0/10这个子网,所以在阿里云服务器部署tailscale的时候需要提前做好准备,把ssh密钥部署到服务器里边。否则在部署tailscale后可能会导致阿里云控制台的远程连接失效。
并且如果部署了tailscale,100.64.0.0/10这个子网的所有路由都会走tailscale的虚拟网卡,这会导致服务器无法通过阿里云内网走阿里云镜像,需要配置阿里云镜像网站到公网域名,具体可以问AI或者搜一下解决方案。

安装go环境

sudo apt update
sudo apt install golang-go -y
go version

编译安装

# 开启国内代理加速编译下载(非常重要,否则大概率卡住)
export GOPROXY=https://goproxy.cn,direct

# 编译安装
go install tailscale.com/cmd/derper@latest

编译后的文件在~/jgo/bin/derper,把它移动到/usr/local/bin

sudo cp ~/go/bin/derper /usr/local/bin/

使用systemctl管理运行

sudo micro /etc/systemd/system/derp.service

习惯用vim,nano这些的自行更换编辑器

编辑内容:

[Unit]
Description=Tailscale DERP Server
After=network.target tailscaled.service

[Service]
Type=simple
User=root
# -a 指定内部监听端口,-http-port 设为 -1 禁用 HTTP
ExecStart=/usr/local/bin/derper -hostname derp.yourdomain.com -a :12443 -http-port -1 -stun-port 3478 -certmode none -verify-clients
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

这里面的hostname是无所谓的,它是derp内部用来申请SSL证书用的,但是我更习惯在宝塔里面设置,所以我设置了-certmode none。然后-stun-port一定要放通,这个是derp服务器打洞必须的端口,阿里和腾讯都有类似安全组的东西,需要在控制台放通3478/udp,然后在服务器的防火墙(比如ufw)也要放通3478/udp端口。

-a参数指定了运行的端口12443,这个端口在后续会使用反代来部署服务。

这里加了-verify-clients选项,只有在这个服务器所在的tailscale内网的主机可以使用它的derp服务。不加可能会被别人发现并白嫖你的服务。

此外还推荐打开41641/udp端口,不过有公网IP的服务器打洞几乎不会失败,其实无所谓的。

上面配置好后更新systemctl:

sudo systemctl daemon-reload
sudo systemctl start derp
sudo systemctl enable derp

然后可以运行这个命令查看状态:sudo systemctl status derp,如果看到active (running)就成功了。

使用宝塔部署

在宝塔的网站页面添加站点,域名可以直接填写公网IP或者自己的域名。

file-20260610153800788.png

在SSL中申请证书并部署,这里我有已经申请的,就直接用了:

derp服务强制要求HTTPS,不能用HTTP

file-20260610155815606.png

然后在反向代理中配置刚才设置的端口。

file-20260610153920387.png

如果在浏览器访问域名之后显示derp服务信息,说明站点搭建成功:

file-20260610154032085.png

tailscale配置

然后访问tailscale.com官网,进入自己的控制面板的access controls,配置刚才设置好的服务器,注意要在最外层的大括号里面:

	"derpMap": {
		"OmitDefaultRegions": false,
		"Regions": {
			"901": {
				"RegionID":   901,
				"RegionCode": "my-derp",
				"RegionName": "My Custom DERP Server",
				"Nodes": [
					{
						"Name":             "901a",
						"RegionID":         901,
						"HostName":         "example.com", // 刚才在宝塔里绑定的域名
						"DERPPort":         443, // 依然是443,宝塔会转发到12443
						"STUNPort":         3478, // 宿主机的 UDP 端口
						"InsecureForTests": false,
					},
				],
			},
		},
	},

注意检查修改有注释的几行。

测试

打开一台加入tailscale内网的主机,使用tailscale netcheck来检查,如果出现了my-derp的服务器,说明部署成功。

file-20260610154950903.png

可见速度要比海外的服务器快很多。

其他

一点有意思的东西,如果你在部署了derp的服务器使用tailscale netcheck,它的延迟会到微秒级别(其实就是自己ping自己):

file-20260610155128712.png


评论