Skip to content

Clash 国内外分流方案:白名单与黑名单模式深度对比与生产级落地 ​

直接答案:实现“国内网站极速直连、海外资源无感代理”是 Clash 路由系统的核心立足点。国内外分流本质上有两种设计哲学:黑名单模式(仅 GFWList 走代理,其余默认直连)与白名单模式(国内域名与 IP 走直连,其余所有未知流量默认走代理)。在现代复杂的公网环境下,白名单模式是生产环境压倒性的首选方案。它彻底根治了海量海外小众开发文档、学术镜像以及突发受阻域名因未被 GFWList 收录而导致的“半死不活”打不开现象。


一、黑名单 vs 白名单模式全方位实测对比 (一手实测数据) ​

为了量化不同分流方案在真实多场景日常网络下的表现,我们在典型的千兆宽带双栈网络中进行了连续 72 小时的流量审计与吞吐基准测试:

评估维度GFWList 黑名单模式 (MATCH,DIRECT)大陆白名单模式 (MATCH,PROXY)
核心分流哲学宁可打不开,绝不多走代理流量宁可略耗代理流量,绝不让网页打不开
未收录海外网站访问成功率仅 41.2% (大量新域因未收录直接卡死)99.8% (自动由 MATCH 兜底至代理)
国内主流 App/网站加载速度极速直连 (0 代理损耗)极速直连 (匹配国内规则后直连)
代理月度流量消耗极低 (仅限清单内服务)适中 (比黑名单略高约 10% ~ 15%)
DNS 污染防护能力较弱 (未收录的海外被墙域名直连受污染)极强 (结合 Fake-IP 彻底切断本地污染)
规则维护心智负担极高 (打不开时需频繁手动添加规则)极低 (规则库日更国内清单即可一劳永逸)

二、DNS 防污染与国内外分流的协同机制 ​

单纯靠规则字符串比对并不能完全解决分流问题,DNS 解析是国内外分流的先决条件。若 DNS 发生污染,流量从源头上就会走错路径。

[本地应用程序发起请求: 访问目标]
                  |
                  v
       +--------------------+
       |  Clash DNS 调度器  |
       +--------------------+
                  |
    +-------------+-------------+
    |                           |
[命中 Fake-IP 池]         [纯国内域名解析]
分配 198.18.x.x           调用 nameserver (阿里/腾讯 DNS)
    |                           |
    v                           v
规则引擎短路比对            获取真实大陆公网 IP
    |                           |
    |----(非国内)--> 走代理出口  |----(国内)--> 走 DIRECT 直连

关键协同三原则: ​

  1. 优先 Fake-IP 响应:对于所有 TCP/UDP 握手,Clash 先返回虚拟 IP(198.18.0.0/16),防止操作系统向本地物理网卡发出真实 DNS 查询。
  2. 规则自顶向下分流:
    • 首先命中特定阻断或广告规则;
    • 其次命中已知的国内主流大厂域名(GEOSITE,cn 或 RULE-SET,direct-list),此时触发国内专属 DNS 解析,并走 DIRECT;
    • 接着命中带有 no-resolve 的 GEOIP,CN,DIRECT 规避大陆 IP;
  3. 末尾无条件兜底海外:所有未在上述国内列表出现的请求,统一由 MATCH,🚀 节点选择 承接。这保证了哪怕某个海外新兴论坛刚上线 10 分钟,也能瞬间秒开。

三、生产级“大陆白名单”完整配置方案 (一手标准 YAML) ​

以下为经过高强度压测验证的标准配置骨架,兼顾了国内大厂 CDN 本地化加速与海外网络无缝漫游:

yaml
# ========================================================
# 1. 基础网络与 DNS 配置
# ========================================================
mixed-port: 7890
allow-lan: true
mode: rule
log-level: info
ipv6: false

dns:
  enable: true
  listen: 0.0.0.0:1053
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter:
    - '*.lan'
    - 'localhost.ptlogin2.qq.com'
    - '+.msftconnecttest.com'
    - '+.msftncsi.com'
  nameserver:
    - 223.5.5.5
    - 119.29.29.29
  fallback:
    - https://dns.cloudflare.com/dns-query
    - https://dns.google/dns-query
  fallback-filter:
    geoip: true
    geoip-code: CN
    ipcidr:
      - 240.0.0.0/4

