前段时间无意中了解到了TailScale这个产品。TailScale是一个基于WireGuard的Mesh组网工具,可以将所有设备连接起来,组成一个大内网。TailScale是商业软件,免费版最多支持20个设备和一个子网路由,对大多数家用需求来说应该够用了。 我的需求主要有如下几点: 外出时访问NAS 家里的Spectrum网络虽然有公网IP,但是我并没有将NAS的文件服务暴露到公网。我目前使用的是通过端口转发暴露的群晖上自带的OpenVPN,能用但是体验并不好。 安全访问 在不安全的网络(如酒店/机场)中加密通讯以保证安全。 地理位置 用于访问一些有地域限制的网络服务,比如网易云或B站。 特性 TailScale最大的优势是开箱即用,下面的所有功能均可通过Web界面配置,不需要写一行代码或配置文件。 Mesh组网 当在设备上安装并登录TailScale之后,该设备会被分配一个100.x.x.x的IP地址。 WireGuard中并没有服务器/客户端的区分,每个客户端都是一个Peer。Peer之间会首先尝试通过NAT穿透建立点对点连接。如果失败(比如设备位于无状态防火墙和Hard NAT背后)则会通过TailScale提供的Relay进行中继。 如果你想了解NAT穿透的原理,可以参考这篇TailScale的博客及其译文。 DNS TailScale网络中内置了DNS服务器,开启后默认使用设备名作为DNS Name。 子网路由(Subnet Routes) TailScale只能让我们访问安装了TailScale客户端的设备,那么能否通过安装了TailScale的设备访问同一物理网络中的其他设备? 这种情况下可以将某个安装了TailScale的Linux客户端配置为Subnet Router。这会让这台设备广播一条路由,比如192.168.0.1/24,这样从TailScale网络即可访问物理网络中的设备[1]。 出口节点(Exit Node) 网络中的任意节点(iOS设备除外)都可以被配置为出口节点,连接到TailScale时可以选择任意的出口节点作为出口。 自建 TailScale在全球范围内提供了数十个Relay服务器,但是全部位于中国境外。如果你网络要求比较高,也可以自建Relay服务器。 如果你不想使用商用软件,则可以选择TailScale的开源实现HeadScale,但是目前iOS客户端暂不支持自定义服务器。 References How NAT traversal works · Tailscale [译] NAT 穿透是如何工作的:技术原理及企业级实践(Tailscale, 2020) Custom DERP Servers · Tailscale [1] Subnet routers and traffic relay nodes · Tailscale