Keepalight GTM内置文档

内置文档 · 功能说明

产品面板内置说明书的「功能说明」原件,一字不改地摆在这儿。

买之前就能看完:7 个大类 · 24 节 · 163 条。 装好之后同一份内容在面板的「内置文档」里,还能导出成 JSON 交给 AI 读;面板里另有一半「接口文档 (API)」, 那一半的示例要带上你自己那套安装的面板路径才有意义,所以只在面板里,不在这一页上。

← 回产品介绍

每一层默认收起,大类和节都一样,标题旁的数字是这一层里有几条。点标题展开 / 收起。 这一页没有搜索框和「全部展开」按钮——它零 JavaScript,这两样做不出来;直接用 Ctrl+F / ⌘F 搜, Chrome / Firefox / Safari 都会自己展开命中的那一节(连同它外层的大类)并高亮,不用先手动点开再搜。这不是安慰话,是浏览器原生行为。

名词表 · 快速上手5 节
整体关系速览9 条
  • 配置 (Agent) 面板里创建的一套开机配置,核心是 agentId + agentToken;复制开机命令到服务器执行即可接入。
  • 机器 (Server) 执行开机命令接入的云服务器,每台机器有自己的 bootId;Agent 上报后自动出现在「已对接服务器」,不需要手动添加。
  • 凭证 (Credential) 集中保存的 API 密钥:阿里云 AccessKey、Cloudflare DNS。模块只引用凭证 ID,不会各自存一份密钥。
  • 拨测节点 (Probe Node) 统一维护的测活来源(本机内置 / Globalping / 自建 Agent / HTTP 接口),供配置里「自动化」的「拨测判不通时」条件和「GTM 健康模板」共同复用。
  • GTM 实例 选若干「地址池」+ 一套策略,把结果输出为一条域名的智能解析(阿里云 AliDNS 或 Cloudflare)。
  • 模板 按模块或整套配置可视化保存,新建/编辑配置时一键套用;单模块模板 = 只存一个功能项(「root SSH」「网页终端」「允许推送 Agent 更新」「内置 DDNS」「阿里云 GTM」「自动化」「Nyanpass」「BBR」里挑一个);「全量所有选项」= 「接管模式」「root SSH」「网页终端」「允许推送 Agent 更新」「内置 DDNS」「阿里云 GTM」「自动化」「Nyanpass」「BBR」一起。
  • 接管模式 外部补机(默认,新机上报直接顶掉旧 active)/保守心跳(旧机超时未上报才被接管)/多活(多台在线机器同时作为 IP 池)。
  • 有效在线 已被替换的机器不计入在线数,也不会进入 DDNS / GTM 的 IP 池。
  • 分组 · 多选 · 批量改分组 · 拖动排序(八个列表共用一份) 「配置与脚本」「凭证」「拨测节点」「模板」「GTM 健康模板」「GTM 地址」「GTM 地址池」「GTM 实例」这八个列表的分组页签、多选、「批量改分组」「编辑分组」和拖动排序共用一份。分组页签:全部 / 每个分组 / 未分组,页签后面的数字按当前搜索结果数。「编辑分组」里可以新建空分组(还没有成员也会一直在,刷新不丢)、改名、删除:删除分组不会删掉任何东西,只把里面的成员变成「未分组」;改名时新名字已经是另一个分组 = 把两组并成一组(会先问你一句,并了之后分不回来)。分组名最多 40 个字。「全选」选的是整个筛选结果(不止眼前这一页)。拖动排序只在当前这一页里挪,顺序当场存下来;在某个分组页签里拖动不会打乱别的分组。拨测节点里的内置节点不能改分组,改分组时自动跳过并告诉你跳过了几个;这一版用不了的模板(旧格式 / 不认识的类型)也不能改分组,跳过时逐个告诉你。某一类超出套餐额度被锁定时(配置与脚本 / 凭证 / 拨测节点 / GTM 实例),这一类的「批量启用」「批量改分组」是灰的、拖动把手不出现,删除照常可用。
自建部署 · 系统要求5 条

控制面本体(这个面板自己)要装在什么样的服务器上。这一页你现在能看到,说明当前这台机器已经装成功了——这里留一份记录,方便你以后加第二台机器、或者转给同事按同样的标准选机器。

  • 支持的系统 x86_64 或 aarch64、glibc ≥ 2.28 的 Linux 发行版:Ubuntu 20.04+ / Debian 10+ / RHEL·CentOS·Rocky Linux·AlmaLinux 8+ / Amazon Linux 2023+。
  • 不支持的系统 CentOS 7 / RHEL 7 及更早(glibc 2.17)、Ubuntu 18.04 及更早(glibc 2.27)、Debian 9 及更早(glibc 2.24)、Amazon Linux 2(glibc 2.26)——都低于最低门槛,装了也跑不起来;这是官方 Node.js 24 Linux 构建本身的硬约束,不是安装脚本的限制。musl 系发行版(Alpine 等)完全不支持,官方 Node.js 不出 musl 构建。
  • 装之前会先自己查 install.sh 会在真正动任何文件之前检测目标机器的 glibc 版本和 libc 类型,不满足会直接拒绝并说明原因和最低要求,不会让你等装完了才发现装不上。
  • 业务服务器不受此限 这条系统要求只管控制面本体(这个面板)。「配置与脚本」页复制出来的探针安装命令是纯 shell 脚本,装在你的业务服务器上,不挑发行版,Alpine 也能装。
  • 不确定这台机器够不够 在目标机器上跑 ldd --version,看第一行最后那个版本号,低于 2.28 就别装了。
    ldd --version
自建部署 · 装机与首次打开面板7 条

从拿到授权码到在浏览器里打开面板的这一整段。系统要求见上一节;这里讲的是「码放哪儿、脚本怎么跑、为什么装完直接用 IP 打开还是 404」。

  • ① 授权码只能写进配置文件 授权码只能写进 /etc/keepalight/gtm/license.conf,命令行传参那种写法已经删掉了:写在命令行上的授权码会出现在 ps 的输出里、也会留在 shell 历史里,配置文件不会。文件里就这一行,键名是 LICENSE_CODE,不要加引号、不要在同一行写注释——整行被 # 注释掉、键名拼错、只写码没写 LICENSE_CODE= 是最常见的三种写错法。
    mkdir -p /etc/keepalight/gtm && chmod 0700 /etc/keepalight/gtm
    printf 'LICENSE_CODE=你的授权码\n' > /etc/keepalight/gtm/license.conf
    chmod 0600 /etc/keepalight/gtm/license.conf
  • 没填码就跑安装脚本会怎样 ⚠️ 没有授权码装不了:安装脚本会在真正动任何文件之前先读这个文件,读不到就原地停下、把购买页地址打给你,这一次一个文件都不会落地。不是「装完再补」——先在购买页拿到授权码,再去服务器上跑安装脚本。
  • ② 装机命令 脚本依次做这些事:检测系统要求 → 读授权码(没有就在这里停下,什么都不装)→ 放可执行文件 → 自动生成一条随机面板路径和密钥 → 建数据目录 → 联网激活(拿授权码换一张授权票;这一步不成功就不往下装,而且会把刚才生成的东西全部清掉,机器回到装之前的状态,失败会说清楚是「授权码本身用不了」还是「联系不上授权服务器」)→ 装好 systemd 服务并等它真的起来 → 打印出一个首次配置地址。
    sudo ./install.sh
  • 🔴 ③ 装完之后,面板只在你绑定的那个域名上开门 所以打开面板前必须先做完这三步(包括设管理员账号那一步,也要等域名能访问才做得了):① 把绑定域名的 DNS 解析指到这台服务器;② 在这台机器上配好 HTTPS 反向代理,转到面板监听的地址(默认 127.0.0.1:8080)——反代必须透传 Host 请求头,域名锁只认这个请求头,不透传的话就算从正确的域名访问也一样是 404;同时要在 keepalight.env 里打开 TRUST_PROXY=true,并让反代同时传 X-Forwarded-For 和 X-Forwarded-Proto;③ 用浏览器打开安装完成时打印的那个首次配置地址,在页面上自己设管理员账号——安装脚本不会生成、也不会打印任何管理员口令。
  • 用 IP 打不开不是故障 用服务器 IP、127.0.0.1、SSH 隧道或别的域名访问面板,一律返回和未知路径完全相同的 404,这不是故障。⚠️ 客户机器上的 Agent 完全不受这条限制:上报、配置下发、命令回执在任意域名或 IP 上都照常工作。
  • ④ 面板路径是随机的,忘了怎么办 面板路径是安装时生成的一串随机字符,只在安装脚本的终端输出里打印这一次(服务端日志、系统日志里都不会出现,避免被贴进工单时泄漏)。忘了地址不要猜,在服务器上跑这条只读命令查,服务跑着也能查、不影响运行;要改路径去面板里改:「全局设置 → 管理员账号与访问路径」。
    DATA_DIR=/var/lib/keepalight/gtm /opt/keepalight/gtm/keepalight-gtm --show-panel-path
  • ⑤ 卸载控制面(不是探针) sudo ./install.sh --uninstall(默认):数据目录和配置文件都保留,只删可以安全重新生成的二进制和服务定义;之后重新装会被自动识别成「升级」,账号 / 密钥 / 已存凭据全部原样接得上。sudo ./install.sh --uninstall --purge:连数据目录和 keepalight.env 一起永久删除,这是唯一不可逆的一步;交互式终端会先列出要删的东西再要求输入 yes 确认,非交互环境必须显式加 --yes,不给就拒绝执行、不删任何文件。⚠️ 业务服务器上那个探针的卸载是另一条命令,见「配置与脚本 · 上线流程」最后一步。
配置与脚本 · 上线流程7 条
  • 第 1 步 · 创建配置 在「配置与脚本」新建配置,按需填写基础 / 服务器·系统 / 解析·故障切换三个标签,保存后自动生成 agentId + agentToken。
  • 第 2 步 · 复制开机命令 在配置卡片上点「复制开机命令」,得到一条一次性命令,会下载 /bootstrap/{agentId} 对应脚本并执行。
  • 第 3 步 · 在服务器执行 粘贴到目标云服务器终端(root 或 sudo)执行。安装脚本本身要 bash 才跑得起来:没有 bash 的机器(Alpine 这类 busybox 系统默认就没有)这条命令会先用 apk 把 bash 装上再往下走,装不上就打一句中文说明请你先自己装好 bash。缺什么装什么(用这台机器自己的包管理器:apt-get / dnf / yum / microdnf / apk / pacman / zypper;microdnf 是 AlmaLinux / RHEL 的 minimal 镜像里唯一的那个):必需的是 bash、curl、jq、cron,装不上会当场中止并点名缺哪一个;可选的是 ca-certificates、openssl、flock、timeout、sudo,装不上只告警继续。已经装齐的机器连软件源都不刷新。定时上报靠 cron:有 systemd / OpenRC 在管的机器交给它启用;你自己用它屏蔽或停用了 cron 的,安装脚本不绕过去,只打一句警告(那样就不会定时上报);容器、最小化镜像这类没有任何 init 系统的机器,安装脚本直接把 crond 起起来(按系统默认的文件权限起,不改你其它定时任务的行为),但重启之后没人替它再起,要重跑一次安装命令。文件统一放在 /opt/keepalight/gtm-agent/agent。
  • 第 4 步 · Agent 上报 启动时强制上报一次,之后每 1 分钟上报一次公网 IP(及已开启模块产生的数据,如 root 口令版本编号、探测结果、命令执行结果——root 口令本身不由机器上报,见下方「root SSH 密码托管」),同时搭顺风车带回这台机器的探针指标:CPU / 内存 / 硬盘 / 网络速率 / 连接数 / 开机时长 / 累计流量 / IPv6,在「已对接服务器」的详情抽屉里看。
  • 第 5 步 · 面板查看 机器出现在「已对接服务器」,可查看在线状态 / IP / SSH(若托管)/ 网页终端(若三层开关都开)/ 日志。
  • 第 6 步 · 按需编辑 配置的三个标签随时可改;每个模块小节旁边都有「存为模板」,把当前小节另存,供下次新建配置直接套用。
  • 第 7 步 · 卸载 装机时已经把卸载器写到机器本地,直接执行它即可(不再从网上下载,避免一个匿名可取的固定地址暴露本产品);连 Nyanpass 一起卸载时在命令后追加 --with-nyanpass,⚠ 而且只有本产品自己装的那一份才会被卸——找不到我们的安装标记就一个字节都不动它,只把手动命令打出来让你自己决定(/opt/nyanpass.uninstall.sh 是 nyanpass 官方安装器留下的,客户自己装的节点上本来就有,跑下去转发业务当场中断、节点数据一起清掉且不可逆)。⚠️ 装机时用 apt-get / dnf / yum / microdnf / apk / pacman / zypper 装上的那些依赖(curl、jq、cron、ca-certificates、openssl 等),卸载「不会」卸掉——它们是系统级的软件包,别的东西很可能也在用,我们不去猜哪些是为我们装的。要清就自己按发行版的办法卸,卸之前先确认这台机器上没有别的东西依赖它们。
    sudo bash /opt/keepalight/gtm-agent/uninstall.sh
如实告诉你:这几件事目前做不到6 条

不是免责声明,是省你踩坑的时间。这几条都是刻意的设计或真实的边界,不是待修的缺陷。

  • 不是 CDN,也不是硬件负载均衡器 不做内容加速或缓存,也不在你的机器和访客之间转发流量——它只负责「该把域名指向谁」这一个判断,实际流量仍然是访客直连你的服务器。
  • 不承诺零停机,也不承诺 100% 可用 从「机器挂了」到「域名解析切过去」之间必然有健康检查间隔 + DNS 生效的时间差,秒到分钟级;具体多快取决于你设置的检查频率和 DNS 记录的 TTL,不取决于这套系统有多快。
  • 网页终端需要 systemd 没有 systemd 的机器装不了、也用不了网页终端,而且开启之后也绝不会自动安装——必须有人到那台机器上手动执行一条命令。这台机器上其它功能(DNS 解析、健康检查、故障切换、心跳上报)完全不受影响。完整说明见「配置与脚本 · 服务器·系统标签」的「网页终端」。
  • 没有免费试用期,也没有宽限期 装完没激活就是只读;到期当天就锁「改配置」这一件事。域名解析、健康检查、故障切换、Agent 上报永远不会因为授权状态而停一秒。这不是漏洞,是刻意的设计。
  • 换一台机器没有一键搬家 可以用「全局设置 → 备份与恢复」把凭证 / 拨测节点 / GTM 实例 / 配置 / 模板 / 全局设置导出再导入(备份不绑任何一台机器的 CREDENTIALS_SECRET,新机器上不用先凑出同一把密钥;加密备份要的是你自己记的那把口令),但运行时数据(已对接服务器)不在备份范围内,探针要重新接入;授权也要在新机器上重新激活一次。没有「点一下就搬过去」的工具。
  • 升级没有自动灰度 / 回滚编排 每台机器的升级命令都是你自己手动复制到服务器上执行的,节奏完全由你控制,但这不是产品提供的分批推送功能。
已对接服务器与 Agent 配置6 节
配置与脚本 · 基础标签6 条
  • 启用开关 关闭后机器仍会正常上报,但 Worker 不会执行 DDNS / GTM,「自动化」里的规则也一条都不跑(拨测判不通时那几条不判、定时那几条到点不执行)。⚠️ 停用「不会」把已经写出去的解析摘掉:被 GTM 地址以「引用配置在线 IP」引用着的话,那条线路只是算出空集然后原样冻住,见「GTM · 地址」里那一条。🔴 停用「就是一次取消」:这份配置下还没发到机器上的那些以 root 执行的命令(改 root 登录 / 装卸 Nyanpass / BBR),以及「自动化」里已经到点、还没被机器取走的定时服务器命令,会跟着停用一起「作废」,面板当场告诉你作废了几条、是哪几项,运行日志里也会留一条。配置停着的期间做的这类改动同样当场作废(改动本身照样存下来了,作废的只是那条发往机器的命令)。所以重新启用「不会」突然在你的机器上跑起几天前排下的命令。⚠️ 重新启用要不要再输一次管理员口令,看那一刻这份配置里有没有「会以 root 在机器上执行」的东西上了膛 —— 「自动化」里开着、命令不为空的服务器命令规则(且「自动化」总开关与「服务器命令权限」都开着)/ 开着、安装命令不为空的 Nyanpass / 开着的 BBR,有一个开着就要,都关着就不要。重新启用之后如果仍然需要那几项改动:原样「再保存一次」不管用,一个模块都没动就不会生成任何命令、连口令都不会问;正确的做法是把它改回去保存一次、再改成现在这样保存一次,两步各要一次管理员口令 —— ⚠️ 中间那一步等于先把这次改动撤销一次,而撤销本身也是一条会跑到机器上以 root 执行的命令(关掉 Nyanpass 的那一步会先把它装回去;关掉 root 登录的那一步会先把 root 登录重新放通、口令重设一遍),不想让机器经历这一来一回,就登上那台机器手动做。⚠️ 有一样东西不在此列:「允许推送 Agent 更新」那条排队中的自更新命令——它由那个开关自己负责作废(关掉它的那一刻一并清掉),停用配置不会动它。
  • 删掉一份配置之后,机器上还留着什么 删配置只删控制面自己这一侧以这份配置为键的记录(配置本身、运行日志、执行记录、机器凭据与机器记录、网页终端开关、拨测结果这些一并清掉,同 id 再建一份不会继承;只留每台机器的计费周期流量账本),它「不会」动任何一台机器(只有一样跟着没:队列里还没发到机器上的那些命令会随删除一起「作废」,删了再建一份同 id 的配置、或者恢复一份删之前的备份,都不会把它们放出来):那些机器上照旧留着本产品当初放通的 root 登录(sshd 里被改写的那两行、我们写进去的 drop-in)、每分钟一次的定时任务、网页终端的常驻组件(装过的话)、以及本产品装的 Nyanpass,全都原样在跑。⚠️ 而 root 口令是跟着这份配置一起消失的:配置删了就再也查不到它,从此谁都不知道那些机器的 root 口令是什么,而门还开着。所以要么在删配置之前先把这些机器卸载干净,要么删完之后有人登上每一台跑一次卸载器——它装机那一刻就写在机器本地了,不用从网上下载,命令见下面(连本产品装的 Nyanpass 一起卸就在后面加 --with-nyanpass;不是本产品装的那份不会被碰)。卸载器会把 sshd_config 逐字节改回装机前的原样、把 BBR 改过的内核参数逐个回填、把我们放的文件删干净,客户自己的东西一个字节都不动。⚠️ 跑完还有两件必须自己做的事:① 卸载器不会替你改 root 口令,请自己执行一次 passwd root;② 如果它打出了「没能自动重启 sshd」那句警告,一定要自己重启一次(systemctl restart sshd,或 service sshd restart / rc-service sshd restart)——否则改动只写在盘上,正在跑的那个 sshd 还是老配置,root 的门实际还开着。
    sudo bash /opt/keepalight/gtm-agent/uninstall.sh
  • 分组 给配置打标签,方便在「配置与脚本」列表里按分组筛选。
  • 接管模式 外部补机(默认)/保守心跳/多活,详见上方「整体关系速览」。
  • Agent ID / Agent Token ID 用来生成开机命令;Token 是机器请求 Worker 时的鉴权令牌,两者一起决定这台机器归属哪个配置。
  • 更换 Agent Token(已保存的配置) 「配置与脚本」页每张配置卡片上的「更换令牌」,或编辑器「基础」页 Agent Token 旁边的「更换令牌」(两个是同一个功能;新建、还没保存的配置没有这个按钮)。「配置与脚本」超出套餐额度被锁定、「编辑」变灰时,卡片上的「更换令牌」照常能用:令牌泄漏之后换掉它是止血,和删除一样不该被额度挡住。点了先弹一个确认框:默认不勾「立即作废旧令牌」= 旧令牌再保留 24 小时,这期间机器照常在线,以前复制出去的安装命令也还能装上机器(但装上的机器到点一样掉线,别再用它们),24 小时后还没重跑安装命令的机器掉线;勾上 = 旧令牌和以前复制出去的安装命令立刻失效,这份配置下所有机器马上掉线,直到在每台上重跑一次新的安装命令。旧令牌只留一代:上一次更换留下的旧令牌还没到期时再换一次,它会立刻作废——确认框会写出来,并说还有几台机器在用它。确认之后弹窗给出新的安装命令,并逐台列出这份配置下的机器:已换新令牌 / 还在用旧令牌(几小时后掉线)/ 旧令牌已作废;在每台机器上重跑一次新的安装命令就换过来,弹窗里点「刷新」看进度。「已对接服务器」页上还在用旧令牌的机器挂一个橙色「旧令牌」小标签。令牌由服务端生成,不能手填;不用输管理员口令;每次更换在「全局设置 → 安全审计」里记一行(谁、哪份配置、是否立即作废、旧令牌到期时间,令牌本身不记)——万一那一刻安全审计写不进去(存储抖动),令牌照样换掉,只在服务端日志里报一声:令牌泄漏时要的就是马上作废它。备份里不带旧令牌。
配置与脚本 · 服务器·系统标签6 条

这一标签里的模块都是「机器自己执行的动作」,不涉及 DNS 写入:root SSH 密码托管、网页终端、允许推送 Agent 更新、Nyanpass、BBR。这些动作是怎么送到机器上去的,见下面「命令通道」那一条。

  • root SSH 密码托管 默认关闭。开启后允许 root 登录 + 密码登录。口令就是你自己填的那一把(密码框旁边有个「随机生成」按钮,点一下替你想一串填进去);开着这一档就必须填一把,留空不许保存。机器装机时按控制面下发的那一把设上去,机器自己不生成、不保存、也不再把口令上报回来;同一份配置下的所有机器共用你填的这一把,不是「每台机器各自一把」。⚠️ 改了这里的密码,已经装好的机器不会跟着变——口令是装机那一刻写到机器上去的,面板改了不回溯;要让老机器换成新口令,最稳的一条是有人登上那台机器重跑一次安装命令。另一条是到「已对接服务器」页对它推一次 Agent 更新,但前提多:那台机器的 Agent 得还是旧版——已经是最新版的机器点了只会回一句「不用推」,口令不会变;还要开着「允许推送 Agent 更新」,那台机器上也得有人执行过一次放行命令,缺一样都推不动。口令可在「已对接服务器」的 SSH 面板按需查看 / 复制(要重新输入一次管理员密码);关闭时完全不碰 SSH、不设置 root 密码,并会尽量把当初放通的改动还原。🔴 装着的时候,它会盖过你后来自己做的 SSH 加固,这件事必须知道:放通的做法是把 /etc/ssh/sshd_config 里的 PermitRootLogin / PasswordAuthentication 就地改成 yes(原值先原样备份下来,关闭或卸载时按备份逐行放回去),并且在支持 drop-in 的机器上再写一份 /etc/ssh/sshd_config.d/00-keepalight.conf。文件名以 00- 开头是有意的——sshd 对同一个关键字取「第一个出现的值」,00- 排在最前面,于是 cloud-init 那份 PasswordAuthentication no 盖不掉我们。反过来也成立:你在这之后自己加一份 99-hardening.conf 把 PermitRootLogin 改成 no,或者自己去主配置里改那一行,都不会生效——sshd -T 查出来仍然是 yes。想真的关上,请把这一档拨回「关闭」(或者跑一次卸载器),别只在机器上改配置文件。装机时我们只会警告排在 00-keepalight.conf 之前、会盖过我们的那些文件;排在后面被我们盖住的,不会有任何提示。⚠️ 同目录里别人的文件我们一个都不碰、不删。⚠️ 关掉这一档生成的那条「还原」命令,在配置「停用」着的时候会随那次保存一起「作废」、重新启用也不补发(见「启用开关」那一条),机器上那扇门会原样开着——所以停用期间关 root,请按那一条说的做,或者直接登上机器执行还原命令。
  • 命令通道(控制面怎么让内容在你机器上以 root 执行) 控制面能让内容在你机器上以 root 执行的,就只有这一条通道,走它的一共五件事——root 登录还原(关掉「root SSH 密码托管」时,把机器上被放通的那些改动改回去);Nyanpass 的安装 / 卸载;BBR 的应用 / 还原;「自动化」里动作为「服务器命令」的规则(拨测判不通 / 定时 / 机器上线 / 流量阈值触发,或点「立即执行」;还要打开这份配置的「服务器命令权限」);Agent 自更新推送(要人去点:「已对接服务器」页点「推送 Agent 更新」)。控制面不 SSH 到机器,而是把命令放进机器下次上报的响应里,机器收到后用 bash -lc 本地执行,结果随下一次上报带回。⚠️ 面板上没有这个开关,从来也不该有:能开门的开关要是住在控制面里,那么控制面一旦被攻破,它就是攻击者自己家的开关。这条通道只有一道闸,而且两个方向都在客户自己的机器上:那是一份只有 root 改得动、控制面写不到的放行文件(ROOT 下发控制器,allow_server_commands)。没放行的机器一条命令都收不到,控制面因此根本不给它入队,也绝不会写一句"已下发"。装机时装机命令只会把要敲的那条打印出来(不会替你放行),已经装好的机器只能有人登上去执行一次 sudo /opt/keepalight/gtm-agent/agent/agent.sh --allow-server-commands;要收回同样得有人登上那台机器执行 sudo /opt/keepalight/gtm-agent/agent/agent.sh --deny-server-commands —— 面板上没有任何一个按钮能替你做这两件事的任何一件。每台机器放没放行,在「已对接服务器」页的「云端控制」那一列看得见(老 Agent 报不出来时显示「未知」,控制面一律按没放行处理)。
    sudo /opt/keepalight/gtm-agent/agent/agent.sh --allow-server-commands
    sudo /opt/keepalight/gtm-agent/agent/agent.sh --deny-server-commands
  • 网页终端(高危) 默认关闭。开启后,这份配置下的机器可以在面板上直接开一个 root 终端,敲什么就在机器上执行什么。和别的开关一样:拨完点「保存」才生效(新建、编辑都一样);关掉并保存的那一刻,这份配置下正在进行的终端会话当场结束,机器下一次上报时自动把终端组件卸干净。模板带得动它(全量模板和它自己的单模块模板),套上去也只是改草稿、点「保存」才算数;导入备份不会动它(它不在配置文档里:在原来那台面板上恢复,每份配置的这个开关保持恢复前的样子;恢复到一台新面板上,它是关的)。「已对接服务器」页的「终端设置」改的是同一个开关(那一排是拨一下就生效),改哪边都一样。它在任何部署形态下都拨得动,但拨开了不等于开得出终端:控制面服务器上的 TERMINAL_ENABLED 是另一层,默认开着,面板改不了它 —— 完全不用网页终端的话,在控制面的 keepalight.env 里写 TERMINAL_ENABLED=false 再重启,整条终端通道就不存在了;Cloudflare Workers 形态给不出终端要的那条常驻连接,要用自建 / 二进制部署(同一份程序,换个跑法)。⚠️ 把控制面和被管机器装在同一台机器上「不再被拦」:装机命令会照常把终端组件装上,面板上那个「终端」按钮也开得出来,只是机器上会多打一行提示告诉你代价——谁能开这台机器的终端,谁就拿得到控制面自己的密钥和全部数据。这是你自己的选择,我们只把话说清楚,不替你决定。真去开终端而开不出来时,面板会当场说清是哪一层挡的、去哪儿开。⚠️ 减权自动、增权必须到场:关掉开关不需要谁登机器,机器下一次上报时自动卸载;打开开关则绝不自动安装,面板会给出一条要有人拿着 SSH 凭据登上那台机器手动执行的命令(避免「控制面被攻破 = 攻击者远程给自己开一个 root 终端」),那条命令里没有任何凭据,抄给别人也没用。只有一处不用再单独跑那条命令:新建配置时就把这个开关打开,那么这份配置给出的装机命令会在装机那一刻把终端组件一起装上(到场的还是同一个人,只是省掉第二条命令);已经装好的老机器不在其中,仍要有人登上去跑一次。终端组件需要 systemd,没有 systemd 的机器上只是这一个功能用不了,DNS 解析 / 健康检查 / 故障切换 / 心跳上报都不受影响。
  • 允许推送 Agent 更新(高危) 默认关闭。⚠️ 它是一张许可证,不是一个自动任务:控制面永远不会自己把 Agent 更新推给任何机器。开着它,你才可以到「已对接服务器」页对某一台点「推送 Agent 更新」,或者用「更新全部 agent」把当前这一屏所有「旧版」的机器推一遍;被点到的机器会收到一条以 root 执行的安装命令把新版装上去,下载安装脚本时先核对 sha256(期望值由控制面现算,不采信任何外部输入),对不上就不装。关着它,连手动推都不许。⚠️ 开着它也不等于机器就会更新,还差两样,缺一样那台机器点了也推不动(面板会当场逐台告诉你缺的是哪一样、下一步该做什么):① 有人到「已对接服务器」页手动点;② 那台机器上要有人登上去执行过一次 sudo /opt/keepalight/gtm-agent/agent/agent.sh --allow-server-commands(控制面替不了它——面板上没有、也不会有任何一个按钮能替你放行)。另外机器离线、机器已被吊销、这份配置是停用状态、机器没上报脚本版本(Agent 太老)、机器已经是最新,点了也不会推,而且都会当场说明。同一台机器两次推送之间至少隔 30 分钟(一次推送就是那台机器以 root 重跑一整份装机脚本),同一个目标版本连推 8 次还没装上就停下来喊人。把这一项从「关」拨到「开」需要重新输入一次管理员密码(二次验证),拨回「关」不需要口令。⚠️ 它跟随「保存」(和配置编辑器里别的开关一样):拨一下什么都还没发生——要点「保存」才生效,也是在保存的那一刻才会把已经排队、机器还没取走的那些自更新命令一并作废。2026-08-26 起它也能存为模板了(在配置编辑器这一档上点「存为模板」):套模板只改草稿,还得点「保存」才算数,而把它从「关」带成「开」的那一次保存照样会再要一次管理员密码——所以「套个模板就把它静默打开」这件事不会发生。想升级个别机器又不想动这些开关:登上去重跑一次安装命令,效果一样。
  • Nyanpass 默认关闭。执行的就是你粘贴进来的那条完整安装命令(面板不限定安装脚本域名,也没有「线路」这个选项,你从 Nyanpass 面板复制到什么就是什么)。⚠️ 不只在开机阶段跑一次:以后每次改动这个模块(改命令、开、关)保存后,都会向这份配置下的机器下发一条同步命令——本来就是我们开着的,才先执行 /opt/nyanpass.uninstall.sh 卸掉旧的再按新命令重装;第一次启用不卸,因为那台机器上的这个脚本是 nyanpass 官方安装器留下的、很可能属于客户自己装的节点,跑下去节点数据会一起被清掉且不可逆。要手动卸载,就在那台机器上执行下面这条(同一个道理:先确认这个节点是我们装的)。⚠️ 这条同步命令在配置「停用」着的时候会随那次保存一起「作废」、重新启用也不补发(见「启用开关」那一条)——停用期间改这个模块,机器上的 Nyanpass 原样在跑。Worker 不参与节点连接。
    bash /opt/nyanpass.uninstall.sh
  • BBR 默认关闭。机器本机执行 BBR 优化脚本,默认使用 本机内置 bbrx.sh,也可以切换为外部脚本 URL;和 DDNS / GTM 写入没有直接关系。
