收起左侧

Tailscale国内自建derp中继+P2P打洞直连喂饭教程

2
回复
3118
查看
[ 复制链接 ]

4

主题

8

回帖

0

牛值

fnOS系统内测组

2025-1-25 11:53:04 显示全部楼层 阅读模式

Tailscale国内自建derp中继实现P2P打洞直连

论坛的markdown编辑器不支持一些语法,推荐去这里看,更清晰一些

fnnas.wiki 在网络配置里第三个就是了

服务器购买指南

本教程采用Rainyun的宿迁NAT服务器进行搭建,已经自用了仨月了,稳定不掉线,一个月一包烟的

在雨云的服务器购买界面选择宿迁NAT服务器

雨云服务器购买界面-选择宿迁NAT服务器

服务器测速结果-上传速度显示

:: note 别管我的为啥速度这么低因为在转亲戚没wifi只能连热点了,信号就3格还**4G

::

连接到服务器

下载Finalshell SSH连接工具

点击上方链接下载Finalshell连接工具安装包,下载完成后双击安装完成后启动finalshell软件

点击文件夹标志

Finalshell界面-点击文件夹图标

在弹出的第一个窗口中点击第一个文件夹Finalshell新建连接-选择第一个文件夹

Finalshell操作演示动图

::note 上边是个GIF动图,展示了完整的操作流程,但可能有点大(40MB)

::

主机名称:随便写

主机:服务器的ip地址-图中的顺序查看

雨云控制面板-查看服务器IP地址

雨云控制面板-远程连接信息

雨云控制面板-复制远程连接地址

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

Finalshell连接配置-填写主机地址

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

改完后如图

Finalshell连接配置-端口设置完成

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

雨云控制面板-复制用户名密码

此时我们在连接管理器中可以看到我们的服务器配选项,双击进行连接。

连接成功后如图所示

Finalshell成功连接到服务器

Tailscale安装

:::tip
如果你还没有安装 Tailscale,建议先阅读Tailscale基础安装教程完成客户端的安装
::

首先更新系统软件包

sudo apt update && apt upgrade


