一句话结论:分流问题九成在规则表,剩下的一成在环境与链路。只要先看状态标记,就能把范围从「整张规则表」缩小到「某一层」。
排查总流程:五步定位
下面这五步是演练环境里固定使用的顺序。每一步都有明确的判断依据,走完一步就能排除一类原因。
- 1看状态标记:打开状态页,看最近一次请求显示的判定层与方向
- 标记显示未命中,问题在规则表
- 标记显示命中但访问异常,问题在链路
- 2确认判定层:根据标记判断是域名层、网段层、应用层还是名单层命中
- 域名命中说明域名层有条目生效
- 名单命中说明使用者自己指定过
- 3核对规则表:导出规则表,检查目标对应的条目位置与写法
- 先查同层是否有更靠前的条目
- 再查字段是否写对
- 4确认环境:确认授权、权限与路由改写三项条件是否满足
- 受管终端上规则保存也不会生效
- 同时运行其它工具会覆盖路由
- 5确认链路:把流量锁定到一个方向做对照测试,排除链路侧原因
- 对照测试约 2 分钟
- 两种方向表现相同即为链路问题
为什么先看状态标记
状态标记把排查范围直接分成两半。显示未命中,说明规则表里没有覆盖这个目标;显示命中,说明规则没问题,后面三步查的都不是规则。
为什么最后才看链路
链路问题与规则问题的现象几乎一样,都是打不开或变慢。先排除规则,可以避免在链路正常时反复改规则。演练环境里,顺序照做能省掉约七成的无效改动。

第一步:状态标记的四种读法
状态标记是整个排查的起点,下面把四种标记分别对应到可能的原因范围。
| 状态标记 | 说明什么 | 接下来查什么 | 不要做什么 |
|---|---|---|---|
| 域名命中 | 域名层有条目生效且方向正确 | 链路与目标服务本身 | 不要改域名规则 |
| 网段命中 | 网段层覆盖了这个地址 | 网段段宽是否过大 | 不要改域名规则 |
| 名单命中 | 使用者名单里指定过方向 | 名单里的方向是否符合预期 | 不要动其它层 |
| 未命中 | 前五层都没有覆盖这个目标 | 规则表是否缺这条 | 不要先怀疑链路 |
标记会跳动的正常现象
连续访问不同站点时,标记在几种之间来回跳动,这是正常现象。标记只反映最近一次请求,不反映整体覆盖率。
看不到标记时怎么办
判定日志必须处于开启状态才能看到标记。演练环境里约 14% 的「看不到标记」反馈,实际是日志开关被关掉了。
标记读法的四条提醒
标记本身信息量很小,要结合上下文才有用,下面四条是读标记时最容易出错的地方。
- 标记反映最近一次请求,不代表整体命中率
- 连续访问多个目标时标记跳动属正常现象
- 标记只显示方向不显示层名,通常是锁定生效
- 标记显示命中但方向相反,同样是规则问题

第二步:确认判定层
确认了方向之后,下一步是确认生效的是哪一层。层决定了你该改哪里,这一层的错误占全部失败的 38%。
层被覆盖的两种情形
一种是跨层覆盖:你写的条目在低层,而高层已有条目命中。另一种是同层覆盖:同层内靠前的条目先被采用,你写的那条成了冗余。
| 情形 | 例数 | 状态标记表现 | 处理方式 |
|---|---|---|---|
| 域名条目被名单层覆盖 | 18 例 | 名单命中 | 把条目提到名单层 |
| 域名条目被网段层覆盖 | 9 例 | 网段命中 | 收窄网段段宽 |
| 网段条目被应用层覆盖 | 4 例 | 应用命中 | 核对应用规则方向 |
| 同层靠前条目覆盖 | 7 例 | 显示命中但方向相反 | 调整同层顺序 |
| 手动锁定导致全部失效 | 2 例 | 只显示锁定方向 | 解除锁定状态 |
最容易漏掉的一类
手动锁定一旦打开,全部规则都不参与判定。这类情况在演练统计里只有 2 例,但因为外观上与「规则完全不生效」一模一样,排查时经常被跳过。
- 先确认手动锁定处于关闭状态
- 状态标记显示的不是层名时,多半是锁定生效
- 跨层覆盖优先看名单层与网段层
- 同层覆盖优先看本层的前三条条目
- 调整顺序后立刻重测一次

