代理节点 TUN Clash 模式详解
一、概述
1. 文档简介
本文档系统讲解网络代理的核心概念,包括代理节点、TUN 模式和 Clash 工作模式,帮助开发者理解网络代理的工作原理和配置方法。
2. 适用场景
- 需要访问国外网络资源的开发环境
- 命令行工具和桌面应用的代理配置
- 网络调试和问题排查
二、核心概念
1. 基本术语
A. 代理节点
代理节点是部署在国外的服务器,用于转发网络请求。常见的节点包括美国节点、日本节点、新加坡节点等。
B. Clash
Clash 是一个代理管理工具,核心功能是管理多个代理节点,并根据规则决定请求的转发方式。
C. TUN 模式
TUN(Network TUNnel)是一种虚拟网络设备,在操作系统内核层面拦截所有网络流量。
2. 系统代理工作原理
A. 传统系统代理流程
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 流量:
graph LR
A[浏览器] -->|端到端加密| B[Google]
A -->|加密隧道| C[代理节点]
C -->|转发数据| B关键点:
- 浏览器与目标站点之间建立端到端加密
- 代理节点只能看到域名、数据量、连接时间
- 无法查看具体的页面内容
三、系统代理的局限性
1. 应用支持问题
A. 支持系统代理的应用
- 浏览器(Chrome、Firefox、Safari)
- 部分遵循系统代理规范的桌面应用
B. 不支持系统代理的应用
- 大多数命令行工具(curl、wget 等)
- Node.js 程序
- Docker 容器
- 部分桌面应用
2. 根本原因分析
系统代理本质上是一个接口规范,不是强制规则:
graph TD
A[应用程序] --> B{实现系统代理接口?}
B -->|是| C[查询系统代理设置]
B -->|否| D[直接连接目标 IP]
C --> E[通过 Clash 转发]
D --> F[直连,不经过代理]典型问题场景:
- 浏览器可以访问 Google
- Node 请求外网超时
- 某些应用无法连接
四、TUN 模式原理与应用
1. TUN 模式工作原理
A. 核心机制
TUN 模式在操作系统内核层面创建虚拟网卡,拦截所有网络流量:
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. 问题原因分析
graph TD
A[TUN 拦截所有流量] --> B{目标地址}
B -->|内网 IP| C[被错误转发到代理]
B -->|localhost| C
B -->|外网域名| D[正常代理]
C --> E[连接失败或超时]常见问题:
- 原本能访问的内网服务突然不可用
- 数据库连接失败
- API 请求超时
- 本地开发服务器无法访问
五、Clash 工作模式详解
1. 规则模式(Rule)
A. 工作原理
根据预设规则决定流量走向:
graph TD
A[网络请求] --> B{规则匹配}
B -->|国内域名| C[直连]
B -->|国外域名| D[代理节点]
B -->|局域网| C
B -->|广告域名| E[拒绝]B. 规则配置示例
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,DIRECTC. 推荐场景
- 长期使用的默认模式
- 需要精确控制流量走向
- 混合使用国内和国外服务
2. 全局模式(Global)
A. 工作原理
graph LR
A[所有流量] --> B[Clash]
B --> C[代理节点]
C --> D[目标服务器]B. 适用场景
- 临时排查网络问题
- 确认问题是否与网络相关
- 测试代理节点连通性
C. 注意事项
- 不适合长期使用
- 国内网站访问变慢
- 浪费代理流量
3. 直连模式(Direct)
A. 工作原理
graph LR
A[所有流量] --> B[直接连接]
B --> C[目标服务器]B. 使用场景
- 确认问题是否由代理引起
- 临时禁用代理
- 测试本地网络连通性
六、最佳实践建议
1. 开发环境配置
A. 推荐方案
开发阶段:
- 使用系统代理 + 规则模式
- 浏览器访问外网通过代理
- 命令行工具和本地服务直连
需要命令行代理时:
- 临时开启 TUN 模式
- 配置绕过规则,避免影响本地服务
B. 配置示例
# 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,DIRECT2. 问题排查流程
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. 问题定位思路
遇到网络问题时,按照以下层次定位:
- 应用层:检查应用是否支持系统代理
- 系统层:检查系统代理设置是否生效
- 网络层:检查 TUN 模式是否拦截了不该拦截的流量
一旦确定了控制权在哪一层,很多看似玄学的问题就会变得可解释、可定位、可解决。