TunGo - GOST 的 TUN2SOCKS 实现详解

TunGo - GOST 的 TUN2SOCKS 实现详解

TunGo - GOST 的 TUN2SOCKS 实现详解

原理、架构与设计思想全面解析

info1. TunGo 简介

TunGo 是 GOST 中的一个 tun2socks 模块,基于 xjasonlyu/tun2socks 库实现。它是一个强大的网络工具,能够在 TUN 设备之上实现完整的网络协议栈,处理 IP 数据包并解析出 TCP/UDP 数据包,从而实现网络流量的灵活转发和控制。

与传统的 TUN 设备不同,TunGo 不仅仅是一个简单的点对点隧道,而是在 TUN 设备之上实现了完整的网络协议栈。从使用角度上讲,TunGo 与透明代理的功能类似,但通用性和使用便利性上要比后者好很多。

注意:TunGo 目前支持 Linux 、 Windows 和 MacOS 系统。在 Windows 系统上需要额外下载 wintun 驱动。

TunGo 的主要特点包括:

  • 基于 TUN 设备的完整网络协议栈实现
  • 支持 TCP/UDP 流量处理
  • 利用 GOST 的现有功能模块 (如转发链、流量嗅探、分流等) 对流量做更精准的控制
  • 支持多种操作系统平台
  • 提供命令行和配置文件两种配置方式

settings2. TunGo 的工作原理

TunGo 的核心工作原理是在 TUN 设备之上实现完整的网络协议栈,通过 TUN 设备接收网络层 IP 数据包,然后通过协议栈处理,最终解析出传输层 TCP/UDP 数据包。这个过程可以分为以下几个步骤:

2.1 TUN 设备基础

TUN 设备是操作系统内核提供的一种虚拟网络设备,它工作在网络层 (OSI 第 3 层),可以接收和发送 IP 数据包。应用程序可以通过打开 TUN 设备文件来读写 IP 数据包,从而实现网络层的处理。

2.2 协议栈实现

与传统的 TUN 设备不同,TunGo 在 TUN 设备之上实现了完整的网络协议栈。这意味着:

  • 能够解析接收到的 IP 数据包,提取出 TCP/UDP 数据包
  • 能够处理 IP 层的分片和重组
  • 能够处理 TCP/UDP 层的协议细节
  • 能够处理网络地址转换 (NAT)

2.3 数据流处理

TunGo 的数据流处理过程如下:

  1. 系统应用程序发送网络数据包
  2. 操作系统路由将数据包发送到 TunGo 创建的 TUN 设备
  3. TunGo 从 TUN 设备读取 IP 数据包
  4. TunGo 通过协议栈处理 IP 数据包,解析出 TCP/UDP 数据包
  5. TunGo 根据配置将 TCP/UDP 数据包通过 SOCKS 代理转发
  6. 远程服务器处理数据包并返回响应
  7. TunGo 接收响应数据,通过协议栈封装成 IP 数据包
  8. TunGo 将 IP 数据包写入 TUN 设备
  9. 操作系统将数据包路由到应用程序
应用程序
操作系统路由
TUN 设备
TunGo 协议栈
SOCKS 代理
远程服务器

2.4 路由表管理

TunGo 需要管理系统的路由表,将特定流量路由到 TUN 设备。这通常通过以下方式实现:

  • 添加指向 TUN 设备的默认路由
  • 调整原有网络接口的路由优先级
  • 配置 DNS 服务器地址

提示:TunGo 可以通过 postUp 脚本自动更新路由表,简化配置过程。

architecture3. TunGo 的架构

TunGo 的架构设计充分利用了 GOST 的现有功能模块,形成了一个灵活而强大的网络流量处理系统。其架构可以分为以下几个核心组件:

3.1 核心组件

  • TUN 设备管理器:负责创建、配置和管理 TUN 设备,包括设置 IP 地址、 MTU 等参数。
  • 协议栈实现:基于 xjasonlyu/tun2socks 库,实现了完整的网络协议栈,能够处理 IP 、 TCP 、 UDP 等协议。
  • 流量处理器:负责处理从 TUN 设备读取的数据包,并将其转发到 GOST 的转发链。
  • 路由管理器:负责管理系统路由表,确保流量正确路由到 TUN 设备。
  • DNS 处理器:处理 DNS 查询,确保 DNS 请求能够正确解析。

