完善tailscale derper服务配置-证书密钥更新

配置腾讯云tailscale derper服务的过程请参考相关文章。

由于Let’s Encrypt的证书有效时长缩短为三个月,因此derper的证书和密钥也很容易到期,为了不再手动配置,现在进一步完善之前配置的tailscale derper服务。

首先尝试直接在derper的启动文件中添加重启重新复制证书和密钥的操作,但由于没有使用root用户启动,并且网站的文件属于root用户,这样配置复制操作后重启derper会看到权限错误。即使将复制操作移动到配置用户之前,也不能避免这个问题。

为了安全考虑,我们不直接提权derper的运用用户为root,也不考虑改变网站文件的所有者和权限。以此为前提,我们在个人用户路径重新准备一个脚本来执行复制证书和密钥的操作。

sudo vim 自己的路径/derperCertSync.sh并添加更新操作。

sudo vim 自己的路径/derper-cert-sync.sh

#!/bin/bash

sudo cp "自己的路径/fullchain.pem" "自己的路径/derper/自己域名.crt"

sudo cp "自己的路径/privkey.pem" "自己的路径/derper/自己域名.key"

sudo chown 具体用户: 具体用户 "自己的路径/derper/自己域名.crt" "自己的路径/derper/自己域名.key"

需要注意,脚本中的路径必须以根目录/home开始!!!!不能使用相对路径或者~开头的路径代替!!!

完成以后更改脚本的权限。

sudo chmod +x 自己的路径/derper-cert-sync.sh

接下来我们来配置derper服务的启动文件。

sudo vim /etc/systemd/system/derper.service

在指定user之前添加运行脚本进行证书复制的操作,

ExecStartPre=自己的路径/derper-cert-sync.sh

这样子每次derper服务重启的时候就会自动调用脚本更新。但为了防止服务器长时间不更新导致证书和密钥过期,这里我们为derper服务添加超时重启逻辑,时长在30天左右就可以了,顺手添加启动失败后重启的逻辑。

Restart=on-failure

RestartSec=5

RuntimeMaxSec=2592000

更改完成后需要手动更新下derper的配置。

sudo systemctl daemon-reload

最后重启derper服务就可以了。

sudo systemctl restart derper

在derper的状态中能够看到调用脚本用root更新的逻辑,更新完后就退出了,这里的session opened和closed就是进入退出脚本的过程。

systemctl status derper

此时不会在derper服务的log中看到“Permission denied”之类的错误了,能够成功调用脚本处理更新操作,实现了不同用户权限的分离,增进了安全性。

最后查看下超时逻辑是否成功,可以看到超时时间为4周多,已经配置成功。

systemctl show derper -p RuntimeMaxUSec -p ExecMainStartTimestamp

通过浏览器访问网站的derper页面,点击加密,连接安全,证书有效,可以看到证书的有效时间也成功更新了。

发布于2025/07/27。

船长

发表评论