首先介绍下基础环境,腾讯云轻量服务器,安装了Ubuntu Server 24.04镜像,手动安装了宝塔服务,用wordpress配置本网站,已备案并申请了本域名的Let’s Encrypt证书用于ssl加密,同时服务器上也已经安装了tailscale的客户端。
Tailscale derp服务的介绍及安装可以参考文后的链接,这里就不再过多赘述。本文主要是解释derp服务的配置过程,涉及到处理宝塔和derp服务的端口冲突问题,如何使用Let’s Encrypt证书,如何编写systemd,如何配置derp服务的自启动和tailscale官网的设置等内容。
由于derp服务默认使用https的433端口,在本服务器上已经被wordpress网站使用,所以需要更换默认的端口,以2333代替为例。
官方文档中写需要端口3478的udp和443的tcp支持,因此我们需要同时在腾讯云控制台和宝塔安全设置中放行这两个端口,注意所选的协议。如果需要其他服务,例如windows的远程控制,就可以打开相应的端口(3389)来支持,但最好更换端口防止被扫,这里不过多介绍。


ssh登录到服务器后,由于权限的问题,derp服务无法直接使用宝塔申请的证书,因此作者选择把证书拷贝出来使用,不同版本宝塔的证书路径可能不同,注意灵活变化,同时经过作者的实测,不需要对证书格式进行转换,直接更改文件名称即可。
拷贝证书和key文件到要使用的derp路径;
sudo cp /www/server/panel/vhost/cert/域名/fullchain.pem ~/derper路径/域名.crt
sudo cp /www/server/panel/vhost/cert/域名/privkey.pem ~/derper路径/域名.key
更改证书和key文件的所属用户(以ubuntu为例)
sudo chown ubuntu:ubuntu ~/derper路径/域名.crt
sudo chown ubuntu:ubuntu ~/derper路径/域名.key
手动运行derp服务进行测试
sudo ~/go/bin/derper -hostname 域名 -c=derper路径/derper.conf -http-port=-1 -a :2333 -stun -certmode manual -certdir ~/derper路径/ -verify-clients
-a :2333 指定自定义端口2333
-http-port=-1关闭http,只允许https访问
-certmode manual -certdir ~/derper路径/ 手动配置证书模式,指定证书和key的路径
-verify-clients 只能授权的客户端使用derp server, 非常重要,否则所有人都可以使用你的server的derp服务,同时你需要在自己服务器上安装tailscale客户端登录验证才能生效
如果成功,访问https://域名:2333/,能够看到相应的derp server指示页。

此时到tailscale官网的Access controls配置中,配置使用自定义服务器
"derpMap": {
// "OmitDefaultRegions": true,
"OmitDefaultRegions": false,
"Regions": {"900": {
"RegionID": 900,
"RegionCode": "tencent derper",
"Nodes": [{
"Name": "1",
"RegionID": 900,
"HostName": "域名",
"DERPPort": 2333,
"IPv4": "服务器v4地址",
"IPv6": "服务器v6地址”,
}],
}},
},
OmitDefaultRegions 设置为true时,可以不使用tailscale官方的服务器,只经过自己的服务器derp,看个人需要选择;
RegionID 不与官方的服务器ID冲突即可;
DERPPort 配置为设置用来代替https 443的端口。
应用生效后,重新登录某个tailscale客户端,如果配置成功了,就能在官网的Machine Details看到Relay #900,同时由于服务器在国内,相比官方的服务器,延迟会低很多,如果OmitDefaultRegions设置为true,下图就只有900一个服务器。

接下来我们来创建derp服务的system文件,这样开机就能自动启动服务。
创建文件并输入内容
sudo vim/etc/systemd/system/derper.service
[Unit]
Description=DERP Relay Server
After=network.target
[Service]
Type=simple
User=ubuntu
ExecStart=/home/ubuntu/go/bin/derper \
-hostname 域名\
-c=/home/ubuntu/derper路径/derper.conf \
-http-port=-1 \
-a :2333 \
-stun \
-certmode manual \
-certdir /home/ubuntu/derper路径/ \
-verify-clients
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
如果你使用了 ~/ 路径,请换成完整路径 /home/ubuntu/,因为 systemd 不解析 ~
重新加载
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
确保服务在开机时自动启动
sudo systemctl enable derper
启动服务
sudo systemctl start derper
查看服务状态
sudo systemctl status derper
如果配置没问题,你应该能看到类似:

日志查看
journalctl -u derper
如果你需要停止或重启 derper 服务,运行以下命令:
sudo systemctl stop derper
sudo systemctl restart derper
之后手动重启服务器,验证下derp服务是否自动启动就完成了设置。
参考链接
https://tailscale.com/kb/1082/firewall-ports
https://zhuanlan.zhihu.com/p/638910565
https://bbs.xcjc.net/viewthread.php?tid=9232
发布于20250511。
发表回复