第三步:核对规则表
确认问题在规则表之后,就进入具体条目的核对。下面给出四个核对方向,每个方向都有固定的检查动作。
核对一:条目是否存在
在规则表里搜索目标的主域名,如果搜不到,说明规则表根本没收录这个目标,属于缺漏,补写即可。
核对二:条目位置是否正确
条目存在时,看它在本层的位置。同层内靠前的条目优先,例外条目应放在首部,位置不对时现象是方向与预期相反。
核对三:写法是否正确
按八种指令与三段字段核对,方向写反属于语义错误,导入时不会提示,只能靠实际访问发现。
核对四:同层是否有方向冲突
把同一层的条目按方向分组排序,两个方向都存在的部分就是潜在冲突点。演练环境里 4 例同层冲突都这样找出来。
- 搜索不到主域名:规则缺漏,直接补写
- 搜得到但方向相反:同层位置不对
- 搜得到且方向正确但仍未命中:写法有问题
- 同层两个方向并存:把例外放到首部
- 核对完导出一次,留作下次对照
导出规则表时的三个检查点
排查时导出的规则表不只是用来读,还是用来对照的。下面三个检查点能在导出后立刻发现大部分问题。
- 按层分组后,同层内两个方向并存的位置即为冲突点
- 把完全相同的行排在一起,重复条目一眼可见
- 统计各层条数,与预期不符说明导入时有行被跳过

第四步:确认环境
如果状态标记显示未命中,而规则表里明明有对应条目,就要看环境。下面四项是演练环境里最常见的落地障碍。
| 障碍 | 识别方法 | 状态表现 | 影响范围 | 处理方式 |
|---|---|---|---|---|
| 路由改写被接管 | 受管终端策略 | 一直未命中 | 全部目标 | 先确认制度,不改规则 |
| 授权未通过 | 系统设置里没有允许项 | 连接停在等待 | 代理方向 | 允许一次后重连 |
| 其它工具占用路由 | 同时运行多个客户端 | 规则时灵时不灵 | 随机目标 | 退出一方后重连 |
| 规则表未保存 | 重启后条数变化 | 部分规则消失 | 新增条目 | 重新导入并核对条数 |
受管终端是最容易被误判的一类
公司终端上规则能保存、界面显示正常,但判定永远不生效。此时改规则完全无效。演练环境里把这一类的识别放在第四步,就是为了避免在规则上浪费时间。
同时运行多个工具的表现
两个工具同时接管路由时,后写入的会覆盖先写入的,表现为规则时灵时不灵。这类现象最容易被误判成规则问题,实际上退出其中一个工具即可解决。

第五步:确认链路
前四步都排除了,问题就在链路侧。判定正确但访问仍然异常,这是链路问题的典型表现。
对照测试怎么做
把流量手动锁定到一个方向,观察目标是否可达;再锁到另一个方向重复一次。两次表现相同,说明与判定无关,问题在链路或目标服务本身。
对照测试的三种结果
两次都通,说明是规则问题,回到第三步。两次都不通,说明是链路或目标服务的问题。只有一次通,说明规则本身是对的但选错了方向。
| 方向一 | 方向二 | 结论 | 下一步 | 耗时 |
|---|---|---|---|---|
| 可达 | 可达 | 链路与目标均正常 | 回到规则表核对 | 约 3 分钟 |
| 不可达 | 不可达 | 链路或目标服务异常 | 换节点或联系目标方 | 约 2 分钟 |
| 可达 | 不可达 | 方向判断正确但选错 | 确认规则里的方向字段 | 约 4 分钟 |
| 不可达 | 可达 | 默认方向被误改 | 检查默认出口取值 | 约 2 分钟 |
链路问题的三个可观测特征
抖动明显偏高、重传次数多、首屏时间随时间波动。这三个特征与判定无关,可以作为链路侧的旁证。
对照测试前的准备
对照测试要改变全局方向,准备工作有三项,跳过准备会让测试结果失去可比性。
- 先记录当前锁定的节点,避免两次测试用了不同出口
- 两次测试之间只改方向,其它设置保持一致
- 每个方向各做 5 次请求,取中位而不是单次结果
- 测试完成后立刻解除锁定,回到规则模式

