·准备工作

知道怎么购置服务器、域名,以及做域名解析和 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 服务有没有成功启动