近期折腾 tailscale 的一些心得
一、我的需求 最近自己装了一台高配台式机,打算当作自己的主力机器使用,笔记本电脑就作为一个移动 UI,工作都远程连到家里台式机使用。 为了满足这个需求,就需要 NAT 穿透,正好最近 mesh vpn 的概念很火,又看到 tailscale 正好对个人用户免费,于是就想试试看了。 二、TailScale 是什么 VPN 是什么? 虽然国人看到 VPN 第一反应应该是“翻墙”,但 VPN 最初应该也是最普遍的用途应该是用来做内网打通, 这也是其名字虚拟私有网络的用意,VPN 让你可以在公开的网络线路上建立一个私有的子网, 然后将所有接入的机器都分配一个私有的内网地址,让他们可以通过 VPN 的私有网络互联。 比如最常见的需求就是,公司有一个内网办公环境,当你外出办公时,也希望你的电脑能够接入办公网络。 因为外网的机器和内网的机器不能互联,所以一般会有一个中心服务器, 所有的子节点都和中心服务器相连,然后中心服务器转发所有的流量。 这样做的缺点显而易见,首先是中心服务器(hub)会成为瓶颈。 其次,某种极端情况下,如果节点 A 和 节点 B 距离非常近,但是都离 hub 很远, 这样就会导致非常高的延迟。 那么我们就会想,能不能让节点间直接互联呢? 这就是 mesh VPN,其实现就是 wireguard。 wireguard 的每一个节点都会存储其他所有节点的信息,并且和其他所有的节点都建立 tls 连接。 如果涉及到内网穿透的话,那么你需要找到一台处于网关位置的节点(内外网都可达),将其设置为 coordinator, 扮演类似于 hub 的角色, 分发穿透内外网的流量。 wireguard 的缺点在于: 配置比较繁琐 维护也比较困难,增删节点都需要改动所有节点的配置 基于上述这些痛点,tailscale 做了一些改进: 在原有的 ICE、STUN 等 UDP 协议外,实现了 DERP TCP 协议来实现 NAT 穿透 基于公网的 coordinator 服务器下发 ACL 和配置,实现节点动态更新 通过第三方(如 Google) SSO 服务生成用户和私钥,实现身份认证 简而言之,我们可以认为 tailscale 是更为易用版的、功能封装更为完善的 wireguard。 三、TailScale 能做到什么 只要你的机器可以连到公网,tailscale 可以让所有的...