Noeiov0.2.0

简介

Noeio 是一个可私有化部署、节点无状态且轻量的三层 Mesh 组网系统

Noeio 是一个可私有化部署、节点无状态且轻量的三层(Layer-3)Mesh 组网系统。它通过虚拟网卡将分布在不同局域网、NAT 之后和云上的机器连成一个私有网络。所有数据面组件都运行在你自己的基础设施上,不依赖任何第三方协调服务。

特性

  • 三层虚拟网卡 —— 节点通过本地 noeio0 接口加入私有子网,任意 IP 流量开箱即用
  • WireGuard 加密数据面 —— 任意两节点之间都有一条独立密钥的专属隧道,基于 boringtun
  • NAT 穿透 —— 基于 STUN 的地址发现与 UDP 打洞,跨 NAT 建立直连
  • 最低延迟选路 —— 对每条候选路径(局域网与公网)做 ping/pong RTT 探测,流量始终走最快的一条,切换带防抖
  • 自部署中继兜底 —— 无直连路径时回退到你自己的 derper 中继,由网络级 token 认证保护
  • 子网路由 —— 一个 Linux 节点可以把所在局域网的网段通告给整个网络,子网内的主机无需安装客户端,详见子网路由
  • 跨平台 —— 支持 Linux、macOS 和 Windows

初衷

我正是在使用 Tailscale 之后,发现它功能强大且极其好用。出于学习的目的,我去了解了它的底层实现原理,发现恰好与我当时正在学习的 Kubernetes CNI 组件有相似之处。于是,为了更好地学习和补充网络知识,我决定自己动手写一个 Overlay Network。我知道这个项目不一定能比肩 Tailscale,但光是这个学习的过程就已让我收获颇丰。我希望把它作为我的学习成果分享出来,以向社区分享和讨论更多知识与有趣的想法。另外也受到 Sandbox 这种产品形态的启发,让我决定将 Noeio 的节点设计成一种无状态的方式,以符合 Sandbox 的生命周期。

与 Tailscale 的区别

Noeio 是一个纯数据面组件:只负责组网本身,不内置 Tailscale 那样的账户、身份认证和 ACL 体系。这使它非常适合私有化部署。如果需要支持多租户,则需在其之上搭配你自己的控制面。

此外,Noeio 的节点天然是无状态、非持久注册的(Tailscale 的节点在未开启 Ephemeral 时是有状态且持久注册的)。这让 Noeio 节点非常轻量,可以随时部署和释放,因此对 Sandbox 这类使用场景非常友好。

架构

Noeio 架构图

每个节点运行一个 noeio daemon,向自部署的 derper 上报自己的地址和 NAT 类型;derper 通过 SyncRoute 把各节点的路径候选广播回去。节点间的流量在存在直连路径时走 WireGuard 加密的直连,否则回退到经 derper 中继转发。

安装与快速开始

前往安装获取安装命令,然后跳到快速开始启动 derper 并将节点组网。

构建

构建 derper 二进制:

cargo build --release -p noeio-derp

或构建多平台 Docker 镜像并推送:

REGISTRY=<your image registry url> MODEL=noeio-derp make build

构建 noeio daemon 二进制:

cargo build --release -p noeio

Roadmap

  • NoeioPacket 的零拷贝改造
  • 子路由支持
  • 多虚拟网络支持

License

本项目基于 Apache License 2.0 开源。

On this page