现象一:规则写了却不生效
这是最常见的一类,演练环境里的 100 例失败中有 38 例属于此类,下面按具体成因拆开。
成因一:被更高层覆盖
占比最高,条目写在了低层,而高层已有条目命中。处理方式是把条目提到对应的高层,或者收窄高层的覆盖范围。
成因二:同层位置不对
条目存在,但同层里靠前的条目方向相反。把例外条目挪到本层首部即可,改动量通常只有一两行。
成因三:手动锁定未解除
锁定状态下全部规则都不参与判定。这类现象的特征是状态标记只显示一个方向,不显示层名。
- 被更高层覆盖:占 38%,把条目提到高层
- 同层位置不对:占 18%,把例外移到首部
- 手动锁定未解除:占 7%,检查锁定开关
- 写法错误被跳过:占 11%,看导入提示
- 环境不允许落地:占 26%,查授权与权限
现象二:目标站点仍然打不开
这一类要区分判定侧与链路侧,判断依据是状态标记。标记未命中说明规则缺漏,标记命中说明问题在别处。
规则缺漏的两种情形
一是规则表没有收录这个目标,二是收录了但只写了主域名,漏了实际访问的接口或分片地址。后者更隐蔽,因为主站是能打开的。
链路侧的三个表现
所有目标都打不开、同一时间其它人也打不开、换节点后仍然打不开。这三条同时成立时,不必再查规则。
| 判断依据 | 规则缺漏 | 链路不通 |
|---|---|---|
| 状态标记 | 未命中 | 域名命中或网段命中 |
| 影响范围 | 只有这个目标 | 所有目标同时出现 |
| 换节点后 | 无变化 | 可能恢复 |
| 本地对照目标 | 正常 | 同样打不开 |
| 处理方向 | 补写规则 | 换节点或联系目标方 |
现象三:速度没有变化
这一类的核心是「变化是否可测」,很多用户说没变化,实际是差异小于测量精度。
先确认差异是否可测
把同一站点在两种设置下各测 10 次首屏取中位。两次差异小于 0.3 秒时,人耳无法分辨,这不是分流失效。
再看是不是本来就该走直连
本地站点在全部代理下也会变慢约 1.5 秒。这个变化存在,但多数人不敏感。若目标是本地服务,变慢是预期结果而不是故障。
- 两种设置各测 10 次首屏取中位
- 差异小于 0.3 秒时属于不可感知范围
- 本地站点在代理下会变慢约 1.5 秒
- 大文件下载看吞吐,不看首屏时间
- 长连接服务看稳定性,不看单次速度
现象四:改了规则之后别的站点坏了
这一类几乎都由覆盖范围过宽造成,演练环境里的 9 例中有 8 例是关键字过于通用,1 例是网段段宽过大。
关键字过宽的识别
在日志里找出命中数异常高的那一条,演练环境里判定标准很简单:一条关键字命中超过 20 个目标,就应当收窄。
网段过宽的识别
段宽超过 256 个地址且同段内出现本地服务,就要拆细。这类误伤通常表现为本地站点整体变慢。
| 成因 | 识别方法 | 典型表现 | 修正方式 |
|---|---|---|---|
| 关键字过宽 | 日志里命中数超过 20 个 | 一批无关站点同时变慢 | 收窄关键字片段 |
| 网段过宽 | 段宽超过 256 个地址 | 同段本地服务变慢 | 拆成更细的地址段 |
| 方向写反 | 状态标记方向与预期相反 | 单个目标方向错 | 修改第三段字段 |
| 同层冲突 | 同层两个方向并存 | 方向时对时错 | 例外条目移到首部 |
现象五:登录后被登出
这一类只发生在需要固定出口地址的业务系统上。它不是故障,是出口地址变化触发了对方的校验。
三个识别特征
第一,登录成功后短时间内被断开。第二,其它目标访问正常。第三,状态标记显示代理命中但请求走的是跳转地址。
处理办法
把登录后的跳转地址写进名单层的直连集合,并在该地址上禁用解析选项。演练环境里这样处理后,办公类系统的重复登录从每日 6 次降到 0 次。
为什么跳转地址是根因
这类系统的登录流程往往分成两段:主站提交凭据,随后跳到另一个地址完成会话建立。第一段走代理没有影响,第二段如果落到默认出口,出口地址变化就会触发对方的校验,于是会话刚建立就被断开。
把跳转地址单独写进名单层,等于告诉判定引擎这两个地址必须走同一条通道。演练环境里的 6 例同类问题有 5 例是跳转地址没有规则覆盖,补写之后全部消失。
- 跳转地址写进名单层的直连集合
- 主站与跳转地址方向保持一致
- 会话类地址上不附加解析选项
- 需要固定出口的业务改用锁定节点
- 改完后连续登录三次确认不再掉线
- 同类问题在办公场景里占失败反馈的 17%
现象六:手机端与电脑端表现不一致
两端规则表相同,表现却不同。九成原因是两端的可用维度不一样,剩下的原因是规则表本身没同步。
最常见的三个差异
进程名与包名的写法不同、移动端不支持部分网段写法、iOS 没有独立名单层。三条都会让同一条规则在两端落在不同的层。
规则表不跨设备同步
快喵VPN 的规则表保存在本地,不随账号同步。两端要各自配置,跨端迁移需要按维度转换,方法见 下载客户端 页。
| 原因 | 占比 | 识别方法 | 处理方式 |
|---|---|---|---|
| 进程名与包名写法不同 | 41% | 桌面命中而移动未命中 | 按包名重写应用条目 |
| 移动端不支持该网段写法 | 28% | 移动端网段命中数为零 | 改成域名写法 |
| 两端规则表版本不同 | 19% | 两端条数不一致 | 导出后逐条对照 |
| iOS 无独立名单层 | 12% | 例外条目位置不同 | 把例外写到域名规则顶部 |
排查用的日志读法
判定日志在排查中承担两个作用:确认单次判定,以及统计未命中目标。下面说明这两类记录的字段。
单次判定记录
每次请求记录目标标识、生效层、方向与耗时四件事。看这一条可以确认某次请求到底被哪条规则处理。
未命中清单
统计窗口内没有命中任何条目的目标会进这份清单。它是补写规则的依据,也是发现关键字过宽的第一现场。
| 记录类型 | 字段 | 用途 | 典型用途场景 |
|---|---|---|---|
| 单次判定 | 目标、生效层、方向、耗时 | 确认某条规则是否生效 | 核对某个具体目标 |
| 命中统计 | 各条目命中次数与占比 | 找出命中异常的条目 | 收窄过宽的关键字 |
| 未命中清单 | 未覆盖目标的标识 | 补写规则 | 发现服务新增接口 |
| 耗时分布 | 判定耗时的分位值 | 判断规则表是否过大 | 优化条目数量 |
日志不记录什么
日志不记录请求内容与响应体,也不记录访问的具体页面。它记录的是判定行为,这是分流排障真正需要的信息。

排查自查清单
下面这份清单按排查顺序排列,共十二项,逐项走完,多数分流问题能定位到具体一处。
| 序 | 检查项 | 怎么看 | 通过标准 |
|---|---|---|---|
| 1 | 判定日志是否开启 | 分流设置页 | 显示已开启 |
| 2 | 手动锁定是否关闭 | 分流设置页顶部 | 处于关闭状态 |
| 3 | 默认出口方向 | 分流设置首项 | 与主要场景一致 |
| 4 | 状态标记显示什么 | 状态页 | 能读到具体标记 |
| 5 | 标记对应哪一层 | 状态页标记名称 | 层名明确 |
| 6 | 规则表里有没有目标 | 规则表搜索 | 能搜到主域名 |
| 7 | 条目在本层的位置 | 导出后查看 | 例外在首部 |
| 8 | 同层是否有方向冲突 | 按方向分组排序 | 无相邻冲突 |
| 9 | 条目写法是否正确 | 按三段字段核对 | 字段齐全合法 |
| 10 | 授权与权限是否满足 | 系统设置与终端制度 | 两项都通过 |
| 11 | 是否有其它工具占用路由 | 已运行的客户端列表 | 只有一个在运行 |
| 12 | 对照测试两种方向 | 手动锁定切换 | 两次结果可比较 |
清单的使用方式
前九项查规则侧,后三项查环境与链路。如果第 4 项就显示命中,可以直接从第 12 项开始,节省掉大部分时间。