3.2 与 GOST 的集成

TunGo 作为 GOST 的一个模块,充分利用了 GOST 的现有功能:

  • 转发链:TunGo 可以将流量通过 GOST 的转发链进行多级转发,实现复杂的流量路由策略。
  • 流量嗅探:利用 GOST 的流量嗅探功能,可以对流量进行深度检测和分析。
  • 分流:根据流量特征,将不同类型的流量分发到不同的处理路径。
  • 负载均衡:在多个转发节点之间实现负载均衡,提高系统的可靠性和性能。
  • 认证:利用 GOST 的认证机制,确保只有授权用户能够使用 TunGo 服务。

3.3 数据流架构

TunGo 的数据流架构如下:

  1. 应用程序发送网络数据包
  2. 操作系统路由将数据包发送到 TunGo 的 TUN 设备
  3. TunGo 的协议栈处理 IP 数据包,解析出 TCP/UDP 数据包
  4. TunGo 将解析后的数据包传递给 GOST 的处理器
  5. GOST 处理器根据配置的转发链将数据包转发到目标服务器
  6. 目标服务器处理数据包并返回响应
  7. 响应数据包通过 GOST 的转发链返回到 TunGo
  8. TunGo 的协议栈将响应数据封装成 IP 数据包
  9. TunGo 将 IP 数据包写入 TUN 设备
  10. 操作系统将数据包路由到应用程序
# TunGo 在 GOST 配置文件中的典型结构
services:
  - name: service-0
    addr: :0
    handler:
      type: tungo
    chain: chain-0
    metadata:
      udpTimeout: 30s  # UDP 会话超时时长
    listener:
      type: tungo
      metadata:
        name: tungo  # 默认名称为 tungo
        net: 192.168.123.1/24  # 网络配置
        mtu: 1420  # 默认 MTU 为 1420
        dns: 1.1.1.1  # DNS 服务器
    metadata:
      postUp:  # 通过 service 的 postUp 自动更新路由表
        - ip route delete default
        - ip route add default via 192.168.1.1 dev eth0 metric 10
        - ip route add default dev tungo metric 1

chains:
  - name: chain-0
    hops:
      - name: hop-0
        metadata:
          interface: eth0
        nodes:
          - name: node-0
            addr: SERVER_IP:443
            connector:
              type: relay
            dialer:
              type: wss

3.4 设计思想

TunGo 的设计思想体现了以下几个关键点:

  • 模块化设计:TunGo 采用模块化设计,各个组件职责明确,便于维护和扩展。
  • 协议栈完整性:实现了完整的网络协议栈,能够处理各种网络协议和场景。
  • 与 GOST 生态的深度集成:充分利用 GOST 的现有功能,避免重复造轮子。
  • 配置灵活性:支持多种配置方式,适应不同的使用场景和需求。
  • 跨平台支持:支持多种操作系统,提高工具的适用范围。

code4. TunGo 的配置

TunGo 支持多种配置方式,包括命令行参数和配置文件。下面分别介绍在不同操作系统上的配置方法。

4.1 Linux 系统配置

在 Linux 系统上,可以通过命令行或配置文件来配置 TunGo 。

命令行配置

# 启动 TunGo 服务
gost -L "tungo://:0?name=tungo&net=192.168.123.1/24&mtu=1420&dns=1.1.1.1" \
     -F "relay+wss://SERVER_IP:443?interface=eth0"

# 更新路由表
ip route delete default
ip route add default via 192.168.1.1 dev eth0 metric 10
ip route add default dev tungo metric 1

# IPv6 配置 (可选)
ip -6 route add default dev tungo metric 1

配置文件

services:
  - name: service-0
    addr: :0
    handler:
      type: tungo
    chain: chain-0
    metadata:
      udpTimeout: 30s  # UDP 会话超时时长
    listener:
      type: tungo
      metadata:
        name: tungo  # 默认名称为 tungo
        net: 192.168.123.1/24  # 网络配置
        mtu: 1420  # 默认 MTU 为 1420
        dns: 1.1.1.1  # DNS 服务器
    metadata:
      postUp:  # 通过 service 的 postUp 自动更新路由表
        - ip route delete default
        - ip route add default via 192.168.1.1 dev eth0 metric 10
        - ip route add default dev tungo metric 1
        # - ip -6 route add default dev tungo metric 1

