节点与面板
节点没有自己的意志。只要面板持续访问它,它就提供面板发来的内容。本页跟随节点走过它的一生:安装并获得信任、保持同步、被停用、被切断、拒绝某份配置,以及迁移到另一台服务器。
安装与信任
安装节点会创建两张证书和一个固定值(pin):
- 面板的客户端证书 交给节点:要么用一次性安装令牌获取一次,要么由面板的自动安装通过 SSH 上传。从此以后,节点在其控制端口上只接受这张证书。
- 节点自己的服务器证书 在节点上生成。它永远不会离开节点。
- 固定值。 面板在第一次连接时记录节点的证书指纹,此后在该地址上只接受这张证书。这就是首次使用时信任。
双方在每次连接时都要证明自己的身份,所以互联网上的其他任何东西都无法越过控制端口的 TLS 握手。就地更新节点会保留它的证书,所以固定值仍然匹配。重新安装会生成新证书,面板会拒绝它,直到删除并重新添加该节点,或进行迁移(见下文)。操作步骤见 添加节点。
会话
面板在节点上打开一个会话,并在每个请求中携带会话 id。会话保存在节点的内存中,所以重启后的节点会忘记它们。面板会察觉到这一点,打开一个新会话并重试一次请求;你无需做任何事。
节点的控制 API 一次只应答一个面板。在节点上打开自己会话的工具会从面板手中夺走会话,面板在下一个请求时会重新连接。
心跳
面板每 15 秒询问每个节点的状况,每个节点各自独立,所以一个无法访问的节点永远不会拖慢其他节点。应答包含:
- 核心是否在运行,以及是否启动了所给的配置;
- 打开的连接数,总数和每个入站的数量;
- 核心重启了多少次,以及最后一次启动错误;
- 它跳过的项目,作为警告;
- 被拦截出站拒绝的连接计数。
当节点应答说它什么都没在运行时,心跳会重新发送它的完整配置。重启过的节点、或暂时失去面板的节点,就是这样在几秒内恢复服务的。
停用
你可以在 节点 页面上停用节点,节点的周期流量限制也可以自行停用它。无论哪种方式,面板都会:
- 最后一次收集它的计数器;
- 立即向它发送一份空配置,让它停止服务;
- 丢弃它的会话,不再联系它。
无论面板中其他内容如何变化,被停用的节点都不会被同步、不会收到心跳、也不会被标记为已连接,直到它被重新启用。届时它会得到完整配置。面板启动时,会把每个被停用的节点清空一次。
与面板断开
节点只在能被面板访问到时提供服务。当面板宕机,或两者之间的网络被切断时:
- 大约三分钟内,节点继续提供服务。面板重启或升级、或者短暂的网络故障,不会让任何人断开连接。
- 三分钟后仍未收到面板的消息,节点会停止其核心,不再提供任何服务。
- 当面板再次访问到它时,第一次心跳会发现它是空的,并发送它的完整配置。
宽限期按节点的单调时钟计算,所以修改它的系统时间不会产生任何影响。节点在面板最后一次收集之后、断开期间承载的流量会丢失:节点停止后不保留计数器。
在面板中删除节点时,如果面板能访问到它,会立即让它停止。如果访问不到,节点会在最后一次收到面板消息的三分钟后自行停止。
核心拒绝的配置
节点在放弃正在运行的配置之前,会先检查新配置:
- 构建失败的项目(端口已被占用的入站、错误的证书)会被跳过,节点继续提供其他所有内容。被跳过的项目是一条警告。
- 核心无法启动的整份配置 会被回滚:节点继续提供之前运行的内容,并报告它没有启动新配置。
面板不会把回滚过的节点算作健康。它会把该节点显示为错误并附上原因,心跳会持续发送配置(第一次等待 30 秒,之后两次尝试之间最长 10 分钟),直到配置启动,或你修正了它拒绝的内容。
错误与警告
面板中的节点可能带有两种不同的消息:
| 错误 | 警告 | |
|---|---|---|
| 含义 | 节点不工作:无法访问、拒绝其配置,或没有运行 | 节点在工作,但它运行的内容中缺少某些项目 |
| 示例 | 连接被拒绝、证书固定值不匹配、配置没有启动 | 启动时跳过了某个入站、某个项目无法接受一次变更、用户因缺少凭据而被省略 |
| 何时清除 | 下一次正常的心跳时 | 之后的某次同步成功应用这些项目时 |
警告保存在面板的内存中。面板重启后,它们会在下一次发现它们的同步时重新出现。
把节点迁移到另一台服务器
有三样东西与节点运行的机器绑定:它的证书固定值、面板记录的 SSH 主机密钥,以及面板所知道的节点安装方式。只修改地址会把这三样都带到新机器上,而固定值会拒绝那里的每个连接。
节点菜单中的 迁移到其他服务器 会清除这三样。然后你在新服务器上像全新安装一样进行安装,第一次连接会固定新证书。用户、入站以及节点的其他一切都保持不变,因为它们保存在面板中。
