跳到正文
W Winse Blog
network 1 min read

流量都去哪里了?TUN 模式下的代理谜云

自从进入 Vibe coding,代理也进入了 TUN 时代,代理流量也开始捉襟见肘了。

切换到 TUN 虚拟网卡之后,代理上网流量就像脱缰的野马,一发不可收拾。这月才过半,套餐的100G流量就见底了。

也是由于 AI 编程才接触的 TUN 虚拟网卡模式,对它不甚了解,简单的认为:所有流量都会经过代理一遍。(这个理解是不准确的)

去年还是压着点用:没有 AI 写代码就把 TUN 关掉只用系统代理。今年完全的切入 plan 编程,计划要 AI,构建代码编写要 AI。时间的不确定,来回的切也实在麻烦,就撒手用了这么十几天。

为了搞明白 TUN,还有以后踏实的 AI 编程,必须打破砂锅问到底:流量到底都去哪里了?

AI 说:系统代理依赖于软件主动配合,它们自己去读系统的代理设置,但很多软件(如终端命令行、部分游戏、一些桌面应用)直连"绕过系统代理"。而 TUN 虚拟网卡工作在更深层的网络层(Layer 3),通过虚拟网卡+路由表的方式,直接接管整个系统的流量。不管上层应用愿不愿意,只要它想联网,就得乖乖经过 TUN 虚拟网卡。

上面对 TUN 虚拟网口的原理有了大概的了解,“TUN接管所有流量” 和 “所有流量都走代理” 其实是两回事。既然去到了网络层,那科学上网还能做到吗?

判断是否消耗代理流量的,其实是 Clash 的规则决定的。所以,并不是所有的流量都会消耗代理套餐。明确命中的国内IP,确实是直连的,这一点后面通过流量监控会验证到。

既然科学上网有用,那为什么 TUN 虚拟网卡模式代理流量就飙升呢?

真正的问题很可能是 DNS 解析导致的。很多原本可以直接访问的流量,在 TUN 模式下,会因为 DNS 解析变化最终拿到海外的IP地址,然后就走了代理。

同一个域名,不同的DNS,可能会解析到完全不同的 IP。

到底哪些访问吃掉了我们的流量呢?

代理软件 Clash Verge 的连接 视图,虽然能看实时流量,有下载、上传的流量数据。但是,它只能看现在的,每条连接刷的一下就过去了。不能查看历史数据,没有周期汇总统计等。

既然,Clash Verge 能看实时的数据了,那把实时数据采集保存 下来,然后就可以统计监控了啊!最终,搞了一套:Clash Verge + Exporter + Prometheus + Grafana的代理流量监控系统。

先实现一个 clash_exporter 指标服务,负责采集 Clash Verge 的实时连接数据。

在 Github 上面有 clash_exporter 的项目,Clash Verge 软件也是开源的,用 AI 辅助把它们结合起来,就可以获取到代理流量实时数据了!

然后,运行Prometheus,拉取存储流量指标。

最后,运行Grafana,做代理流量监控大屏。

从监控总流量图中,可以看到 Docker镜像下载 直接用了代理。

时间的魅力在此刻展现无遗。

跑起来后,很多事情就一目了然了。

比如:明确的国内 IP,确实不占代理流量,直接访问。

真正代理流量的增量:1、原来需要加速的镜像源,现在直接从国外去下载了。2、本来国内就能访问,通过TUN的DNS解析成国外IP了。

看下连接数:TUN 模式下是30-80;系统代理只有10-30。

如果,你也好奇自己的 Clash Verge 流量到底消耗在哪里,可以下载源码跑起来看看。项目地址:

https://github.com/winse/clash-exporter

操作也简单,Grafana 和 Prometheus 用 docker compose 直接启动运行。

在 GitHub 上讨论

欢迎通过 GitHub Issue 留言或反馈。每条讨论都会关联到对应文章的源文件路径。

2026-05-13-tun-proxy-traffic.md

Related posts