1. 背景与痛点

很多家庭宽带及 Homelab 爱好者都会在软路由(OpenWrt)上配置 OpenClash 实现透明分流代理,同时使用 Tailscale 打通跨地域的设备内网(如 NAS、手机、办公室电脑等)。

然而,很多用户在开启 OpenClash 后都会遇到一个普遍问题:Tailscale 设备之间无法建立点对点(P2P)直连
每次运行 tailscale ping 查看连接状态时,流量总是被迫降级走海外官方公共 DERP 中继服务器(如 via DERP(sfo) / via DERP(tok)),导致:

  • 延迟高达 300ms ~ 1000ms+
  • 大文件传输速度严重受限(通常只有几百 KB/s)
  • 远程桌面、SSH 终端明显卡顿

2. 为什么 OpenClash 会破坏 Tailscale 打洞?

要解决问题,首先要了解底层网络原理。Tailscale 建立 P2P 直连依赖于 STUN(NAT 穿透探测) 机制:

[家庭电脑] ---> (OpenClash 代理拦截) ---> [境外代理节点] ---> [Tailscale 官方 DERP/STUN]
                                                                      │
                                                错误测得:公网 IP = 代理节点 IP
                                                                      ▼
[远端手机] <--- (尝试向代理节点 IP 发起直连握手,失败!) <--- [Tailscale 协调中心]
  1. 公网 IP 探测被劫持
    本地电脑向外部发送 STUN 探测包(UDP 3478)以获取本机公网 IP 时,请求被 OpenClash 的内核劫持并通过境外代理节点发了出去。官方 STUN 服务器以为你的公网 IP 是“代理节点的境外 IP”。
  2. 产生“对称 NAT(Symmetric NAT)”假象
    经过代理层封装转发后,UDP 端口映射产生漂移,原本家庭宽带具备良好打洞能力的 Cone NAT 被伪装成了几乎无法打洞的 Symmetric NAT。
  3. 打洞信令错位
    远端设备尝试向错误的代理 IP 发起对撞握手,最终握手超时,被迫降级走慢速中继。
核心解决原则:让 Tailscale 的 STUN 探测流量与 WireGuard 通信流量直接穿透软路由走本地宽带出口,完全绕过 OpenClash 代理内核

3. OpenClash 优化配置实操

步骤一:配置“不走代理的 WAN 端口”(最核心)

通过在软路由系统底层防火墙层面直接放行 Tailscale 专用端口,使数据包根本不进入 Clash 内核。

  1. 登录 OpenWrt 管理后台,打开 OpenClash 插件。
  2. 进入 【插件设置】 -> 【黑白名单】
  3. 找到 【不走代理的 WAN 端口】,依次添加以下端口并点击 +

    • 3478:标准 STUN 探测端口(测真实宽带公网 IP 必备)。
    • 41641:Tailscale 默认 WireGuard 通信与打洞端口。
    • (可选) 如果你有自建 DERP 或 Peer Relay 监听了其他端口(如 40000),也一并添加。
  4. 点击底部的 【保存配置】 -> 【应用配置】

步骤二:添加 Fake-IP 过滤黑名单(防 DNS 虚拟化)

如果你使用的是 Fake-IP 模式,必须防止 Tailscale 相关域名被解析为 198.18.x.x 的保留虚拟 IP。

  1. 进入 【覆写设置】-> 【DNS 设置】
  2. 找到 【Fake-IP 过滤黑名单 (Fake-IP Filter)】
  3. 在列表中添加以下匹配规则(一行一个):

    +.tailscale.com
    +.tailscale.io
    +.ts.net
  4. 点击 【保存配置】 -> 【应用配置】

步骤三:添加自定义分流直连规则(可选但推荐)

确保 Tailscale 的控制平面通信稳定直连:

  1. 进入 【规则设置】 -> 【自定义规则】
  2. 在规则顶部添加以下内容:

    - DOMAIN-SUFFIX,tailscale.com,DIRECT
    - DOMAIN-SUFFIX,tailscale.io,DIRECT
    - DOMAIN-SUFFIX,ts.net,DIRECT
  3. 保存并应用。

步骤四:在 OpenWrt 开启 FullCone NAT

提升路由器本身的 NAT 兼容等级,将打洞成功率最大化:

  1. 进入 OpenWrt 后台 -> 【网络】 -> 【防火墙】
  2. 如果你的固件支持 Turbo ACC 网络加速FullCone NAT

    • 勾选 启用 FullCone NAT(IPv4 / IPv6 均建议开启)。
  3. 点击 保存并应用

4. 验证与效果测试

配置完成后,不需要重启路由器,只需在局域网内的设备上进行以下验证:

1. 检查 NAT 类型与公网 IP 探测

在 Windows 电脑上打开命令提示符(CMD),运行:

tailscale netcheck

预期正常输出

  • MappingVariesByDest: false(说明已摆脱 Symmetric NAT,恢复为易打洞的 Cone NAT)。
  • IPv4:探知到的 IP 已经变回你本地宽带的真实公网 IP(可与 ip138.com 查询结果核对),不再是境外代理节点的 IP。
Report:
        * UDP: true
        * IPv4: yes, 你的真实宽带IP:端口
        * MappingVariesByDest: false
        ...

2. 检查 OpenClash 活跃连接

进入 OpenClash 控制台(Yacd 面板)的 【连接 (Connections)】 页面:

  • 触发一次打洞或网络探测。
  • 列表中不会出现目标端口为 347841641 的连接(说明流量在进入代理内核之前已在防火墙层直接旁路放行)。

3. 测试 P2P 直连打洞效果

在 Windows CMD 中直接 ping 远端设备(如手机或异地 NAS):

tailscale ping <目标节点名称或IP>

预期效果
连接将不再走慢速的 via DERP(...),而是直接显示:

pong from nas-node (100.64.x.x) via 123.123.x.x:41641 in 18ms
direct connection established

延迟从原本的数百毫秒骤降至十几毫秒,局域网间的大文件传输与串流体验恢复满血状态。


5. 总结

Tailscale 的设计哲学是尽可能利用 UDP 打洞实现零配置的去中心化 P2P 互联,而透明代理由于其劫持流量与端口伪装的特性,天然容易对 STUN 穿透造成干扰。

通过在 OpenClash 中放行 347841641 端口配置 Fake-IP 过滤,我们既保留了软路由全屋科学上网的便利,又完美恢复了 Tailscale 高速稳定的内网直连能力。

最后修改:2026 年 08 月 22 日
如果觉得我的文章对你有用,请随意赞赏