TUN Mode

TUN模式网络隧道技术解析

#tech / ops / proxy #type / concept #status / growing

TUN Mode

一句话定义

TUN 是一种工作在网络层(L3)的虚拟网卡设备,用户空间程序通过读写该设备截获 IP 数据包,常用于 VPN 和透明代理。

核心机制 / 工作原理

TUN vs TAP

维度TUNTAP
工作层次网络层 L3(IP 包)数据链路层 L2(以太网帧)
承载数据纯 IP 数据包任意 L2 帧(含 ARP、广播)
开销较小(无 MAC 头)较大(含完整帧头)
典型用途VPN、代理桥接、模拟局域网

工作原理(代理工具中的流程)

应用程序 → 内核路由 → TUN 虚拟网卡 → 用户空间代理程序(如 Clash/mihomo)
    → 解析目标地址 → 按规则决策(直连/代理/拒绝)→ 远程服务器或直连出口
  1. 系统将流量路由到 TUN 设备(通过修改路由表或 iptables)
  2. 代理程序从 TUN 设备 fd 读取原始 IP 包
  3. 解析目标地址,匹配代理规则
  4. 决定直连或通过代理服务器转发
  5. 响应包写回 TUN 设备,内核再交还给应用程序

与系统代理对比

维度TUN 模式系统代理(HTTP/SOCKS)
覆盖范围全局,所有应用仅支持代理的应用
协议支持所有 IP 流量(TCP/UDP/ICMP)仅 HTTP/SOCKS
依赖应用配合不需要应用需支持代理设置
DNS 处理可接管 DNS 防泄露DNS 可能绕过代理
实现复杂度高(需路由表配合)

优点

  • 效率较高:只封装 IP 包,数据量小于 TAP
  • 跨平台兼容:Linux、macOS、Windows 均支持
  • 适合路由分流:基于 IP 地址路由特定流量
  • 节省带宽:省略二层头信息
  • 简单稳定:不涉及链路层,调试排错更容易

缺点

  • 不支持非 IP 协议:无法传输 ARP、广播等二层包
  • 无法做二层桥接:不支持局域网文件共享、DHCP 等依赖广播的应用
  • 配置复杂:需手动配置路由表和分流规则

最小例子

以 Clash TUN 模式为例,配置片段:

tun:
  enable: true
  stack: system     # 或 gvisor
  dns-hijack:
    - any:53        # 劫持所有 DNS 请求
  auto-route: true  # 自动配置路由表
  auto-detect-interface: true

启动后,系统所有流量经过 TUN 设备 → Clash 内核 → 按规则分流。

边界与常见误解

  • TUN 模式 ≠ 全局 VPN:代理工具的 TUN 模式是截获流量后按规则分流,不是所有流量都走代理
  • DNS 泄露:如果 DNS 请求未被 TUN 接管,真实 DNS 会暴露访问记录;需配置 dns-hijack
  • 路由冲突:TUN 模式修改系统路由表,可能与企业 VPN、虚拟机网络冲突
  • 性能开销:所有流量都经过用户空间程序,有上下文切换开销;高吞吐场景下可能成为瓶颈
  • TUN ≠ 代理协议:TUN 是设备类型,SOCKS/HTTP 是代理协议,二者不在同一层次
  • mihomo/Clash
  • [[proxy-config|代理配置]]
  • [[networking-fundamentals|网络基础]]

信息参考

创建于 2025/1/1 更新于 2026/5/27