Tailscale组网神器
Tailscale介绍
Tailscale是一种安全的、易于使用的虚拟私人网络(VPN)解决方案,基于WireGuard,支持跨平台、跨设备的无服务器连接。它可以将位于不同地方的计算机、服务器和设备连接起来,形成一个安全的私有网络,从而实现远程访问和协作。
目前tailscale支持几乎所有的平台,包含android、ios、mac、linux及window
应用场景
- 安全地访问服务器或者nas
- 将移动端设备接入网络,通过配置scrcpy,来做到无线操作android设备;或基于甲壳虫adb,实现2个android设备间的访问控制
- 组建虚拟集群,可以把不同区域的服务器组建局域网,来访问或部署私有云服务
使用方式
- 先在tailscale官网注册账号并登录,https://login.tailscale.com/start
- 在设备A上,下载客户端并登录
- 在另一个设备B上,下载客户端并登录
- 此时上面2台设备已经完成了组网,并处于同一个虚拟网络中,可以在admin console查看你账号下的所有设备
额外说明
- 如果你在设备A80端口上部署了服务,并开放了该端口访问权限,那么你可以在B设备上直接通过设备
A的主机名:80
端口来访问该服务 - tailscale的速度优势,在于两个设备先通过中转节点转发数据,数据使用了非对称加密,保证安全性;如果发现2台设置可以p2p访问,无需经过中转服务器访问,那么转换数据传输方式为p2p,进而提高响应速度
局限
如果你是linux的安装方式,可以在命令行中使用tailscale status
来查看目前的设备连接情况,然后再使用tailscale ping 设备主机名
来查看网络延迟,可以看出默认延迟较高,原因是tailscale在国内是没有derp中转服务器的,所以如果你所处的网络无法p2p访问,信息只能到国外走一圈再回来,延迟自然就高了,你可以通过tailscale netcheck
命令来查看目前可用的derp中转服务器节点及延时
可以看到延迟最低的derp也位于香港,大陆是没有的,所以解决办法只能是自己在国内搭建一个derp的中转结点来实现转发数据了,官方提供了安装教程:Custom DERP Servers
自定义Derp中转服务器
启动docker服务
我这里采用的是docker的安装方式,compose配置参考如下,有3点需要单独说明下
- 为了开启derp的鉴权,需要提供tailscale.sock文件地址,而该文件是在服务器端也作为客户端登录了tailscale之后才有的,所以我的方法是在docker主机上先安装tailscale并登录,然后再把该文件映射到容器中,即可开启鉴权
- 需要自己去申请letsencrypt的证书,域名与DERP_DOMAIN变量一致,映射到/app/certs目录即可
- 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服务器后,延迟明显降低,效果如下: