mistgate 文档
中文

在管理后台:可达性

可达性

能否从某个国家境内(默认俄罗斯)访问节点;「可达性」部分、它的三个来源(Globalping、封锁名单、TSPU 探测)、每个节点的结论及其最近一周,以及告警。

本页内容

客户端视角检测从面板所在的服务器发出,而它不在你的用户所在的国家,看不到那里的封锁。因此由三个来源从某个国家境内(默认俄罗斯)检测:Globalping、封锁名单和 TSPU 探测。每个来源都是独立的集成,默认关闭。面板把它们的结果合并为每个节点的一个结论,保留一周,并在节点无法访问时打开告警。

在管理后台中#

可达性是菜单中单独的一个部分,紧跟在运行状况之后(手机上在更多里)。能打开运行状况的人都能打开它;来源和国家归所有者管理,更改来源时需要重新确认身份。

  • 页头:各来源检测所用的国家,所有者在这里选择。国家(默认 RU)是一项共享设置,所有来源都从它出发。封锁名单和 TSPU 探测只适用于俄罗斯。
  • 汇总:可访问、TCP 被封锁、无法连接、在名录中(在封锁名单中,未经实测)和无数据的节点各有多少,颜色和标记与运行状况一致。所有来源都关闭时,这里会说明这一点,并指向来源。
  • 节点:每个节点当前的结论(提示与运行状况中相同),以及每个来源(Globalping、封锁名单、TSPU 探测)各一行:该来源当前的结论,以及最近 7 天结论的时间条。时间条由按结论着色的分段组成;悬停或聚焦某一段可查看它的结论和起止时间,也可以用方向键在时间条中移动。已关闭的来源会变暗,时间条为空。屏幕宽度小于 1280 像素时,每个节点变成一张卡片,时间条位于结论下方。
  • 最近事件:最近 7 天的 country_blocked 告警(包括未关闭和已关闭的),每条都链接到运行状况 → 告警中的该告警。
  • 来源:Globalping、封锁名单和 TSPU 探测的卡片。

运行状况 → 检测仍以最后一列「从俄罗斯访问」显示结论(手机上为每个节点下的一行),节点页面上也仍有一行。所有来源都关闭时它们不显示,它们的标题会链接到此部分。API 中的最近一周为 CountryReachabilityService.GetReachabilityHistory:最多 7 天,与 GetChecks 一样,所有角色和 API 令牌都可读取。

Globalping#

第一个来源请该国境内的探测点(优先家庭宽带和移动网络)对每个在线节点做 ICMP ping,并与其各个 TCP 端口建立连接,再比较结果。它使用免费的探测网络 Globalping。开启后,每个在线节点的 IPv4 地址会发送给 Globalping,不会发给其他任何人。

  • 位置:可达性 → 来源中的「Globalping」卡片。
  • 设置(仅所有者):开关、间隔分钟数(默认 15,最少 10),以及可选的令牌(只写,可把免费额度从每小时 250 次提高到 500 次)。测试只读取 Globalping 的额度接口,不发送任何地址。断开会关闭集成并忘记令牌。
  • 关闭就是关闭。 集成关闭时不会开始任何一轮,也不会发送任何内容;正在进行的一轮会在你关闭时取消。已保存的结果保留 7 天,但 API 不再返回。
  • 检测内容。 每轮有三个探测点参与(预算不足时为两个)。每个节点会被 ping 地址,并对其已启用协议配置的每个 TCP 端口做 TCP ping(VLESS,以及 Hysteria2 的 HTTPS 网站)。只有 UDP 协议配置的节点只做 ICMP ping:Globalping 没有 UDP 测试。
  • 对照。 每轮同样的探测点还会对该国一个永远不会被封的大型网站(RU 为 ya.ru)的 TCP 443 发起连接;连不上的探测点本轮作废。有效探测点少于两个时,结论为 unknown。
  • 节点结论。 ok:至少一半的有效探测点能建立 TCP 连接(没有 TCP 端口的节点则看 ICMP)。tcp_blocked:至少一半的探测点 ICMP 有应答,但所有探测点的 TCP 都不通:连接请求被丢弃,而地址本身没被封。blocked:什么都不通。unknown:探测点太少、触及额度、出错、超时,或结果互相矛盾、说明不了什么。
  • 预算。 一轮消耗(1 次对照 + 每个节点 1 次加其 TCP 端口数)x 探测点数 个测试。若一小时内各轮会用掉额度的 80% 以上,探测点减为两个;仍然太多就拉长间隔(面板会在日志中记录一次)。触及额度时该轮为 unknown,下一轮等额度重置后再进行。
  • 两种版本。 VPS 面板每 30 秒查看是否到期;Cloudflare 版从每分钟一次的 cron 运行。

封锁名单#

国家视角检测的第二个来源:面板把每个已启用节点的 IPv4 地址与公开的封锁地址名单比对。名单会下载到面板并在面板上比对,因此节点地址不会离开面板。它是一项独立的集成,默认关闭,并且只适用于俄罗斯:选择其他国家时,卡片会说明这一点,也不会下载任何内容。

  • 位置:可达性 → 来源中的「封锁名单」卡片。它的结论计入该部分中节点的结论、「从俄罗斯访问」列和节点页面上的那一行。
  • 名单。 antifilter.download 的 ipsum.lst,即汇总到 /24 网段的 RKN 封锁名录;主地址无响应时改用镜像 antifilter.network。community.lst,社区发现被封锁的地址。cdn-ip-ranges,CDN 和托管商的地址段:只用来说明节点所在的网段(「Hetzner 网段(DE)」),从不给出结论。不检查 IPv6 地址。
  • 时间安排。 面板每 6 小时用条件请求更新一次名单(未变化的名单只返回 304),并重新比对所有节点;新节点会立即比对。名单只保存在内存中。若一个名单都没能下载,15 分钟后再试。测试会立即执行,并显示名单日期、前缀和 CDN 地址段的数量、有多少节点在名录中,以及是否用了镜像。断开连接会关闭此来源,同时删除已下载的名单和所有已保存的结果。
  • listed 从不打开告警。 地址在名单中、且没有任何实测来源检测过的节点显示为 listed(黄色):在名录中,未经实测。名录只说明地址被登记,不说明其流量被丢弃;仅凭名单,拥挤网段里的每个节点都会触发告警。Globalping 的实测结论总是优先,此时名单只在其提示中补充细节。
  • 关闭就是关闭。 此来源关闭时,不会按计划或因测试下载任何内容,运行状况页面也不会显示它的任何结果。已保存的结果会被隐藏,7 天后删除。

TSPU 探测#

