大内网战略(6):自建 Tailscale DERP 中继服务器 保姆级教程

 看到一篇很好的Tailscale DERP文章, 并成功搭建, 为了防丢, 转载一下

原文链接:

大内网战略(6):自建 Tailscale DERP 中继服务器 保姆级教程 - 知乎 (zhihu.com)icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/638910565

2023.07.13 更新:修正了一些命令的错误。

2023.07.19更新:想做个国外云版的教程,但是有点忘记怎么买便宜域名和dns解析搬到cloudflare上了,最近有点忙先挖个坑

2023.08.02:海外服务器版本 凉拖捞佬Pro:大内网战略(6.5):自建 Tailscale DERP 中继服务器 海外版

2023.08.27:更新常见失败的检查步骤

2023.09.13:更新解决go版本太旧导致安装失败的问题

自建中继服务器

原文:tailscale自建derper服务器中转,使用自定义端口_独步-的博客-CSDN博客,欢迎去给这位大佬的博客点个赞

以下示例借鉴上面链接的方法,使用阿里云演示(阿里云给我打钱!),国内其他云服务提供商操作类似。如果使用国外的云,因为国外域名无需备案,有另一套脚本可以自动申请 SSL 证书:headscale保底设施之DERP中继服务器自建(我没用过,不保证一定 work)。

以下情况你应该考虑国内云:

  • 希望照着我的作业抄。
  • 希望低延迟。
  • 你薅到了国内云的优惠(挺多的,特别是学生优惠,我这台就是几十块钱1年的阿里云学生机)。

以下情况你应该考虑国外云:

  • 你薅到了微软的免费 azure 100 学生机(这个翻车率巨高,但是薅到就是血赚),或者 github 学生包的其他权益。
  • 人在国外。
  • 希望大带宽(远程看视频),而对延迟不敏感。显然,国外云延迟都很高(即使是香港,大部分时候也是不如境内云),而国内云便宜机子给的带宽一般都很小,不足以看 1080p 视频。

准备工作

知道怎么购置服务器、域名,以及做域名解析和 SSL 证书申请的可跳过

首先,买一台阿里云的便宜机子,最便宜那档就行。系统选 Ubuntu

之后在管理界面设置root密码。

然后买一个域名,买最便宜的:

域名查询结果_域名信息_域名交易-万网-阿里云旗下品牌

比如我买个 test23333.top ,.top 第一年 9 元,之后续费每年 29,应该是最便宜的后缀了。

记得选后缀,默认的 .com 很贵的。如果名字被人注册了就换一个

乱七八糟的服务我们不要。之后按照流程走就行了,这里就不放图了,我可不想真把这个域名买了

买了域名之后要备案,按照阿里云的流程走就行了。很多人很抵触备案,其实备案速度挺快的,两三天就能搞定(至少在广东)。这里就不放图了,我总不能财大气粗到买个域名备个案,然后写完教程就抛弃吧。

(ICP备案和公安备案是两种不同的备案,都要做,先ICP后公安。公安备案的坑请见:公安备案中,“交互式”和“非交互式”怎么选?

现在,你应该有一个服务器:

(记住服务器的 IP,待会解析要用)

一般阿里云便宜的机子都是轻量应用服务器

以及一个域名:

这个域名已经备案成功了

接下来解析域名:

添加解析记录,主机记录填啥随你喜欢(我填derp,这样整个域名就是 derp.域名.top),记录值填服务器的公网 IP,然后确定。

然后就是申请 SSL 证书。首先“立即购买”领取免费的 20 张证书额度,然后创建一个新的证书并填信息:

填好子域名和个人信息:

因为都是阿里云的东西,所以不用你自己去填解析记录,自动验证。出来“验证成功”就可以关掉了。

显示“已签发”,点击下载,下载 nginx 版

把下载的压缩包解压,并且重命名文件如下所示。把 .pem 后缀改为 .crt,并且两个文件名都是子域名。

记得打开 windows 资源管理器的显示后缀名再修改!!!

然后上传这两个证书到服务器。

首先,回到服务器管理页面,把之前解析的子域名加到服务器上

随便点击空白处进入这台服务器的管理页面

不用解析,我们之前已经解析了

然后用root账户远程连接,没反应就多点几下:

进入远程bash后,首先新建证书文件夹:

输入 sudo mkdir /usr/local/cert 并回车

然后打开文件管理:

不要在乎为什么用户突然不是root了

把文件上传到 /usr/local/cert 里面去。一次只能选一个,把两个文件都传上去就行。

安装 Tailscale 客户端

首先在你的服务器上安装 tailscale 客户端。参考 tailscale 官网的命令,在阿里云的终端中输入

curl -fsSL https://tailscale.com/install.sh | sh,因为下载速度很慢可能要很久。

安装成功后,先 不要 输入sudo tailscale up 启动tailscale,因为启动后 iptables 会添加规则导致阿里云workbench无法使用。

安装 Golang

卸载旧版本

如果你的服务器上有其他软件依赖旧版本的 go,将其升级为新版本可能会发生不可预料的后果,请务必仔细评估与衡量。

旧版本 golang 会极大概率导致 derp 安装失败。如果你运行 go version 显示的是旧版本:

那就要卸载重安;如果显示命令不存在或者是最新版本(怎么看在后面),就可以忽略这步。

卸载:

rm -rf /usr/local/go

最好重新启动服务器。

查看最新版本

打开网址 https://go.dev/doc/install

下面截图里显示最新版本是 1.21.1

方法一:直接下载

输入 wget https://go.dev/dl/go<最新版本号>.linux-amd64.tar.gz 并回车,出现以下文字就是下载成功。

下载成功。这是台部署在海外的云服务器

如果出现下图,就是下载失败(被墙了),走方法二。

方法二:本机下载再传上去

下载 https://go.dev/dl/go<最新版本号>.linux-amd64.tar.gz ,然后回到阿里云workbench,和之前上传证书文件一样使用“新文件管理”把下好的压缩包上传到服务器上。

不管用什么方法,总之现在你已经将golang的安装包弄到你的服务器上了。

回到workbench命令行,解压下载好或者上传好的文件:

sudo tar -C /usr/local -xzf $HOME/go<最新版本号>.linux-amd64.tar.gz

我这里是 root 所以没有 sudo

切换到英文输入法。输入sudo vim /etc/profile 并回车。

按下 i 键,并操控键盘方向键将光标跑到最后:

回车换一行,粘贴以下代码:

export GOROOT=/usr/local/go
export GOPATH=/usr/local/gopath
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT/bin
export PATH=$PATH:$GOPATH/bin

粘贴后应该是这样的

按一下 esc 键退出编辑模式,再依次输入 :wq 然后回车就可以保存并退出vim:

自动跳回到服务器终端。输入source /etc/profile ,然后输入 go version检查有无安装 go 语言成功:

显示版本号就是安装成功

安装 derper 服务

建立目录:sudo mkdir -p /usr/local/gopath/bin

分别输入并回车以下两行代码,设置go代理+安装

go env -w GOPROXY=https://goproxy.cn,direct

go install tailscale.com/cmd/derper@main

安装成功

用vim建立启动脚本:sudo vim /usr/local/gopath/bin/runderper

一定要是英文输入法状态,按下 i 键进入编辑模式,然后粘贴以下代码:(自己修改为自己的域名,端口号56473也可以自己修改,随意的)

#!/bin/sh
cd /usr/local/gopath/bin
nohup ./derper -hostname <你的域名> -c=derper.conf -a :56473 -http-port -1 -certdir /usr/local/cert -certmode manual -verify-clients -stun > console.log 2>&1 &
echo $! > app.pid

像我这样

参数  -verify-clients用来防止别人(知道你的域名后)白嫖你的中继节点,只认服务器上 tailscale 客户端登录的账号。如果你有给朋友白嫖的需求,可以把这个参数去掉。

然后按一下 esc 再依次输入 :wq 然后回车,保存并退出。

然后输入下面脚本建立停止脚本:

sudo vim /usr/local/gopath/bin/stopderper.sh

一定要是英文输入法状态,按下 i 键进入编辑模式,然后粘贴以下代码:

#!/bin/sh
kill `cat app.pid`
rm -rf app.pid

然后按一下 esc 再依次输入 :wq 然后回车,保存并退出。

然后输入以下代码赋权

chmod +x /usr/local/gopath/bin/runderper
chmod +x /usr/local/gopath/bin/stopderper.sh

然后建立服务。输入 sudo vim /etc/systemd/system/derper.service,按 i 进入编辑模式,然后粘贴:

Description=derper服务
After=network.target
 
[Service]
Type=forking
ExecStart=/usr/local/gopath/bin/runderper
ExecStop=/usr/local/gopath/bin/stopderper.sh
 
[Install]
WantedBy=multi-user.target

保存并退出,不用说怎么操作了吧。

然后去阿里云控制面板,放行derp端口(TCP 56473 和 UDP 3478):

放行 TCP 56473

UDP 3478 是 STUN服务的

CMD SSH登录 & Tailscale 启动

接下来要使用 cmd ssh 登录服务器而不能接着在阿里云workbench上操作,因为启动tailscale后workbench就用不了了。

在 cmd 中输入 ssh root@服务器IP 回车,输入密码即可登录:

输入 sudo tailscale up,把弹出的网址复制到浏览器中进行授权。

(可选)清除 tailscales自定义规则

输入 iptables -L --line-numbers 查看目前的规则,可以看到 Chain INPUT 有条 ts-input。

记住前面的 num ,输入 iptables -D INPUT <num>(自行替换<num>,我这里是1)。

再输入 iptables -L --line-numbers,可以看见 ts 规则没了,阿里云的 workbench 也能上去了。

详细请见:

凉拖捞佬Pro:Tailscale 与阿里云八字不合的解决方法(1)

凉拖捞佬Pro:Tailscale 与阿里云八字不合的解决方法(2)

启动服务

然后设置开机启动

systemctl start derper
systemctl enable derper

这个时候,打开网址 https://<你的域名>:56473/,出现以下页面就是部署成功。

添加中继节点

回到 Tailscale 网页控制台,打开 Access Controls,添加下面代码在 ssh 前面:

	"derpMap": {
		// OmitDefaultRegions 用来忽略官方的中继节点,一般自建后就看不上官方小水管了
		"OmitDefaultRegions": true,
		"Regions": {
			// 这里的 901 从 900 开始随便取数字
			"901": {
				// RegionID 和上面的相等
				"RegionID": 901,
				// RegionCode 自己取个易于自己名字
				"RegionCode": "阿里云-深圳",
				"Nodes": [
					{
						// Name 保持 1不动
						"Name":     "1",
						// 这个也和 RegionID 一样
						"RegionID": 901,
						// 域名
						"HostName": "<你的域名>",
						// 端口号
						"DERPPort": 56473,
					},
				],
			},
		},
	},

我的如下图所示(我之前已经有一个中继了,所以途中有两个节点)。不要忘记保存。

阿里云-杭州就是刚才建立的节点

检查延迟

在自己的电脑上打开cmd(已经安装好了 tailscale 客户端),输入 tailscale netcheck

显示了中继节点名称,成功了!

没成功怎么办

  • 检查域名和端口有没有正确
  • 检查服务器防火墙和云安全面板有没有正确放行端口
  • 国内域名和服务器需要备案
  • 国外域名和主机检查域名和ip有没有被墙
  • 域名不要套cdn
  • vim /usr/local/gopath/bin/console.log 查看 derp 服务有没有成功启动
  • 17
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值