0%

TUN中三种路由区别

TUN (虚拟网络栈)

定义:TUN 是一种虚拟网路介面,工作在 OSI 模型的第三层(IP 层)。它不是一个实体硬体,而是一个软体驱动程式,允许使用者空间的程式像处理普通网路介面一样读取和写入 IP 封包。
用途:当一个应用程式(例如 VPN 客户端)需要拦截或处理所有网路流量时,它会建立一个 TUN 栈。作业系统会将所有指定路由的流量发送到这个介面,然后应用程式从介面读取这些封包进行处理(例如加密)。处理完成后,应用程式再将封包写回介面,由作业系统发送到网路。

TUN 的L3→L4 转换

用户空间的代理收到来自 TUN 的原始 IP 包(例如一个目标 IP/端口的 TCP SYN),需要把这个 IP 包“翻译/组装”成一个用户空间的 TCP/UDP socket(或把它交给系统内核栈)去建立连接并转发。这个过程叫 L3→L4 assemble(把 IP 包组装为 TCP/UDP 连接)。不同实现选择把这项工作用系统内核栈来做,或用用户态的网络栈(如 gVisor 风格实现)来做。sing-box/sing-tun 就实现了这几种策略。

system gvisor mixed三种stack的区别与应用

system

把接收到的 L3 包交由操作系统内核网络栈去处理(即在内核/系统层面建立/转发 TCP/UDP 连接)。代理做的工作是路由与转发决策,但不重新实现 TCP/UDP

优点:与系统兼容性最好、对 OS 现有防火墙 / 路由规则亲和(通常延迟和 CPU 负载较低)。

缺点:需要对系统防火墙与路由做更多配置(比如在 Linux 上可能需要 nftables/iproute2 的配合),在一些平台(或 sandbox 环境)无法轻易修改内核路由规则时不方便。
实现方式: - 完全依赖操作系统的TCP/IP协议栈

  • 代理程序直接从TUN设备读取完整的IP数据包

  • 由系统内核完成TCP连接管理、拥塞控制、重传等
    特点

  • ✅ 性能最高(内核态处理,零拷贝优化)

  • ✅ 兼容性最好(完全符合RFC标准)

  • ❌ 需要内核级别权限

  • ❌ 在某些平台(如Android)可能受限

System模式问题

  • 系统内核的TCP栈可能有一些”优化”行为(如窗口缩放、时间戳选项、快速打开)
  • 经过Hysteria2的UDP封装后,这些特性的时序可能被打乱
  • 某些网站的防火墙/负载均衡器可能误判为异常流量

gVisor

在用户空间实现一个虚拟的网络协议栈(受 gVisor 启发),代理在用户态模拟/处理 TCP 与 UDP;换言之代理重建并管理传输层。

优点:更强的隔离性(不需要改内核路由或防火墙),在受限环境或需要“捕获全部流量而不改系统设置”的场景下更可靠;某些情况下还能避免内核/用户态切换带来的成本。

缺点:实现复杂、CPU 占用可能更高(尤其是高并发下用户态处理多连接),对某些低层网络行为(如某些 NAT 行为、路径 MTU、特定 ICMP/非标准包)表现不同。文档也说明 gvisor 栈可提供 endpoint-independent NAT 等可选行为。
实现方式

  • 使用Google开源的gVisor项目中的netstack组件
  • 用户空间完整实现TCP/IP协议栈(Go语言编写)
  • 不依赖系统内核的网络功能
  • 技术细节
  • 自己处理TCP状态机、滑动窗口、快速重传、拥塞控制(如Cubic/BBR
  • 完整的NAT转换和连接跟踪
  • 独立的路由表和防火墙规则
    特点
  • ✅ 无需特殊权限(相对system模式)
  • ✅ 跨平台一致性好
  • ✅ 更强的隔离性和安全性
  • ❌ 性能略低于system(用户态 vs 内核态)
  • 协议实现更严格(这是你问题的关键)

mixed

混合策略:TCPsystem(系统栈)处理,UDP 用 gvisor(用户态)处理。设计上的折衷是利用系统对 TCP 的成熟处理,同时用 gvisor 捕获 UDP(例如 QUIC/HTTP/3/或其他 UDP-based 协议)。
设计意图:兼顾兼容性与对UDP的更好捕获/隔离。
实现方式

  • 通常默认使用system模式
  • 遇到特定情况时切换到gVisor(如需要更精细控制)
  • 或者按连接类型分流(TCPsystemUDPgVisor

特点

  • ✅ 试图平衡性能和兼容性
  • ❌ 切换逻辑可能引入bug
  • ❌ 状态管理更复杂

节点协议

在推荐的使用协议中,vless和hysteria2都是极为推荐的协议,其中vless主要使用tcp协议的流量进行通信,儿Hysteria2使用的则是TUIC/UDP流量。

协议栈推荐

在使用任何协议的节点时都要注意使用合适的TUN模式来对流量进行路由,由于安卓设备和Windows设备的路由中都有可能出现某些流量不遵循系统路由规范的情况,所以在未进行针对设置的情况下有些服务是无法正常使用的,也就是软件会绕过代理进行直连。这个时候你可能会遇到部分网站无法访问的情况(比如Claude),假如你使用xray和sing-box系列的代理工具,很多默认使用mixed路由规范的工具就会无法正确路由该网站的流量,导致访问失败。

假如流量出现异常,请尝试使用gVisor模式作为路由规范,此时将会新建一个虚拟网卡,所有的流量都会交由虚拟网卡处理,阻止一些不遵守规范的服务绕过路由规则。此时所有的流量都会跟随预先设计的路由规则分发流量与连接。

如连接出现问题,请将您的TUN模式修改为gVisor。