给你一个随机的外网端口, 用于测试 TCP/UDP 连接.
测试地址: https://netlab.luatos.com
- 分配可公网访问的临时端口 (TCP / UDP / SSL-TCP)
- 通过 WebSocket 实时收发数据、管理客户端连接
- 内置 Prometheus 指标导出
- TLS 支持 (Let's Encrypt PEM 或自动签名证书)
- 纯内存状态, 无外部依赖 (无数据库/Redis)
TODO:
- 支持 MQTT
- 支持 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 runcd 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 显示.
- 发现 bug? 欢迎 pull request
- 有开发需求? 欢迎 pull request