【DNS 代理】:TUN 模式下的网络原理

引言:为什么访问 Gemini 需要开启 TUN 模式?

如果你用过一些 AI 服务(比如 Google 的 Gemini),可能会遇到一个奇怪的现象:浏览器明明设置了代理,也能正常访问 Google,但 Gemini 的 App 或某些桌面客户端却死活连不上。这时候,老手往往会告诉你:"开启 TUN 模式试试。" 果然,一开就好。

这背后,就是 TUN 模式的价值所在。传统的代理方式只能覆盖"听话"的应用程序,而 TUN 模式能从操作系统层面"劫持"所有流量,让任何软件(包括那些不给你设置代理选项的 App)乖乖走代理通道。

在展开 TUN 模式之前,我们先复习一下------没有代理时,一次 HTTP 请求到底是怎么完成的。

一、一次 HTTP 请求的完整过程(无代理)

当你在浏览器输入 https://www.google.com 并回车,背后发生了这些事:

简单概括为四个阶段:

  1. DNS 解析 :把域名 www.google.com 翻译成 IP 地址(就像从通讯录找到电话号码)。这一步如果失败,后续全部免谈。
  2. TCP 连接:与目标服务器建立三次握手(拨通电话)。
  3. TLS 握手:如果是 HTTPS,还需要协商加密密钥(对通话内容加密)。
  4. HTTP 请求/响应:发送请求头、请求体,接收服务器返回的数据。

这个过程中,你的真实 IP 地址会暴露给 Google,你的 ISP(电信/移动)也能看到你访问了 google.com。这就是直连。

二、普通代理模式原理

代理的本质是"中间人"------你让第三方帮你取数据,你再从第三方那里拿。

常见代理类型

  • HTTP 代理:只能代理 HTTP/HTTPS 流量,需要浏览器或应用显式支持。
  • SOCKS5 代理:工作在更底层,可以代理 TCP/UDP 流量,但同样需要应用程序主动配合。
  • 透明代理:不需要应用配置,但通常需要在路由器上设置。

普通代理的工作流程(以浏览器配置 SOCKS5 为例)

普通代理的局限

  1. DNS 泄露风险 :浏览器解析 google.com 时,可能直接使用本地 DNS 服务器(ISP 提供的),导致你的 DNS 查询明文暴露。虽然后续数据走了代理,但"你要访问 Google"这件事已经被记录。
  2. 应用兼容性差 :不是所有软件都支持设置代理。命令行工具、UWP 应用(Windows 商店应用)、某些游戏、以及 Gemini 桌面客户端 根本不读浏览器的代理配置。它们会直接尝试连接,结果就是连不上。
  3. UDP 支持弱:很多代理协议对 UDP 转发支持不好,影响 DNS 查询、游戏语音等。

这就是为什么你需要 TUN 模式

三、TUN 模式原理

TUN 模式的核心思想是:在操作系统内核里插入一块虚拟网卡,然后修改路由表,让所有流量都先经过这块虚拟网卡,再由代理客户端统一处理。

3.1 什么是虚拟网卡?

虚拟网卡是一个完全由软件模拟出来的网络设备。对操作系统和应用程序来说,它和真实的 Wi-Fi 或以太网卡长得一模一样------有自己的 IP 地址、子网掩码,也能收发数据包。但实际上,它没有连接任何物理线路,所有"收发"动作都由代理软件的驱动程序接管。

开启 TUN 模式后,Clash、V2Ray、sing-box 等客户端会:

  1. 创建一张虚拟网卡 (在 Linux 下叫 tun0,Windows 下叫 Wintun)。
  2. 修改系统路由表 ,把默认路由(0.0.0.0/0)指向这张虚拟网卡。这意味着任何发往互联网的数据包,都会先被送到虚拟网卡。
  3. 启动一个常驻进程,从虚拟网卡读取数据包,然后按照代理规则(如绕过国内 IP、只代理境外流量)处理。

3.2 TUN 模式下的完整时序图

