Nexora 的工作原理
Nexora 由两部分组成:一个决定一切的面板,以及任意数量承载用户流量的节点。本节解释它们的内部工作方式,供你想弄清某件事为什么会这样表现时参考。运行服务并不需要它;那部分内容在使用面板一节中。
控制平面:面板
面板是一个带网页界面的程序。它掌握四样东西:
- 数据库,唯一的事实来源。 每个管理员、用户、套餐、入站、模板、节点、隧道、证书和设置都存放在这里,使用 SQLite 或 PostgreSQL。节点不保留自己的副本;两者不一致时,以面板为准,节点会被修改以保持一致。
- 调度器。 面板自己按固定节奏完成周期性工作(见下文)。
- API。 网页界面、你的脚本和插件都使用同一套 API,各自拥有自己的权限。
- 订阅服务。 用户的应用从其订阅地址获取配置。它可以运行在独立的域名上,与你管理面板所用的地址分开。
面板的节奏
| 每隔 | 面板会 |
|---|---|
| 10 秒 | 合并各节点看到的地址,并在有变化的地方推回按用户的地址表 |
| 15 秒 | 检查每个节点(心跳),并向没有在提供配置的节点重新发送配置 |
| 30 秒 | 从每个节点收集流量计数器 |
| 1 分钟 | 执行额度、到期日期、重置周期和节点限制;检查插件的健康状态 |
| 5 分钟 | 采样每个节点的磁盘、内存和负载 |
| 10 分钟 | 将每个节点上的路由、DNS 和规则集与它应运行的内容进行比较 |
| 1 小时 | 刷新到期的规则集,清理旧记录,压缩健康历史,重新读取插件清单 |
| 6 小时 | 续期到期的证书 |
数据平面:节点
节点是承载流量的服务器。它是无状态的:
- 它没有数据库。入站、出站、端点、路由、用户和限制都来自面板,并保存在内存中。
- 它在磁盘上只保留自己的 TLS 身份,以及一份可以重新获取的文件缓存,例如面板推送的规则集。
- 重启后,在面板再次发送配置之前它不提供任何服务,而下一次心跳会在几秒内完成这件事。
- 它只在能被面板访问到时提供服务。与面板断开约三分钟后,它会停止服务。参见 节点与面板。
节点提供的是它的模板:其中的入站、出站、端点、规则集和路由,再加上属于该模板的用户。
它们如何通信
面板通过 HTTPS 连接每个节点的控制端口(默认 62050),使用双向 TLS:
- 节点只接受面板的客户端证书,这是它在安装时收到的。
- 面板在第一次连接时记录节点自己的证书,此后只接受这一张。这就是首次使用时信任:同一地址上出现不同的证书会被拒绝。
节点安装完成后,始终是面板调用节点,从不反过来。面板通过这条链路发送配置和变更,并读回状态、计数器、警告和主机数据。变更只发送变化的部分,不会重启节点;参见 无需重启的变更。
用户只接触节点和订阅地址
你的客户从不访问面板。他们的应用从订阅地址获取配置,然后连接节点的链接地址。面板自己的地址、登录页面和 API,除了你和你的员工之外,不需要任何人知道。
插件位于面板旁边
插件(例如 Nexora Shop 或通知插件)是一个独立的程序,拥有自己的进程、数据库和界面。它只通过网络与面板协作:一个带有你批准的权限的 API 令牌,以及一个接收它所订阅事件的 Webhook。面板从不运行插件的代码。参见 插件平台 和 事件总线。
本节各页
| 页面 | 说明内容 |
|---|---|
| 数据包的路径 | 一个连接逐个阶段地穿过节点 |
| 无需重启的变更 | 变更如何在不重启的情况下到达节点 |
| 节点与面板 | 信任、会话、心跳,以及节点在没有面板时做什么 |
| 隧道内部 | 隧道中的中继、源节点和会话池 |
| 从模板到链接 | 用户的链接如何由模板、地址和前置构建 |
| 流量、额度与限制 | 流量计量、额度、限制和代理商的配额 |
| 事件总线 | 事件总线以及投递如何重试 |
| 插件平台 | 插件的注册、授权同意、权限授予和更新 |
| 证书的签发与续期 | 证书由谁签发,以及如何续期和重新加载 |
| 安全模型 | 安全模型,从双向 TLS 到角色和审计 |
| 监控与指标 | 健康历史、实时连接和指标端点 |
