Loading... # 代理节点 TUN Clash 模式详解 # 一、概述 ## 1. 文档简介 本文档系统讲解网络代理的核心概念,包括代理节点、TUN 模式和 Clash 工作模式,帮助开发者理解网络代理的工作原理和配置方法。 ## 2. 适用场景 - 需要访问国外网络资源的开发环境 - 命令行工具和桌面应用的代理配置 - 网络调试和问题排查 # 二、核心概念 ## 1. 基本术语 ### A. 代理节点 代理节点是部署在国外的服务器,用于转发网络请求。常见的节点包括美国节点、日本节点、新加坡节点等。 ### B. Clash Clash 是一个代理管理工具,核心功能是管理多个代理节点,并根据规则决定请求的转发方式。 ### C. TUN 模式 TUN(Network TUNnel)是一种虚拟网络设备,在操作系统内核层面拦截所有网络流量。 ## 2. 系统代理工作原理 ### A. 传统系统代理流程 ```mermaid sequenceDiagram participant B as 浏览器 participant S as 系统 participant C as Clash participant N as 代理节点 participant G as Google B->>S: 访问 Google S->>S: 检测系统代理 S->>C: 转发请求 C->>C: 规则匹配 C->>N: 转发到节点 N->>G: 访问目标 G-->>N: 返回内容 N-->>C: 转发响应 C-->>B: 返回给浏览器 ``` ### B. 节点安全性分析 对于 HTTPS 流量: ```mermaid graph LR A[浏览器] -->|端到端加密| B[Google] A -->|加密隧道| C[代理节点] C -->|转发数据| B ```  **关键点**: - 浏览器与目标站点之间建立端到端加密 - 代理节点只能看到域名、数据量、连接时间 - 无法查看具体的页面内容 # 三、系统代理的局限性 ## 1. 应用支持问题 ### A. 支持系统代理的应用 - 浏览器(Chrome、Firefox、Safari) - 部分遵循系统代理规范的桌面应用 ### B. 不支持系统代理的应用 - 大多数命令行工具(curl、wget 等) - Node.js 程序 - Docker 容器 - 部分桌面应用 ## 2. 根本原因分析 系统代理本质上是一个接口规范,不是强制规则: ```mermaid graph TD A[应用程序] --> B{实现系统代理接口?} B -->|是| C[查询系统代理设置] B -->|否| D[直接连接目标 IP] C --> E[通过 Clash 转发] D --> F[直连,不经过代理] ``` **典型问题场景**: - 浏览器可以访问 Google - Node 请求外网超时 - 某些应用无法连接 # 四、TUN 模式原理与应用 ## 1. TUN 模式工作原理 ### A. 核心机制 TUN 模式在操作系统内核层面创建虚拟网卡,拦截所有网络流量: ```mermaid graph TD A[所有应用程序] --> B[操作系统网络栈] B --> C[TUN 虚拟网卡] C --> D[Clash 代理核心] D --> E{规则匹配} E -->|代理规则| F[代理节点] E -->|直连规则| G[直接连接] ```  ### B. TUN 模式覆盖范围 开启 TUN 后,以下所有流量都会被代理: - 浏览器 - Node.js 程序 - 桌面应用 - Docker 容器 - 命令行工具(curl、wget、git 等) ## 2. TUN 模式的优势与风险 ### A. 优势 - 全局代理,无需单独配置每个应用 - 命令行工具可以直接访问外网 - 绕过应用的代理设置限制 ### B. 风险与副作用 - 内网服务可能无法访问 - localhost 和局域网连接异常 - 网络行为变得不可预测 - 上传下载可能偶发卡死 ### C. 问题原因分析 ```mermaid graph TD A[TUN 拦截所有流量] --> B{目标地址} B -->|内网 IP| C[被错误转发到代理] B -->|localhost| C B -->|外网域名| D[正常代理] C --> E[连接失败或超时] ``` **常见问题**: - 原本能访问的内网服务突然不可用 - 数据库连接失败 - API 请求超时 - 本地开发服务器无法访问 # 五、Clash 工作模式详解 ## 1. 规则模式(Rule) ### A. 工作原理 根据预设规则决定流量走向: ```mermaid graph TD A[网络请求] --> B{规则匹配} B -->|国内域名| C[直连] B -->|国外域名| D[代理节点] B -->|局域网| C B -->|广告域名| E[拒绝] ```  ### B. 规则配置示例 ```yaml rules: - DOMAIN-SUFFIX,google.com,Proxy - DOMAIN-SUFFIX,github.com,Proxy - GEOIP,CN,DIRECT - IP-CIDR,192.168.0.0/16,DIRECT - IP-CIDR,10.0.0.0/8,DIRECT ``` ### C. 推荐场景 - 长期使用的默认模式 - 需要精确控制流量走向 - 混合使用国内和国外服务 ## 2. 全局模式(Global) ### A. 工作原理 ```mermaid graph LR A[所有流量] --> B[Clash] B --> C[代理节点] C --> D[目标服务器] ``` ### B. 适用场景 - 临时排查网络问题 - 确认问题是否与网络相关 - 测试代理节点连通性 ### C. 注意事项 - 不适合长期使用 - 国内网站访问变慢 - 浪费代理流量 ## 3. 直连模式(Direct) ### A. 工作原理 ```mermaid graph LR A[所有流量] --> B[直接连接] B --> C[目标服务器] ```  ### B. 使用场景 - 确认问题是否由代理引起 - 临时禁用代理 - 测试本地网络连通性 # 六、最佳实践建议 ## 1. 开发环境配置 ### A. 推荐方案 **开发阶段**: - 使用系统代理 + 规则模式 - 浏览器访问外网通过代理 - 命令行工具和本地服务直连 **需要命令行代理时**: - 临时开启 TUN 模式 - 配置绕过规则,避免影响本地服务 ### B. 配置示例 ```yaml # TUN 模式下的绕过规则 tun: enable: true stack: system dns-hijack: - any:53 auto-route: true auto-detect-interface: true # 避免代理本地和局域网流量 rules: - IP-CIDR,127.0.0.0/8,DIRECT - IP-CIDR,192.168.0.0/16,DIRECT - IP-CIDR,10.0.0.0/8,DIRECT - DOMAIN-SUFFIX,local,DIRECT ``` ## 2. 问题排查流程 ```mermaid graph TD A[网络问题] --> B{浏览器正常?} B -->|否| C[检查节点连接] B -->|是| D{命令行正常?} D -->|否| E[开启 TUN 模式] D -->|是| F{本地服务正常?} F -->|否| G[添加绕过规则] F -->|是| H[检查应用配置] ```  ## 3. 模式选择建议 | 场景 | 推荐模式 | 原因 | |------|---------|------| | 日常开发 | 系统代理 + 规则模式 | 稳定可控,不影响本地服务 | | 命令行需要代理 | TUN + 规则模式 | 全局覆盖,但需配置绕过 | | 排查网络问题 | 全局模式 | 快速确认问题根源 | | 测试本地服务 | 直连模式 | 排除代理干扰 | # 七、核心要点总结 ## 1. 控制权层次 ``` 系统代理:应用层控制,浏览器遵守,其他应用不一定遵守 TUN 模式:内核层控制,所有流量都必须经过 ``` ## 2. 稳定性与便利性权衡 | 方案 | 稳定性 | 便利性 | 适用场景 | |------|--------|--------|---------| | 不开 TUN | 高 | 中 | 日常开发 | | 开 TUN | 低 | 高 | 特殊需求 | ## 3. 问题定位思路 遇到网络问题时,按照以下层次定位: 1. **应用层**:检查应用是否支持系统代理 2. **系统层**:检查系统代理设置是否生效 3. **网络层**:检查 TUN 模式是否拦截了不该拦截的流量 一旦确定了控制权在哪一层,很多看似玄学的问题就会变得可解释、可定位、可解决。 *** ## 参考资料 1. [一次把「代理 / 节点 / TUN / Clash 模式」讲明白](https://mp.weixin.qq.com/s/ZvvjuPC6nuFy-z8LLr0yrQ) 最后修改:2026 年 01 月 17 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