Tailscale组网神器

Tailscale组网神器

Tailscale介绍

Tailscale是一种安全的、易于使用的虚拟私人网络(VPN)解决方案,基于WireGuard,支持跨平台、跨设备的无服务器连接。它可以将位于不同地方的计算机、服务器和设备连接起来,形成一个安全的私有网络,从而实现远程访问和协作。

目前tailscale支持几乎所有的平台,包含android、ios、mac、linux及window

应用场景

  • 安全地访问服务器或者nas
  • 将移动端设备接入网络,通过配置scrcpy,来做到无线操作android设备;或基于甲壳虫adb,实现2个android设备间的访问控制
  • 组建虚拟集群,可以把不同区域的服务器组建局域网,来访问或部署私有云服务

使用方式

  1. 先在tailscale官网注册账号并登录,https://login.tailscale.com/start
  2. 在设备A上,下载客户端并登录
  3. 在另一个设备B上,下载客户端并登录
  4. 此时上面2台设备已经完成了组网,并处于同一个虚拟网络中,可以在admin console查看你账号下的所有设备
    tailscale-admin-console-1

额外说明

  • 如果你在设备A80端口上部署了服务,并开放了该端口访问权限,那么你可以在B设备上直接通过设备 A的主机名:80 端口来访问该服务
  • tailscale的速度优势,在于两个设备先通过中转节点转发数据,数据使用了非对称加密,保证安全性;如果发现2台设置可以p2p访问,无需经过中转服务器访问,那么转换数据传输方式为p2p,进而提高响应速度

局限

tailscale-ping

如果你是linux的安装方式,可以在命令行中使用tailscale status来查看目前的设备连接情况,然后再使用tailscale ping 设备主机名来查看网络延迟,可以看出默认延迟较高,原因是tailscale在国内是没有derp中转服务器的,所以如果你所处的网络无法p2p访问,信息只能到国外走一圈再回来,延迟自然就高了,你可以通过tailscale netcheck命令来查看目前可用的derp中转服务器节点及延时

tailscale-netcheck

可以看到延迟最低的derp也位于香港,大陆是没有的,所以解决办法只能是自己在国内搭建一个derp的中转结点来实现转发数据了,官方提供了安装教程:Custom DERP Servers

自定义Derp中转服务器

启动docker服务

我这里采用的是docker的安装方式,compose配置参考如下,有3点需要单独说明下

  1. 为了开启derp的鉴权,需要提供tailscale.sock文件地址,而该文件是在服务器端也作为客户端登录了tailscale之后才有的,所以我的方法是在docker主机上先安装tailscale并登录,然后再把该文件映射到容器中,即可开启鉴权
  2. 需要自己去申请letsencrypt的证书,域名与DERP_DOMAIN变量一致,映射到/app/certs目录即可
  3. derp映射出来的加密端口不需要一定是443,可按需更改
---
version: '3.1'
services:
  derper:
    image: fredliang/derper
    container_name: derper
    restart: always
    volumes:
      - /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock
      - /app/certs:/app/certs
    environment:
      - DERP_ADDR=:443
      - DERP_HTTP_PORT=80
      - DERP_DOMAIN=derp.foo.bar # 改为你自己的域名
      - DERP_CERT_MODE=manual
      - DERP_VERIFY_CLIENTS=true
    ports:
      - 19443:443
      - 3478:3478/udp

在Admin Console中添加配置

在服务启动完成后,在tailscale官网登录admin console,在Access Control菜单下,JSON配置中添加如下配置,即可开启自定义derp节点

// Example/default ACLs for unrestricted connections.
{
    // 其它配置...
    "derpMap": {
        "OmitDefaultRegions": true,
        "Regions": {
            "900": {
                "RegionID":   900,
                "RegionCode": "foo_derp", // derp名称,可随意起
                "RegionName": "Shang Hai", // 区域名称
                "Nodes": [
                    {
                        "Name":     "CG_SH",
                        "RegionID": 900,
                        "HostName": "derp.foo.bar", // derp域名
                        "DERPPort": 19443, // derp端口
                    },
                ],
            },
        },
    },
}

效果

在开启自定义derp服务器后,延迟明显降低,效果如下:

tailscale-derp-ping

冀ICP备2022000825号-1

京公网安备 11010802038733号