Tailscale 是如何工作的?

传统Hub and Spoke 网络架构优缺点

使用一台有固定 IP 地址的中心服务器, 转发传入连接
缺点:
- 中心化连接对于多地理位置, 多数据中心的用户不友好
- 难以扩大规模, 远距离传输延迟; 中心化连接方式存在绕路问题
解决方法:
- 使用 WireGuard 协议, 使用 WireGuard 在网络节点之间创建极端轻量的加密隧道
- 由于 WireGuard 很轻量, 所以可以很方便的创建多个 VPN中心服务器.
- 交换用户和服务器的公钥用于认证
使用 Mesh 网络的优缺点
使用 P2P 形式的 Mesh 网络, 可以直接进行连接, 但会更复杂
但
- 设备并不一定有固定 ip
- 为每个设备打开防火墙并不安全, 尤其是咖啡厅, 机场网络
- 监测和管理 P2P网络流量并不容易, 因为不经过中心服务器, 尤其是对于公司来说
Tailscale的解决方案
中心化的Encryption keys 交换方式
使用中心化的协调服务器(coordination server), 作为公钥交换的投递箱. 中心服务器仅用于交换公钥和制定政策.
- 每个节点为自己生成一对随机的公私钥对,并将公钥与其身份关联(见下文登录)。
- 节点联系协调服务器,留下公钥和关于该节点当前位置和所在域的说明。
- 节点下载其域内由其他节点遗留在协调服务器上的公钥和地址列表。
- 节点会用相应的公钥集配置其WireGuard实例。
私钥是不会上传到服务器中, Tailscale 节点之间的通信是端到端加密end-to-end encrypted 的, 也称为零信任网络(Zero trust networking)
节点的公钥只跟机器本身相关, Tailscale 使用 用户密码和 2-factor Auth(2FA)来验证用户身份
内网穿透(NAT Traversal)
节点通常在 NAT 和防火墙之后, 变得难以建立连接

使用如下的方法:

加密的TCP 中转
有些网络完全阻止 UDP 连接, 以至于无法使用 STUN 和 ICE, 在这种情况下, Tailscale 提供DERP(Designated Encrypted Relay for Packets) 服务器, 扮演 ICE 标准的TURN 服务器, 不过他们使用 HTTPS 流和 WireGuard 密钥而不是过时的 TURN 建议.
WireGuard 协议本身并不支持 TCP, 但是开源的 Tailscale 代码添加了这一特性, 包括 DERP 支持. Tailscale 公布了开源的 简化版 DERP 服务器代码
访问控制列表和安全策略(ACLS & Security policies)
Tailscale 在协调服务器上设置了 ACLS 和 安全策略, 并且自动分发到网络中所有的节点. 在所有的节点上配置同样的防火墙策略

在更更细致的层面上, 协调服务器通过设定每个连入节点相应的公钥, 来保护所有节点. 其他设备试图连入协调服务器, 但没有相应的公钥, 信息无法解密.
审计日志 (Audit log)
Tailscale将所有的连接日志发送到中心日志服务器, 并且每次连接会记录两次: 发送端和接收端, 这使得篡改日志(log tampering)变得容易被发现.
日志传输使用流式传输, 而不是批量处理, 这使得在几十毫秒时间内篡改日志变得及其困难.