客户端

分流规则:让国内网站别绕远路

全局、直连、规则三种模式到底差在哪。看懂之后你会发现,大部分「变慢了」的抱怨都是模式选错了。

本文目录(6 节)
  1. 三种模式各自在干什么
  2. 规则模式是怎么判断的
  3. 常见规则类型速查
  4. DNS:一个容易漏掉的坑
  5. 实用排错顺序
  6. 我自己的配置原则

客户端里那三个模式——全局、直连、规则——是新手最容易随手一点就过去的地方,也是影响体验最大的地方。

先说结论:日常用「规则」,出问题时用「全局」排查,不用的时候「直连」。 下面解释为什么。

三种模式各自在干什么

想象你家门口有两条路:一条直接通到目的地,一条要先绕到隔壁城市再回来。

  • 直连(Direct):所有流量都走直路。等于没开。
  • 全局(Global):所有流量都绕远路,包括访问隔壁小卖部。
  • 规则(Rule):查一张表,表里说该绕的才绕,其余走直路。

全局模式的问题不在于它「不安全」,而在于它把本来不需要绕的流量也绕了。访问一个国内网站,数据要先跑到境外服务器,再跑回国内,再原路返回。一个本来 20ms 的请求变成 400ms,还白白消耗你的套餐流量。

很多人抱怨「开了之后什么都变慢了」,原因就在这里。

规则模式是怎么判断的

客户端拿到一个请求,会按顺序去匹配一张规则列表,匹配到第一条就停止。典型的规则长这样:

rules:
  # 局域网地址,直连
  - IP-CIDR,192.168.0.0/16,DIRECT
  - IP-CIDR,10.0.0.0/8,DIRECT

  # 明确指定某个域名走代理
  - DOMAIN-SUFFIX,example-site.com,PROXY

  # 一整类网站走代理
  - DOMAIN-KEYWORD,analytics,REJECT

  # 用地理数据库判断:中国大陆的直连
  - GEOIP,CN,DIRECT

  # 以上都没匹配到的,走代理
  - MATCH,PROXY

几个要点:

顺序决定一切。 如果你把 GEOIP,CN,DIRECT 放在最前面,后面所有指向国内 IP 的规则就都失效了。改规则改出问题,八成是顺序放错。

最后一条 MATCH 是兜底。 它决定「没匹配到任何规则的流量怎么办」。设成 PROXY 是白名单思路(默认绕路,国内直连);设成 DIRECT 是黑名单思路(默认直连,只有列出来的才绕)。

白名单更稳,黑名单更省。 我用白名单,因为漏一个国外网站只是慢一点,而漏一个需要绕的网站是直接打不开。

常见规则类型速查

类型匹配什么例子
DOMAIN完全相同的域名DOMAIN,www.a.com 只匹配这一个
DOMAIN-SUFFIX域名结尾DOMAIN-SUFFIX,a.com 匹配所有子域名
DOMAIN-KEYWORD域名里含某个词DOMAIN-KEYWORD,google
IP-CIDRIP 段IP-CIDR,1.2.3.0/24
GEOIPIP 所属国家GEOIP,CN
PROCESS-NAME发起请求的程序PROCESS-NAME,某软件.exe

DOMAIN-KEYWORD 要谨慎用。它是子串匹配,写个太短的词会误伤一大片。我见过有人写 DOMAIN-KEYWORD,cn,结果把所有域名里带 cn 的站全都直连了,包括一堆本来该绕路的。

DNS:一个容易漏掉的坑

分流规则里有一类隐藏问题:规则按域名判断,但 DNS 解析可能已经先出错了。

具体场景是这样的:你要访问某个网站,设备先去问 DNS「这个域名的 IP 是多少」。如果这个查询走了本地 DNS 而结果被污染,你拿到一个错误的 IP,后面的规则匹配再准确也没用——你已经在往错误的地址发请求了。

解决思路叫「域名分流 + 分离解析」:

dns:
  enable: true
  enhanced-mode: fake-ip
  # 国内域名用国内 DNS 解析
  nameserver:
    - 223.5.5.5
    - 119.29.29.29
  # 需要绕路的域名,通过代理去问境外 DNS
  fallback:
    - https://1.1.1.1/dns-query
    - tls://8.8.4.4:853
  fallback-filter:
    geoip: true
    geoip-code: CN

大意是:国内域名用国内 DNS(快、准),其余的通过加密通道问境外 DNS(不会被中途改掉)。

fake-ip 模式是另一个提速点。它不真的去解析,而是先返回一个假的内部 IP,让客户端凭域名去决定走哪条路,等真的要连的时候才解析。省掉了一次等待。

fake-ip 会让部分程序困惑。一些直接依赖 IP 的软件(某些游戏、某些局域网服务、部分下载工具)在 fake-ip 下会出问题。客户端一般都有 fake-ip-filter 之类的白名单,把这些域名排除掉就好。遇到「某个软件开了就连不上」,先查这里。

实用排错顺序

某个网站打不开时,按这个顺序查,通常两三步就能定位:

  1. 切到全局模式再试一次。

    • 好了 → 是规则问题,这个域名没走对路
    • 还是不行 → 跟规则无关,是节点或网站本身的问题
  2. 如果是规则问题,看日志里这个请求匹配到了哪条规则。 大部分客户端都有连接日志,能看到每个请求走的是 DIRECT 还是 PROXY。找到匹配错的那一条,往上加一条更精确的。

  3. 加规则的位置很重要。 新规则要放在那条误匹配的规则之前,否则永远轮不到它。

  4. 改完记得让客户端重载配置,并关掉重开浏览器。 已建立的连接不会因为改了规则就切换。

我自己的配置原则

  • 能直连的一律直连。 每绕一次都是延迟和流量。
  • 规则列表越短越好。 动辄上万条的规则集合看着全面,实际上匹配耗时增加,维护也无从下手。我自己手写的规则不超过 30 条,剩下交给 GEOIP 兜底。
  • 给常用的几个软件写 PROCESS-NAME 规则。 比按域名猜准得多。
  • 改之前先备份。 配置文件坏了之后从零恢复很痛苦,改一次存一版。

理解了分流,你就掌握了这类工具里最有价值的那部分能力——它不只是「能不能访问」的开关,而是一套可以按需安排流量走向的机制。

相关:测速的正确方法写在最前面

相关阅读