🔀 IP Filter 分流逻辑对比分析
多平台客户端分流机制详细对比文档
点击按钮将文档导出为HTML格式(保留所有交互式流程图)
一、核心分流逻辑对比表
┌─────────────────────────────────────────────────────────────────────┐
│ IP Filter 分流决策树 │
└─────────────────────────────────────────────────────────────────────┘
Windows Native - WFP层过滤
├─ 实现方式: WFP (Windows Filtering Platform)
├─ DNS处理: DNS优先抓取
├─ 优先级: Exclusive > Inclusive
├─ 匹配顺序: DNS流量 → Exclusive → Inclusive
├─ Inclusive为空 → 默认0.0.0.0/0
└─ 流量可返回OS ✓
Mac Native - 虚拟接口+路由
├─ 实现方式: 虚拟接口 + 系统路由
├─ DNS处理: 全域名走虚拟接口
├─ 优先级: Exclusive > Inclusive (物理接口优先级高)
├─ 匹配顺序: 物理接口优先级 > 虚拟接口
├─ DNS设置影响所有域名解析
├─ DNS Relay机制处理内网域名
└─ 流量不可返回OS ✗
Android Native - VPN Service
├─ 实现方式: Android VPN Service API
├─ DNS处理: 虚拟接口DNS
├─ 优先级: 仅支持Inclusive ⚠️
├─ 需同时匹配: APP Filter + IP Filter
├─ Inclusive APP → 使用虚拟接口DNS
├─ Exclusive APP → 使用物理接口DNS
├─ 不支持Exclusive IP
└─ 流量不可返回OS ✗
iOS IPSec / Mac IPSec
├─ 实现方式: 不支持Filter
├─ DNS处理: 不支持
└─ 优先级: 不支持
二、详细分流流程图
1. Windows Native 分流逻辑
graph TD
A[网络流量] --> B{是DNS流量?}
B -->|是| C[进入DP处理]
B -->|否| D{在Exclusive中?}
D -->|是| E[走OS物理接口]
D -->|否| F{在Inclusive中?}
F -->|是| C
F -->|否| G{Inclusive为空?}
G -->|是| C
G -->|否| E
style C fill:#90EE90
style E fill:#FFB6C1
2. Mac Native 分流逻辑
graph TD
A[网络流量] --> B{DNS查询?}
B -->|是| C[强制走虚拟接口]
B -->|否| D{系统路由匹配}
D --> E{接口优先级}
E -->|物理接口优先级高| F{在Exclusive?}
E -->|虚拟接口| G[进入DP]
F -->|是| H[走物理接口]
F -->|否| I{在Inclusive?}
I -->|是| G
I -->|否| H
C --> J{Policy匹配?}
J -->|否| K[DNS Relay到物理接口]
J -->|是| G
style G fill:#90EE90
style H fill:#FFB6C1
style K fill:#FFD700
3. Android Native 分流逻辑
graph TD
A[应用流量] --> B{在Inclusive APP?}
B -->|否| C{模式是Exclusive?}
B -->|是| D{目标IP在Inclusive?}
C -->|是| E{在Exclusive APP?}
C -->|否| D
E -->|是| F[走物理接口]
E -->|否| D
D -->|是| G[进入DP
使用虚拟接口DNS] D -->|否| F H[不支持Exclusive IP] style G fill:#90EE90 style F fill:#FFB6C1
使用虚拟接口DNS] D -->|否| F H[不支持Exclusive IP] style G fill:#90EE90 style F fill:#FFB6C1
三、关键差异对比矩阵
| 特性 | Windows Native | Mac Native | Android Native | iOS/Mac IPSec |
|---|---|---|---|---|
| 实现方式 | WFP | 虚拟接口+路由 | VPN Service | 不支持 |
| 优先级 | Exclusive优先 | Exclusive优先 | 仅Inclusive | - |
| DNS处理 | 独立抓取 | 强制虚拟接口 | 基于APP Filter | - |
| IP冲突处理 | 走OS | 走物理接口 | N/A | - |
| 内网DNS支持 | 支持✓ | Relay支持 | 需配置 | - |
| 流量返回OS | 支持✓ | 不支持✗ | 不支持✗ | - |
| 默认行为 | 全部进DP | 全部进DP | 全部进DP | 全部进隧道 |
| Exclusive IP | 支持✓ | 支持✓ | 不支持✗ | - |
| APP级别控制 | 不支持✗ | 不支持✗ | 支持✓ | - |
四、平台特性详细说明
🪟 Windows Native
- 使用WFP在网络堆栈层过滤
- DNS流量优先级最高
- 支持流量返回操作系统
- Exclusive优先于Inclusive
- 内网DNS完全支持
- 适合企业内网环境
🍎 Mac Native
- 虚拟接口 + 路由组合
- 物理接口优先级高于虚拟接口
- ⚠️ DNS强制走虚拟接口
- DNS Relay处理内网域名
- 不支持流量返回OS
- 路由规则基于接口优先级
🤖 Android Native
- 基于VPN Service API
- APP Filter + IP Filter 双重过滤
- ✗ 不支持Exclusive IP
- APP级别DNS控制
- 虚拟接口对未配置APP不可见
- 精细化应用流量控制
📱 iOS / Mac IPSec
- ✗ 不支持IP Filter
- 所有流量进入隧道
- 无法精细控制分流
- 依赖系统IPSec实现
- 配置简单但功能受限
五、实现差异根本原因分析
核心结论:底层引流机制不同导致分流逻辑差异
┌─────────────────────────────────────────────────────────────┐
│ 1. 支持流量返回OS的平台 (Windows Native) │
│ ├─ 可以精确控制流量进出 │
│ ├─ Exclusive优先级高于Inclusive │
│ ├─ 内网DNS完全支持 │
│ └─ WFP提供了完整的网络堆栈控制能力 │
├─────────────────────────────────────────────────────────────┤
│ 2. 不支持流量返回OS的平台 (Mac, Android) │
│ ├─ 流量一旦进入虚拟接口/隧道就无法返回 │
│ ├─ 需要在进入前就做好过滤 │
│ ├─ DNS处理机制各有特色 │
│ └─ 依赖操作系统的VPN/TUN接口限制 │
├─────────────────────────────────────────────────────────────┤
│ 3. 基于路由的实现 (Mac) │
│ ├─ 受系统路由规则限制 │
│ ├─ 接口优先级决定行为 │
│ ├─ DNS强制走虚拟接口导致特殊行为 │
│ └─ 利用DNS Relay机制解决内网域名问题 │
├─────────────────────────────────────────────────────────────┤
│ 4. 特殊限制平台 (Android) │
│ ├─ VPN Service API限制 │
│ ├─ APP级别控制是独特优势 │
│ ├─ 不支持Exclusive IP是最大限制 │
│ └─ 双重过滤(APP+IP)提供精细控制 │
├─────────────────────────────────────────────────────────────┤
│ 5. 不支持Filter的平台 (iOS/Mac IPSec) │
│ ├─ 系统IPSec实现限制 │
│ ├─ 只能全流量加速 │
│ └─ 适合简单场景使用 │
└─────────────────────────────────────────────────────────────┘
六、技术术语说明
| 术语 | 说明 |
|---|---|
| DP | Data Path - 数据路径处理模块,负责流量加速和处理 |
| POP | Point of Presence - 接入点,进行流量加速的服务器节点 |
| WFP | Windows Filtering Platform - Windows平台的网络过滤框架,提供完整的数据包处理能力 |
| Inclusive | 包含列表(白名单),在列表中的IP会被引入DP处理 |
| Exclusive | 排除列表(黑名单),在列表中的IP不会被引入DP,走OS转发 |
| ipSetMode | IP集合模式:0=双重配置(Inclusive+Exclusive),1=仅Inclusive |
| DNS Relay | DNS中继,将DNS请求转发到其他DNS服务器,用于解决内网DNS问题 |
| VPN Service | Android系统提供的VPN服务API,用于创建虚拟网络接口 |
| TUN接口 | 虚拟网络接口,工作在网络层,用于流量拦截和转发 |
| nfqueue | Linux netfilter队列,用于将数据包传递给用户空间程序处理 |
📄 文档生成时间:
基于原始技术文档整理分析
⚡ 本文档包含交互式流程图,建议使用现代浏览器查看
支持的浏览器:Chrome 90+, Firefox 88+, Safari 14+, Edge 90+