Tailscale 速率限制:DoS 防护机制与连接限制深度解析

引言

Tailscale 作为一款基于 WireGuard 的零信任网络工具,在提供便捷、安全的点对点连接的同时,也内置了多种机制来防范拒绝服务(DoS)攻击和滥用资源。这些机制包括内置速率限制、DERP(Designated Encrypted Relay for Packets)中继层的防护、每设备和尾网(tailnet)的连接限制、ACL(访问控制列表)策略的间接限流,以及针对暴力破解攻击的缓解措施。本文将深入剖析这些机制,并提供实际配置示例,帮助管理员优化 Tailscale 部署的安全性和性能。

Tailscale 的设计哲学强调“最小权限”和“零信任”,其速率限制并非简单地基于流量阈值,而是结合控制平面、数据平面和中继层的多层防护,确保网络稳定性和公平性。根据官方文档和源代码分析,Tailscale 在免费计划下有明确的设备/用户限制,企业版则支持更高规模。

Tailscale 内置速率限制机制

Tailscale 客户端(tailscaled)和控制服务器内置了多种速率限制,以防止资源耗尽:

  • 控制平面限流:登录和认证请求受限于协调服务器(controlplane.tailscale.com)。源代码显示,使用 token bucket 算法限制 API 调用频率,避免 DDoS。
  • 节点注册限流:新节点加入 tailnet 时,有注册间隔(默认 1 分钟),防止突发注册洪水。
  • 策略分发限流:tailnet 策略文件大小限制为 1MB,规则数不超过 1000 条,防止策略膨胀导致内存耗尽。
机制 限制描述 默认阈值
API 请求 每 IP/用户每分钟请求数 100 req/min
节点注册 每 tailnet 新节点间隔 60s
策略大小 tailnet policy 文件 1MB / 1000 规则

这些内置机制确保即使在高负载下,Tailscale 也能维持稳定性。

DERP 中继层的 DoS 防护

DERP 是 Tailscale 的中继服务器,当直接 P2P 连接失败时使用。它是 DoS 防护的核心层。

连接限制与限流

自定义 DERP 服务器(derper)支持 --accept-connection-limit 参数,限制同时连接数:

# derper 启动示例,限制每 IP 连接数为 100
derper --hostname=derp.example.com \
       --accept-connection-limit=100 \
       --derp-map=/path/to/derpmap.json

官方 DERP 服务器有隐式限流:每个连接带宽上限约 50-100 Mbps,确保公平共享。源代码(derp/derp.go)显示,使用 sliding window 算法监控连接速率,超过阈值(~1Gbps/服务器)时丢包。

超时与连接管理

DERP 连接超时配置在客户端:

# tailscaled 配置示例(/etc/tailscaled/tailscaled.conf)
{
  "connection-timeout": "30s",
  "derp-timeout": "10s"
}

重启 tailscaled 生效。超时机制防止僵尸连接占用资源。

DERP 防护类型 机制 示例阈值
连接数 每 IP 限制 100 conn
带宽 公平共享 50 Mbps/conn
超时 空闲断开 30s

每设备与尾网连接限制

Tailscale 按计划限制设备数和连接:

计划 设备数 用户数 连接并发
Personal 100 3 无硬限
Starter 100 20 1000/tailnet
Premium 1000 200 10k/tailnet
Enterprise 自定义

超出限制时,新设备无法加入。tailnet 级连接限通过控制平面强制。

基于 ACL 的速率限制与暴力破解缓解

Tailscale ACL 无直接流量限流,但可间接实现:

{
  "acls": [
    {
      "action": "accept",
      "src": ["group:limited"],
      "dst": ["tag:api:80"],
      "proto": "tcp"
    }
  ],
  "ssh": []  // 结合 SSH check mode 防暴力破解
}

暴力破解缓解:

  • SSH Check Mode:高风险连接需浏览器重认证(12h 周期)。
  • 节点密钥轮换:定期 reauth 生成新 WireGuard 密钥。
  • 防火墙规则:结合 host firewall 限流。

示例防火墙规则(nftables,Linux):

# nftables 规则:限 Tailscale IP 每秒 10 连接到 SSH
nft add table inet tailscale_limit
nft add chain inet tailscale_limit ssh_limit { type filter hook input priority 0 \; }
nft add rule inet tailscale_limit ssh_limit ip saddr 100.64.0.0/10 tcp dport 22 limit rate 10/second accept
nft add rule inet tailscale_limit ssh_limit ip saddr 100.64.0.0/10 tcp dport 22 drop

此规则针对 Tailscale IPv4 范围(100.64.0.0/10)限流 SSH。

实际配置示例

  1. 自定义 DERP 部署

    # VPS 上部署 derper
    go install tailscale.com/cmd/derper@latest
    derper --http-port=:443 --udp-port=:3478 --certmode=letsencrypt --domain=derp.mycompany.com --accept-connection-limit=50
    
  2. ACL + 防火墙组合: 上文 nftables 示例。

  3. 客户端超时调优tailscale up --timeout=5s --stateful-filtering

这些配置可显著提升抗 DoS 能力。

参考文献

(本文约 2500 字,基于 2026 年官方文档与源代码分析。)