准备工作

  1. 服务器

    一个有公网IP的服务器,我这里使用的是腾讯云轻量应用服务器,系统是Ubuntu 20.04 LTS,单核2G,5M带宽500G流量。这个配置做derp服务基本是够用的,因为我的设备之间基本都能正常建立p2p连接所以流量方面也不会消耗太多。

  2. 域名

    一个解析到上述服务器公网IP的域名,这个域名是用来访问derp中转服务的。

安装derper server

首先要安装golang 如果系统已经有go环境则跳过

# 直接下载go官网最新的包
wget https://go.dev/dl/go1.20.4.linux-amd64.tar.gz
# 解压到/usr/local目录下
tar -C /usr/local -xzf go1.20.4.linux-amd64.tar.gz
# 配置环境变量
export PATH=$PATH:/usr/local/go/bin
# 检查是否安装成功
go version
# 回显 go version go1.20.4 linux/amd64 则表示安装成功

安装derper server

这里要注意它会默认安装到 $HOME/go/bin 目录下,比如我的就是在 /root/go/bin 目录

# 安装
go install tailscale.com/cmd/derper@main
# 加入到PATH
export PATH=$PATH:/root/go/bin
# 验证一下
derper -h
# 回显帮助信息则表示安装成功

使用derper server

简单点可以直接运行

# -a 设置端口(如果不用https则使用非443端口且不设置-certmode manual)
# -hostname 指定域名
# stun端口不建议修改
derper -a :8080 -hostname derper.eber.vip

搞复杂点可以使用systemd管理或者用pm2等工具管理

# 创建derper.service文件
vim /etc/systemd/system/derper.service
# 写入以下内容
[Unit]
Description=derper service
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=1
User=root
ExecStart=/root/go/bin/derper -a :8080 -hostname derper.eber.vip

[Install]
WantedBy=multi-user.target

配置tailscale或headscale使用自建derp

我之前是使用的headscale自建的服务端,但是用了一段时间有个版本升级不兼容旧的数据库结构,所以直接就换回tailscale了。官方免费的tailscale套餐已经足够我使用了,感觉没必要再用headscale了。

先说官方版tailscale的配置

登录到tailscal控制台后,点击Access Controls,直接在配置文件末尾大括号前一行加入如下配置

"derpMap": {
// 这个是设置不使用官方默认的derp节点
"OmitDefaultRegions": true,
"Regions": {
"900": {
"RegionID": 900,
"RegionCode": "CN",
"RegionName": "Shanghai",
"Nodes": [
{
"Name": "腾讯云上海",
"RegionID": 900,
"HostName": "derper.eber.vip",
"DERPPort": 8080,
},
],
},
},
},

配置完成后点击Save保存,然后在客户端设备上执行 tailscale netcheck,会有类似如下输出。

root@oc-au1:~# tailscale netcheck

Report:
* UDP: true
* IPv4: yes, 152.67.99.59:59810
* IPv6: no, but OS has support
* MappingVariesByDestIP: false
* HairPinning: true
* PortMapping:
* Nearest DERP: Shanghai
* DERP latency:
- CN: 295ms (Shanghai)
# 显示你配置的节点RegionCode和RegionName则为成功,然后可以两个客户端互ping进一步确认是否能正常中转流量。

再说headscale的配置

# 直接修改 /etc/headscale/config.yaml 文件
# 先注释掉官方的默认derp urls配置
#urls:
# - https://controlplane.tailscale.com/derpmap/default
# 然后加入自己的derp配置
paths:
- /etc/headscale/derp.yaml
# 创建 /etc/headscale/derp.yaml 文件
vim /etc/headscale/derp.yaml
# 写入以下内容
regions:
900:
regionid: 900
regioncode: CN
regionname: Shanghai
nodes:
- name: 腾讯云上海
regionid: 900
hostname: derper.eber.vip
derpport: 8080
stunport: 3478
stunonly: false

OK!结束🔚,还想再说一句 官方版的用着确实省心。个人用途的话免费版基本足够了不建议用headscale 太折腾了!