wendal/netlab

经典netlab实现

★ 0Forks 0RustGitHub ↗Compare

README

NetLab

给你一个随机的外网端口, 用于测试 TCP/UDP 连接.

测试地址: https://netlab.luatos.com

功能特性

  • 分配可公网访问的临时端口 (TCP / UDP / SSL-TCP)
  • 通过 WebSocket 实时收发数据、管理客户端连接
  • 内置 Prometheus 指标导出
  • TLS 支持 (Let's Encrypt PEM 或自动签名证书)
  • 纯内存状态, 无外部依赖 (无数据库/Redis)

TODO:

  1. 支持 MQTT
  2. 支持 QUIC

架构概览

Rust 后端采用三层 Clean Architecture:

netlab-server/src/
├── domain/           # 纯类型, 无 IO (port, client, errors, port_entity)
├── application/      # 用例层 (port_pool, port_service, ws_dispatch, metrics)
└── infrastructure/   # 实现层 (axum http/ws, tokio tcp/udp, rustls tls, prometheus)

技术栈: tokio + axum + rustls + metrics-exporter-prometheus

目录结构

luatos-netlab/
├── netlab-server/    # Rust 后端 (主服务)
│   ├── src/          # 源码
│   ├── tests/        # 集成测试
│   ├── config/       # 默认配置 (application.toml)
│   └── cert/         # TLS 证书
├── web/              # 前端源码 (Vue.js WebSocket 工具页)
├── doc/              # 文档
└── .docker/          # Dockerfile

环境要求

  • Rust 1.75+ (edition 2021)
  • Node.js 14+ (仅前端编译需要)

快速启动

cd netlab-server
cargo run

服务启动后:

  • HTTP + WebSocket: http://127.0.0.1:9073
  • Prometheus 指标: http://127.0.0.1:9400/metrics

配置

配置文件位于 netlab-server/config/application.toml:

[server]
host = "127.0.0.1"
port = 9073

[port]
start = 21000
end   = 29000

[ssl]
cert_path = "cert/fullchain.pem"
key_path  = "cert/privkey.pem"

[metrics]
enabled = true
port    = 9400

[app]
static_dir = "./static"

支持环境变量覆盖, 前缀 NETLAB_, 双下划线分隔层级:

NETLAB_SERVER__PORT=8080 NETLAB_PORT__START=30000 cargo run

构建与测试

cd netlab-server

# 构建
cargo build --release

# 运行测试
cargo test

# 代码检查
cargo clippy

前端编译

前端源码位于 web/ 目录:

cd web
npm install
npm run build

编译产物需放置到 netlab-server/static/ 目录 (或通过 app.static_dir 配置指向).

注意: 自行部署需修改 web/src/components/WstMain.vue 中的后端地址和公网 IP 显示.

部署

详见 doc/deploy.md

相关文档

贡献

  1. 发现 bug? 欢迎 pull request
  2. 有开发需求? 欢迎 pull request

Contributors

wendalzozohpangwu86

Issues