Tailscale国内自建derp免备案中继实现P2P打洞直连
服务器购买指南
本教程采用Rainyun的宿迁NAT服务器进行搭建,已经自用了仨月了,稳定不掉线,一个月一包烟的
在雨云的服务器购买界面选择宿迁NAT服务器


别管我的为啥速度这么低因为在转亲戚没wifi只能连热点了,信号就3格还**4G
连接到服务器
点击上方链接下载Finalshell连接工具安装包,下载完成后双击安装完成后启动finalshell软件
点击文件夹标志

在弹出的第一个窗口中点击第一个文件夹

上边是个GIF动图,展示了完整的操作流程,文件大小约 1.6MB
主机名称:随便写
主机:服务器的ip地址-图中的顺序查看



复制上方的远程连接地址 粘贴到主机地址

接着更改端口,填写为地址冒号后面的数字
改完后如图

接着复制登录用的用户名和密码,点击确定保存。

此时我们在连接管理器中可以看到我们的服务器配选项,双击进行连接。
连接成功后如图所示

Tailscale安装
如果你还没有安装 Tailscale,建议先阅读Tailscale基础安装教程完成客户端的安装
首先更新系统软件包
sudo apt update && apt upgrade

终端会提示是否更新,输入Y后回车进行系统更新。
过程会比较久多等一会,可以起身喝口水上个厕所什么的
一般不会超过3分钟,如果看到终端输出这个卡很久,不要动,耐心等一会即可

安装Tailscale
复制以下命令并运行
国内加速脚本地址和官网地址,
curl -fsSL https://ts-mirror.xedge.cc/install.sh | sh
curl -fsSL https://tailscale.com/install.sh | sh
一般会在下图的这里卡很久,这是因为安装的软件包地址在国外,右侧会显示剩余时间,如果速度为0了没有关系
按 Ctrl+C 强制退出安装过程,重新复制指令安装一次,不会清理掉上一次的缓存,多试几次就好了。

当看到这里的时候就说明安装成功了

登录Tailscale
执行以下命令登录Tailscale:
tailscale up
这里会看到终端给出一个网址

完整的复制下来到浏览器中访问,会看到如图的内容

登录成功后终端中会提示登录成功了
配置DERP中继节点
如果不了解DERP的工作原理,可以查看Tailscale官方文档或者本站的另一篇教程
在安装服务器的时候若没有选择安装docker和docker-compose,可以在雨云的控制面板中的以下位置选择docker并安装


容器运行需要开放两个端口,我们首先在Rainyun的控制面板开放端口
点击端口设置

点击新建规则

NAT主机的端口需要设置的稍微高一点才能保证内网端口一致,其实不设置一样的端口也没事(个人习惯不同,尽量按教程的操作来就行)

安装DERP容器
容器运行需要开放两个端口,首先在Rainyun的控制面板开放端口
在电脑上新建一个TXT文件,复制下方的代码进去,根据配置开放端口
因为Rainyun(雨云)的NAT机默认是不提供10000以下的端口的,
先创建端口,然后修改下方的配置文件
services:
derper:
image: ghcr.nju.edu.cn/yangchuansheng/ip_derper:latest
container_name: derper
restart: always
ports:
- "56678:443" # 这里的56678请改成你自己在上面配置中创建的tcp+udp协议的端口
- "56679:3478/udp" #3478 为stun默认端口,如果你是用非NAT主机则改回3478,否则修改为上面创建的udp协议端口,然后在服务器提供商的端口控制界面放行这两个端口就好了
volumes:
- /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock # 映射本地的tailscale 客户端验证连接
environment:
- DERP_ADDR=:56678 # 此处需要与上面的同步修改
- DERP_CERTS=/app/certs
- DERP_VERIFY_CLIENTS=true
修改好后我们保存,重新命名文件夹为下面的名称
docker-compsoe.yaml
确保当前Finalshell的预览文件框位置如图

在空白处右键点击上传,将我们修改好的配置上传到服务器,上传完成之后点击刷新就可以看到我们的配置文件

在终端中输入下面的命令启动derp节点
docker-compose up -d
接着输入下面的命令检查容器状态
docker ps -a
期待的输出应该和图中的差不多

修改ACL配置
修改地址:Tailscale ACL配置页面
ACL的配置相当于告诉每一个节点找谁去问如何找到目标节点+权限管理,修改前记得备份哦
修改提示都写好了,你可以将页面中的配置按提示换成自己的即可,建议操作步骤
- 先备份原配置
- 复制这份配置覆盖原有配置
- 保存检查是否出现语法错误(会有提示的)
{
"derpMap": {
"OmitDefaultRegions": false,
"Regions": {
"901": {
"RegionID": 901,
"RegionCode": "HZ",
"RegionName": "testserver",
"Nodes": [
{
"Name": "testserver_1",
"RegionID": 901,
"DERPPort": 56678,
"STUNPort": 3478,
"ipv4": "x.x.x.x", #这里填写公网服务器的IP
"InsecureForTests": true
}
]
}
}
},
"acls": [
{
"action": "accept",
"src": ["*"],
"dst": ["*:*"]
}
],
"ssh": [
{
"action": "check",
"src": ["autogroup:member"],
"dst": ["autogroup:self"],
"users": ["autogroup:nonroot", "root"]
}
]
}
这里默认你已经在电脑上登陆了Tailscale,如果没有可以去看本教程的上一篇。
搭建完成之后就结束了,接下来验证是否搭建成功
输入
tailscale netcheck
如果输入和我差不多,能看到自建的节点名称则说明成功了

检验成果
Tailscale提供了magicdns这个功能,该功能可以让我们直接使用设备名来进行访问而无需每次都手打ip
- 使用Win+R ,输入cmd,打开命令行界面
- 输入tailscale ping
nas的设备名
这里我将两台设备都放在四层nat后,并且关闭ipv6(有v6就直连了),模拟最差的网络环境,可以看到via后面的就是连接方式,这里就是通过我们自建的derp节点进行转发访问,我们搭建derp中转的保底服务就完成了。
