Skip to content

OpenIoTHub/gateway_dart

Repository files navigation

gateway_dart

OpenIoTHub 网关的 Dart 实现,与 gateway-go 功能对齐、线协议兼容。

功能

gateway_dart 是一个 NAT 穿透网关,在局域网内持续运行,通过 JWT Token 连接 OpenIoTHub 服务器,接收远程访问请求并将流量转发到本地服务。

已实现功能

功能 状态 说明
TCP 转发 net.DialTimeout 30s
TLS/STCP 转发 SecureSocket.connect
UDP 转发 RawDatagramSocket
WebSocket 转发 WebSocket.connect
WSS 转发 复用 WS (wss:// 自动 TLS)
SSH 转发 ⚠️ TCP 转发模式(无 PTY)
yamux 多路复用 兼容 go-yamux
msgio 消息协议 4 字节大端长度前缀
子会话 (NewSubSession) yamux over yamux
服务器会话管理 20s 心跳,自动重连
工作连接 RequestNewWorkConn
端口扫描 并发 TCP 扫描
系统状态 OS/CPU/内存/网络接口
mDNS 发现 multicast_dns 库
mDNS 注册 HTTP + 网关服务
组播 UDP RawDatagramSocket
IPv6 直连 服务端/客户端任务
IPv6 地址交换 公网 IPv6 检测
Ping/Pong 心跳保活
连通性检测 TCP/UDP/TLS
HTTP 管理界面 shelf + 二维码
gRPC 管理服务 端口 55443
自动登录 API 生成 JWT
QR 码生成 终端 ASCII + BMP
配置文件 gateway-go.yaml
DeleteGatewayJwt 删除 token 并断开
CLI 命令 init/test/config/token
库模式 可嵌入其他应用

受平台限制的功能

功能 状态 说明
SSH 终端 ⚠️ 纯 Dart 无 PTY 支持,降级为 TCP 转发
串口连接 纯 Dart 不支持,需 FFI
TAP/TUN 虚拟网卡 纯 Dart 不支持,需 FFI
P2P/KCP 打洞 纯 Dart KCP + FEC 头兼容,无 RS 纠删
Docker 容器发现 需要 Docker API 客户端

安装

前提条件

  • Dart SDK >= 3.0.0

从源码构建

cd gateway_dart
dart pub get
dart compile exe bin/gateway_dart.dart -o gateway_dart

直接运行

dart run bin/gateway_dart.dart

使用

独立运行

# 使用 token 登录
./gateway_dart -t <your-jwt-token>

# 使用配置文件
./gateway_dart -c /path/to/gateway-go.yaml

# 初始化配置文件
./gateway_dart init

# 查看版本
./gateway_dart -v

作为库集成

import 'package:gateway_dart/gateway_dart.dart';

void main() async {
  // 方式 1:使用 token 登录
  await startWithToken('your-jwt-token');
  run();

  // 方式 2:使用配置文件
  configFilePath = '/path/to/gateway-go.yaml';
  await startWithConfigFile();
  run();
}

环境变量

变量 说明
GatewayConfigFilePath 配置文件路径
GatewayLoginToken JWT 登录 Token
SNAP_USER_DATA Snap 应用数据目录

配置文件

配置文件格式与 gateway-go 完全兼容:

gatewayuuid: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
logconfig:
  enablestdout: true
  logfilepath: ""
http_service_port: 34323
loginwithtokenmap:
  <run-id>: <jwt-token>

服务端口

服务 端口 说明
HTTP 34323 管理界面 + 二维码
gRPC 55443 GatewayLoginManager

架构

┌─────────────────────────────────────────────────────────┐
│                     gateway_dart                         │
└─────────────────────────────────────────────────────────┘
                           │
    ┌──────────────────────┼──────────────────────┐
    │                      │                      │
    ▼                      ▼                      ▼
┌─────────────┐   ┌──────────────┐   ┌──────────────────┐
│ OpenIoTHub  │   │ Gateway      │   │ Local Services   │
│ Server(TCP) │◄──│ Manager      │   │ HTTP :34323      │
│ via yamux   │   │ Sessions     │   │ gRPC :55443      │
└─────────────┘   └──────────────┘   └──────────────────┘
       │                  │
       │ Streams          │ HandleStream
       ▼                  ▼
┌─────────────────────────────────────────────────────────┐
│                  HandleStream (消息分发)                  │
├────────┬────────┬────────┬────────┬─────────────────────┤
│ TCP    │ WS/WSS │ SSH    │ Ping   │ NewService          │
│ STCP   │        │        │ Pong   │ mDNS/scan/status... │
│ UDP    │        │        │        │                     │
└────────┴────────┴────────┴────────┴─────────────────────┘

协议兼容性

gateway_dart 与 gateway-go 使用完全相同的线协议:

  • 消息格式: msgio(4 字节大端长度 + 载荷),两帧:[len][type] + [len][json_body]
  • 多路复用: yamux,与 libp2p/go-yamux wire-compatible
  • 配置文件: gateway-go.yaml,各实现共用

许可证

与 gateway-go 项目相同。

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages