前言:tailscale是一个非常不错的组网工具,不过其节点服务器最近的也要80ms上下,因此自建derper节点是一个不错的选择。本文选择cloudflare作为dns服务提供商,acme.sh来申请域名证书并自动续期。

参考了这篇知乎文章

0.前置条件

一台debian服务器

基本上其他linux系统也行,这里持久化运行使用的systemd,另外请使用root用户来操作,如果使用其他用户在执行下面的命令时需加上sudo

一个域名

默认使用ssl加密,所以需要用到域名

1.安装go语言环境

首先卸载旧版本(如果存在)

rm -rf /usr/local/go

下载二进制文件

可以自己到https://go.dev/dl/选取版本
wget https://go.dev/dl/go1.22.3.linux-amd64.tar.gz

解压安装

同样的,如果安装了其他版本自行替换一下命令的版本就好
tar -C /usr/local -xzf ./go1.22.3.linux-amd64.tar.gz

配置环境(之前配置过就不用管)

sh -c 'echo "export GOROOT=/usr/local/go\nexport GOPATH=/usr/local/gopath\nexport GOBIN=\$GOPATH/bin\nexport PATH=\$PATH:\$GOROOT/bin\nexport PATH=\$PATH:\$GOPATH/bin" >> /etc/profile'
也可以自己把下面这段编辑进/etc/proflie
export GOROOT=/usr/local/go
export GOPATH=/usr/local/gopath
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT/bin
export PATH=$PATH:$GOPATH/bin
添加完成后执行以下命令使更改立即生效
source /etc/profile

验证安装

go version
如果输出如下截图内容即代表go语言环境安装完成

2.安装derper

创建目录

mkdir -p /usr/local/gopath/bin

编译安装

国内环境需要配置代理 go env -w GOPROXY=https://goproxy.cn,direct
go install tailscale.com/cmd/derper@latest

验证

derper --version

3.申请证书

安装acme.sh

curl https://get.acme.sh | sh -s [email protected]
[email protected]替换为你自己的邮箱

切换CA提供商(默认的zerossl也可以,习惯改用letsencrypt)

acme.sh --set-default-ca --server letsencrypt
如果命令执行失败可以执行source ~/.bashrc更新环境

获取dns api使用权限申请证书

参考acme.sh官方wiki,这里使用cf提供的全局权限,可能有一定的安全风险,选择安全的环境使用
export CF_Key="763eac4f1bcebd8b5c95e9fc50d010b4"
export CF_Email="[email protected]"

申请证书

替换为自己的域名
acme.sh --issue --dns dns_cf -d derp.example.com -d *.derp.example.com

证书安装

创建证书目录
mkdir /usr/local/cert
安装
acme.sh --install-cert -d derp.example.com \
--key-file       /usr/local/cert/derp.example.com.key \
--fullchain-file /usr/local/cert/derp.example.com.crt

4.使用systemd运行derper

创建derper.service

cat > /etc/systemd/system/derper.service << EOF
[Unit]
Description = derper server
After=network-online.target
Requires=network-online.target

[Service]
Type = simple
ExecStart = /usr/local/gopath/bin/derper -hostname derp.example.com -c=/usr/local/gopath/bin/derper.conf -a :8972 -http-port -1 -certdir /usr/local/cert -certmode manual -verify-clients -stun -stun-port 6783
Restart=on-failure
RestartSec=60

[Install]
WantedBy = multi-user.target
EOF
其中8972是tcp端口,6783是udp端口,都需要自行开放,端口支持自定义,-stun-port 6783可以去掉,默认端口为3478,上面的代码更改好后直接复制到命令行窗口中执行就行

启动并设置开机自启

systemctl start derper
systemctl enable derper
停止服务并关闭自启
systemctl stop derper
systemctl disable derper
查看运行状态
systemctl status derper
查看日志输出,-f为实时刷新,替换-r则显示倒序
journalctl -u derper -f

5.tailscale控制台添加节点

登录后顶栏选择Access Controls

"derpMap": {
    // OmitDefaultRegions 用来忽略官方的中继节点
    "OmitDefaultRegions": true,
    "Regions": {
        // 这里的 901 从 900 开始随便取数字
        "901": {
            // RegionID 和上面的相等
            "RegionID": 901,
            // RegionCode 自己取个易于自己名字
            "RegionCode": "qcloud",
            "RegionName": "上海",
            "Nodes": [
                {
                    // Name 多个服务器最好取不同数字,同一个RegionCode的Name不能一样
                    "Name":     "1",
                    // 这个也和 RegionID 一样
                    "RegionID": 901,
                    // 域名
                    "HostName": "<你的域名>",
                    // 端口号
                    "DERPPort": 8972
                    // STUN端口号没有自定义就不用填写
                    "STUNPort": 6783
                }
            ]
        }
    }
}

6.检查连接状态

tailscale netcheck


标签: linux, derper, tailscale, acme, go

添加新评论

icon_mrgreen.pngicon_neutral.pngicon_twisted.pngicon_arrow.pngicon_eek.pngicon_smile.pngicon_confused.pngicon_cool.pngicon_evil.pngicon_biggrin.pngicon_idea.pngicon_redface.pngicon_razz.pngicon_rolleyes.pngicon_wink.pngicon_cry.pngicon_surprised.pngicon_lol.pngicon_mad.pngicon_sad.pngicon_exclaim.pngicon_question.png