3.3 TUN 模式如何解决 DNS 泄露?

关键点在于:DNS 查询包(UDP 53 端口)也是 IP 数据包,同样会被路由表送进虚拟网卡 。代理客户端在虚拟网卡出口截获到这个包后,绝不会交给本地系统去解析,而是:

  • 要么自己通过加密 DNS(DoH/DoT)直接查询,
  • 要么将 DNS 包封装后发给代理服务器,让代理服务器在境外解析。

这样,你的本地 ISP 看到的只有你和代理服务器之间的加密流量,完全看不到你查询了 google.com

3.4 TUN 模式如何让"任何软件"都走代理?

因为路由表的修改是操作系统级别的。无论你打开的是浏览器、命令行、Windows 更新、还是 Gemini 客户端,当你试图连接互联网时,操作系统只看路由表:默认网关是虚拟网卡,那就把数据包发给虚拟网卡。应用程序根本不需要知道代理的存在。

这就是为什么 Gemini 等"不听话"的软件,开启 TUN 模式后就能正常工作了。

四、总结:普通代理 vs TUN 模式

维度 普通代理 (HTTP/SOCKS5) TUN 模式代理
工作原理 应用程序主动将数据发给代理客户端 操作系统路由强制所有流量经过虚拟网卡
兼容性 需要应用支持代理配置 所有应用自动支持,无需配置
DNS 泄露风险 高(浏览器可能本地解析) 低(DNS 包也被虚拟网卡捕获,可远端解析)
UDP 支持 依赖代理协议,SOCKS5 支持但复杂 完整支持,因为处理的是 IP 层数据包
性能开销 较低(少一层封装) 稍高(多一次虚拟网卡读写 + 路由决策)
典型场景 浏览器 + 少数支持代理的软件 全局代理、游戏、UWP 应用、命令行、疑难软件

什么时候该用 TUN 模式?

  • ✅ 你遇到某些软件(如 Gemini 客户端、Spotify 桌面版、Windows 商店应用)无法通过普通代理访问。
  • ✅ 你担心 DNS 泄露,希望隐私保护更彻底。
  • ✅ 你需要转发 UDP 流量(游戏、VoIP、DNS over VPN)。
  • ✅ 你不想为每个软件手动配置代理,追求"开箱即用"。

什么时候没必要用 TUN 模式?

  • ❌ 你只用浏览器上网,且浏览器已配置好代理插件(如 SwitchyOmega)。
  • ❌ 你的设备性能较差(TUN 模式会有额外 CPU 开销)。
  • ❌ 你同时使用多个 VPN/代理软件,虚拟网卡可能冲突。

最后

TUN 模式并非"银弹",但它确实是解决"全局代理"和"DNS 泄露"最优雅的方案之一。很多现代代理客户端(Clash Meta、sing-box、WireGuard 等)都默认支持 TUN 模式。如果你一直困扰于某些软件不走代理,不妨试试打开它。

相关推荐
wWYy.11 小时前
WebSocket
网络·websocket·网络协议
念何架构之路11 小时前
DNS和HTTP DNS
网络·网络协议·http
梦奇不是胖猫12 小时前
[ 计算机网络 | 第三章 ] 数据链路层 04 交换式以太网
运维·服务器·网络·网络协议·计算机网络
梦奇不是胖猫12 小时前
[ 计算机网络 | 第三章 ] 数据链路层 05 VLAN
网络·网络协议·计算机网络
liulilittle1 天前
TCP UCP 卡尔曼滤波器
网络·网络协议·tcp/ip·通信
凯瑟琳.奥古斯特1 天前
常见加密算法及应用
java·开发语言·网络·网络协议·职场和发展
nailwl1 天前
原生态部署librenms
网络协议·http·https
tryqaaa_1 天前
学习日志(三)【php语法学习,iscc校赛wp】
android·网络协议·学习·安全·web安全·web
汤愈韬1 天前
IP安全 SEC VPN_2
网络·网络协议·安全·网络安全·security