第一次搞的时候很久都不通,最近618腾讯云搞活动弄了一台机器,再搭建一次好像又挺简单的了,没几分钟就搞定了。这里还是记录一下操作过程。
安装 Golang
还好我们平时就是Go语言开发,这一步驾轻就熟了。不过要注意国内比较难直接从官方下载Golang安装包。可以从阿里云的镜像上拉取。
我安装的是 1.24 最新版:https://mirrors.aliyun.com/golang/go1.24.3.linux-amd64.tar.gz
下载后,是一个 tar.gz 压缩包。解压一下。
tar -xzvf go1.24.3.linux-amd64.tar.gz
然后,把Go加到环境变量,修改.bashrc
:
export GO_HOME="~/go1.24.3"
export PATH=$PATH:"$GO_HOME/bin"
⚠️ 注意:因为解压后默认目录名是 go,容易和默认的GOPATH重合,所以我改了一下名字是go1.24.3
安装Derp
go install tailscale.com/cmd/derper@main
这一步没啥可说的。
生成自签名证书
DERP_IP="12.12.12.12"
openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout ${DERP_IP}.key -out ${DERP_IP}.crt -subj "/CN=${DERP_IP}" -addext "subjectAltName=IP:${DERP_IP}"
最好把生成的这两个文件放到一个单独目录中,例如~/derp/
下。
运行服务
sudo /home/ubuntu/go/bin/derper --hostname="12.12.12.12" -c derp.conf -a :18476 -certmode manual -certdir ./
- hostname 用于指定绑定的域名,现在新版本的derper也支持绑定IP了
- c:用于指定derper的配置文件,如果配置文件不存在,会自动生成一个默认的,所以这一步可以不用预先生成;但必须指定文件
- a:指定derper绑定的地址,这里主要用于修改端口为自定义端口
- certmode:设置为 manual 用于手动指定证书
- certdir:证书目录位置,因为我是在证书目录下执行的,所以直接
./
⚠️ 注意:必须使用 sudo 权限才能运行,否则会报权限不足。
配置防火墙
一般现在的云服务厂商都会有类似「安全组策略」或者「防火墙」之类的功能,只允许指定的端口访问。这里我们开了一个自定义的 18476 端口,就必须配置 18476 端口允许外部进行访问才行。
以腾讯云为例:
Tailscale 配置
去到 Tailscale 的 admin 控制台网页,修改 Access control。https://login.tailscale.com/admin/acls/file
在 acls 的下方增加 derpMap 配置:
// Example/default ACLs for unrestricted connections.
{
// 省略部分默认配置……
"acls": [
// 省略部分默认配置……
],
"derpMap": {
"OmitDefaultRegions": true,
"Regions": {
// 这里的 901 从 900 开始随便取数字
"901": {
// RegionID 和上面的相等
"RegionID": 901,
// RegionCode 自己取个易于自己名字
"RegionCode": "tencent",
"RegionName": "Guangzhou",
"Nodes": [
{
"Name": "custom",
"RegionID": 901,
"HostName": "12.12.12.12",
"DERPPort": 18476,
"InsecureForTests": true,
},
],
},
},
},
// 省略部分默认配置……
}
验证
去到客户端执行 tailscale netcheck
:
tailscale netcheck
Report:
* Time: 2025-06-05T09:34:53.161265896Z
* UDP: false
* IPv4: (no addr found)
* IPv6: no, but OS has support
* MappingVariesByDestIP:
* PortMapping:
* CaptivePortal: false
* Nearest DERP: Guangzhou
* DERP latency:
- tencent: 7.8ms (Guangzhou)
我发现windows、linux上安装的 tailscale 默认都会带 tailsacle 的命令行工具。唯独 MacOS 上没有。
后经我研究发现 MacOS 上的 tailscale 也是可以有命令行模式的:
/Applications/Tailscale.app/Contents/MacOS/Tailscale netcheck
Derp 服务化
默认你只能在当前 Shell 运行命令启动 derper,不方便运维。总不能一直开着 shell,或者一重启机器就要重新人工执行命令。
最好的方案是将 Derp 制作成 Ubuntu 的 Service,然后设置开机启动。
生成服务配置文件:/etc/systemd/system/derp.service
[Unit]
Description=TS Derper
After=network.target
Wants=network.target
[Service]
User=root
Restart=always
ExecStart=/home/ubuntu/go/bin/derper --hostname="12.12.12.12" -c /home/ubuntu/derp/derp.conf -a :18443 -certmode manual -certdir /home/ubuntu/derp/
RestartPreventExitStatus=1
[Install]
WantedBy=multi-user.target
⚠️ 注意:这里不再是在derp目录下执行了,所以-c
和-certdir
指定的路径都必须是绝对路径。
然后执行如下命令:
# 开机启动
sudo systemctl enable derp
# 现在立即启动
sudo systemctl start derp
去到客户端执行 tailscale netcheck
:
tailscale netcheck
Report:
* Time: 2025-06-05T09:58:17.150311805Z
* UDP: false
* IPv4: (no addr found)
* IPv6: no, but OS has support
* MappingVariesByDestIP:
* PortMapping:
* CaptivePortal: false
* Nearest DERP: Guangzhou
* DERP latency:
- tencent: 7.5ms (Guangzhou)