开了代理,国外网站快了,国内网站反而变慢;更麻烦的是银行 App、政务网站直接打不开——这不是线路问题,是分流规则没配对。
多数客户端默认走"全局",也就是所有流量都绕一圈。国内站点被带到境外再回来,延迟翻几倍,部分站点还会因为 IP 归属异常直接拒绝。
三种排除方式,用法完全不同
| 方式 | 写法 | 适用 | 优先级 |
|---|---|---|---|
| 按域名 | DOMAIN,example.com 或 DOMAIN-SUFFIX,example.com | 网站、App 接口 | 最高 |
| 按网段 | IP-CIDR,10.0.0.0/8 | 局域网、公司内网 | 中 |
| 按进程 | PROCESS-NAME,WeChat.exe | 桌面端特定程序 | 看实现 |
优先用域名。IP 会因为 CDN 变化而失效,域名相对稳定。
最小可用的排除清单
不需要维护几千条规则。下面这几类覆盖了绝大多数问题:
- 银行与支付:各大行域名、支付宝、微信支付
- 政务与实名:gov.cn 后缀、社保、税务、运营商营业厅
- 局域网:
192.168.0.0/16、10.0.0.0/8、172.16.0.0/12 - 本地回环:
127.0.0.0/8、::1 - 常用国内服务:地图、外卖、网盘、音乐(如果不介意速度)
剩下的交给规则集,不要自己一条条手写。
为什么配了规则还是没用
三个原因,按出现频率排序:
1. DNS 先于规则解析了。 域名在匹配规则之前已经被解析成 IP,如果 DNS 走了境外,解析结果可能是个海外节点,规则匹配到的域名虽然命中,但连接已经指向错误地址。解决:让国内域名用国内 DNS 解析。
2. 规则顺序错了。 分流规则是自上而下匹配,第一条命中就结束。MATCH(兜底)必须放最后,否则后面的规则永远不生效。
3. 客户端缓存了旧规则。 改完规则没重启客户端,或者只重载了配置没重建连接,老连接还走着旧策略。改完先断开再连。
怎么验证某条规则生效了
最直接的方法:看这个域名实际走的出口。
# 国内站
curl -s -o /dev/null -w "%{remote_ip}\n" https://www.baidu.com
# 国外站
curl -s -o /dev/null -w "%{remote_ip}\n" https://www.google.com
如果两个的 remote_ip 都在境外,说明国内站没走直连,规则没生效。
更严谨的做法是看出口 IP:
curl -s https://api.ipify.org
访问国内站前后各跑一次,出口 IP 变化说明走了代理,没变化说明直连。
什么时候该用全局
不是所有情况都适合分流。以下场景建议直接开全局:
- 临时排查问题,需要排除规则干扰
- 访问的站点域名不在任何规则集里
- 用命令行工具、Docker、虚拟机,程序自己不走规则
分流是为了"日常顺畅",全局是为了"确定能通",两者不冲突,可以按场景切。
💡 一个经验:规则不是越多越好。规则表越大,匹配越慢,出错概率越高。维护 20 条核心规则 + 一个规则集,比手写 500 条更稳。
延伸阅读:全局模式和分流模式、端口被占用怎么排查、DNS 泄露怎么自测。