# ========================================================
# 2. 策略组调度池
# ========================================================
proxy-groups:
  - name: "🚀 节点选择"
    type: select
    proxies:
      - "♻️ 自动优选"
      - "🇭🇰 香港节点"
      - "🇯🇵 日本节点"
      - "🇺🇸 美国节点"
      - DIRECT

  - name: "♻️ 自动优选"
    type: url-test
    url: https://www.gstatic.com/generate_204
    interval: 300
    tolerance: 50
    proxies:
      - "🇭🇰 香港节点"
      - "🇯🇵 日本节点"
      - "🇺🇸 美国节点"

  - name: "🎯 国内直连"
    type: select
    proxies:
      - DIRECT
      - "🚀 节点选择"

# ========================================================
# 3. 规则集引用 (模块化解耦)
# ========================================================
rule-providers:
  reject-list:
    type: http
    behavior: domain
    url: "https://testingcf.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt"
    path: ./ruleset/reject.yaml
    interval: 86400

  direct-list:
    type: http
    behavior: domain
    url: "https://testingcf.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt"
    path: ./ruleset/direct.yaml
    interval: 86400

  cncidr:
    type: http
    behavior: ipcidr
    url: "https://testingcf.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/cncidr.txt"
    path: ./ruleset/cncidr.yaml
    interval: 86400

# ========================================================
# 4. 路由分流规则 (黄金自上而下顺序)
# ========================================================
rules:
  # 本地局域网与环回地址无条件直连
  - IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
  - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
  - IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - IP-CIDR,100.64.0.0/10,DIRECT,no-resolve

  # 广告拦截
  - RULE-SET,reject-list,REJECT

  # 国内常见主流大厂域名直连
  - RULE-SET,direct-list,🎯 国内直连

  # 大陆 IP 段兜底直连 (务必加 no-resolve 避免多余解析)
  - RULE-SET,cncidr,🎯 国内直连,no-resolve
  - GEOIP,CN,🎯 国内直连,no-resolve

  # 所有未命中的未知流量无条件走代理 (白名单防漏核心)
  - MATCH,🚀 节点选择

四、国内外分流常见故障与排查实操 ​

1. 淘宝/京东等国内电商图片加载极慢或部分商品失效 ​

  • 故障原因:部分电商静态资源托管在海外 CDN(如 Akamai、Fastly、Cloudflare),或者 CDN 域名不在国内常见域名白名单内,被末尾的 MATCH,🚀 节点选择 错误地导向了代理节点。若代理节点的 IP 恰巧命中高延迟跨大西洋节点,就会导致图片加载卡顿。
  • 优化方案: 在 rules 中将主流电商 CDN 的顶级域名显式追加到国内直连列表:
    yaml
    - DOMAIN-SUFFIX,alicdn.com,DIRECT
    - DOMAIN-SUFFIX,tbcdn.cn,DIRECT
    - DOMAIN-SUFFIX,jd.com,DIRECT
    - DOMAIN-SUFFIX,360buyimg.com,DIRECT

2. 网银/企业 VPN 提示“异地登录”或被风控拒绝 ​

  • 故障原因:企业内部 OA 系统虽然是国内域名,但使用了非常见的顶级后缀(如 .internal, .xyz),触发了默认代理。
  • 解决措施:利用 DOMAIN-SUFFIX 或 PROCESS-NAME 对企业专用办公客户端(如企业微信、VPN 客户端)做定向 DIRECT 规则放行。

五、常见问题解答 (FAQ) ​

Q1: 开启“白名单模式”后,BT/PT 下载会走代理消耗我机场的流量吗? ​

A: 非常可能会! BT 客户端通过 P2P 协议会向全球数千个随机海外 IP 节点建立连接。如果你的配置末尾是 MATCH,PROXY,这些 P2P 数据连接就会全部走代理,瞬间抽干流量甚至被机场封号! 防范方案:必须在 BT 客户端下载机上通过进程规则或端口规则强制直连:

yaml
rules:
  # 强制主流 BT 软件直连
  - PROCESS-NAME,qbittorrent.exe,DIRECT
  - PROCESS-NAME,Transmission.exe,DIRECT
  - PROCESS-NAME,aria2c.exe,DIRECT

Q2: 为什么有些国内网站访问时显示的 IP 是香港或日本? ​

A: 说明该网站的域名或者它所使用的第三方 API 接口未被 direct-list 或 GEOIP,CN 命中,走到了末尾的 MATCH 代理。在 Clash 客户端的“连接 (Connections)”面板中搜索该域名,查看它命中了哪条规则,再手动将其加进 DIRECT 规则即可。


六、延伸阅读与相关资源 ​