排查的时间预算
排查最怕的是没有节奏,在每一层都反复试,下面是演练环境里 100 例失败的实际耗时分布,可以作为参考。
| 定位耗时 | 例数 | 占比 | 主要停留阶段 | 典型原因 |
|---|---|---|---|---|
| 3 分钟以内 | 34 例 | 34% | 状态标记即可判断 | 规则缺漏或方向写反 |
| 3 至 6 分钟 | 41 例 | 41% | 规则表核对 | 被更高层或同层覆盖 |
| 6 至 12 分钟 | 18 例 | 18% | 环境检查 | 授权未过或受管终端 |
| 12 分钟以上 | 7 例 | 7% | 对照测试 | 链路或目标服务异常 |
| 合计 | 100 例 | 100% | 五步顺序 | 四类根因 |
把时间花在判断上,而不是试错上
上表里 75% 的案例在 6 分钟内定位,它们的共同点是按顺序走,没有跳步。先确认状态再动规则,比反复改规则测试要快得多。
什么情况该停下来换思路
如果同一层连续核对超过 3 次都没有发现原因,就该换一个排查维度,而不是继续在同一层找。下面三条是明确的停止信号。
- 规则表里确实没有该目标:直接补写,不要再找
- 条目存在且方向正确:转到环境与链路
- 两端同时出现同一现象:优先查环境与链路

复现与留证
分流问题有时只在特定时段出现,无法当场复现。留下可复现的证据,比凭印象描述有效得多。
留证的六项内容
下面这六项是演练环境里记录的最小集合,缺任何一项,对方都可能无法判断问题所在。
- 客户端版本号与系统版本,各记一次
- 判定状态页显示的标记文字,原样抄下
- 目标类型与出现的大致时段
- 现象描述,一句话说明是否每次都出现
- 对照目标的判定标记,用来区分全局与个别
- 规则表条数与所在层,改动前后各记一次
为什么对照目标很重要
只记录出问题的目标,无法判断这是个别现象还是整体问题。补上一个能正常工作的对照目标,对方就能立刻确认问题范围。演练环境里,附了对照目标的反馈,平均少一轮追问。
| 留证项 | 它能回答的问题 | 缺失后的后果 | 获取方式 |
|---|---|---|---|
| 客户端版本号 | 是不是版本行为差异 | 无法对照版本说明 | 分流设置关于页 |
| 状态标记文字 | 规则到底命中没有 | 只能反复沟通现象 | 状态页顶部 |
| 目标类型 | 属于哪类场景 | 无法归类处理 | 自己判断即可 |
| 出现时段 | 是否与时段相关 | 难判断是否偶发 | 客户端本地时间 |
| 对照目标标记 | 问题是个别还是整体 | 范围无法确定 | 另选一个能用的目标 |
| 规则表条数 | 改动是否被完整导入 | 误判为改动无效 | 分流设置页显示 |
复现的两个条件
要复现一个分流问题,需要同一份规则表与同一个目标。目标能复现但规则表不同,判断结论会完全不同,所以规则表条数与所在层必须一并记录。

常见排查问题
状态标记一直显示未命中,但规则表里明明写了,为什么?
最常见的原因是条目被更高层覆盖,或者处在同层中靠后位置。先确认手动锁定已关闭,再把条目提到对应的高层或同层首部。
两个目标用了同一个后缀,其中一个正常一个不正常,为什么?
说明那条规则其实命中了,两个目标走的是同一个方向。表现不同通常来自目标服务自身,而不是规则。
改了规则之后没效果,需要重启客户端吗?
一般不需要。规则改动即时生效。如果确实没有变化,先确认改动的条目没有落在手动锁定或更高层的覆盖下。
日志里的未命中目标很多,是不是该全部补写?
不建议全部补写。先看这些目标是否属于你真正会访问的服务,只补常用的一批。演练环境里补写 20 条即可覆盖日常使用的九成。
为什么我在两台电脑上表现不同?
规则表保存在本地,不随账号同步。两台设备需要各自配置,条目数与内容都要单独核对。
判定耗时突然变高,是不是规则表写坏了?
规则表过大只会小幅影响耗时。演练环境里从 214 条增加到 1406 条,单次耗时只从 0.09 毫秒升到 0.11 毫秒。
所有目标都打不开,是不是规则表的问题?
这种范围基本可以排除规则。规则错误只影响个别目标,所有目标同时失败应查链路、节点与目标服务本身。
下一步
排查方法讲完了。下面三页分别对应判定顺序、三类场景与规则写法,遇到具体问题时按需查阅。