国家视角检测的第三个来源,也是唯一一个用你自己的机器从该国境内测试节点 TCP 端口的来源。你在该国境内的一个节点(探测节点)先在自己的链路上找到国家级 DPI 设备(TSPU)的位置,然后向其他节点发送限制 TTL 的 TCP SYN 包:如果数据包在这台设备处悄无声息地消失,且它后面的路由器没有任何应答,该端口即被封锁。方法来自 tspu-check 和 cheburcheck;节点 Agent 重新实现了它,没有使用二者的代码。它是一项独立的集成,默认关闭,并且只适用于俄罗斯:选择其他国家时,卡片会说明这一点,也不会发送任何内容。

  • 位置:可达性 → 来源中的「TSPU 探测」卡片。它的结论计入该部分中节点的结论、「从俄罗斯访问」列和节点页面上的那一行;提示里会写出探测节点和设备所在的跳数(dpi_hop)。
  • 设置(仅所有者;修改需要重新确认):开关、探测节点和间隔(默认 120 分钟,最少 30)。选择列表中,所选国家的节点排在前面。节点在线、且其 Agent 声明了 country-probe/1,才能做探测节点;较旧的 Agent 需要先更新。未选择探测节点时不会运行任何内容。
  • 数据中心视角。 探测节点位于数据中心,看到的是它自己上行链路的过滤,而不是家庭宽带或移动网络用户看到的情况。它的结论带有 dc_only 置信度,Globalping 的家庭和移动探测点(eyeball)优先于它。
  • 如何并入结论。 对每个节点,最新一次运行视为实测结论:所有被测端口都被封锁,或部分被封锁而没有开放端口,为 tcp_blocked;只要有一个端口开放即为 ok。Globalping 与探测节点一致时,结论取较高的置信度;不一致时显示较差的结论,置信度为 conflict(宁可误报也不漏报),提示中会写出各自看到的结果。超过三个间隔的运行不再计入。封锁名单仍然只提供细节。
  • 发送什么。 通过 Agent 连接向探测节点下发命令。探测节点再向你其他在线节点的地址(其已启用协议配置的 TCP 端口,443 优先;绝不会测自己)和该国两个固定地址发送 SYN 包:一个永远不会被封的对照地址(Yandex),和一个 TSPU 一定会丢弃的参照地址,用来定位设备。参照地址内置在面板中;第一个无法定位设备时,面板会换下一个。节点地址不会发送给任何第三方。
  • 无需额外权限。 探测只是一次限制 TTL 的普通 TCP 连接尝试,因此节点 Agent 保持其加固的服务配置:没有原始套接字,也没有 CAP_NET_RAW。它依赖内核把路由器的应答交给正在连接的套接字。这只在一种内核(Linux 6.6)上测试过;在较旧内核的节点上首次运行时请留意,如果内核不配合,结果会是 no_dpi_hop 或 failed。
  • 仅测 TCP。 不测 UDP。Hysteria2 或 AWG 节点按其其他协议配置的 TCP 端口来判断(VLESS、Hysteria2 的 HTTPS 网站);只有 UDP 协议配置且没有网站的节点,不会从该来源得到结论。
  • 时间安排。 每个间隔,面板向探测节点连续下发几条命令(每条 6 到 8 组主机与端口;被封锁的一组会单独再测一次,所以一条命令可能要两分钟),并在每个应答到达时立即保存。最新保存的记录比间隔更早时才到下一次运行,因此重启面板不会触发运行。探测节点忙时,面板 5 分钟后再问;探测节点离线或 Agent 没有 country-probe/1 时,该轮跳过。测试会立即运行(每分钟最多一次,可能需要几分钟),并显示状态和每个节点的结论。
  • 上次运行的状态。 ok。control_failed:对照地址在探测节点所在网络的设备之后被封,该方法在那里不适用,不给出任何结论。no_dpi_hop:无法定位设备,没有一个参照地址可用。busy。failed:无应答、Agent 太旧或连接中断。
  • 关闭就是关闭。 此来源关闭时,不会按计划或因测试发送任何命令,运行状况页面也不会显示它的任何结果。已保存的记录隐藏 7 天。断开连接会关闭此来源,并删除已保存的记录和设置(探测节点、间隔、上次运行)。
  • Cloudflare 版暂不支持。 一次运行需要几分钟,而该版本的定时任务只有几秒,所以卡片会说明该来源在那里不可用,也不会运行任何内容(见此版本暂不支持的功能)。

告警#

告警 country_blocked 在连续两轮为 blocked 或 tcp_blocked 后打开,连续两轮 ok 后关闭;unknown 的轮次不改变状态。开启 TSPU 探测后,一轮指 Globalping 的一轮或探测节点的一次运行,各自与另一来源的最新结果合并;只有探测节点能看到的节点,每次运行算一轮。封锁名单从不计入。告警及其 Telegram 消息会写明是哪些来源(globalping、tspu)发现了封锁,以及结论的把握程度(eyeball、dc_only,两者不一致时为 conflict)。

在 GitHub 上编辑此页