以debian系的linux系统为例,需要准备:
- 一台云服务器且加入了tailscale
- 安装好宝塔面板或其他适合做反代与SSL的工具
- 一个域名(建议)
如果使用的是阿里云的服务器,需要注意: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或者自己的域名。

在SSL中申请证书并部署,这里我有已经申请的,就直接用了:
derp服务强制要求HTTPS,不能用HTTP

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

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

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的服务器,说明部署成功。

可见速度要比海外的服务器快很多。
其他
一点有意思的东西,如果你在部署了derp的服务器使用tailscale netcheck,它的延迟会到微秒级别(其实就是自己ping自己):
