Tailscale控制协议的关键管理特性
Tailscale控制协议的关键管理特性
Tailscale是一个基于WireGuard的网络连接工具,它通过控制平面和数据平面的分离设计,实现了灵活且安全的网络连接管理。本文将详细介绍Tailscale控制协议中的关键管理特性,包括机器密钥、节点密钥、网络映射、TLS和分布式防火墙等方面的内容。
机器密钥
每当安装Tailscale客户端的机器都会首先生成一个curve25519机器私钥。控制平面的协调服务器会发布其自身的25519公钥(客户端通过公共TLS证书验证,可选地进行证书固定)。然后,客户端和控制服务器通过ECDH进行通信,具体使用的是小型NaCl crypto_box消息。
常见的机器密钥策略是要求预先授权。尝试加入需要机器授权的Tailscale网络时,必须先由网络管理员或自动化策略检查批准该机器。ECDH crypto_box握手过程可以证明服务器,客户端持有特定的机器私钥,并允许服务器基于此密钥施加策略。
节点密钥
在登录时,客户端会生成一个节点私钥。这是与机器密钥不同的curve25519密钥。该密钥的公钥部分会被传输到控制服务器,并与特定的机器密钥关联。
控制服务器将节点密钥与特定身份绑定。通常情况下,它会为节点密钥生成一个唯一的认证URL并返回给客户端,要求最终用户在网页浏览器中完成交互流程。这通常会触发与组织的身份提供商(如OAuth2或SAML)的认证流程,并可能包括多因素认证(MFA)步骤。控制服务器将节点密钥与人类身份绑定,并可以根据策略确定该密钥的使用方式。
节点公钥用于配置WireGuard对等节点。它会被分发到该节点允许通信的所有机器。一旦密钥自动轮换或手动禁用,撤销消息会立即发送。
在某些策略设置下,客户端可以随意重新生成节点密钥,并通过证明对旧密钥和新密钥的所有权来替换旧密钥。控制服务器也可以要求定期重新生成密钥,作为常规的密钥轮换,这大大增加了从被攻破的客户端中提取凭据的难度。
网络映射
一旦获得授权,客户端会保持一个长时间轮询的HTTPS请求连接到控制服务器,以便快速获取网络更新。因此,授权和撤销授权几乎可以在整个网络中即时生效,除非发生部分网络故障导致客户端与控制服务器分离,在这种情况下,密钥可以缓存几小时。
发送给客户端的网络映射仅包含与该客户端相关的网络元素,即用户或该机器的标签被允许通信的机器。
TLS
机器和节点密钥的协商完全通过TLS进行,以确保在网络中严格代理所有连接的情况下实现最大兼容性。这减轻了要求所有流量都必须使用TLS的组织的认证负担。
① ECDH exchange over TLS
② Begin interactive auth
③ OAuth2 or SAML
④ Auth complete, network info
当需要进行交互式用户身份验证时,Tailscale客户端会在用户的机器上使用其首选的网页浏览器显示一个控制服务器的URL,并通过TLS进行OAuth2或SAML流程。
分布式防火墙
从控制服务器发送到各个Tailscale客户端的网络地图中包含一组IP:端口过滤规则。这些过滤规则控制哪些对等节点可以连接到该机器,并限制暴露的服务。此列表源自Tailscale网络的ACL(访问控制列表)。网络管理员可以根据机器标签和用户组来指定防火墙规则,Tailscale控制服务器会将这些规则编译成每个网络中机器的自定义过滤规则集。
用户组可以由网络管理员在控制服务器中手动配置,也可以从组织的身份服务提供商自动导入。机器标签可以在用户通过客户端授权流程时,由具有相应权限的用户设置。
这些策略工具使网络管理员能够使用高层次的概念、组织单元和人员来定义网络。通过在控制服务器中将这些对象编译为简单的IP:端口过滤列表,复杂的策略决策被保留在控制服务器中,而不进入Tailscale客户端和控制协议,从而实现了清晰的职责分离。