当前位置: 首页 > news >正文

自建 Tailscale 的 DERP 节点

安装Golang开发环境

$ wget https://go.dev/dl/go1.23.1.linux-amd64.tar.gz
$ sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.23.1.linux-amd64.tar.gz

安装成功后,需要配置环境变量,把 Go 的可执行文件,和 ~/go/bin 目录加入 PATH。在.bashrc(如果你用 zsh,那就是.zshrc)中添加如下命令:

export PATH=$PATH:/usr/local/go/bin:~/go/bin

重新载入.bashrc 后,执行 go install tailscale.com/cmd/derper@main,安装 derper

go install tailscale.com/cmd/derper@main

此外,因为 derper 不能自动更新,所以需要设定一个定时任务来定期重新运行 go install 命令,如:

0 0 * * * go install tailscale.com/cmd/derper@main

测试 derper

在运行 derper 之前,你需要给这个 服务器绑定一个域名,derper 会用这个域名来申请 Let’s Encrypt 的 SSL 证书。申请和购买域名我就不在这废话了,网上有很多相关文章。

此外,因为 derper 需要监听 443 端口,而我又不想以 root 身份运行它,所以我选择给它分配 CAP_NET_BIND_SERVICE 这个 capability,来让它有监听低位端口的权限。

sudo setcap CAP_NET_BIND_SERVICE=+eip ~/go/bin/derper

后就可以手动运行 derper 来测试了。

derper -c derper/derper.conf -hostname derp.mydomain.com

这时候 derper 就会开始监听 443 端口。

如果 443 端口被占用,那么就需要手动指定监听的端口(比如 14443),SSL 证书也要自己通过 acme.sh 之类的工具生成,而且证书的名字必须符合域名.crt(即 derp.mydomain.com.crt)这种格式。

derper -c=derper/derper.conf -hostname derp.mydomain.com -a :14443 -certmode manual -certdir /home/admin/certs

此时用浏览器访问 https://derp.mydomain.com,会得到一个这样的网页:

<html><body>
<h1>DERP</h1>
<p>This is a<a href="https://tailscale.com/">Tailscale</a><a href="https://pkg.go.dev/tailscale.com/derp">DERP</a>server.
</p>

配置服务和防火墙

每次手动执行 derper 命令肯定不现实,所以这时候就要 systemd 出马了。进入 /etc/systemd/system,新建一个名为 derper.service 的文件,输入如下内容:

[Unit]
# 服务名字
Description=Tailscale DERP Server
# 在网络服务启动后启动这个服务
After=network.target[Service]
# 改成你的用户名
User=admin
# 总是自动重新启动
Restart=always
# 重启前等待5秒
RestartSec=5
# 启动derper的命令,跟上面测试用的命令一样
ExecStart=/home/admin/go/bin/derper -c=/home/admin/derper/derper.conf -hostname derp.mydomain.com
# 停止derper的命令
ExecStop=/bin/kill $MAINPID
# 赋予CAP_NET_BIND_SERVICE这个capability
AmbientCapabilities=CAP_NET_BIND_SERVICE[Install]
WantedBy=multi-user.target

然后分别执行如下命令:

# 载入service文件的变更
$ sudo systemctl daemon-reload# 启动derper
$ sudo systemctl start derper# 检查状态
$ sudo systemctl status derper
● derper.service - Tailscale DERP ServerLoaded: loaded (/etc/systemd/system/derper.service; enabled; vendor preset: enabled)Active: active (running) since Wed 2023-02-08 14:27:13 CST; 2s agoMain PID: 4944 (derper)Tasks: 6 (limit: 1006)Memory: 2.6MCPU: 16msCGroup: /system.slice/derper.service└─4944 /home/admin/go/bin/derper -c=/home/admin/derper/derper.conf -hostname derp.mydomain.comFeb 08 14:27:13 iZj6caykwpo11gr659a9avZ systemd[1]: Started Tailscale DERP Server.
Feb 08 14:27:13 iZj6caykwpo11gr659a9avZ derper[4944]: 2023/02/08 14:27:13 derper: serving on :443 with TLS
Feb 08 14:27:13 iZj6caykwpo11gr659a9avZ derper[4944]: 2023/02/08 14:27:13 running STUN server on [::]:3478# 开机自启动
$ sudo systemctl enable derper
Created symlink /etc/systemd/system/multiuser.target.wants/derper.service → /etc/systemd/system/derper.service.
Unit /etc/systemd/system/derper.service is added as a dependency to a non-existent unit multiuser.target.

因为 derper 依赖 HTTP、HTTPS 和 STUN 协议,所以需要配置 防火墙或 安全组,开放 80/tcp443/tcp,和 3478/udp 端口,修改为自己设置的端口 14443 14444(记得是udp)等。

配置 Tailscale

现在自建的 DERP 节点就成功启动了,接下来我们就需要让 Tailscale 知道这个节点的信息。进入 Tailscale 的 Admin console,进入 Access controls,在 JSON 中增加如下配置:

{// 前略"derpMap": {// 如果想要所有节点只使用自建中继的话,就启用这条配置// "OmitDefaultRegions": true,"Regions": {"900": {"RegionID":   900,"RegionCode": "Aliyun-HKG","Nodes": [{"Name": "Aliyun-HKG-1","RegionID": 900,"HostName": "derp.mydomain.com",},],},// 如果有多个区域、多个节点,或者使用了自定义端口,那么可以参考这部分"901": {"RegionID": 901,"RegionCode": "Oracle-OSAKA","Nodes": [{"Name": "Oracle-OSAKA-1","RegionID": 901,"HostName": "osaka1.derp.mydomain.com","DERPPort": 14443,//自己的端口 默认443},{"Name": "Oracle-OSAKA-2","RegionID": 901,"HostName": "osaka2.derp.mydomain.com","DERPPort": 14443,//自己的端口 默认443"STUNPort": 14444,//默认3478!!!},]}},},
}

大功告成!!!

Enjoy!!!

Tips

如果防止白嫖服务中可以加上 参数 -verify-clients 但是主机要运行一个客户端这样只有这个账号下的机器才可以使用此节点。

derper -c=derper/derper.conf -hostname derp.mydomain.com -a :14443 -certmode manual -certdir /home/admin/certs -verify-clients

附录

https://www.boris1993.com/self-hosting-tailscale-derp.html


http://www.mrgr.cn/news/38231.html

相关文章:

  • S2B2C商城对新兴产业的赋能
  • 《空间计量经济学:从横截面数据到空间面板》(书籍推荐)
  • GUI-分组和滚动View
  • Chromium 设置页面打开系统代理源码分析c++
  • Cilium + ebpf 系列文章- (七)Cilium-BGP-自定义定时器-ebgp多跳-优雅重启-MD5加密-传播团体字
  • linux中的软件包格式与库文件
  • OpenStack Yoga版安装笔记(十四)启动一个实例
  • BFS 解决最短路问题详解
  • 什么是具身智能仿真平台
  • crypto-js解密报错malformed utf-8 data
  • [半导体检测-9]:KLA Surfscan SP1 SP3 SP5 SP7各自使用的激光器光源有哪些?
  • 700. 二叉搜索树中的搜索
  • 大模型与智能体的市场调研分析
  • MySQL 索引选择详解
  • 什么东西可以当做GC Root,跨代引用如何处理?
  • 学生台灯买个什么样的好?一文读懂小学生台灯哪个品牌更护眼
  • 微调大模型(Finetuning Large Language Models)—Training tuning(五)
  • 第 18 章 从猫爷借钱说起——事务简介
  • Cadence23中的一些设置
  • 多路复用和事件轮询机制