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