代理节点 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

mermaid

关键点

  • 浏览器与目标站点之间建立端到端加密
  • 代理节点只能看到域名、数据量、连接时间
  • 无法查看具体的页面内容

三、系统代理的局限性

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[直接连接]

mermaid

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[拒绝]

mermaid

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,DIRECT

C. 推荐场景

  • 长期使用的默认模式
  • 需要精确控制流量走向
  • 混合使用国内和国外服务

2. 全局模式(Global)

A. 工作原理

graph LR
    A[所有流量] --> B[Clash]
    B --> C[代理节点]
    C --> D[目标服务器]

B. 适用场景

  • 临时排查网络问题
  • 确认问题是否与网络相关
  • 测试代理节点连通性

C. 注意事项

  • 不适合长期使用
  • 国内网站访问变慢
  • 浪费代理流量

3. 直连模式(Direct)

A. 工作原理

graph LR
    A[所有流量] --> B[直接连接]
    B --> C[目标服务器]

mermaid

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,DIRECT

2. 问题排查流程

graph TD
    A[网络问题] --> B{浏览器正常?}
    B -->|否| C[检查节点连接]
    B -->|是| D{命令行正常?}
    D -->|否| E[开启 TUN 模式]
    D -->|是| F{本地服务正常?}
    F -->|否| G[添加绕过规则]
    F -->|是| H[检查应用配置]

mermaid

3. 模式选择建议

场景推荐模式原因
日常开发系统代理 + 规则模式稳定可控,不影响本地服务
命令行需要代理TUN + 规则模式全局覆盖,但需配置绕过
排查网络问题全局模式快速确认问题根源
测试本地服务直连模式排除代理干扰

七、核心要点总结

1. 控制权层次

系统代理:应用层控制,浏览器遵守,其他应用不一定遵守
TUN 模式:内核层控制,所有流量都必须经过

2. 稳定性与便利性权衡

方案稳定性便利性适用场景
不开 TUN日常开发
开 TUN特殊需求

3. 问题定位思路

遇到网络问题时,按照以下层次定位:

  1. 应用层:检查应用是否支持系统代理
  2. 系统层:检查系统代理设置是否生效
  3. 网络层:检查 TUN 模式是否拦截了不该拦截的流量

一旦确定了控制权在哪一层,很多看似玄学的问题就会变得可解释、可定位、可解决。


参考资料

  1. 一次把「代理 / 节点 / TUN / Clash 模式」讲明白
最后修改:2026 年 01 月 17 日
如果觉得我的文章对你有用,请随意赞赏