配置与脚本 · 解析·故障切换标签3 条

这一标签管「要不要把机器 IP 写进解析」:内置 DDNS、阿里云 GTM(出问题时 / 到点时自动做点什么,在旁边的「自动化」标签)。

  • 内置 DDNS 默认关闭,新建配置不带任何域名。机器只负责上报公网 IP,域名解析由 Worker 完成:单 IP 模式更新当前 active 的解析;多 IP 模式同步所有「有效在线」的 IPv4。服务商支持阿里云 AliDNS 和 Cloudflare DNS,凭证从「凭证区」选,机器端不保存 DNS API 密钥。⚠️ 它跟 GTM 实例走的不是一条路:DDNS 完全不经过健康模板 / 地址池那套判定,只是把某条域名记录直接指向「当前判定为这个配置下活跃的那台机器」的最新公网 IP。适合只有一台 / 一组机器、不需要复杂调度策略的场景;需要多线路 / 多权重 / 多备份策略时,才需要建 GTM 实例。⚠ 「自动化」里「拨测判不通时」的规则判「不通」时不会拦这里的写入——它只管那条规则自己的动作触不触发,容灾这件事交给「阿里云 GTM · 健康检查」负责。
  • 阿里云 GTM 默认关闭。这条路走的是阿里云官方的「全球流量管理」产品:解析由阿里云自己应答,本程序只负责把机器上报的 IP 写进你那个 GTM 地址。它和独立的「GTM」区域(自研 GTM)是两条并行的路,不是新旧关系,用哪条都可以——自研那条不用额外买阿里云的付费产品、功能更全(地址池 / 分线路 / 多种健康模板);官方这条更稳一点,因为分流和故障转移是阿里云自己在跑,不依赖本程序一直在线,代价是要先在阿里云开通全球流量管理、而且只支持阿里云。两个模块互不干扰,也可以并存。机器不直接调用阿里云,只上报 IP,由控制面用「凭证区」的 AccessKey 调用阿里云 GTM API。GTM 3.0 / Cloud Address 只需填地址 ID;GTM 2.0 / Address Pool 需要地址池 ID + 匹配备注。多活模式下单地址不会随机写入,避免「最后上报的 IP 覆盖目标」。
  • 阿里云 GTM · 按时间自动停用 / 启用 可选,默认关闭,只支持 GTM 3.0 / Cloud Address。粒度到「地址」级:一个配置一条排班,管的就是这个配置对接的那一个 GTM 地址。两种模式二选一(和自研 GTM 那边完全一样的口径):「停用时段」= 列出来的时段停、其余时间开;「启用时段」= 只有列出来的时段开、其余时间全停。支持每天重复或按星期几(一行 = 星期几 + 一个时段)。⚠️ 时区是这份配置自己的,必须显式选一个(IANA 地区名,如 Asia/Shanghai)——不选就一分钟都不生效,我们绝不替你猜(猜一个就等于在你从没同意过的时刻停解析)。⚠️ 停用是真的去调阿里云接口把那个地址停掉,不是「我们不写了」;我们看不到你阿里云账号里的拓扑(只存了一个地址 ID),如果这是它所在地址池里唯一一个可用地址,停用窗口里那条线路在阿里云侧就没有可返回的地址了,请自己先确认池里还有别的地址。把排班关掉、把这份配置整个停用、或者删除这份配置时,如果它正被我们停着,都会先还原为启用;其中删除这条路更严格——还原失败会直接不让删、把原因告诉你,只有你在还原失败之后主动确认「就这么删」,那个地址才会留在停用状态,需要你自己到阿里云控制台改回启用。精度分钟级,生效时刻落在窗口边界之后的 0~59 秒。
配置与脚本 · 自动化标签13 条

