Skip to content

vdjango/minecraft-tuntap

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TUN/TAP 虚拟网络设备实现

📖 项目简介

本项目是 Buggcraft 启动器 生态系统​​ 的核心底层组件,为 ​Minecraft Tunnel 服务​​​ 和 我的世界 Buggcraft 启动器 提供基础的虚拟网络设备功能。这是一个 TUN/TAP 设备操作库,专注于跨平台的虚拟网络接口创建、配置和数据包传输能力。

🎯 项目定位

作为 Buggcraft 生态系统的网络基础设施层,本项目为上层应用提供:

🏗️ 在 Buggcraft 生态系统中的角色

Buggcraft 启动器的关系

Buggcraft 启动器 (UI/业务逻辑)
         ↓
游戏联机模块 (隧道管理)
         ↓
TUN/TAP 实现 (本项目) ← 虚拟网络设备
         ↓
操作系统网络栈

Minecraft Tunnel Server/Client 的关系

                    Minecraft Tunnel Client
                  ↑                  ↓
        Minecraft Tunnel Server  ←→  隧道协议处理层
                             ↓
            TUN/TAP 实现 (本项目) ← 虚拟网络设备
                             ↓
                        物理网络接口

🔄 与Buggcraft的协作流程

  1. Buggcraft 启动器联机流程
  2. 用户创建房间​​ → Buggcraft UI 触发
  3. ​​网络设备准备​​ → 本库创建 TUN 设备
  4. IP 地址分配​​ → 为虚拟设备配置游戏 IP
  5. ​​隧道建立​​ → Minecraft Tunnel 服务连接
  6. 数据转发​​ → 通过 TUN 设备传输游戏数据

Minecraft Tunnel 数据处理流程

  1. ​​接收隧道数据​​ → 从网络套接字读取
  2. ​写入虚拟设备​​ → 通过本库写入 TAP 设备
  3. ​​系统路由​​ → 操作系统处理二层转发
  4. 到达目标​​ → 游戏客户端接收数据

🎯 什么是 TUN/TAP

TUN/TAP​​ 是操作系统内核提供的虚拟网络设备: ​​

  • TUN​​ 设备处理三层网络数据包(IP 数据包)
  • ​TAP​​ 设备处理二层网络数据帧(以太网帧)

这些虚拟设备允许用户空间程序直接处理网络流量,是许多 VPN、隧道和虚拟网络解决方案的基础。

✨ 核心功能

设备管理

  • ​虚拟设备创建​​: 在系统中创建 TUN 或 TAP 虚拟网络接口
  • ​设备配置​​: 设置 IP 地址、网络掩码、MTU 等参数
  • 状态监控​​: 监控设备状态和流量统计

数据包处理

  • ​数据包读取​​: 从虚拟设备读取网络数据包
  • ​数据包写入​​: 向虚拟设备写入网络数据包
  • 异步 I/O​​: 支持非阻塞的数据包读写操作

跨平台支持

  • ​​Linux​​: 原生 TUN/TAP 设备支持
  • Windows​​: 通过 TAP-Windows 驱动程序支持
  • ​macOS​​: tun/tap 设备支持
  • ​BSD​​: 类 Unix 系统支持

📊 性能特性

针对 Minecraft 优化

  • ​​MTU 优化​​: 默认设置为 1400,适应游戏数据包特性
  • 缓冲区调整​​: 针对游戏流量模式优化缓冲区大小
  • ​​低延迟处理​​: 最小化数据包处理延迟

性能基准

场景 性能表现 备注
单个游戏连接 <?ms 延迟 本地网络测试
多客户端支持 ?+ 并发连接 依赖上层实现
数据传输 ?+ Mbps 千兆网络环境

📋 系统要求

平台支持

  • Linux​​: 内核 2.6.15+,需要 tun 模块
  • ​Windows​​: Windows 7+,需要 TAP-Windows 驱动程序
  • macOS​​: 10.10+
  • ​FreeBSD​​: 10.0+

编译依赖

  • C编译器​​: GCC, Clang, 或 MSVC
  • 构建工具​​: CMake 3.10+
  • ​可选依赖​​: libevent (对于异步 I/O 支持)

🔧 安装与使用

Linux 系统编译安装

# 克隆代码库
git clone [email protected]:vdjango/minecraft-tuntap.git
cd minecraft-tuntap

