前言: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

已有 2 条评论

  1. 2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
    新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
    新车首发,新的一年,只带想赚米的人coinsrore.com
    新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
    做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
    新车上路,只带前10个人coinsrore.com
    新盘首开 新盘首开 征召客户!!!coinsrore.com
    新项目准备上线,寻找志同道合的合作伙伴coinsrore.com
    新车即将上线 真正的项目,期待你的参与coinsrore.com
    新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
    新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com

  2. 新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com

添加新评论

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