这一标签管「出问题时 / 到点时自动做点什么」:一张「触发(+ 同时满足)→ 动作」清单(触发:拨测判不通时 / HTTP 拨测判不通时 / 定时 / 机器离线 / 机器上线 / 流量阈值,每条还能加几条「同时满足」→ 动作:本机 HTTP 动作 / 服务器命令),头上一个总开关,下面一行「服务器命令权限」。清单是一条规则一张卡片,拖动左边的把手调顺序,点「编辑」在那张卡片下面展开编辑面板(「条件」「动作」两个区块),卡片右侧的「立即执行」现在就按这条规则的动作跑一次,「+ 添加条件」在最下面。

  • 自动化(条件 → 动作) 自己一个标签(和「基础 / 服务器·系统 / 脚本执行 / 解析·故障切换」同级),头上一个总开关(出厂开着,见下一条)。一份配置一张清单,每一条规则 = 一个触发 → 一个动作,中间可以再加最多 3 条「同时满足」:触发选一种(「拨测判不通时」/「HTTP 拨测判不通时」/「定时」/「机器离线 / 上线」/「流量阈值」,「HTTP 拨测判不通时」与后两种各自一条说明见下面;「同时满足」也有一条说明),动作二选一(「本机 HTTP 动作」/「服务器命令」),点「+ 添加条件」加一条。一条规则只挂一个触发、只做一个动作——同一个动作想在两种时机都做,就复制成两条(要手动跑一次不用专门配一条:每条规则卡片右侧都有「立即执行」)。一份配置最多 16 条规则,其中「拨测判不通时」最多 8 条(和「HTTP 拨测判不通时」合起来算;每条拨测规则各有自己的一份判据和一张证据台账);超出上限、条件或动作的类型认不出来、两条规则的 id 重复,保存时整次拒绝并逐条点名,不会默默截掉。每条规则有自己的开关和名字(名字最长 40 字、只给人看,不会被代进命令);关着的规则可以先空着当草稿,开着的规则动作是空的(命令空 / URL 空)不许保存。两条规则是「同一件事」——触发、同时满足(先后顺序不算)和动作都一样,只差名字 / 开关 / 冷却 / 拨测间隔 / 达标比例 / 命令超时、命令前后多几个空格——保存时会被拒绝并点名那两条:同一个触发会把同一个动作做两遍。定时写法不同而到点时刻一样的,只认得出三种(同样拒绝):时区别名(Asia/Chongqing、PRC 都当成 Asia/Shanghai)、「按星期几」七天全勾 = 「每天」、同一条定时里被别的时刻盖住的那几个(「每隔 10 分钟」+「每隔 30 分钟」和只有「每隔 10 分钟」算同一件事)。⚠ 另外两种认不出来,保存照样放行:一是不同写法恰好撞在同一时刻(「每隔 1440 分钟」按 UTC 对齐 = 每天 UTC 00:00,和「每天 08:00 Asia/Shanghai」是同一刻);二是两个时区名字不同、眼下偏移一样(Asia/Shanghai 和 Asia/Singapore)。这两种只有动作是服务器命令时,保存会提醒一句「N 条规则指向同一条命令原文」;动作是本机 HTTP 动作的一句提醒都没有——请自己别这样重复配。多条规则同时命中时一条不落,按清单从上到下的顺序依次都执行(拖动卡片左边的把手调顺序),不分谁优先(同一次上报里,拨测条件那几条的命令排在前面、到点的定时服务器命令排在后面,各自按清单顺序;机器按这个顺序一条接一条执行)。🔴 规则之间没有冷却:一条「定时 03:00」和一条「拨测判不通时」指向同一条命令,03:00 定时刚跑完、03:02 故障判定会再跑一次——保存时会提醒「N 条规则指向同一条命令原文」。「冷却」只长在「拨测判不通时」这个条件里(「冷却(分钟)」,出厂 5 分钟,0 = 不冷却),只管这一条规则自己的拨测触发(「机器离线 / 上线」另有一格按机器分别记的冷却,见那一条);定时条件没有冷却,到点就执行。删掉一条规则,它的执行记录还留着、印着当时的名字(见下面「执行记录」那一条)。
  • 「自动化」总开关 「自动化」标签头上那个开关,出厂开着,管这份配置的所有自动化规则:关着 = 一条都不生效——拨测任务不下发、定时到点既不写下发条子也不发本机 HTTP 动作、机器上报时不判定也不发命令、执行记录不再写(规则、执行记录、台账都原样留着,打开就接着用)。🔴 关 = 取消:从开拨到关的那一次保存,已经到点、还没被机器取走的定时服务器命令一并作废(保存回执当面说作废了几条,运行日志也记一行),之后再打开也不会补发。开 / 关各在运行日志里记一行。二次验证:这份配置里有「上了膛」的服务器命令规则(总开关开着 +「服务器命令权限」开着 + 规则开着 + 命令不为空)时,翻这个开关(开→关、关→开)都要重新输一次管理员口令,和翻「服务器命令权限」同一个口径。它跟着模板走:存为模板、套用「自动化」或全量模板时这个开关一起带(「服务器命令权限」不带)。总开关关着而清单里还有开着的规则时,保存会提醒一句「自动化总开关关着,N 条规则不会执行」。挂阿里云站点监控的拨测规则:总开关一关,付费任务跟着删(和把每条规则逐条关掉一样),打开时重建。
  • 服务器命令权限(「自动化」标签里总开关下面那一行) 在「自动化」标签里、总开关下面那一行,出厂关着(关着时只剩一行和一句灰字,打开才展开两把闸的说明和增权命令),只管这份配置里动作为「服务器命令」的规则(「本机 HTTP 动作」不看它)。它和机器上那份放行文件是两把各自独立的闸,两把都开,服务器命令才会真的在机器上以 root 执行:① 机器那一把——有人登上那台机器执行一次放行命令(见「服务器·系统」标签的「命令通道」),控制面替不了;② 面板这一把——就是这个开关,是你自己替这份配置做的选择。关着的时候:定时到点不写下发条子,心跳一条自动化命令都不发,定时到点、拨测判到该动手都只在执行记录里记一行「服务器命令权限未开启」;清单里这些规则旁边标「权限未开启,不会执行」,保存时也会提醒「N 条服务器命令规则不会执行」。🔴 关 = 取消:把它从开拨到关的那一次保存,已经到点、还没被机器取走的定时服务器命令一并作废(保存回执当面说作废了几条,运行日志也记一行),之后再打开也不会补发。开关本身不进模板(套模板带不走它,每份配置自己决定),但跟着备份走。⚠ 这把闸不是 2026-08-25 砍掉的那个统一放行五条通道的总闸——那一把是我们替客户做的决定;这一把只管「自动化」里的服务器命令,是你自己的选择,只有你本人打开它才生效。二次验证:只要这份配置里有「上了膛」的服务器命令规则(「自动化」总开关开着 + 这个开关开着 + 规则开着 + 命令不为空),下面这些改动都要重新输一次管理员口令,口令框会逐条念出是哪条规则、改了它哪一部分(新上膛的规则连命令原文一起念):改命令;改它的条件(拨测的目标 / 端口 / 动作阈值 / 拨测节点 / 复测次数 / 复测间隔 / 拨测间隔,定时的时区 / 时刻);加一条、打开一条、关掉一条、删掉一条命令不为空的服务器命令规则;把这个开关从开拨到关;改接管模式;改配置名称(命令里的 {{agentName}} 会跟着变)。从关拨到开、或者把停用着的配置重新启用的那一次同样要口令,口令框会把从这一刻起要执行的每一条命令原文念给你。不要口令的:改规则名字、冷却、达标比例、命令超时、上下挪顺序,以及动作为「本机 HTTP 动作」的规则。⚠ 开关关着的期间改命令、加命令规则都不要口令(那时它们不会执行)——所以打开开关那一次,请把口令框里念的命令原文看完再输口令。想马上止血又不想输口令:把整份配置「停用」(不要口令,停用同样会把已经到点的定时服务器命令作废)。
  • 条件 · 拨测判不通时(每条规则一份判据) 每条「拨测判不通时」规则各带一份完全独立的判据,几条规则可以配得不一样,也可以配一样(目标 / 端口 / 复测次数 / 复测间隔都一样的几条合成一条拨测任务,零额外成本;不一样的话同一台机器每个拨测间隔会被拨好几遍,保存时会提醒)。默认探测端口 22(可自定义);复测次数 1~4 次(出厂 2 次):拨测节点一轮最多串行拨 45 秒,一条不通的 TCP 拨测每次最多等 8 秒、两次之间至少等 3 秒,复测 4 次最坏 41 秒、5 次要 52 秒一轮装不下,保存时当场拒绝并说为什么(一轮怎么排见「拨测节点区」里「自建 Agent 节点 · 一轮排不下时」那一条);目标可以填 IPv4、IPv6 或域名,留空=这台机器当前的公网 IP(域名存成小写、IPv6 存成压缩写法,「Example.COM」和「example.com」算同一个目标;带协议头(网址开头那一截)、路径或「:端口」的存不进去,端口填在「端口」那一格)。填域名=拨测节点每次拨都重新解析、换了 IP 跟着走;域名和它解析出来的 IP 是两份判据,不会合成一条拨测任务。本机自带测活节点只能拨公网 IPv4,域名 / IPv6 目标请选自建 Agent、Globalping 或 HTTP 接口节点(选了的话保存时会提醒,执行记录里记成配置错误)。IPv6 目标要求拨测节点自己有 IPv6 出口:没有 IPv6 路由(或者判不出有没有)的自建 Agent 节点、以及 2026-09-23 之前装的拨测节点脚本(在那台节点上重跑一次安装命令就换成新版)对这一条弃权——不算「不通」、不进分母,执行记录里会写明原因。⚠️ 下面几种会记成「不通」、不是弃权,定动作阈值和复测次数时要算进去:域名目标——拨测节点解析失败(节点自己的 DNS 坏了,或者这个域名的解析出了问题,节点分不出是哪一边),或者这个域名只有 AAAA(IPv6)记录而节点没有 IPv6;IPv6 目标——节点有 IPv6 路由但上游不通。拨测节点从「拨测节点区」里挑,每条规则各选各的一份清单,不再分「国内节点」「国外节点」;一个都不选=永远判不出「不通」,这条规则的动作不会触发。本轮真正给出结论的节点里,说「通」的占比达到「达标比例」(默认 50%)时,这一轮就算「通」;⚠️ 拨测判不通时不再影响解析写入,容灾由 GTM 健康检查负责——达标比例现在只决定执行记录那一行(以及「已对接服务器」页「执行结果」那一列)写的是「通」还是「不通」,不再有任何操作后果(既不拦解析写入,也不直接决定动作触不触发)。「什么时候才动手」:要同时满足两条。① 这一轮说「不通」的占比达到「动作阈值」(默认 100%,分母只算这一轮真给出结论的节点,弃权的(掉线、结果过期、探测器不可用、连续失败次数还没攒够)都不进分母);② 攒够两条互相独立的「不通」证据(一条证据=某个节点连着「复测次数」那么多次都不通;只选一个拨测节点时第二条证据必须来自下一轮,连着两轮都判不通才动手)。这一档有两个互不相干的比例,分别管两件事,改一个绝不会动另一个:达标比例只决定写「通」还是「不通」,动作阈值只决定要不要触发动作——把达标比例调严不会让服务器命令变得更容易触发,反过来也一样。同一批证据只动一次手:没有新的拨测结果,就不会拿上一次动手用过的那批证据再动一次。证据有保质期:只要中途判回「通」、这一轮判不了(配置本身有问题)、结果还没到齐,或者「不通」的比例/独立证据条数还没达到动作阈值,攒了一半的证据都会作废、从头再攒,但门槛本身不会因此放松;一份配置每个拨测间隔只有一个拨测名额,挂了 M 台机器就要轮着用,保质期按「这台机器轮到自己一次的间隔」算,超过「这台机器轮到自己一次的间隔 × 3」也作废、从头再攒。判不出来(结果还没到齐、配置本身有问题)一律不算数、不触发任何动作,执行记录里点名说清楚原因。判成「通」时,执行记录那一行点名是哪几个节点说的通,方便你一眼看出是不是某个节点坏了。每条规则的证据各记各的账,互不串线——一条规则已经动过手,另一条的证据照样从零开始攒。证据台账有容量:一份配置里所有「拨测判不通时」规则共用 512 格、按条数均分(1 条 512 格、2 条各 256 格……8 条各 64 格;目标留空时一台机器占一格,填了固定目标的规则只占一格);在拨测的机器数超过这条规则的格数,「同一批证据只动一次手」和「两条互相独立的证据」这两道闸都会同时失效,这条规则的动作就会一律停手(执行记录和运行日志都会点名报出来),请把这份配置拆成多份,或者减少拨测规则的条数。「冷却」(「冷却(分钟)」,出厂 5 分钟,0 = 不冷却)只在这个条件里有:同一条规则动过一次手之后,冷却期内判到不通也不再动手。判定规则从 2026-08-26 起已经有意分家,两边早就不是共用一份判据(GTM 健康模板的判据见「GTM · 健康模板」一节,只有一个达标比例,没有动作阈值这一道闸):这边说「不通」的占比要达到另一个独立的「动作阈值」(默认 100%,GTM 那边只有一个达标比例),且只选一个拨测节点时第二条证据必须来自下一轮,这两道闸都是 GTM 健康模板没有的。⚠️ 「达标比例」和「动作阈值」是两个独立判据,两者的区间可能重叠:同一轮既算「通」也达到了动作阈值,那一档解析照写、这条规则的动作(本机 HTTP 动作或服务器命令)照样会发,执行记录那一行的详情开头写的就是「通;将执行这条规则的动作」——出厂两个默认值(达标 50 + 动作 100 = 150)结构上到不了这一档,只有把动作阈值调低于 100 才会撞见。
  • 条件 · HTTP 拨测判不通时(每条规则一份判据) 让选中的自建 Agent 拨测节点去请求一个 http:// 或 https:// 地址,按你设的判据算这一次「通 / 不通」:状态码落在「期望状态码」里(出厂 200-399;可以写单个、区间,或用逗号隔开几段,比如 200,301,302;每个码在 100~599),并且——填了「正文关键字」时——正文前 64KB 里原样出现这段字(最长 128 字,区分大小写),才算通;超过「超时(秒)」(出厂 10 秒,最短 3 秒,整次请求连读正文一起算)没回完算不通,连不上、证书不对也算不通。🔴 超时 × 复测次数有上限:拨测节点每分钟串行跑一轮,一条不通的 HTTP 拨测最多只能占 45 秒(超时 × 复测次数,加上每两次之间至少等 3 秒;和「拨测判不通时」同一个一轮时长)——复测 1 次时超时最多 45 秒、2 次最多 21 秒、3 次最多 13 秒、4 次最多 9 秒、5 次最多 6 秒,最多复测 5 次(出厂 10 秒 × 2 次排得下);超出的组合保存时当场拒绝,面板「超时(秒)」框下同一句红字。为什么不收:排不下的任务在站点挂掉之后每一轮都派不出去,这条规则会一直等不到新结果、永远不动手。那一轮被别的不通目标排满时,两次复测之间的等待会被缩到 3 秒(复测次数不变)。请求方法只有 GET / HEAD 两种(HEAD 只看状态码,不能配关键字,保存时会拒绝这种组合)。🔴 不跟随重定向:301 / 302 就按 301 / 302 判(出厂的 200-399 包含它们),要检查跳转之后那一页,请直接填最终地址。URL 限制(和「本机 HTTP 动作」同一道出网限制,保存时当场拒绝并说为什么,面板框下同一句红字):只收 http / https;不收内网 / 回环 / 链路本地 / 保留地址、localhost 和它的别名(localhost.localdomain 这类)、只有一段的主机名、.local / .internal / .localdomain / .home.arpa 这些只在内网里解析的名字、把内网地址明写在域名里的通配解析(127.0.0.1.nip.io 这类)、IPv6 字面量、带用户名口令(user:pass@)的地址。⚠ 要解析之后才知道指向哪儿的挡不住(自己的域名指向内网地址、DNS 重绑定):保存时只看得见域名本身。URL 会随任务发到拨测节点那台机器上:别把口令、令牌写进 URL。判定与「拨测判不通时」一模一样、一个字都不分叉:复测次数、复测间隔、达标比例、动作阈值、只选一个节点时第二条证据要等下一轮、同一批证据只动一次手、证据台账(和「拨测判不通时」合起来算条数、共分格子),冷却同样只管这一条。只走自建 Agent 拨测节点:本机自带 / Globalping / HTTP 接口节点只会连 TCP 端口;阿里云站点监控的付费任务按(IP, 端口)建、表达不了这套判据,所以不接 HTTP 拨测任务——选了这几类,执行记录会记成配置错误,保存时也会提醒。🔴 老节点:2026-09-23 之前装的自建 Agent 拨测节点是旧脚本,不认 HTTP 拨测任务。控制面按节点每一轮交结果时报上来的脚本版本认出它,一条 HTTP 任务都不派给它;这条规则里它算弃权(「结果没到齐」),不算「不通」。面板多选里它带「旧脚本」标签,保存时逐台提醒「还没更新,重跑一次安装命令」。更新办法:到「拨测节点区」复制那台节点的安装命令,在那台机器上重跑一次(节点、令牌都不变),它下一次交结果之后的那一轮起就开始拨。模板变量:这条规则的 {{target}} 是那条 URL,{{port}} 是空的。执行记录里条件那一格念成「方法 + 那条 URL」(比如「GET 加上你填的地址」)。
  • 条件 · 定时 一个时区 + 一组时刻。时区必须显式选一个 IANA 地区名(例如 Asia/Shanghai):没选的话这一条定时一次都不会到点,面板和保存回执都会点名提示,不会替你瞎猜一个;+08:00 这种固定偏移不收(它不认夏令时,换季那天会整整差一小时)。一条定时条件最多 24 个时刻,三种写法——每天固定时刻、每周固定星期几+时刻、或者每隔多少分钟一次;「每隔 N 分钟」按 UTC 时间对齐——从 1970-01-01 00:00 UTC 起每 N 分钟一次,不是从你保存那一刻开始数:比如「每隔 30 分钟」就是每个整点和半点;但 Asia/Kolkata 这种和 UTC 差半个小时的时区,「每隔 60 分钟」落在当地的半点。错过的时刻(控制面那一分钟没跑到)只在执行记录里留一行「漏拍」,不会补跑;每隔 1~2 分钟这么密的规则,漏拍不会显示,因为下一次几乎立刻又到了。定时条件没有「冷却」这一格,到点就执行,跟距离上一次拨测触发多久没关系。规则关着、配置停用、时区没设或者一个时刻都没有的那段时间,这条规则不到点;重新打开之后从打开那一刻重新算,关着那段时间里的时刻不补跑,也不记成漏拍。🔴 定时条件没有拨测判据,所以命令 / URL / 请求头 / 正文里的 {{port}} 在定时规则里代成空串、{{target}} 代成机器上报的 IP(和 {{ip}} 一样)——像 nc -z {{target}} {{port}} || 重启服务 这种写法,在定时规则里前半句必然失败、后半句每次都执行(服务器命令权限开着时,保存会对命令里写了 {{port}} 的定时服务器命令规则单独提醒)。
  • 条件 · 机器离线 / 上线 「条件类型」下拉里的「机器离线」和「机器上线」两项,看的是这份配置名下每一台参与自动化的机器(活跃机器:多活 = 每一台,心跳 / 外部补机 = 现任那一台;备机不参与,和别的自动化一样)。「机器离线」:这台机器最后一次上报之后满「离线多久算离线(分钟)」那么久(可以填 2~1440 分钟,出厂 5 分钟;下限不是一分钟:机器每分钟上报一次,只差一次上报就算离线会把正常的上报抖动当成掉线 / 上线,填得比下限小的保存时按下限存、回执里逐条点名),控制面每分钟看一遍,跨过去的那一分钟触发一次;机器回来之后,下一次离线再触发一次。控制面那几分钟没跑到的话,跨过去之后 60 分钟之内照样补上这一次;超过就不补(新建一条离线规则时,早就离线了很久的机器不会一口气发一串回调)。同一分钟很多台一起离线、回调地址又慢的时候,控制面这一分钟只花一份固定的时间发离线回调(所有配置共用,免得拖慢改解析那一路),发不完的留到下一分钟接着发,还在补发窗口里就照样补上。⚠ 「机器离线」只能配「本机 HTTP 动作」(机器已经离线了,服务器命令没人执行):配了服务器命令,面板当场红字、保存 400。「机器上线」:这台机器上一次上报距今不少于那么多分钟(或者这是它第一次报到),这一次上报触发一次;动作可以是本机 HTTP 动作,也可以是服务器命令——命令只发给刚上线的这一台,执行记录和机器上的日志里写着「机器上线(自动化「规则名」;机器名)」。冷却按机器分别记(「冷却(分钟)」,出厂 5 分钟,0 = 不冷却):同一台机器反复抖动,冷却内只触发一次;别的机器不受影响。命令 / URL 里可以用 {{serverId}}(那台机器的编号)、{{hostname}}(那台机器自己报的主机名)、{{event}}(offline / online)。{{hostname}} 是机器自己说了算的,所以代进任何地方之前只保留英文字母、数字、点和连字符(其余字符——空格、换行、中文、下划线、* ? 这类——一律剔掉;每一段开头结尾的连字符、多余的点也去掉,所以它不会以 - 开头、也不会是 ..;最长 253 个字符;剔完可能是空的,别把它当路径的一段用)。代进服务器命令时,所有变量的值还会剔掉这些字符:; & | ` $ ( ) { } < > \ ' " 和换行等控制字符;空格、* ? 方括号 ~ # = 这类会留下(空格会把一个值拆成两个参数,* ? 和方括号会被 shell 当通配符展开),要当一个参数用的变量请在命令里自己加双引号,例如 logger "{{agentName}}"(值里的 " 和 $ 已经被剔掉,引号顶不破)。代进本机 HTTP 动作时怎么处理,见下面「动作 · 本机 HTTP 动作」那一条。
  • 条件 · 流量阈值 按这台机器的流量计数器累计(机器上报的网卡收发字节,和「已对接服务器」页流量那一格同一个来源、同一个口径:1 GB = 1024³ 字节),本周期累计跨过「阈值(GB)」的那一次上报触发一次,同一个周期不再触发,下一个周期自动复位。周期二选一:UTC 自然月 / UTC 自然日(「当天」)——不做账单日偏移:各家的账单日不一样,要对齐账单日请用「定时 + 服务器命令」自己安排。方向三选一:总流量(进 + 出)/ 出站 / 入站。阈值要填 1~100000 GB 之间的整数(填 0 或者不填,保存 400,不替你猜一个)。动作可以是本机 HTTP 动作,也可以是服务器命令(只发给跨过阈值的这一台)。⚠ 只算探针在线期间的流量(机器没上报的那段时间读不到计数器);机器重启 / 计数器回绕那一次只重新对基线、不加量,和计费周期那一份账同一个口径。服务器命令权限没开、或者那台机器没放行时跨过阈值:这个周期照样记成「触发过了」(执行记录里写明为什么没执行),之后再打开权限,同一个周期也不会补跑一次。
  • 条件 · 同时满足(AND) 编辑面板「条件」区块分上下两段:上面是「触发」(一个,决定什么时候看一眼:到点、拨测判到不通、机器离线 / 上线、流量跨过阈值的那一刻),下面是「同时满足(可选)」——最多 3 条,每条一张小卡(类型 + 那一种的字段,右上「移除」),「+ 再加一个同时满足」在最下面。触发那一刻逐条判,全部成立才执行动作;任一条不成立,这一次就不执行:执行记录记一行「未执行」,展开能看到「同时满足条件不成立:是哪一条(为什么,比如现在几点、那台机器最近一次上报是几分钟前)」,连着几次都是同一条不成立只记一行。清单卡片与执行记录的「条件」那一格都会在触发后面印「且 满足 …」。一条都不加,行为和从前完全一样。六种:「拨测判不通」「HTTP 拨测判不通」——和同名触发用的是一样的判据字段(目标或 URL、拨测节点、复测次数、达标比例、动作阈值……),按最近一批拨测结果、按这一条自己的动作阈值判出「不通」才算成立(结果没到齐、判不了都算不成立;只看这一刻的状态,不攒「第二条证据」、没有冷却),它的拨测任务照常派给你选的节点(判据和某条触发规则相同就合成一条任务),一个节点都不选就永远不成立;「机器离线」——最近一次上报距今不少于那么多分钟、「机器在线」——不超过那么多分钟(都是 2~1440 分钟,出厂 5);「流量超过」——本周期(UTC 自然月 / 自然日)累计不少于阈值(1~100000 GB,和「流量阈值」同一本账);「时间窗」——此刻落在「开始–结束」里(要选时区;结束早于开始 = 跨午夜,比如「22:00–06:00」,跨过去的那一段算开始那一天的;星期几不选 = 每天;开始和结束不能相同)。机器离线 / 在线、流量超过看的是触发所在的那台机器;「定时」触发不属于任何一台机器,就按任一机器满足算(卡片上写「任一机器…」)。⚠ 拨测判不通 / HTTP 拨测判不通 / 机器上线 / 流量阈值这几种触发都发生在那台机器上报的那一刻,所以给它们配「机器离线」那一条永远不成立(保存时会提醒)。同时满足不写台账、不动冷却、永远不自己触发动作,它只拦:触发那一刻被拦下,那一刻就过去了(「流量阈值」跨过阈值时不在时间窗里,这个周期就不再触发;要「每天夜里看一眼流量、超了就动手」,用「定时」触发 +「流量超过」)。同类、判据一样的两条存不下来。服务器命令规则的同时满足每一格都在二次验证里:加一条、删一条、改任何一格都要再输一次管理员口令。
  • 「立即执行」(每条规则都有) 每一条规则卡片右侧都有「立即执行」:要手动跑一次就点它,不用专门配一条规则。它不看触发、也不看「同时满足」,跑的是已经保存的那一条:面板里没保存的改动不算数,新加的规则要先保存这份配置。动作是本机 HTTP 动作 ⇒ 当场从控制面发出去(和规则自己触发时同一个出网限制、同一个超时),结果当场告诉你;动作是服务器命令 ⇒ 排给这份配置此刻在线的活跃机器(多活 = 每一台;心跳 / 外部补机 = 现任那一台),它们下一次上报(每 60 秒一次)取走、以 root 执行,排下去之后 10 分钟内没来取就作废、不补跑。⚠ 服务器命令规则的「立即执行」每一次都要重新输一次管理员口令(口令框会念出排给哪几台、命令原文);用 API 令牌调一律拒绝。本机 HTTP 动作的规则不要口令。「自动化」总开关关着、「服务器命令权限」没开(命令规则)、这条规则关着、整份配置停用着,点了都不会跑,面板直接说是哪一道关着。立即执行不看冷却、不算进冷却、也不影响拨测的证据台账;执行记录里写一行「手动执行」(命令被机器取走时另记一行「已取走」)。命令排下去之后、机器来取之前,这份配置只要又保存过一次(关掉「服务器命令权限」、关掉这条规则、改了它的命令或条件、改了配置名称、停用再启用,哪怕只改了分组),这一次都会作废(口令批准的是点下去那一刻的那一份配置),要执行就再点一次。
  • 动作 · 本机 HTTP 动作 规则命中时,照你填的方法 / URL / 请求头 / 正文发一个请求。这里说的「本机」,指的是谁替你发出这个请求:自建部署由这台面板所在的机器发出去,Cloudflare Worker 部署由 Cloudflare 的出口发出去,都不是你自己的电脑。对方回的内容截 160 字记进执行记录。指向内网或回环的地址存得进来、但一个字节都发不出去(在真发请求的那一刻拦)。同一次上报里命中的几条「拨测判不通时 → 本机 HTTP 动作」共用一份 20 秒的等待预算(连读回包一起算):前面几条用完了,后面的挪到下一轮再发、攒下的证据留着,运行日志里会说一句。它不看「服务器命令权限」。⚠️ Cloudflare Worker 部署下,极小概率会在同一分钟内把一条定时动作重复执行一次(上一轮跑得慢、还没结束就拖到下一分钟);自建部署没有这个问题。变量的值怎么代进去:URL 里每个值都做 URL 编码(encodeURIComponent:值里的 & = ? / # 和空格都会被编码,拆不出新参数、改不了路径;也因此别把 {{ip}} 写在 URL 的主机那一段:IPv6 地址里的冒号会被编码、请求发不出去 —— 回调地址写死,IP 放在参数里);请求头的值剔掉换行等控制字符(有中文就整个值按 UTF-8 百分号编码);正文本身是 JSON(对象或数组)时值按 JSON 字符串转义(值里的 " 不会把 JSON 弄坏),别的正文原样代入。机器自报的 {{hostname}} 在这之前还只保留英文字母、数字、点和连字符。可用变量:
    {{ip}} {{target}} {{port}} {{agentId}} {{agentName}}
  • 动作 · 服务器命令 规则命中时,把你填的命令发给机器,机器用 bash -lc 以 root 执行,结果随下一次上报带回(超时出厂 120 秒,可以改成 1~3600 秒)。必须两把闸都开才会真的执行:这份配置的「服务器命令权限」(见上面那一条)+ 那台机器上放行过的 ROOT 下发控制器(见「服务器·系统」标签的「命令通道」);那台机器没放行过,命令就发不出去,执行记录和运行日志都会点名说没放行、没下发,绝不会显示成「已执行」。「拨测判不通时」触发的那一条,随判定那一次上报的响应当场发给那台活跃机器。「定时」触发的那一条:到点之后,面板只是先记一条「该发了」,要等这份配置下活跃的机器下一次上报(一分钟以内)才真正把命令发下去;如果这份配置是「多活」模式,到点后每一台活跃且已经在机器上放行过的机器都会各自领到一次;如果是「心跳」或「外部补机」模式(同一时刻只有一台算活跃),就只有那一台执行。等了 30 分钟还没有活跃且已放行的机器来取,这条命令就作废——这 30 分钟是上限,如果在这之前又到了下一个定时时刻,就到那一刻为止(两者以先到的为准:「每隔 5 分钟」这种规则的实际有效期就是 5 分钟,不是 30 分钟),新的会直接顶掉旧的,旧的记一条「被顶掉」。同一分钟好几条定时服务器命令都到点:同一次上报一起发下去,按清单顺序一条接一条执行。⚠️ Cloudflare Worker 部署下,「每台活跃机器各领到一次」只能做到「绝大多数情况下一次」:判重记在我们的 KV 上,而 KV 不保证马上读得到自己刚写的那一笔(最长约 1 分钟),机器又正好是每 60 秒上报一次,两次读卡在这个边界上时,同一条定时命令会在同一台机器上多跑一遍。所以请把定时命令写成幂等的(跑两遍和跑一遍结果一样,例如 systemctl restart 而不是「往文件里追加一行」);规则之间也没有冷却,几条规则指向同一条命令时,它同样会被先后各执行一次。自建部署没有这个 KV 的问题。⚠️ 在机器上「放行」和「收回」这道闸的规矩完全不变:必须有人登上那台机器亲手执行一条命令,控制面自己做不到,也不会替你代劳,详见「服务器·系统」标签的「命令通道」。
  • 执行记录(「日志」→「自动化执行记录」) 编辑器里每条规则那一行只留一句「上次执行」和一个「查看记录」链接;完整的记录在这份配置「日志」弹窗里「自动化执行记录」那个页签(和「运行日志」并排)。一行 = 时间 / 规则 / 条件 → 动作 / 结果;点行首的 ▸ 展开,看这一轮的原话(为什么动手、为什么没动手:证据还在攒 / 比例没到 / 冷却中 / 权限未开启 / 机器没放行……)、到点标记和执行的机器。能按规则筛、能翻页;最多留 300 行,按规则轮流留,一条规则记得再多也挤不掉别的规则的记录。结果有变化才记一行(真的动了手——命令下发了、HTTP 请求真发出去了——每一次都记),所以「证据还在攒」连着好几天也只有一行:筛到某一条规则时,页签顶部写着「自 <时间> 起一直如此:<结果>」,那个时间就是这个状态开始的那一刻。编辑器里点某条规则的「查看记录」,会直接打开这个页签并筛好这一条。删掉一条规则,它的历史记录照样留着、印着当时的名字、旁边标「规则已删除」,筛选下拉里也还选得到它;删掉整份配置,执行记录一起删。执行记录是运行时数据,不在备份里。「运行日志」里也会记一句的,只有要你留意的那几种,分两处写:机器上报那一刻(心跳)——拨测条件真的动了手(命令下发了 / HTTP 请求发出去了)、定时服务器命令被机器领走、出错、作废、没放行、台账装不下而停手、HTTP 共用预算用完挪到下一轮,这几句结尾写着「(详情见「自动化执行记录」)」;控制面每分钟那一轮(定时)——到点的命令过期没人来取、被下一个时刻顶掉、规则关掉或改掉之后收回、漏拍、没设时区、定时的 HTTP 动作发失败,这几句点名「自动化「规则名」」,不带那个结尾(定时这一轮自己出错、没跑起来,也会记一句)。⚠ 定时规则的本机 HTTP 动作发出去而且成功了,只记在执行记录里,运行日志里没有这一句;证据还在攒、比例没到、冷却中、服务器命令权限没开这几种也只在执行记录里。
已对接服务器5 条
  • 怎么出现的 配置对应的机器执行开机命令后,Agent 上报即自动出现在这里,不需要手动添加。
  • 状态判定 在线 → 疑似掉线 → 离线,三档时间阈值(在线判定超时 / 离线判定小时)在「全局设置」里配置,只影响状态显示,不影响实际写入逻辑。
  • 角色 活跃写入(当前 active,会被写进 DDNS / GTM)/备用只记录/已被替换/多活有效(多活模式下所有在线机器都算有效)。
  • SSH 面板 配置里开了「root SSH 密码托管」的机器,这里能看公网 IP / SSH 用户 / 密码(可切换显隐)/ 一键复制 SSH 命令或密码。
  • 清理离线 「清理离线」按钮一键清理所有非在线记录(在线的不会被删)。⚠ 这是唯一真正把机器记录从存储里删掉的动作:「全局设置 → 自动清理」里那个天数只负责把超期的机器从列表里隐藏起来,它们不会自己消失。
模板4 条
  • 两种类型 全量模板(「全量所有选项」:保存「接管模式」「root SSH」「网页终端」「允许推送 Agent 更新」「内置 DDNS」「阿里云 GTM」「自动化」「Nyanpass」「BBR」这几档);单模块模板(只保存一个模块:「root SSH」「网页终端」「允许推送 Agent 更新」「内置 DDNS」「阿里云 GTM」「自动化」「Nyanpass」「BBR」里挑一个)。配置的名字、分组、是否启用、「服务器命令权限」这类「这份配置自己的决定」和运行状态不进模板。
  • 怎么存 在配置编辑器里,每个模块小节旁边都有「存为模板」按钮,直接把当前填写内容另存;「基础」标签顶上那个「存为模板」存全量;也可以在「模板」页新建 / 编辑(模板页画的字段就是配置编辑器里那一批)。
  • 怎么用 新建或编辑配置时,在「基础」标签顶上选一个模板点「应用模板」(全量模板套整套,单模块模板只覆盖那一个模块,其余模块不受影响)。套进来的只是编辑器里的草稿,点「保存」才算数(每个模块都一样)。「自动化」这类清单套用 = 整张替换,原有的哪几条没了会当场点名。
  • 旧模板 以前版本存下、这一版已经不认识的模板(旧格式 / 已经删掉的模块)照样列在「模板」页,类型那一栏标着「旧格式,只能删除」或「不认识,只能删除」(鼠标停上去看原因):它们不能编辑、不能套用,删掉之后按新的样子重建即可。
GTM7 节
GTM · 健康模板3 条

GTM 独立于开机配置,是「候选地址 → 健康检查 → 打包 → 策略 → 一条域名解析」的完整流水线,共 4 个标签:实例 / 健康模板 / 地址 / 地址池。

  • 是什么 一次 TCP 探测的定义:端口、尝试次数、重试间隔(秒)、用哪些拨测节点。定义一次,可以被多个「地址」复用。
  • 默认 新建 GTM 实例自带一个「TCP 22」健康模板,也可以在「GTM → 健康模板」标签单独新增/编辑,供多个地址共用。
  • 达标比例(默认 50%) 本轮真正给出了结论的拨测节点里,测通的占比达到这个比例才算健康。⚠️ 分母不是「这个模板配置了几个节点」,而是「这一轮真正给出了结论的节点」——掉线、超期、探测器自己不可用的节点不进分母,所以一个坏掉的节点不会把一个活着的地址拖到阈值以下判死。另外多节点模板有防抖:要有两条说不通的上报才允许判死,一条反对票只能待定。
GTM · 地址5 条
  • 是什么 候选 IP / 域名的来源,加上「用哪个健康模板探测它」。三种来源模式:自定义 IP(手填一批 IP)、域名(手填一批域名)、引用配置在线 IP(取某个开机配置当前的在线 IP)。
  • 「域名」这一档到底写出去什么 写出去的就是这个域名本身,作为 CNAME 记录 —— 控制面不会先把它解析成 IP 再写 A 记录。健康探测打的也是这个域名,所以「本机自带测活节点」测不了它(那个节点只能拨测公网 IP 字面量),要用自建 Agent / Globalping / HTTP 接口节点。另外 DNS 不允许同名混用 A 和 CNAME:同一条记录下 IP 和域名混在一起时,写入会丢弃其中一类并在运行历史里明确报出来,请把它们拆到不同的地址池。
  • 被引用的那份开机配置停用 / 删除了会怎样 「引用配置在线 IP」取的是那份配置下当前在线机器的 IP。把那份配置停用(或者干脆删掉),它就一个 IP 都不再贡献,这个地址算出来是空的。⚠️ 但「算出来是空」不等于「把解析摘掉」:算成空集的那条线路,写入分支在碰到解析商之前就短路了——控制面对阿里云 / Cloudflare 一个请求都不发,那条记录上原来是什么值就还是什么值,原样冻在那儿。所以评估层看到的是「空」,DNS 那一层看到的是「旧值不动」,地址不会被摘掉;客户的域名会继续解析到停用之前那一批 IP,一直到你自己动手改掉它为止。这是有意的,不是漏了:算出空集意味着我们此刻什么都不知道(拨测节点集体挂掉时正好就是这个状态),把空集写下去等于把这个域名的解析删光,比不动它严重得多。⚠️ 去哪儿能看出来:停用 / 删除的那一页不会有任何提示,唯一说出这件事的地方是这条地址所属的 GTM 实例——实例列表的「最近结果」那一列(以及「运行历史」)会写「GTM本次计算结果为空,保留上次输出避免误删(需要清理请用「移除本实例的所有DNS记录」):[还挂在那儿的那批值]」。它只说「为空」,不会点名是哪份配置停了,所以停用或删除一份被 GTM 引用的配置之后,请自己回到那个实例上看一眼这句话在不在、方括号里挂着的是不是你还想让客户解析到的那批 IP。想真正改掉有三条路,按后果从轻到重:① 把那份配置重新启用(或者让它下面重新有机器在线),下一轮算出非空就正常写回去;② 不想再要这条来源,就到「GTM · 地址」把这个地址改成别的来源、或者把它从地址池里摘掉、再不然给这条线路留一个不参与的兜底地址,让这条线路算得出非空值;③ 确实要把这条记录清干净,到 GTM 实例上点「移除本实例的所有 DNS 记录」——那是唯一一条会真的去删解析的路。⚠️ 分线路时是逐条线路判的:这条线路算空就只冻这一条,同一个实例下其它算得出值的线路照常写。
  • 手动状态 自动(按健康模板探测结果判定)/强制在线/强制离线,用于临时摘除或强推某个地址,不用等探测周期。
  • 权重 / 优先级 同一个地址池内,多个地址按池内策略(轮询 / 权重 / 顺序)从这里取值参与计算。⚠️ 最终生效的权重是「这个地址在某个地址池里」的成员设置:地址自己那份只是默认值,池内成员权重会盖在它上面——所以同一个地址被两个池引用时,可以在两个池里各有各的权重。
GTM · 地址池2 条
  • 是什么 把若干「地址」打包成一个池,池内按策略(轮询 / 权重 / 顺序)选值;「最小可用数」决定这个池要凑够多少个健康地址才判定为整体可用。
  • 服务线路 分线路解析时,给每个池指定它负责哪些运营商线路(默认 / 电信 / 联通 / 移动 / 教育网 / 境外……);没配线路的池在分线路模式下不会输出到任何线路。线路只能从各家的线路表里选:阿里云、Cloudflare 的表是全的,表外的线路码保存时直接拒绝;华为云、腾讯云 DNSPod 的表不完整,可以直接输入表里没有的线路码,但华为的要以大写字母开头、腾讯的要以数字开头,只能含字母、数字和 _ = -(用 API 写也是同一条规则,不合格回 400)。
GTM · 分线路解析(首匹配)7 条

按运营商 / 地域配置不同的解析结果——电信用户查到电信线路的结果、联通用户查到联通线路的结果。一句话版本:按地址池的排列顺序、逐条线路首匹配,匹配到但不够健康就顺延到下一个,「默认」线路永远兜底。

  • 仅阿里云 DNS 支持 分线路解析仅阿里云 DNS 支持。Cloudflare 走的是另一条路:要靠 Cloudflare 负载均衡,而且非 Enterprise 套餐下按地域分流还需要额外加购 Traffic Steering,否则只提供「顺序兜底」和「权重」两种调度。
  • ① 地址池是有序的 一个实例引用的地址池按序号排成一个有序列表,面板里可以用 ↑↓ 调整顺序。这个顺序就是下面「首匹配」的查找顺序。
  • ② 一个池可以同时服务多条线路 「这个池在这个实例里服务哪些线路」是「实例 ↔ 地址池」这层引用关系的属性,不是地址池自己的属性——同一个池在另一个实例里可以服务另一组线路。
  • ③ 首匹配 对每一条目标线路,系统按地址池的排列顺序从上到下找:找到第一个「配置为服务这条线路(或配置为『默认』兜底)」并且「健康成员数达到最少可用数」的地址池,就用它的输出——排在它之后的池哪怕更健康也不会再被看。
  • ④ 不够健康就顺延 排在前面的池匹配了这条线路但健康成员不够,就跳过它,继续往后找下一个匹配这条线路的池——这就是分线路场景下的健康故障转移。地址池被排班停用时同样跳过、顺延到下一个。
  • ⑤ 「默认」永远兜底 没有被任何具体线路覆盖到的访客,查到的是「默认」这条线路的结果。强烈建议在地址池列表里放一个服务「默认(全部)」的池垫底,否则冷门线路的访客可能什么都查不到。
  • 池内部也是一样的规则 如果一个地址池自己的策略被设成「分线路解析」,它会对自己的成员地址做一次同样逻辑的嵌套匹配。
GTM · 排班(按时间自动停用)8 条

地址和地址池都能设「排班」:到点自动停用、过了自动回来,不用人守着。它和健康检查是两层独立的闸门——排班放行不代表健康,健康好也挡不住排班;一个地址真正进解析,两层都得过。

  • 停用时段 / 启用时段,二选一 停用时段(默认):列出来的时段关,其余时间开,适合「每天凌晨 2-5 点维护」。启用时段:列出来的时段开,其余时间全关,适合「只在 9:00-18:00 提供服务」。⚠️ 同一组时间在两种模式下含义正好相反(「08:00-09:00 停用」= 一天关 1 小时;「仅在 08:00-09:00 启用」= 一天关 23 小时),所以切换模式时面板会弹确认并告诉你切换后每天会关多少小时。选了「启用时段」却一个时段都不填 = 任何时候都不启用,保存会被拒绝,不会把它悄悄关光。
  • 每天重复 / 按星期几 默认「每天重复」,整个星期列都不出现,不用勾任何星期。切到「按星期几」后,星期几是跟着每一行时段走的,不是整条规则共用一组星期——所以「周一 08:00-09:00、周二 13:00-14:00」写得出来:加两行、各勾各的天;同一天也可以有好几行。⚠️ 「按星期几」模式下每一行都必须至少勾一天,一天都不勾的那一行什么都不做,保存时会点名是第几行并报错。
  • 时间窗怎么算 半开区间:设 08:00 至 09:00 = 08:00 起停用、09:00 整自动恢复。结束时间比开始时间小 = 跨午夜(23:00 至 01:00 = 今晚 23:00 到明早 01:00),跨午夜的时段锚定在它开始的那一天(勾「周一」+ 23:00 至 01:00 = 周一晚 23:00 到周二凌晨 01:00)。停一整天写 00:00 至 24:00。一条规则最多 24 行。
  • 时区挂在 GTM 实例上 一个实例只能有一个时区,在实例编辑里设,这个实例下所有地址/地址池的排班都按它算。⚠️ 实例没设时区 = 这条排班完全不生效(不会拿浏览器时区或 UTC 去兜底——不知道你说的「8 点」是哪儿的 8 点,系统不会猜),面板会红字说明并给一个「去实例设置时区」的入口。只能选 Asia/Shanghai 这种地区名,不收 +08:00 这种固定偏移(它不含夏令时规则,一到切换日整体错一小时)。
  • 设了排班的资源不许被不同时区的实例共用 地址和地址池是独立资源、按 id 被多个实例引用,而时区挂在实例上——同一个池在上海实例里正被停用、在伦敦实例里同一时刻可能正启用,面板不可能同时显示两种状态。所以保存时会拦下来,并点名是哪个资源、被哪几个实例用了哪几个时区。处置办法:把资源复制一份,两边各用各的(复制出来的是独立资源,改一份不会动到另一份)。没设排班的资源完全不受这条限制。
  • 保存前会先演一遍,防止把某条线路排空 保存排班(以及调整地址池顺序)时,系统会把未来 7 天按分钟演一遍——7 天而不是 1 天,是为了让「只在周一停」这种排班在任何一天保存都能被检查到。如果这套排班会让某条线路在某一刻一个可用地址都不剩,保存会被拒绝,并告诉你是哪条线路、哪个时间段(带星期几)、被哪几个地址/地址池同时停掉的。处置办法通常是给这条线路留一个不参与排班的兜底资源,或者把几个停用时段错开。⚠️ 这个检查只管排班,不预测健康检查——健康那一层挂掉仍按原来的故障转移规则走。
  • 停用之后长什么样 列表里「排班」和「健康」是分开的两列:被排班停的显示「排班停用中」(橙色),被健康检查判死的显示「不健康」(红色),查问题时一眼知道该看哪边。地址池被排班停用时,分线路解析会跳过这个池、顺延到下一个匹配这条线路的池(最后落到「默认」兜底),不是把这条线路变成没有解析结果。
  • 精度 分钟级。同步每分钟跑一轮,实际生效落在整分之后的 0~59 秒内,不承诺秒级。
GTM · 实例8 条
  • 是什么 选若干「地址池」+ 一套策略,输出到 AliDNS 或 Cloudflare 上的一条域名;新实例只需要在「地址池」标签勾选池、在「策略」标签定策略、在「输出」标签选服务商 / 域名。
  • 负载策略 轮询 / 权重 / 顺序 / 分线路解析(仅阿里云 DNS 支持,按运营商线路各解析各的池;Cloudflare 不支持分线路解析)。
  • 策略标签(非分线路) 选中的地址池一起生效,怎么一起生效由负载策略决定:轮询 / 权重是所有健康的池同时出结果;「顺序」是只用排在最前面的那个健康池,它整个不可用时自动顺延到下一个 —— 这就是主备切换,主备两台写成上下两行即可,两个以上也照样排得下,没有单独的「主备模式」开关。要按运营商线路分别解析,要去「地址池」标签给每个池配服务线路,不是在这个标签配。
  • 实时性 外部拨测节点上报结果会立即重算并改解析(实时);只用内置探测时最坏约 1 分钟(cron 巡检)才发现变化。
  • 预览(dry-run) 点「预览」按当前健康探测结果试算将写入的 DNS 记录,不会真正写入;确认无误后再点「立即运行」,也可以直接在预览弹窗里确认运行。
  • 清空(drain) 点「清空」会强制按本次计算结果覆盖 DNS(即便结果为空),用于清理陈旧解析记录;这是唯一会主动写入「空结果」的操作,请谨慎点击。
  • 兜底行为(不会误清空) 健康模板被删除 / 禁用导致地址探测不到结果时,保留上次已知解析,不会误判成「全部健康」而写入源 IP;实例计算结果为空但之前有输出时,同样保留上次输出,不会误删已有解析记录。
  • 旧结构提示 早期实例把地址 / 池直接内嵌在实例里(旧「内嵌」结构);编辑这类实例时面板会提示可一键「拆分到资源库并改为引用」,拆完就能像新实例一样只在「地址池」标签勾选。
健康检查与故障切换:两套探测机制4 条

产品里有两套各自独立的探测机制,共享同一个「拨测节点区」资源池,但服务的下游完全不同。查问题时先分清是哪一套在说话。

  • GTM 健康模板 决定「一个地址算不算健康」,进而决定 GTM 实例最终输出的解析。实例策略选「顺序」时就是主备语义:主用的挂了,自动顶上备用的。细节见「GTM · 健康模板」。
  • 配置里「自动化」的「拨测判不通时」条件 决定的是「这台机器是不是不可达、要不要触发这条规则自己的动作」,不参与 GTM 的健康判定。拨测节点和 GTM 健康模板是同一批,「达标比例」「过期结果不算数」这两条口径也一样,但判定规则从 2026-08-26 起就已经分开了,2026-09-22 起「自动化」里每一条「拨测判不通时」规则又各自带一份独立判据,别再当成一回事:健康模板改的是解析(可逆、有池兜底),这些规则触发的是本机 HTTP 动作 / 服务器命令(在你的机器上以 root 跑一条命令),所以这里另外多了三道 GTM 那边没有的闸——每条证据要连测「复测次数」那么多次才算数、说「不通」的占比要达到另一个独立的「动作阈值」(默认 100%,GTM 那边只有一个达标比例)、只选一个拨测节点时第二条证据必须来自下一轮。⚠️ 拨测判不通时不再影响解析写入,容灾由 GTM 健康检查负责。判不出来(结果没到齐 / 配置坏了)时一律不动作,见「配置与脚本 · 解析·故障切换标签」里「条件 · 拨测判不通时」那一条。
  • 兜底:不会误判成全部健康,也不会误删已有解析 找不到健康结果时保留上次已知解析,不会误判成「全部健康」写入源 IP;实例计算结果为空但之前有输出时,同样保留上次输出。唯一会主动写入「空结果」的是手动点「清空(drain)」。
  • 多快能切过去 自建 Agent 型拨测节点一回传结果,控制面当场重算受影响的实例并改解析;其余几种跟着巡检走,最坏约 1 分钟。真正到访客那边还要再加上 DNS 记录 TTL 的生效时间——所以产品不承诺零停机,见「如实告诉你:这几件事目前做不到」。
凭证与拨测节点2 节
凭证区6 条
  • 当前支持的类型 只有两种:阿里云 AccessKey(AccessKey ID + Secret)、Cloudflare DNS(API Token)。旧版本的「动作 / HTTP 接口」凭证类型已下线——外部测活现在统一由「拨测节点区」负责,不再挂在凭证区下面。
  • Cloudflare 为什么只收 API Token 账号级的「邮箱 + Global API Key」是一把钥匙开整个 Cloudflare 账号的全部权限(DNS、账单、域名转移都在内),一旦泄漏没有中间地带,Cloudflare 官方也已计划弃用它,所以这里不再提供这种鉴权方式。API Token 相反:可以只授一个站点、只授 DNS 编辑,能单独吊销、能设有效期,对你是更安全的一侧,不是少了个选项。
  • API Token 去哪儿建、要勾什么权限 Cloudflare 控制台 →「我的个人资料 / My Profile」→「API 令牌 / API Tokens」→「创建令牌 / Create Token」,选「编辑区域 DNS / Edit zone DNS」模板,把「区域资源 / Zone Resources」限定到你要用的域名。若还要用 Cloudflare 负载均衡(分线路),再额外勾上账号级「Load Balancing: Monitors and Pools Write」和该站点的「Load Balancers Write」。
  • 谁在用凭证 内置 DDNS、GTM 实例(阿里云 / Cloudflare 输出)、配置里的「阿里云 GTM」模块,都是选凭证 ID 引用,不会各自另存一份密钥。
  • 安全存储 密钥加密存储;列表和摘要只显示掩码(如 AK 前后各 4 位),修改时才需要重新输入完整值。
  • 删除影响 删除凭证后,已引用它的配置 / GTM 实例会失去这个引用,需要重新选择,请谨慎操作。
拨测节点区13 条
  • 用途 统一维护所有「测活」来源,供配置里「自动化」的「拨测判不通时」「HTTP 拨测判不通时」条件和「GTM 健康模板」共同复用,改一处、各处都生效(「HTTP 拨测判不通时」只用自建 Agent 节点)。
  • 自建 Agent 节点 · 脚本版本与更新 自建 Agent 拨测节点每一轮交结果时会报上自己装的脚本版本。2026-09-23 起脚本认「HTTP 拨测判不通时」的 HTTP 任务;之前装的节点是旧脚本:控制面一条 HTTP 任务都不派给它,它在那些规则里算弃权(不算「不通」),配置编辑器的节点多选里它带「旧脚本」标签。更新办法:在这一页复制那台节点的安装命令,到那台机器上重跑一次(节点、令牌、TCP 拨测都不受影响);它下一次交结果之后的那一轮起就开始接 HTTP 任务。还没报到过的新节点不算旧脚本(一装就是最新那一份)。
  • 自建 Agent 节点 · 一轮排不下时(「最近结果」怎么念) 自建 Agent 拨测节点每分钟跑一轮、一条一条串行拨:一轮最多领 80 条任务,最多串行拨 45 秒。只有上一轮就不通的目标才按「复测次数 × 超时 + 两次之间的等待」记时长(通的、从没测过的一次连接就回来,不记);排不下时先把两次复测之间的等待缩到下限(「拨测判不通时」「HTTP 拨测判不通时」缩到 3 秒,GTM 健康检查缩到 0 秒),还排不下这一轮就先不发它。时长怎么分:「拨测判不通时 / HTTP 拨测判不通时」这一类和「GTM 健康检查」这一类当轮都有不通的目标时,GTM 健康检查先保住它半轮里要用的那部分(谁都不许占:GTM 缺一轮结果,整个实例就冻在上一次的解析、故障转移不动作),剩下的都给另一类,另一类用剩的再还给 GTM;只有一类有,它用满整轮。同一条任务连着 2 轮因为时长没发,下一轮排在它那一类的最前面先发:GTM 健康检查整轮先发,「拨测判不通时」那一类只用 GTM 用剩下的时长——所以复测次数填得多(一条要占大半轮)的拨测,要等 GTM 这一轮没有不通的目标要重拨时才发得出去;一台节点上不通的 GTM 地址多到每一轮都要重拨时,它们会一直让路。没发完时,这台节点的「最近结果」会分开说是「条数到了单轮上限 80 条」(下一轮自然补上)还是「串行时长排满」(上一轮不通的目标太多),并点名是哪一种任务(Agent TCP 拨测 / Agent HTTP 拨测 / GTM 健康检查);经常排满就再加一台拨测节点分担。
  • 自建 Agent 节点 · 自检(「节点自身异常」标签) 2026-09-29 起的节点脚本(第 3 代)每一轮先用拨目标的同一种办法连一次控制面自己,而且按目标的地址族分开连:这一轮有 IPv4 目标(含 GTM 健康检查的 IPv4 地址)就连控制面的 IPv4 地址;有 IPv6 目标就连控制面的 IPv6 地址(控制面没有 IPv6 地址时,IPv6 目标看 IPv4 那一道);有域名目标就按域名连控制面(和拨域名目标一样先解析、先试 IPv6);有 HTTP 拨测任务就用同一组请求参数请求控制面一次。刚刚领任务那一趟已经证明控制面是活的,这样还连不上,说明坏的是这台节点(常见:只能经代理出网、出网被防火墙拦、IPv6 地址给了却没放通、代理或证书只配在 ~/.curlrc 里),不是目标——只有那一族 / 那一类目标这一轮整体算弃权(不算「不通」,不会推动作)。比如节点的 IPv6 路由在但不通:IPv6 目标和域名目标弃权,IPv4 目标和 GTM 的 IPv4 健康检查照常拨、照常投票。拨测节点列表里这台节点挂红色「节点自身异常」标签,悬停说明是哪一类坏了、怎么修;条件和 GTM 健康模板的节点下拉只在这一类用得到的那几道坏了时才挂(只坏了 HTTP 的节点在 TCP 条件里不挂);修好后下一轮自检通过就自动消失,两小时没再自检过的旧结论也不再挂。几道参照同时连(TCP 3 秒、HTTP 5 秒超时,连同查地址一轮最多约 6 秒),不占上面那 45 秒的任务时长。查不出来的两种(这一类照收「不通」,靠多台节点一起投票兜底):一是这台机器的防火墙恰好只放行控制面——其余出网全丢,连控制面照样通;二是控制面地址写的是 IP(不是域名)或走不加密的 http(自己部署的面板常见)——按域名连控制面那一道根本不解析域名,DNS 坏了查不出来(这一道干脆不做);HTTP 那一道只用控制面自己那一种协议和端口,控制面走 http 时缺根证书、https 出网被封都查不出来(反过来控制面走 https 时,http 目标走的 80 端口被封也查不出来)。之前装的节点不自检(行为与从前一样),重跑一次安装命令就有。
  • 内置节点 共三个:本机自带节点 + 两个 Globalping 预设节点(国内 / 境外),默认存在,不能删除、不能修改(列表里标「内置」;通过接口原样回存或删除会被拒绝,并说明是哪一个),也不占授权的拨测节点名额。
  • ⚠️ 自建部署上「本机自带节点」用不了 本机自带测活节点唯一的实现手段是 Cloudflare Worker 才有的 socket 接口,自建 / 二进制部署(也就是这台机器)上它永远给不出结论。健康模板里只挂它 = 健康判定永远判不出「不健康」= 故障切换形同虚设。系统不会静默吞掉这件事:它会作为「配置错误」在实例上明确报出来,请把这类模板里的节点换成自建 Agent 型节点。
  • 四种可配置类型 自建 Agent(部署在你自己的机器上,主动拉取任务并回传结果);Globalping(第三方多地探测网络,可指定 Location / 节点数 / 每节点包数);HTTP 接口(自定义 URL + 方法 + Headers/Body,Worker 直接调用);阿里云站点监控(付费,见下方单独一条)。
  • 安装 / 回传方式 只有「自建 Agent」节点需要复制安装命令到目标机器执行;它每分钟拉取一次任务并回传结果。本机自带节点、Globalping、HTTP 接口、阿里云站点监控都由 Worker 即时发起调用,不需要安装。
  • 实时性 只有「自建 Agent」是把结果推回来的:它一回传结果,控制面当场重算受影响的 GTM 实例并改解析,不用等下一轮巡检。其余几种(本机自带 / Globalping / HTTP 接口 / 阿里云站点监控)都是由控制面在巡检那一轮里现去调用或现去取结果,所以最快也是跟着巡检走,最坏约 1 分钟。
  • 阿里云站点监控(付费,会花真金白银) 第三方视角的按次计费拨测,最快 1 分钟一次(默认 5 分钟,频率越高账单越高)。新建时必须选一个阿里云凭证 + 至少一个探测点(拉取探测点列表本身免费);一个探测点都不选就不会建任何任务,也不会产生费用。批量启用这类节点、或单个节点预计月开销上涨超过阈值时,保存前会弹确认框把预计花费说清楚。
  • 阿里云站点监控 · 计费与限制 按量计费没有免费额度(开通动作免费,第一次探测就开始算钱),也没有满一万次才计费的进位规则。单价按运营商 + 地域档位分档(移动端探测点比固网贵 36 倍),价格写死在程序里、阿里云调价不通知也不会自动更新——本页顶部「当前月开销」卡片只在存在这类节点时出现,展示的是按当前真实任务条数算出的估算金额,标注了取价日期与官网核对链接,实际花费以阿里云账单为准。任务条数和探测点数都没有上限,系统不会替你砍掉超出的部分——砍掉会让你在不知情的情况下失去故障切换,所以改成只把开销显示清楚。
  • 阿里云站点监控 · 只挂它会怎样 健康模板里可以只挂阿里云站点监控,系统不拦你,但保存时会提示一次风险:它是付费的、有采集延迟,一旦欠费、被限流或阿里云侧延迟,这个模板下的地址会集体失去健康依据、停在「待拨测」;而 GTM 实例在有待拨测地址时不会改动解析——表现出来就是解析悄悄不再更新,而且哪儿都不报错。建议再搭一个自建 Agent 或内置节点兜底,搭了之后这条提示就不再出现。
  • 阿里云站点监控 · AccessKey 权限建议 强烈建议单独建一把最小权限 AccessKey,不要用管 DNS 的那把:在 RAM 里新建一个用户,只授一条自定义策略(Action 仅 cms:CreateSiteMonitor、cms:ModifySiteMonitor、cms:DeleteSiteMonitors、cms:DescribeSiteMonitor*,Resource 可先用 *)。这样万一这把 key 泄漏,对方也只能动站点监控任务,动不了你的解析记录。
全局设置2 节
全局设置19 条

这一页按标签页分开:「账号与访问」改管理员账号和面板路径,「常规」是对所有配置生效的那几项,「版本与更新」告诉你有没有新版本并给出升级命令,「备份与恢复」导出 / 导入整套配置,「操作审计」和「安全审计」是两份互不替代的记录。⚠「版本与更新」只在二进制安装的自建部署上出现——跑在 Cloudflare Worker 上、或者直接跑源码的那两种形态都不适用,连这个标签都不会画出来。

  • 管理员账号与访问路径 改用户名 / 密码、改面板访问路径都在这里,改之前页面会先提示后果:改密码后,其它设备上已登录的会话全部失效需要重新登录,当前这个窗口不受影响;改面板路径后旧地址立刻打不开(面板和全部管理接口一起搬家),保存时会二次确认,保存后自动跳到新地址,记得更新书签。面板路径出厂就是安装时随机生成的一串(不是固定的 /gtmag),忘了地址不要来猜——在服务器上用 --show-panel-path 查当前真正生效的路径(用法见 README,仅自建部署适用)。Agent 上报和拨测节点回连走的是固定接口,不跟着面板路径走,改路径不会让已装探针失联。
  • 登录多久没来就失效(天) 登录状态的「唯一」期限:连续这么多天没有任何操作,这条登录才失效;期间只要还在用(后台每 30 分钟自动续一次),就一直不用重新输密码——「每隔几天来一次就一直有效」说的就是它。出厂 30 天,可以填 1~365 天。⚠ 改这个数只对「之后」的登录和续期生效:已经登录的那些设备各自带着当初算好的期限,最多 30 分钟后(还在用的话)才换成新值;想让在外的登录立刻全部失效,用同一页的「退出所有设备」。⚠ 填得越长越省事,代价也要知道:万一某台电脑上的登录状态被别人拿到,它只要一直有活动就一直有效,而这个按钮(以及改密码)是把它收回来的唯一办法。
  • 会话安全 · 退出所有设备 怀疑面板登录状态被盗用时用这个按钮:一键让所有设备的登录立刻失效,需要重新输入用户名和密码。跟「改密码」不一样——改密码会保留你当前这个窗口不掉线,这个不会,⚠ 点下去之后你自己这个窗口也会被一起踢下线,需要重新登录一次。
  • Agent 回调基础 URL 开机 / 安装命令里 Agent 回连 Worker 使用的域名,留空则用面板自身域名;非 localhost 必须使用 HTTPS,否则保存会被拒绝。⚠ 已经装好的 Agent 不会跟着这一项换地址:它们每轮拿控制面报的地址和自己脚本里烧的那个比一下,不一样就在自己的日志里说一句、并在面板上报一次「对不上」,地址一个字都不改(从前是自动改写自己那一行,那条路 2026-08-22 已经堵掉——控制面一句响应就能让客户机器每分钟以 root 执行一段我们说了算的字符串)。所以改完这一项:新装的机器立刻用新地址;已经装好的机器要换,得登上那台机器重跑一次安装命令。新地址必须是这台控制面真实可达的域名——填成一个解析不到或证书不对的地址,新装的机器会连不上,已经装好的机器照旧连在老地址上。
  • 新建 GTM 实例的默认排班时区(「按时间自动停用」用) 只决定「新建 GTM 实例时预填哪个时区」,已经建好的实例一个都不受影响——时区是实例级的,要改某个实例去它自己的编辑弹窗里改。首次配置向导会自动采一次浏览器时区存进这里,之后只有在这里改才会覆盖它(不是每次登录或每次保存别的设置都顺手改一遍)。⚠ 这里空着不会让任何已有实例出问题:识别失败或者从老版本升级上来的机器可能是空的,手动选一个就行。
  • AG 对接域名白名单(可选开启,默认关) 限定「哪些域名算正经的 AG 对接地址」。⚠ 它不是门禁,一台机器都不会被挡在门外:不在名单里的机器和拨测节点照样连得通、照样在面板上显示为在线,被扣下的只是那一轮上报「算不算数」——不下发命令、不换发本机凭据、不采信它报的新 IP、不改任何解析;拨测节点那一侧则是这一轮不发任务、不收结果。它只挡「进来」,永远不挡「已经在里面的」:一台已经被采信过的机器就算被拦,它在解析里的位置也一个字都不会变(所以反向代理哪天不透传 Host 了,客户的解析不会因此塌掉,只会停止跟着新 IP 更新,并且在「已对接服务器」页上全体红标)。关着 = 一个都不拦;开着但名单是空的 = 也一个都不拦,这样「先打开开关、再去填名单」的中间那一段不会伤到人(面板会把这一档显示成警告,不是绿灯)。会把正在上报的机器判成「不在名单里」的那一套名单存不进来,保存时会当面点名是哪几台、用的哪个域名,并给一个「把它们一并加进名单」的按钮。判据是反向代理透传进来的 Host 头(nginx:proxy_set_header Host $host;),而 Host 头终究是请求方给的 ——🔴 这是一层纵深防御和一个可观测性开关,不是认证边界,真正的边界永远是入网凭据。现在都有哪些域名在往这儿连、其中哪些被拦着,看「已对接服务器」页顶上那张「已对接域名」卡片。
  • 在线判定超时(分钟) 超过该时间未上报,服务器从在线变为疑似掉线;只影响状态显示,取值范围 1-1440。
  • 离线判定(小时) 超过该时间未上报,服务器从疑似掉线变为离线,取值范围 1-8760。
  • 自动清理(天) 超过该时间未上报的机器,从「已对接服务器」列表里隐藏,不再显示、也不再进入 DDNS / GTM 的 IP 池;取值范围 1-3650。⚠ 隐藏不等于删除:那条记录仍然留在存储里(也仍然算进本月 KV 用量估算),真正把它删掉要在「已对接服务器」页点一次「清理离线」。把天数调大之后,先前被隐藏的机器会重新出现。
  • 补机接管(秒) 只给「保守心跳」接管模式使用:旧 active 超过该时间未上报,新机器才接管;外部补机模式不等待此项,取值范围 30-3600。
  • 版本与更新(只有二进制自建部署有这个标签页) 面板不替你升级任何东西:它只告诉你有没有新版本,并给出一段可以整块复制、在服务器上以 root 执行的命令,粘贴回车就完事,没有「立即升级」按钮,也不需要盯进度条。那段命令会先把新版本和签名清单下载到服务器上,再用你机器上现在这个程序验一遍签名和校验和,验不过就一个文件都不动;旧版本会留在机器上,需要时可以换回去。整个过程只有一次重启(几秒),⚠ 已下发的域名解析记录一个字都不会变,停的只是那几秒的健康巡检。「当前版本」那个标签的颜色跟着「有没有依据」走:从来没问通过更新服务器时它会明说「说不了已是最新」并给一个「立即检查」,问通过但结论已经旧了会把结论的时间点摆出来,只有刚问通、结论新鲜才是绿的——一个无条件的绿色「已是最新」是最贵的一句假话。问不到更新服务器只会显示一行灰字,不弹红条:那种时候你的解析一秒都没停。🔴 唯一走红条的是「你这一版已被供应商撤回」——那不是「我们不知道」,是我们确实知道你这台有问题,请尽快按命令更新。更新通道默认是正式版;切到测试版会先把后果一条条摆给你确认,切过去之后卡片上一直挂着一条橙色提醒(不是点完就没的一句提示),随时可以一键切回正式版,切回来不需要任何确认。
  • 备份与恢复 导出:把凭证 / 拨测节点 / GTM 实例 / 配置 / 模板 / 全局设置整体导出为一份 JSON 备份;授权本身和运行时数据(已对接服务器)都不在范围内。⚠ 机密字段导出的是明文真值,不再是绑着这台机器 CREDENTIALS_SECRET 的密文——所以这份备份不绑任何一台机器,导到哪台机器都恢复得回来(「机器挂了、装一台新的、把备份导回去」这条灾备正路从前恰好是坏的,就坏在那把密钥上)。保护它的改成你自己记的那把口令。导出时二选一:「用口令加密」是默认也是推荐,口令要输两遍、至少 8 位(一个汉字 / 一个表情算 1 位);「明文导出」一选中,同一个框里就用红字把后果说全、按钮当场可点(不用再多勾一项确认),因为那份文件里是全部云厂商 API 密钥、机器 root 口令、Agent 与拨测节点令牌的原文,谁拿到这个文件谁就等于拿到这套系统和它管着的所有机器。🔴 口令只在你自己手里:我们不保存,服务端也没留任何副本,忘了就没有任何办法帮你恢复这份备份。请把口令单独记进密码管理器,别和备份文件放在同一个地方。⚠ 明文备份只能在面板上由人自己选中「明文导出」这一档再点导出,对外 API 令牌一律被拒(一次 GET 就把全部机密的原文交出去);加密那条路对令牌照旧开着,定时异地备份脚本带上口令就行。🔴 这一条不等于「这张令牌看不见机密、给谁都行」:口令是调用方自己挑的 —— 拿到这张令牌的人自己挑一个口令导出一份,就能用同一个口令解出全部云厂商密钥和 root 口令的原文。所以一张「导出备份」令牌等于这套系统的全部机密,务必给它设 IP 白名单、只放在那台拉备份的机器上;换机恢复之后令牌不在备份里,要重新建一张并把脚本里那张换掉,否则拉备份的脚本会一直拿到 404(本产品对令牌鉴权失败一律回那个统一的 404、从不回 401,见「⚠ 鉴权失败一律回 404」那一条 —— 别照 401 写告警,不然脚本坏了你也收不到)。导入:从备份文件恢复,按 id 覆盖(不是按名字:一条名字完全不同、id 相同的记录照样会被整条换掉),四类东西例外 —— 机器入网的钥匙谁签发得晚留谁(所以原地恢复不会把重装过的机器顶掉),阿里云站点监控台账只合并不删(免得我们在你云账号里建的付费任务变成没人认得的孤儿一直计费),配置里控制面自己记的运行状态(比如「我们正按排班停着你哪个地址」)本机有就留本机的,网页终端那三道全局防线只在这台面板还没设过时才照备份写、已经设过的一个字不动;另外吊销名单只进不出、分组名册按名字合并,导入只会让本机多东西、不会少东西。恢复确认框里会先写明这份备份是哪天导出的,并把原地恢复和换机恢复两种后果分开说;加密备份要在恢复时输入当初那把口令,输错和文件被改坏在密码学上是同一个失败、分不出来,所以提示里两种可能都会说。授权有数量限制时,导入还要再过一道限额检查:恢复后 GTM 实例 / 配置与脚本 / 凭证 / 拨测节点这四类的数量都不许比恢复前更多,卡住任何一类就整份备份一个字节都不会写入。换一台全新机器(当前一个都没有)去恢复一份超过授权额度的备份,会被直接拒绝并提示升级套餐——这种场景不做例外,本机自己原地恢复自己刚导出的那份备份不受这条限制影响。备份能有多大:恢复一次最多收 16 MiB,导出时会当场算好这一份恢复要传多少字节。⚠ 那 16 MiB 量的是「真正上传的那一份」,而加密备份的正文被 base64 稳定撑大 4/3,所以加密备份的可恢复容量只有上限的 3/4,也就是 12 MiB 明文配置——同一份配置「明文导得回去、加密导不回去」是真实存在的一格,明文那一份真碰上时会当场把这句话说给你。真超了会在导出那一刻就弹出来告诉你,并且只给对手上这一种备份成立的出路:明文备份可以先在面板上删掉用不到的配置 / 模板再导一次,或者把文件里的 entries 拆成几份分几次恢复(同名覆盖,索引每次都按实际存在的键重建,分几次的末态和一次导完一样;代价是「卡住任何一条就一个字节都不写」这条只在每一份内部成立,中途某一份被拒会停在半路);加密备份这两条都不成立——它顶层根本没有 entries、正文是一整块密文拆不开,而「回源机删一删再导一次」的前提是源机还活着,换机恢复恰恰是源机没了。⚠ 还有一种情况要认得出来:这台机器上有记录解不开(多半是 CREDENTIALS_SECRET 换过,或者轮换密钥时把旧密钥从密钥环里删早了),那份备份照样导得出来,但文件里会带上「这份备份不全」的说明和解不开的清单,下载的文件名也带 -incomplete,恢复它的时候回执会把这句话再念一遍。一条都解不开时整份中止、不产出备份——那时候给你一份空文件只会骗人。
  • 备份与恢复 · 备份里有什么、只到哪一刻 备份里有全部配置和三样删了就回不来的东西(机器入网凭据与吊销名单、计费周期流量账本、阿里云站点监控台账);机密字段怎么导、口令怎么管,见上一条。备份只到你点导出的那一刻,面板不会自己定时备份 —— 每次装完机器、吊销机器、改完配置,都再导出一份;想让机器替你定时拉,见下面「想定时留一份到异地」那一条。
  • 备份与恢复 · 哪些不在备份里 服务器的心跳状态(在线 / 指标 / 最近执行结果)等机器重新上报就有了;每份配置的「运行日志」和「自动化执行记录」是运行时记录,同样不在备份里。另外几样故意不进备份,换机恢复后要在新机器上自己弄:API 令牌(连同 IP 白名单,要重新创建 —— 免得已吊销的令牌靠一份旧备份复活)、管理员账号和面板地址(新机器用自己那一套,恢复不会把你锁在门外)、授权、以前的录像文件和终端历史。
  • 备份与恢复 · 网页终端这几项 每份配置的「网页终端」开关:恢复不碰它 —— 本机原来开着的还是开着,原来关着的还是关着,新机器上它本来就是关的、要用得自己回面板打开。那三道防线(全程录像 / 每次开终端要重新输管理员密码 / 会话时长上限)跟着备份走,但只在这台面板上还没设过的时候才照备份写;已经设过的一个字不动,恢复完会告诉你备份里是什么、要按备份改该怎么做(Cloudflare Worker 形态上没有网页终端,改不了)。换机恢复后要重新用上终端,顺序是:先打开对应配置的终端开关,再到各台机器上重跑一次终端组件的安装命令(新控制面的 keepalight.env 里要是写了 TERMINAL_ENABLED=false,先删掉那一行并重启)。
  • 备份与恢复 · 换机恢复后,哪些机器会连不上 导出之后新装的机器,以及导出之后在机器上手动重跑过安装命令(含手动升级 Agent)的机器,换机恢复后连不上 —— 等面板域名切过来、机器开始上报以后去「已对接服务器」页看一眼(那一页只列已经报到过的机器),那时还连不上的才到那台机器上重跑安装命令。面板推送的更新不换钥匙,不受影响;原地恢复也不受影响,钥匙是谁签发得晚留谁。导出之后才吊销的机器,换机恢复后会重新被认出来,要再吊销一次(原地恢复不会:吊销名单只进不出)。
  • 备份与恢复 · 想定时留一份到异地 在另一台机器上建一张只勾「导出备份」的 API 令牌,用它定时 GET https://<你的面板域名>/{面板路径}/api/export(管理接口全都挂在安装时随机生成的那段面板路径下面 —— 就是你现在浏览器地址栏里 /settings 前面那一截;照字面去打根路径上的 /api/export 只会拿到 404),口令放在 x-backup-passphrase 请求头里(口令里有中文或表情就改用 x-backup-passphrase-b64),拿到的就是同一份加密备份。⚠ 这张令牌等于这套系统的全部机密(为什么,见上面「备份与恢复」那一条:口令是调用方自己挑的,拿着它的人可以自己封一份、再自己解开)—— 一定要给它设 IP 白名单,而且只放在那台拉备份的机器上。⚠ 令牌不在备份里:换机恢复之后那张令牌在新面板上不存在,拉备份的脚本会一直拿到 404(从不回 401,所以别照 401 写告警),要重新建一张、把脚本里那张换掉,否则灾后反而没有新备份。
  • 操作审计 记录每一次成功的管理写操作(新增 / 修改 / 删除 / 运行等),用来追溯谁在什么时候改了什么;顶上有个搜索框,按操作、路径、谁干的现搜。「谁干的」那一列分得出是人还是程序:人是登录会话(会写成 session 加你的用户名),程序是一把 API 令牌(写成 token 加那把令牌的编号)——没有这一列的话,一行「保存GTM实例 200」看不出是你自己点的还是外部程序调的。⚠ 它只在本机保存最近若干条,旧的会被新的挤掉,所以别拿它当长期账本;真正要紧的那几类动作另有一份挤不掉的记录,见下一条。
  • 安全审计 只记高危动作(查看服务器登录口令、会以 root 执行的配置改动、导入备份、打开网页终端等),存在独立的按月分片里,不会像「操作审计」那样被大量普通写请求冲掉;顶上可以选看最近几个月。⚠ 面板上没有任何删除入口,这份记录只进不出。🔴 拿到权力的动作记不上账就不动手:万一这份审计写不进去(多半是存储不可写),查看服务器登录口令、导入备份、会以 root 执行的改动、打开网页终端这一类会被当场拒绝执行。收回权力或你自己止血的动作照做、只是这一条没记上(服务端日志里会报一声):吊销 API 令牌、导出备份、更换 Agent Token、「恢复后暂停」横幅上的「接管」和「这台不用了,别等它」等;终端会话结束、开终端被拒这两种事后记录也一样(会话本来就结束了 / 那次本来就没开)。所以看到「上次安全审计写入失败」那条红字:前一类那段时间根本没做成,后一类做成了但缺了记录——请去检查存储是不是还能写。
/health 探针(公开)3 条
  • 地址 Worker 域名下的 /health,公开访问,不需要登录。
    GET https://<你的Worker域名>/health
  • 用途 给外部监控(如 UptimeRobot、云厂商健康检查)确认控制面本身还活着;不反映某台服务器或某个 GTM 实例的健康状态——那些要看「已对接服务器」和「GTM 实例」页面。
  • 不登录时它答的是什么 只答「存储还能不能用」:读不出来、或者存储已经停止接受写入(自建/二进制形态的只读保护,通常是磁盘满、盘只读或掉盘),回 503;否则 200,正文永远是空的。⚠ 定时任务异常不会让这一份变红——它只回答活着没有。要看定时任务、密钥轮换、审计写入这些,得带着面板会话调同一个地址,那一份是完整 JSON,状态码跟着里面的 ok 走。
API 令牌1 节
API 令牌4 条

让你自己的程序直接调这套面板的接口:按权限项勾选,可选填 IP 白名单和有效期,随时可以单独吊销。没有「全权」这一档。

  • 明文只显示一次 ⚠ 令牌明文只在创建那一屏显示一次,关掉那一屏之后再也看不到——服务端只存哈希,我们自己也拿不回来。请当场复制到密码管理器或 CI 的机密变量里,弄丢了只能吊销重建,不能找回。
  • 调用域名必须匹配 令牌调用也必须走授权绑定的那个域名(和面板同一把锁,令牌不豁免):用服务器 IP、127.0.0.1、SSH 隧道或别的域名去调,一律返回和未知路径完全相同的 404——那不是「接口没了」,也不是令牌坏了。
  • 做不到的事 看机器 root 密码、导入备份、导出明文备份、保存一份会以 root 跑遍机群的配置——这几件事要求「有人坐在浏览器前」,令牌一律做不了,会被明确拒绝,请在面板里手工做。⚠ 只有明文那一档被拒:带口令的加密导出对令牌照旧开着(定时异地备份脚本走这一条)。🔴 但这不等于「令牌看不见机密」:那把口令是调用方自己挑的 —— 拿到这张令牌的人自己挑一个口令导出一份,就能用同一个口令解出全部云密钥、机器 root 口令和各种令牌的原文。一张「导出备份」令牌 = 这套系统的全部机密,请给它设 IP 白名单,并且只放在那台定时拉备份的机器上。
  • 吊销的传播延迟 自建 / 二进制部署吊销立刻生效;如果这套跑在 Cloudflare Worker 上,存储是最终一致的,最长可能有约 60 秒传播延迟。
授权与配额1 节
授权与购买10 条

授权对应的是自建部署的控制面本体——你自己一台服务器上跑的那个可执行文件。这一页管的就是它:还剩多少天、四类资源各用了几个、到期之后什么会被锁住、什么永远不会停。

  • 没有试用期 没激活授权 = 从装完第一分钟起配置就是只读的,不会先给一段免费试用期;装机时联网会自动用激活码完成激活解锁,不需要装完再手动走一遍。
  • 锁定只锁「改配置」 未授权 / 已过期 / 授权无效时,只有新增、修改、删除配置这类写操作会被拒绝。域名解析、健康检查、故障切换、Agent 上报、拨测回传、面板登录查看、导出备份都照常运行,不会中断——授权到期不是故障,只是欠费。
  • 没有宽限期 到期当天配置立刻变只读,没有「过期后还能再改几天」的缓冲;到期前 14 天面板会开始提示剩余天数,别等到最后一刻才续费。续费或重新激活后,面板立即恢复可编辑,不需要重启。
  • 四类数量限额 GTM 实例 / 配置与脚本 / 凭证 / 拨测节点,各自独立计数。某一类在授权里缺失该项、填了 null 或 0,都表示这一类不限量。内置的 本机自带拨测节点和 Globalping 预设节点不占拨测节点的名额。
  • 「满了」只挡新建 用量正好等于上限时,只有「再新建一个」会被拒;已经建好的照常改、照常删,解析和故障切换完全不受影响。
  • 「超了」会锁住这一类的「改」 降级套餐导致存量超过新上限时(用量 > 上限),这一整类资源的编辑会被暂时拒绝,直到你把它删回额度以内为止。存量不会被停用、不会被删除,解析和故障切换一秒都不停,锁的只是面板上的编辑动作。删除永远放行——那是唯一的恢复路径;删到用量等于上限(是「等于」就够,不用删到更少)这一类立刻自动解锁。拒绝提示会直接告诉你这一类现在几个、允许几个、还要删几个。四类各锁各的,GTM 实例超了不会连累凭证。
  • 激活方式 正常路径是装机时联网自动完成:安装脚本会把买到的激活码发给授权服务器换回一份签好名的授权文件,换回来之后校验都在本机完成,不需要一直联网,客户第一次打开面板通常已经是「已激活」状态。「授权与购买」页上仍然留着一个「换码 / 重新激活」的入口,用来处理换了新激活码(续费/换套餐买到新码)或者需要在这台机器上重新激活这两种情况。授权页会自动周期性联网复核一次(快到期或已过期时更频繁),取回续费后的新授权;复核失败不影响当前授权是否有效——授权文件自带签名和到期时间,联不上服务器不代表授权失效。⚠️ 在线激活拿到的其实是一张有效期 45 天的「租约票」:客户端会在租约到期前自动联网续签,每次成功续签换回一张「从此刻起 45 天」的新票,正常联网使用完全感觉不到这条规则;只有「连续 45 天一次都没联上」面板才会因为票过期而变成只读。面板上显示的「到期时间 / 剩余天数」一律说的是「订阅」,不是这张租约票。
  • 换机器 / 迁移 授权绑定的是「本机安装编号」(不是硬件或域名),换一台机器要在新机器上重新输入激活码完成迁移;如果检测到本机安装标识像是被重建过(比如手工删过部分数据后又恢复),重新激活会占用发证服务器上的一个安装名额,这种情况建议先联系供应商处理,不要自己反复重装重新激活。
  • 购买 / 续费 / 加购 面板里不下单、不收款——「授权与购买」页只给一个「前往购买页」的按钮,跳到我们自己域名的购买页完成域名归属验证与人机验证,买到后拿到一张激活码,回到面板「换码 / 重新激活」填进去即可。购买页地址由供应商在后台配置,没配置时按钮会灰掉并说明「购买页尚未配置」,不会出现一个点了 404 的按钮。
  • 出问题联系谁 授权到期、验签失败、账号被封禁……面板里几十处提示的落款都是「请联系供应商」,具体联系方式挂在左侧侧边栏底部(退出登录按钮上方),固定显示,不是只在出错那一刻才冒出来。这是供应商(分发者)装机时用 install.sh --support-contact= 写进服务器本地 keepalight.env 的一句话(邮箱 / 网址 / 群号都行),客户在面板里只能看,改不了。如果分发者当时没填,侧边栏会如实显示「未配置支持联系方式」——不会编一个打不开的邮箱地址糊弄人。