![image](https://fnnas.wiki/assets/images/image-20250124061754-ya7ge0k-e84aefaf865b6ea5b6bdac01de3de963.png)

终端会提示是否更新,输入Y后回车进行系统更新。

:::tip
过程会比较久多等一会,可以起身喝口水上个厕所什么的
:::

一般不会超过3分钟,如果看到终端输出这个卡很久,不要动,耐心等一会即可

![系统更新过程-等待界面](https://fnnas.wiki/assets/images/image-20250124061754-ya7ge0k-e84aefaf865b6ea5b6bdac01de3de963.png)

### 安装Tailscale

复制以下命令并运行

国内加速脚本地址和官网地址,



curl -fsSL https://ts-mirror.xedge.cc/install.sh | sh
curl -fsSL https://tailscale.com/install.sh | sh

:::tip 一般会在下图的这里卡很久,这是因为安装的软件包地址在国外,右侧会显示剩余时间,如果速度为0了没有关系

按 Ctrl+C 强制退出安装过程,重新复制指令安装一次,不会清理掉上一次的缓存,多试几次就好了。

Tailscale安装过程-等待界面

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

Tailscale安装完成界面

登录Tailscale

执行以下命令登录Tailscale:

tailscale up

这里会看到终端给出一个网址

Tailscale登录-获取授权链接

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

Tailscale网页登录界面

登录成功后终端中会提示我们登录成功了

配置DERP中继节点

:::tip
如果你还不了解DERP的工作原理,可以查看我们的Tailscale网络架构详解
::

如果你在安装服务器的时候没有选择安装docker和docker-compose,那么请手动在雨云的控制面板中的以下位置选择docker并安装

雨云控制面板-Docker安装选项

雨云控制面板-确认Docker安装

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

点击端口设置

雨云控制面板-端口设置入口

点击新建规则

雨云控制面板-新建端口规则

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

::

雨云控制面板-端口规则配置

安装DERP容器

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

在电脑上新建一个TXT文件,复制下方的代码进去,根据配置开放端口

::warning 因为Rainyun(雨云)的NAT机默认是不提供10000以下的端口的,

因此我们需要先创建端口,然后修改下方的配置文件

::

services:
  derper:
    image: ghcr.io/yangchuansheng/ip_derper:latest
    container_name: derper
    restart: always
    ports:
      - "56678:56678" # 这里的56678请改成你自己在上面配置中创建的tcp+udp协议的端口
      - "56679:56679/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的预览文件框位置如图

Finalshell文件预览-上传配置文件

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

Finalshell文件预览-刷新配置文件

在终端中输入下面的命令启动derp节点

docker-compose up -d

接着输入下面的命令检查容器状态

docker ps -a

期待的输出应该和图中的差不多

DERP服务启动成功界面

修改ACL配置

修改地址:Tailscale ACL配置页面

::warning ACL的配置相当于告诉每一个节点找谁去问如何找到目标节点+权限管理,修改前记得备份哦

::

修改提示都写好了,你可以将页面中的配置按提示换成自己的即可,建议操作步骤

  1. 先备份原配置
  2. 复制这份配置覆盖原有配置
  3. 保存检查是否出现语法错误(会有提示的)
{
    // Declare static groups of users. Use autogroups for all users or users with a specific role.
    // "groups": {
    //      "group:example": ["alice@example.com", "bob@example.com"],
    // },
    "derpMap": {
        "OmitDefaultRegions": true,//这里的true是不开启官方derp节点,如果需要则改为false,不过由于这些节点都在境外所以我们还是不启用了
        "Regions": {
            "900": {
                "RegionID":   900,//不用改
                "RegionCode": "001",//不用改
                "RegionName": "SQrainyun",//不用改
                "Nodes": [
                    {
                        "Name":             "fff",
                        "RegionID":         900,
                        "HOSTName":         "rack1.raincs.cc",//这里将引号内的域名改成图1中的域名
                        "IPv4":             "103.40.13.68",//这里写NAT主机的ip地址
                        "DERPPort":         56678,//这里写tcp+udp协议的端口
                        "STUNPort":         56679,//这里改为udp协议的端口
                        "InsecureForTests": true,
                    },
                ],
            },
        },
    },
    // Define the tags which can be applied to devices and by which users.
    // "tagOwners": {
    //      "tag:example": ["autogroup:admin"],
    // },
    // Define access control lists for users, groups, autogroups, tags,
    // Tailscale IP addresses, and subnet ranges.
    "acls": [
        // Allow all connections.
        // Comment this section out if you want to define specific restrictions.
        {"action": "accept", "src": ["*"], "dst": ["*:*"]},
        // Allow users in "group:example" to access "tag:example", but only from
        // devices that are running macOS and have enabled Tailscale client auto-updating.
        // {"action": "accept", "src": ["group:example"], "dst": ["tag:example:*"], "srcPosture":["posture:autoUpdateMac"]},
    ],
    // Define postures that will be applied to all rules without any specific
    // srcPosture definition.
    // "defaultSrcPosture": [
    //      "posture:anyMac",
    // ],
    // Define device posture rules requiring devices to meet
    // certain criteria to access parts of your system.
    // "postures": {
    //      // Require devices running macOS, a stable Tailscale
    //      // version and auto update enabled for Tailscale.
    //  "posture:autoUpdateMac": [
    //      "node:os == 'macos'",
    //      "node:tsReleaseTrack == 'stable'",
    //      "node:tsAutoUpdate",
    //  ],
    //      // Require devices running macOS and a stable
    //      // Tailscale version.
    //  "posture:anyMac": [
    //      "node:os == 'macos'",
    //      "node:tsReleaseTrack == 'stable'",
    //  ],
    // },
    // Define users and devices that can use Tailscale SSH.
    "ssh": [
        // Allow all users to SSH into their own devices in check mode.
        // Comment this section out if you want to define specific restrictions.
        {
            "action": "check",
            "src":    ["autogroup:member"],
            "dst":    ["autogroup:self"],
            "users":  ["autogroup:nonroot", "root"],
        },
    ],
    // Test access rules every time they're saved.
    // "tests": [
    //      {
    //          "src": "alice@example.com",
    //          "accept": ["tag:example"],
    //          "deny": ["100.101.102.103:443"],
    //      },
    // ],
}
:::tip
这里默认你已经在电脑上登陆了Tailscale,如果没有可以去看本教程的上一篇。
::

搭建完成之后就结束了,接下来验证是否搭建成功

输入

tailscale netcheck

如果输入和我差不多,能看到自建的节点名称则说明成功了

Tailscale节点列表查看

检验成果

:::tip
Tailscale提供了magicdns这个功能,该功能可以让我们直接使用设备名来进行访问而无需每次都手打ip
::
  • 使用Win+R ,输入cmd,打开命令行界面
  • 输入tailscale ping nas的设备名

这里我将两台设备都放在四层nat后,并且关闭ipv6(有v6就直连了),模拟最差的网络环境,可以看到via后面的就是连接方式,这里就是通过我们自建的derp节点进行转发访问,我们搭建derp中转的保底服务就完成了。

DERP中继测试结果

收藏
送赞 1
分享

0

主题

5

回帖

0

牛值

江湖小虾

2025-1-25 12:48:46 显示全部楼层
宽带和手机都是ipv6,装上就直接打洞成功
对的,适用于不想开放到公网只私人用的便捷方案  详情 回复
2025-1-25 14:25

4

主题

8

回帖

0

牛值

fnOS系统内测组

2025-1-25 14:25:11 楼主 显示全部楼层
对的,适用于不想开放到公网只私人用的便捷方案
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则