TUN Mode
TUN模式网络隧道技术解析
#tech / ops / proxy
#type / concept
#status / growing
TUN Mode
一句话定义
TUN 是一种工作在网络层(L3)的虚拟网卡设备,用户空间程序通过读写该设备截获 IP 数据包,常用于 VPN 和透明代理。
核心机制 / 工作原理
TUN vs TAP
| 维度 | TUN | TAP |
|---|---|---|
| 工作层次 | 网络层 L3(IP 包) | 数据链路层 L2(以太网帧) |
| 承载数据 | 纯 IP 数据包 | 任意 L2 帧(含 ARP、广播) |
| 开销 | 较小(无 MAC 头) | 较大(含完整帧头) |
| 典型用途 | VPN、代理 | 桥接、模拟局域网 |
工作原理(代理工具中的流程)
应用程序 → 内核路由 → TUN 虚拟网卡 → 用户空间代理程序(如 Clash/mihomo)
→ 解析目标地址 → 按规则决策(直连/代理/拒绝)→ 远程服务器或直连出口
- 系统将流量路由到 TUN 设备(通过修改路由表或 iptables)
- 代理程序从 TUN 设备 fd 读取原始 IP 包
- 解析目标地址,匹配代理规则
- 决定直连或通过代理服务器转发
- 响应包写回 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 是代理协议,二者不在同一层次
Related notes
- mihomo/Clash
- [[proxy-config|代理配置]]
- [[networking-fundamentals|网络基础]]