Tailscale 配置
Chute 内置了原生的 Tailscale 组网能力。配置完成后,你可以从规则或策略组中引用内置策略 TAILSCALE,把流量交给你的 tailnet——访问 tailnet 内的其他设备、经出口节点(exit node)出网,或访问对等节点广播的子网。
与普通代理协议不同,Tailscale 不是在 [Proxy] 中按行定义的策略,而是通过一个全局唯一的 [Tailscale] 段配置;它使用 auth key(认证密钥)向控制服务器注册节点,无需交互式浏览器登录。
Tailscale 段
[Tailscale] 段定义了一台设备接入 tailnet 所需的全部设置:
[Tailscale]
auth-key = tskey-auth-xxxxxxxxxxxx
control-server = https://controlplane.tailscale.com
hostname = my-device
exit-node = 100.101.102.103
accept-routes = true
force-derp = false
注意:整个配置文件中只允许存在一个
[Tailscale]段。重复的[Tailscale]段会被当作配置错误。这是因为 Tailscale 引擎较重,且 tailnet 地址段相互独占,同一时间只能接入一个 tailnet。
参数
| 键 | 必填 | 描述 |
|---|---|---|
auth-key |
是 | Tailscale 认证密钥。使用官方控制面时必须以 tskey- 开头;第三方控制服务器(如 Headscale)接受其自身的密钥格式 |
control-server |
否 | 控制服务器地址,必须是 http(s):// URL。留空则使用官方控制面 controlplane.tailscale.com |
hostname |
否 | 上报到 tailnet 的设备名称(MagicDNS 主机名) |
exit-node |
否 | 出口节点,接受 tailnet IP(100.x)或 MagicDNS 名称。留空表示不使用出口节点 |
accept-routes |
否 | 是否接受对等节点广播的子网路由(布尔值,默认 false) |
force-derp |
否 | 是否强制仅走 DERP 中继、禁用直连(布尔值,默认 false) |
布尔值接受以下写法(大小写不敏感):true/false、1/0、yes/no、on/off。
注意:未知的键会被忽略并给出警告(不会阻止配置加载)。拼错键名(例如把
force-derp写成force_derp)会让该选项静默失效,请按上表核对。
内置策略 TAILSCALE
配置好 [Tailscale] 段后,内置策略标识 TAILSCALE 即可使用——它与 DIRECT、REJECT 同级,可在规则和策略组中直接引用。未配置 [Tailscale] 段、或关闭了 Tailscale 时,引用 TAILSCALE 的规则会回退为 REJECT(fail-closed)。
[Proxy Group]
Mesh = select, TAILSCALE, DIRECT
[Rule]
IP-CIDR,100.64.0.0/10,TAILSCALE,no-resolve
FINAL,DIRECT
自动路由
启用 Tailscale 时,Chute 会自动在所有规则之前注入以下三条规则,因此你通常无需手写访问 tailnet 的规则:
DOMAIN-SUFFIX,ts.net,TAILSCALE
IP-CIDR,100.64.0.0/10,TAILSCALE,no-resolve
IP-CIDR6,fd7a:115c:a1e0::/48,TAILSCALE,no-resolve
这些注入规则仅作用于运行时,不会修改你的配置文件。当开启 accept-routes = true 时,对等节点广播的子网也会被自动注入为对应的 IP-CIDR / IP-CIDR6 规则,并在对等节点增删子网时自动更新。
用法
访问 tailnet 内设备
配置好 [Tailscale] 段后,访问 tailnet 内的其他设备无需额外规则——自动注入的规则已经覆盖了 tailnet 地址段和 MagicDNS 后缀。你可以直接用 MagicDNS 名称或 tailnet IP 访问:
[Tailscale]
auth-key = tskey-auth-xxxxxxxxxxxx
hostname = my-iphone
[Rule]
FINAL,DIRECT
此时 my-pc.<tailnet>.ts.net 或 100.101.102.103 这类目标会自动走 Tailscale。
经出口节点出网
将 TAILSCALE 设为 FINAL 的目标,即可把未命中其他规则的流量全部经出口节点出网:
[Tailscale]
auth-key = tskey-auth-xxxxxxxxxxxx
exit-node = 100.101.102.103
[Rule]
FINAL,TAILSCALE
注意:仅设置
exit-node不会让任何流量经由出口节点——你还必须添加一条将流量导向TAILSCALE的规则(例如FINAL,TAILSCALE)。否则出口节点虽已配置却不会被使用;App 的配置编辑器会对此作出提示。
接受子网路由
当 tailnet 中有设备作为子网路由器(subnet router)广播了局域网子网时,开启 accept-routes = true 即可访问这些子网,对应的路由规则会自动注入:
[Tailscale]
auth-key = tskey-auth-xxxxxxxxxxxx
accept-routes = true
自定义控制服务器(Headscale)
除了官方控制面,Chute 也支持自建的 Headscale / Ionscale 等控制服务器。填入对应的 URL 即可:
[Tailscale]
auth-key = your-headscale-preauth-key
control-server = https://headscale.example.com
hostname = my-device
第三方控制服务器不强制 tskey- 前缀,接受其自身签发的认证密钥。使用 http:// 明文地址仅建议在可信网络中(例如本地自建的 Headscale)使用。
已知限制与最佳实践
Tailscale 的实现聚焦于代理场景下最常用的能力,部分官方客户端特性暂不支持。请留意以下行为差异:
仅将
force-derp = true用作排障选项。 Chute 默认优先尝试与对等节点建立 UDP 直连(disco 打洞),直连通常比 DERP 中继具有更低的延迟和更高的吞吐。若某个具体网络下的直连持续不稳定或明显慢于 DERP,请对比两种模式后,再仅针对该网络启用force-derp。仅支持 auth-key 登录。 不支持 SSO / 浏览器交互登录、Tailscale SSH、Taildrop、Funnel / serve。Chute 也不能发布本地子网路由,或将本设备提供为出口节点;它仅作为使用端接入。
使用出口节点时,普通 DNS 仍在本地解析。 Chute 不会把普通 DNS 解析请求发送到所选出口节点。MagicDNS 名称会根据本地的 tailnet 网络映射解析。暂不支持全局解析器和远端 split-DNS 解析器;若某个私有域名只能在远端网络解析,请改用 IP 地址访问。
MagicDNS 仅支持 A / AAAA 记录。 全局 Resolvers、split-DNS 路由(带专用解析器的条目)以及非地址型 ExtraRecords(TXT / CNAME / SRV)会被忽略;检测到时会在日志中给出警告。
直连内层 MTU 固定为 1280。 没有路径 MTU 发现,依赖这一保守值避免在 PPPoE / 隧道叠加链路上出现黑洞。DERP 中继路径不受影响。
不支持 Tailnet Lock(网络锁)。 在启用了网络锁的 tailnet 中,本节点的密钥不会被签名,已锁定的对等节点会静默丢弃本机发来的流量。
官方 Mullvad exit 等需源地址改写的场景不可用。 此类要求改写自身源地址的出口节点特性暂未实现。
网络切换后的恢复依赖系统通知。 切换 Wi-Fi / 蜂窝时,Chute 会及时重建连接;若异常情况下未收到网络变更通知,恢复会退化为约 3 分钟的兜底重连。