chains:
  - name: chain-0
    hops:
      - name: hop-0
        metadata:
          interface: eth0
        nodes:
          - name: node-0
            addr: SERVER_IP:443
            connector:
              type: relay
            dialer:
              type: wss

4.2 Windows 系统配置

在 Windows 系统上使用 TunGo 需要先下载 wintun 驱动。

命令行配置

# 启动 TunGo 服务
gost -L "tungo://:0?name=tungo&net=192.168.123.1/24&mtu=1420&dns=1.1.1.1" `
     -F "relay+wss://SERVER_IP:443?interface=eth0"

# 更新路由表
netsh interface ipv4 add route 0.0.0.0/0 tungo 192.168.123.1 metric=1

配置文件

services:
  - name: service-0
    addr: :0
    handler:
      type: tungo
    chain: chain-0
    metadata:
      udpTimeout: 30s  # UDP 会话超时时长
    listener:
      type: tungo
      metadata:
        name: tungo  # 默认名称为 tungo
        net: 192.168.123.1/24  # 网络配置
        mtu: 1420  # 默认 MTU 为 1420
        dns: 1.1.1.1  # DNS 服务器
    metadata:
      postUp:  # 通过 service 的 postUp 自动更新路由表
        - netsh interface ipv4 add route 0.0.0.0/0 tungo 192.168.123.1 metric=1

chains:
  - name: chain-0
    hops:
      - name: hop-0
        metadata:
          interface: eth0
        nodes:
          - name: node-0
            addr: SERVER_IP:443
            connector:
              type: relay
            dialer:
              type: wss

4.3 MacOS 系统配置

在 MacOS 系统上,可以通过命令行或配置文件来配置 TunGo 。

命令行配置

# 启动 TunGo 服务
gost -L "tungo://:0?name=tungo&net=192.168.123.1/24&mtu=1420&route=1.0.0.0/8,2.0.0.0/8" \
     -F "relay+wss://SERVER_IP:443?interface=eth0"

配置文件

services:
  - name: service-0
    addr: :0
    handler:
      type: tungo
    chain: chain-0
    metadata:
      udpTimeout: 30s  # UDP 会话超时时长
    listener:
      type: tungo
      metadata:
        name: tungo  # 默认名称为 tungo
        net: 192.168.123.1/24  # 网络配置
        mtu: 1420  # 默认 MTU 为 1420
        dns: 1.1.1.1  # DNS 服务器
    metadata:
      postUp:  # 通过 service 的 postUp 自动更新路由表
        - route add -net 0.0.0.0/0 -interface tungo

chains:
  - name: chain-0
    hops:
      - name: hop-0
        metadata:
          interface: eth0
        nodes:
          - name: node-0
            addr: SERVER_IP:443
            connector:
              type: relay
            dialer:
              type: wss

4.4 配置参数说明

TunGo 的主要配置参数包括:

  • name:TUN 设备名称,默认为"tungo"
  • net:网络配置,格式为"IP/掩码",如"192.168.123.1/24"
  • mtu:最大传输单元,默认为 1420
  • dns:DNS 服务器地址,如"1.1.1.1"
  • route:路由配置,格式为"目标网络/掩码",多个路由用逗号分隔
  • udpTimeout:UDP 会话超时时长,如"30s"
  • postUp:启动后执行的命令列表,通常用于更新路由表

警告:在配置 TunGo 时,请确保网络配置参数正确,错误的配置可能导致网络连接问题。建议在测试环境中先进行配置验证。

trending_up5. TunGo 的优势

相比传统的透明代理和其他网络工具,TunGo 具有以下优势:

5.1 通用性

TunGo 实现了完整的网络协议栈,能够处理各种网络协议和应用场景,而不仅仅是特定的协议或应用。这使得 TunGo 具有很高的通用性,可以适应各种网络环境和需求。

5.2 使用便利性

TunGo 提供了多种配置方式,包括命令行参数和配置文件,并且支持通过 postUp 脚本自动更新路由表,大大简化了配置过程。用户无需深入了解网络底层细节,即可快速部署和使用 TunGo 。

5.3 与 GOST 生态的深度集成

作为 GOST 的一个模块,TunGo 充分利用了 GOST 的现有功能,如转发链、流量嗅探、分流、负载均衡等,使得 TunGo 不仅是一个简单的 tun2socks 工具,而是一个功能强大的网络流量处理系统。

5.4 跨平台支持

TunGo 支持 Linux 、 Windows 和 MacOS 等多种操作系统,使得用户可以在不同的平台上使用相同的工具和配置,提高了工具的适用范围和用户体验。

5.5 灵活的流量控制

通过 GOST 的转发链和分流功能,TunGo 可以实现灵活的流量控制策略,如根据目标地址、协议类型、端口等条件将流量分发到不同的处理路径,实现精细化的流量管理。

5.6 高性能

TunGo 基于高效的 xjasonlyu/tun2socks 库实现,并且充分利用了 GOST 的高性能特性,能够处理大量的网络流量,满足高并发场景的需求。

提示:TunGo 的 UDP 会话超时设置 (udpTimeout) 可以根据实际需求进行调整,以平衡性能和资源消耗。

cases6. TunGo 的应用场景

TunGo 的灵活性和强大功能使其适用于多种应用场景,以下是一些典型的使用案例:

6.1 网络流量代理

TunGo 最常见的用途是作为网络流量代理,将所有网络流量通过 SOCKS 代理转发到远程服务器。这对于需要绕过网络限制或保护网络隐私的场景非常有用。

# 将所有流量通过 SOCKS5 代理转发
gost -L "tungo://:0?name=tungo&net=192.168.123.1/24&mtu=1420&dns=1.1.1.1" \
     -F "socks5://SERVER_IP:1080?interface=eth0"

6.2 企业网络访问控制

在企业环境中,TunGo 可以用于实现网络访问控制,通过 GOST 的认证和分流功能,对不同用户和流量进行精细化的访问控制。

services:
  - name: service-0
    addr: :0
    handler:
      type: tungo
    chain: chain-0
    listener:
      type: tungo
      metadata:
        name: tungo
        net: 192.168.123.1/24
        mtu: 1420
        dns: 1.1.1.1
    metadata:
      postUp:
        - ip route delete default
        - ip route add default via 192.168.1.1 dev eth0 metric 10
        - ip route add default dev tungo metric 1

chains:
  - name: chain-0
    hops:
      - name: hop-0
        selector:
          type: roundrobin
        nodes:
          - name: node-0
            addr: SERVER_IP_1:443
            connector:
              type: relay
            dialer:
              type: wss
          - name: node-1
            addr: SERVER_IP_2:443
            connector:
              type: relay
            dialer:
              type: wss

6.3 多网络环境管理

对于需要同时访问多个网络的场景,如同时访问内网和外网,TunGo 可以通过路由配置实现流量的智能分流,提高网络访问效率。

# 配置特定流量走 TunGo,其他流量走默认路由
gost -L "tungo://:0?name=tungo&net=192.168.123.1/24&mtu=1420&route=8.8.8.8/32,1.1.1.1/32" \
     -F "relay+wss://SERVER_IP:443?interface=eth0"

6.4 网络安全与隐私保护

TunGo 可以与加密传输协议 (如 TLS 、 WebSocket Secure) 结合使用,为网络流量提供端到端的加密保护,增强网络安全性和隐私保护。

# 使用 WebSocket Secure 加密传输
gost -L "tungo://:0?name=tungo&net=192.168.123.1/24&mtu=1420&dns=1.1.1.1" \
     -F "relay+wss://SERVER_IP:443?interface=eth0"

6.5 网络测试与开发

在网络开发和测试过程中,TunGo 可以用于模拟各种网络环境和条件,如延迟、丢包等,帮助开发人员测试和优化网络应用。

6.6 远程办公与 VPN 替代

TunGo 可以作为传统 VPN 的替代方案,为远程办公提供安全、高效的网络访问方式。相比传统 VPN,TunGo 更加轻量级,配置简单,且不需要特殊的客户端软件。

注意:在使用 TunGo 时,请确保遵守当地的法律法规和网络使用政策,合法合规地使用网络工具。

发表评论