Clash 中 REJECT 的技术原理与解决方案 —— 以哔哩哔哩延迟问题为例
在使用 Clash 进行分流时,许多用户都会启用广告拦截(AdBlock)、隐私防护规则集。这类规则集通常会将部分域名分流到 REJECT 策略,以屏蔽广告和跟踪请求。
但部分用户在访问哔哩哔哩(Bilibili)时,出现了视频加载缓慢、评论加载失败等问题。通过 Clash 面板观察发现,有大量请求被分流到了 REJECT,这正是问题的关键。
目录
- 一、问题背景
- 二、Clash 中 REJECT 的原理
- 三、哔哩哔哩场景下的表现
- 四、排查与优化方案
- 五、总结与实践建议
一、Clash 中 REJECT 的原理
Clash 规则系统通过匹配域名、IP、端口,将请求分流到不同策略。常见策略有:
- DIRECT:直连目标服务器
- Proxy:通过代理服务器转发
- REJECT:拒绝请求
其中,REJECT 的具体行为:
- TCP 请求:Clash 返回 TCP RST,立即终止连接。
- UDP 请求:Clash 丢弃数据包,应用需等待超时。
这类行为常用于广告拦截、隐私防护、防止恶意请求。其优点是彻底阻断流量,但如果误拦截了正常业务域名,就会影响应用体验。
二、哔哩哔哩场景下的表现
哔哩哔哩的业务域名分为两类:
-
核心业务域名
*.bilibili.com
*.hdslb.com
负责视频播放、评论弹幕、账号登录、推荐内容加载等。
-
广告和埋点域名
cm.bilibili.com
trace.bilibili.com
负责广告投放、数据统计、行为追踪。
当广告拦截规则集误将核心 API 域名分流到 REJECT,就会造成:
- 视频加载延迟或频繁切换 CDN
- 弹幕、评论加载失败
- 应用长时间等待超时后才继续执行
四、排查与优化方案
1. 流量排查
通过 Clash Dashboard 或日志,观察哪些域名被分流到 REJECT。
重点检查与视频加载、核心 API 相关的域名,确认是否需要放行。
2. 添加例外规则
在 Clash 配置文件中添加放行规则,例如:
# 放行哔哩哔哩核心业务域名
DOMAIN-SUFFIX,bilibili.com,DIRECT
DOMAIN-SUFFIX,hdslb.com,DIRECT# 继续拦截广告和埋点
DOMAIN,cm.bilibili.com,REJECT
DOMAIN,trace.bilibili.com,REJECT
注意:Clash 的规则按从上到下顺序匹配,先匹配的规则优先执行。因此需要将放行规则放在广告拦截规则之前,避免被后续规则覆盖。
3. 规则集维护
建议使用更新频率高、社区维护的规则集,定期检查是否存在误杀情况,确保核心业务域名不被错误拦截。
五、总结与实践建议
- REJECT 的本质是拒绝连接,通常用于广告和隐私拦截。
- 哔哩哔哩延迟的根本原因是核心域名被误拦截,导致应用重试或等待超时。
- 通过手动添加放行规则,可以保留广告拦截的同时,保障核心功能的正常使用。
推荐实践:
- 使用 Clash Dashboard 定期检查规则命中情况。
- 对关键业务域名进行白名单管理,避免误杀。
- 保持规则集更新,选择社区活跃度高的订阅源。
通过以上优化,可以在享受广告屏蔽的同时,保证视频播放和功能体验不受影响,实现隐私保护与性能的平衡。