# 创建构建目录
mkdir build && cd build

# 编译安装
cmake ..
make
# sudo make install
sudo ./test_tuntap  # 切记 需要root权限

Windows 系统使用

  1. 安装 TAP-Windows驱动程序
  2. 包含头文件和使用编译好的库文件
  3. 确保应用程序以管理员权限运行(需要创建网络设备)

⚙️ API 参考

基本设备操作

#include "tuntap.h"

// 创建 TUN 设备
tuntap_handle_t* tun = tuntap_create(TUNTAP_TYPE_TAP, NULL);
if (!tun) {
    // 错误处理
}

// 配置设备
tuntap_config(tap, "192.168.42.1", "255.255.255.0", NULL);
// tuntap_set_mtu(tun, 1500);  // 后期支持

// 读取数据包
uint8_t buffer[2048];
int len = tuntap_read(tun, buffer, sizeof(buffer));
if (len > 0) {
    // 处理数据包
}

// 写入数据包
tuntap_write(tun, buffer, sizeof(buffer));

// 关闭设备
tuntap_close(tun);

异步操作示例

// 使用 libevent 进行异步读取
void on_tun_read(evutil_socket_t fd, short events, void *arg) {
    tuntap_handle_t* tun = (tuntap_handle_t*)arg;
    uint8_t buffer[2048];
    ssize_t len = tuntap_read(tun, buffer, sizeof(buffer));
    if (len > 0) {
        // 处理接收到的数据包
    }
}

// 设置事件循环
struct event_base *base = event_base_new();
struct event *tun_event = event_new(base, tuntap_get_fd(tun), 
                                   EV_READ | EV_PERSIST, on_tun_read, tun);
event_add(tun_event, NULL);
event_base_dispatch(base);

🚀 使用示例

简单的数据包转发

#include "tuntap.h"
#include <stdio.h>
#include <stdlib.h>

int main() {
    // 创建 TUN 设备
    tuntap_handle_t* tun = tuntap_create(TUNTAP_TYPE_TUN, "mytun");
    if (!tun) {
        perror("Failed to create TUN device");
        return 1;
    }

    // 配置设备
    tuntap_config(tun, "192.168.42.1", "255.255.255.0", NULL)
    // tuntap_set_mtu(tun, 1500);  // 暂不支持

    printf("TUN device created: %s\n", tun->name);
    printf("IP address: %s\n", tun->ip);
    printf("IP Netmask: %s\n", tun->netmask);

    // 主循环
    uint8_t buffer[2048];
    while (!tap->quitting) {
        int n = tuntap_read(tun, buffer, sizeof(buffer));
        if (n > 0) {
            printf("Read %d bytes from TAP device\n", n);
            // 处理数据包
        }
    }

    // 清理
    tuntap_close(tun);
    return 0;
}

🤝 开发指南

Buggcraft 生态系统贡献

# 1. Fork 本项目
# 2. 克隆到本地
git clone [email protected]:vdjango/minecraft-tuntap.git

# 3. 创建特性分支
git checkout -b feature/optimize-for-minecraft

# 4. 测试与 Buggcraft 的兼容性
# cd ../buggcraft
# ./scripts/test_network_component.sh ../minecraft-tuntap

# 5. 提交 Pull Request

📄 许可证

本项目作为 Buggcraft 生态系统的一部分,采用 ​​GNU Affero 通用公共许可证 v3.0 (AGPLv3)​​,与 Buggcraft 启动器Minecraft Tunnel 保持一致的许可证策略。

🔗 相关项目

💬 技术支持

作为 Buggcraft 生态系统的一部分,技术支持通过以下渠道提供:

  • 📧 ​​生态系统支持​​: [email protected]
  • 🐛 ​​问题报告​​: Buggcraft Issues
  • 💬 ​​社区讨论​​: GitHub Discussions
  • 📖 ​​开发文档​​: 开发者指南

About

本项目是 Buggcraft 启动器生态​​ 的核心底层组件,为 ​Minecraft Tunnel 服务 和 我的世界 Buggcraft 启动器提供基础的虚拟网络设备功能。这是一个 TUN/TAP 设备操作库,专注于跨平台的虚拟网络接口创建、配置和数据包传输能力。

Resources

License

Code of conduct

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors