客户端里那三个模式——全局、直连、规则——是新手最容易随手一点就过去的地方,也是影响体验最大的地方。
先说结论:日常用「规则」,出问题时用「全局」排查,不用的时候「直连」。 下面解释为什么。
三种模式各自在干什么
想象你家门口有两条路:一条直接通到目的地,一条要先绕到隔壁城市再回来。
- 直连(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-CIDR | IP 段 | IP-CIDR,1.2.3.0/24 |
GEOIP | IP 所属国家 | 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 之类的白名单,把这些域名排除掉就好。遇到「某个软件开了就连不上」,先查这里。
实用排错顺序
某个网站打不开时,按这个顺序查,通常两三步就能定位:
-
切到全局模式再试一次。
- 好了 → 是规则问题,这个域名没走对路
- 还是不行 → 跟规则无关,是节点或网站本身的问题
-
如果是规则问题,看日志里这个请求匹配到了哪条规则。 大部分客户端都有连接日志,能看到每个请求走的是 DIRECT 还是 PROXY。找到匹配错的那一条,往上加一条更精确的。
-
加规则的位置很重要。 新规则要放在那条误匹配的规则之前,否则永远轮不到它。
-
改完记得让客户端重载配置,并关掉重开浏览器。 已建立的连接不会因为改了规则就切换。
我自己的配置原则
- 能直连的一律直连。 每绕一次都是延迟和流量。
- 规则列表越短越好。 动辄上万条的规则集合看着全面,实际上匹配耗时增加,维护也无从下手。我自己手写的规则不超过 30 条,剩下交给 GEOIP 兜底。
- 给常用的几个软件写 PROCESS-NAME 规则。 比按域名猜准得多。
- 改之前先备份。 配置文件坏了之后从零恢复很痛苦,改一次存一版。
理解了分流,你就掌握了这类工具里最有价值的那部分能力——它不只是「能不能访问」的开关,而是一套可以按需安排流量走向的机制。