零配置方案:Zabbix + HTTP 代理实现内网穿透工具的自动化管理

简介: 本文作者蔡斯,Zabbix社区签约专家,Zabbix 6.0/7.0官方译者。文章探讨如何利用Zabbix的HTTP代理与低级别发现(LLD)功能,实现对免费内网穿透工具的自动化监控,解决多账号、多设备管理难、服务状态盲区等痛点,打造零侵入、零配置、无限扩展的智能监控体系。

作者简介
感谢本文作者蔡斯,Zabbix社区签约专家,Zabbix6.0、7.0官方译者。

一、背景:免费穿透工具的管理之痛

近年来,家庭 4K 影院、远程剪辑、NAS 灾备……需求井喷;随着IPv4 枯竭、IPv6 普及受限,让「移动观影 + 异地组网」成为刚需。FRP、ZeroTier、N2N 等零成本穿透方案迅速流行,却也带来三大痛点:

  • 商软免费节点限制多,多账号、多中转设备难管理
  • 异地组网服务端口随机分配,无法设定固定值
  • 既无 snmp,也固定探针,内网服务运行状态全靠“盲猜”

本文以「穿透工具A」为例,演示如何借助 Zabbix 低级别发现(LLD)+ HTTP 代理打造一次配置、"终身"自治的监控体系,支持无限横向扩展。

二、HTTP 代理:Zabbix 的"万能数据采集器"

HTTP agent 是 Zabbix 内置的一种无 Agent 采集方式:

  • 由 Server/Proxy 主动发起 HTTP/HTTPS 请求
  • 支持 Header、POST、Cookie、Auth、SSL 等完整 HTTP 语义
  • 返回体可以是 JSON、XML、Text,再配合 预处理 做二次解析

通过「穿透工具A」 REST 接口我们把它“拉”进Zabbix监控,实现多账号多设备零侵入纳管。

三、「穿透工具A」接口长什么样?

下文仅保留关键字段与含义,敏感 ID、域名、MAC 等已全部替换为占位符。

注:本文中不涉及任何用户隐私数据或敏感信息,所有数据均为示例数据,使用这些浏览器暴露接口的行为是基于技术研究和学习目的,并且不用于任何商业或非法用途。

3.1 账号级流量统计
POST/user/flow_stat

{
   
  "rtn": 0,
  "data": {
   
    "ddnsBytes": 1782357604,
    "relayBytes": 259885
  }
}

字段说明

ddnsBytes:累计直流流量(单位字节),需 ÷ 1024³ 转 GB

relayBytes:累计中转流量(单位字节),需 ÷ 1024³ 转 GB

3.2 内网穿透条目配置
POST/ddns/cfg/list
作用:列出当前账号下所有已创建的 DDNS 映射条目,供 LLD 用。

{
   
  "rtn": 0,
"datas": [
    {
   
      "id": xxxx,
      "peerid": "xxxx",
      "domain": "xxx.iepose.cn",
      "protocolLan": "https",
      "lanAddr": "192.168.0.xx:5001",
      "status": true,
      "uid": "xxxxx",
      "comment": "群晖NAS",
      ....
    }
  ]
}

字段说明

rtn:0 = 成功
datas[].id:映射记录内部 ID(示例:xxxxx→ MAP_ID)
datas[].peerid:节点唯一标识(示例:AD1*OW→ NOD_ID)
datas[].domain:暴露给外网的域名(示例:xxx.iepose.cn→ EXAMPLE_DOMAIN)
datas[].lanAddr:内网地址端口(示例:192.168.0.19:1234→ 192.168.x.x:PORT)
datas[].status:true = 映射在线
datas[].checkin:true = 心跳正常

3.3 中转设备绑定管理
GET/jdis/bindget?
作用:拉取账号下所有已绑定设备,含网卡、版本等信息,供 LLD 用。

{
   
    "terms": [
        {
   
            "peerid": "xxxx",
            "term": {
   
                "nic": [
                    {
   
                        "mac": "xxxxxxxxxx",
                        .....
                ],
                "name": "LAPTOP-MICLE",
                "ip": xxxxxxx,
                "isp": "联通",
                "location": "深圳",
                ..........
            },
            "role": 1
        },
        {
   
            "peerid": "XXXXXXXXXXXXXXXXX",
            .....
}

字段说明

terms[].peerid:设备唯一 ID

terms[].term.name:设备别名

terms[].term.status:设备在线状态,出现status则表示掉线

terms[].term.ip:大端序格式 → 需结合预处理转为十进制 IP

terms[].term.nic[].ipv4n:网卡 IP(大端序整数格式)

terms[].term.nic[].mac:原始 MAC → 需格式化为 XX:XX:XX:XX:XX

terms[].term.nbhttp/ nbhttps:「穿透工具A」对外 HTTP/HTTPS 端口

3.4 中转设备代理服务清单
GET/jdis/servicelist?
作用:列出每台设备代理的内网的服务及端口,供 LLD 用。

{
   
    "jd": [
        {
   
            "ip": 151038144,
            "dtype": 999,
            "status": 1,
            "name": "grafana",
            "ports": [
                3000
            ],
            "svs": [
                {
   
                    "port": 3000
                }
            ],
            "peerid": "XXXXXXXXXXXXXXXXXXX",
        },
        ......
    ]
}

字段说明

jd[].ip:大端序格式 → 需结合预处理转为十进制 IP

jd[].name:服务名称(如 grafana、DSM、路由器)

jd[].ports:端口数组,可一对多

jd[].status:1 = 正常运行

将以上 JSON 汇总后喂给 Zabbix LLD,即可实现 账号-设备-流量-服务 四维自动发现。

四、LLD 规则:让「穿透工具A」接口“自报家门”

通过几大核心 REST 接口数据得知,「穿透工具A」对内网穿透管理分为两个层级:一个是系统层级,即账号级流量;另一个是设备级别;因此结合 Zabbix LLD 规则,“系统级静态指标”用普通监控项,“设备级动态对象”用 LLD,即可支持多设备。

4.1 创建直流和中转流量监控项
4.1.1 账号当月使用流量
类型:HTTP agent
Key:flow.stat
URL:https://xxx.xxx.com/user/flow_stat
请求类型:POST
请求正文:{"uid":"{$UID}","owcode":"{$OWCODE}"}
请求头部:-H 'accept: application/json, text/plain, /' -H 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36 Edg/139.0.0.0'
调试监控项
image.png

4.1.2 分离直流和中转数据
结合HTTP 代理采集回来的数据,我们可以自带相关项目方法关联它,单位是字节B。

image.png

然后通过预处理JSONPath
将这些JSON格式的数据轻松分离作为一个单独的监控项,好处就是减少采集次数,充分利用已有数据。
image.png

接着我们来验证一下,配置的参数是否正确,毕竟这是Zabbix UI给我们提供极简的scriptsless,无需通过手写scirpts即可完成debug。

image.png

观察最新采集的数据,中转和直流流量已正确识别出来。

image.png

对比「穿透工具A」控制台的流量数据。

image.png

4.2 创建内网穿透条目获取 LLD 规则
创建 LLD 规则的目标是暴露采集同类型不同规格的参数,为了减少对HTTP 代理的依赖,我们在创建LLD规则前,需要先建立一个普通的监控项。

4.2.1 内网穿透条目
类型:HTTP agent
Key:cfg.list
URL:https://xxx.xxx.com/ddns/cfg/list
请求类型:POST
请求正文:{"uid":"{$UID}","owcode":"{$OWCODE}"}
请求头部:-H 'accept: application/json, text/plain, /' -H 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36 Edg/139.0.0.0'
调试监控项

image.png

4.2.2 内网穿透条目:条目发现
类型:相关项目
Key:cfg.discovery
主要项:内网穿透条目
暴露宏变量:{#NATID}
{#NATDOMAIN}
预处理(JavaScript 统一转换)暴露宏变量

var res = JSON.parse(value);
var lld = [];

res.datas.forEach(function(item){
   
    lld.push({
   
        "{#NATID}"    : item.id,
        "{#NATDOMAIN}"    : item.domain
    });
});

return JSON.stringify({
   data: lld});

老道理,同样通过测试步骤,输入RESP接口采集回来的JSON
数据进行加工测试,得到{"data":[{"{#NATID}":xxxx,"{#NATDOMAIN}":"xxxx.iepose.cn"}]},如下图。

image.png

4.2.3 内网穿透条目:条目发现-监控项原型
在LLD 自动发现规则中创建监控项原型,才能继用它暴露的宏变量,这里演示如何获取穿透的内网地址。

类型:相关项目
Key:lanAddr[{#NATID}]
主要项:内网穿透条目
如下图所示:

image.png

结合预处理JSONPath和正则匹配$.datas[?(@.id=="{#NATID}")].lanAddr,成功匹配到内网代理IP和端口

image.png

查看最新采集的数据,内网协议,内网地址,映射开启状态均已显示。

image.png

对比「穿透工具A」控制台的内网穿透配置,完全一样!

image.png

4.3 创建中转设备绑定查询 LLD 规则
创建 LLD 规则的目标是暴露采集同类型不同规格的参数,为了减少对HTTP 代理的依赖,我们在创建LLD规则前,需要先建立一个普通的监控项。

4.3.1 中转设备管理
类型:HTTP agent
Key:bind.get
URL:https://xxx.xxx.com/jdis/bindget
请求:GET
查询字段:uid=xxx&owcode=xxx&product=2581&cache_ver=0.29773539924079817
请求头部:同理
调试监控项

image.png

4.3.1 中转设备管理:设备发现
类型:相关项目
Key:dev.discovery
主要项:内网设备管理
暴露宏变量:{#PEERID}
{#NAME}
预处理(JavaScript 统一转换)暴露宏变量

// 只遍历顶级 terms,每台设备生成 1 条发现记录

var lld = [];
var root = JSON.parse(value);

root.terms.forEach(function(node){
   
    var t = node.term;
    lld.push({
   
        "{#PEERID}"   : node.peerid,
        "{#NAME}"     : t.name
    });
});
return JSON.stringify({
   data: lld});

同样通过测试步骤,输入RESP接口采集回来的JSON
数据进行加工测试,得到{"data":[{"{#PEERID}":"xxx","{#NAME}":"xxx"},{"{#PEERID}":"xxx","{#NAME}":"xxx"}]},如下图。

image.png

4.2.3 内网设备挂历:设备发现-监控项原型
在LLD 自动发现规则中创建监控项原型,才能继用它暴露的宏变量,这里演示如何获取穿透的公网IP。

类型:相关项目
Key:ip["{#NAME}"]
主要项:中转设备管理
如下图所示:

image.png

结合预处理JSONPath和正则匹配$.terms[?(@.peerid=="{#PEERID}")].term.ip,可获取到大端序的IP地址。

预处理(JavaScript 统一转换)

function intToIP(i){
   
    return [
    i & 0xFF,           // 最低字节 → 第 1 段
    (i >>> 8) & 0xFF,   // 次低字节 → 第 2 段
    (i >>> 16) & 0xFF,  // 次高字节 → 第 3 段
    (i >>> 24) & 0xFF   // 最高字节 → 第 4 段
     ].join('.');
}
return intToIP(parseInt(value));

再结合JavaScrips进行转换,可得出最终IP地址。

image.png

4.4 创建中转设备代理服务 LLD 规则
因篇幅原因,本节不做展开,和以上同理。

五、基于自动发现创建监控原型和触发器

5.1 一张图看懂监控纳管流程

「穿透工具A」 API
     │
     ├─ HTTP Agent → LLD 规则 → 生成宏 {
   #PEERID} {
   #NAME} {
   #NATDOMAIN} …
     │                    │
     │                    ├─ Item Prototype
     │                    ├─ Trigger Prototype
     │                    └─ Graph Prototype
     │
     └─ 新节点上线 → 自动纳入监控,无需人工干预

零侵入:无需在节点安装 Agent
零配置:节点增减自动发现
零费用:HTTP 代理 + 免费穿透工具即可落地
5.2 服务端口可用性原型
字段示例

Item Prototype Key : net.tcp.service[tcp,{#SERVICEIP},{#SERVICEPORT}]

Trigger Prototype : last(/OWJDXB by HTTP/net.tcp.service[tcp,{#SERVICEIP},{#SERVICEPORT}])=0

5.3 监控主机内存容量(GB)
实践得知,Linux和Docker系的「穿透工具A」客户可以获取宿主机的总内存和已用内存,指令类似free -m单位 MB ,需要通过预处理倍数 1024x1024进行转换,单位Units 填 B,因为Zabbix不支持MB。

image.png

5.4 动态 HTTP 监控
通过HTTP 代理我们还可以将内网穿透条目中的公网域名纳入监控,判断其标题如果出现:XX无法打开页面即表示网络或者客户端出现问题。

类型:HTTP 代理
Key:web.title.check[{#NATID}]
URL:{#PROTOCAL}://{#NATDOMAIN}
预处理:(?i)]>([^<])
5.5 自动发现及常规监控项总览
image.png

六、「穿透工具A」监控实战

6.1 添加「穿透工具A」监控
首次需登录「穿透工具」控制台,打开F12找到list链接,点击负载获取你的UID和OWCODE。

image.png

回到Zabbix添加主机,关联我们制作好的「穿透工具A」监控专用模板。

image.png

配置宏变量,其中·{零配置方案:Zabbix + HTTP 代理实现内网穿透工具的自动化管理_数据_21OWCODE}是前面获取的,{$PHONE}是你登录手机号。

image.png

6.2 配置监控看板和查看数据
在仪表盘中,我们添加TOP主机类型组件,即可得到多个账号多个设备在线状态、账号级的流量数据。后续结合Grafana,可扩展出更多的列表数据,如设备的出口IP,映射公网域名等。

image.png

image.png


6.3 查看及触发告警

中转设备代理的服务,即内网服务掉线则会发出告警:

image.png

中转设备掉线,通过HTTP 代理及JavaScrip匹配映射出来的DDNS条目(访问域名)进行实时访问的页面标题,判断是否在线。

image.png

七、总结

本文详尽介绍如何通过HTTP 代理结合预处理中的JSONPath和JavaScript,模拟浏览器将「穿透工具A」的REST接口返回的Json数据进行过滤和匹配,结合Zabbix LLD规则将多中转设备的数据纳管到监控原型中,实现一个都不能少的目标。

作为抛砖引玉,笔者选「穿透工具A」作为功能演示,提供一种零侵入、零配置的监控思路和实现方案。

笔者注:文中所提及的工具名称仅为示例,不代表任何特定品牌或产品;使用本文中的方法和技术时,请确保遵守相关法律法规和服务条款。

相关文章
|
12月前
|
人工智能 监控 数据可视化
在Zabbix中通过ECharts模块增强可视化功能
Zabbix凭借模块化架构支持灵活扩展,ECharts-Zabbix模块集成丰富图表库,提升数据可视化能力。支持多种图表、深度自定义与动态交互,无缝对接Zabbix数据,助力构建直观、响应式的监控大屏,显著增强运维效率。
503 9
|
10月前
|
Linux 数据安全/隐私保护 Windows
CentOS-6.3-x86_64-minimal 安装教程详细步骤新手入门指南(附安装包)
准备2G以上U盘及ISO刻录工具,下载CentOS 6.3 minimal版镜像,使用Rufus或dd写入U盘。将U盘插入目标电脑,通过BIOS选择U盘启动,进入安装界面后按提示选择语言、键盘布局,自动分区并设置主机名、网络及时区,配置root密码后开始安装。安装完成后重启,拔出U盘,以root账号登录系统,即可使用命令行进行操作。
887 157
|
11月前
|
机器人 数据挖掘 API
一个销售数据分析机器人的诞生:看 Dify 如何在 DMS 助力下实现自动化闭环
Dify 作为一款低代码 AI 应用开发平台,凭借其直观的可视化工作流编排能力,极大降低了大模型应用的开发门槛。
917 22
一个销售数据分析机器人的诞生:看 Dify 如何在 DMS 助力下实现自动化闭环
|
12月前
|
监控 前端开发 Linux
Zabbix 7.4 新功能介绍
Zabbix 7.4重磅升级:主机向导简化配置,监控指标卡片直观展示,Map层级自由调整,无限嵌套发现打破限制,TLS加密保障通信安全,助力运维效率飞跃提升!
668 1
|
12月前
|
监控 应用服务中间件 nginx
基于Zabbix的SLA监控体系构建与实践
本文由Zabbix社区专家褚凤彬分享,详解SLA在Zabbix中的应用。通过Trigger与Service联动,构建Web应用的多层级监控体系,并介绍SLA计算规则、维护期处理及升级注意事项,助力企业精准掌控服务可用性。
810 36
|
11月前
|
Java 编译器 API
告别样板代码:探索Java Record的简洁之力
告别样板代码:探索Java Record的简洁之力
371 113
|
10月前
|
自然语言处理 供应链 监控
电商RPA怎么选?从痛点到落地,这款LLM+RPA产品帮你全搞定
双11订单暴增、客服瘫痪、错单频发?电商“人海战术”已成增长枷锁。RPA技术正破解效率困局:自动处理订单、7×24小时智能客服、多平台数据同步、财务自动化核账。本文拆解电商RPA核心价值,揭秘LLM+RPA如何实现“所说即所得”,并推荐真正适配电商的智能助手——实在Agent,助企业降本提效,迈向自动化运营新时代。
946 110
|
人工智能 运维 监控
十万人好评的Zabbix AI助手,10分钟教你get
本文由实施工程师、Zabbix认证专家张宇分享,教你10分钟打造专属Zabbix AI助手。通过结合DeepSeek大模型与本地化Zabbix知识库,无需搭建知识库服务,快速提升运维效率。方案使用Cherry Studio平台对接API,导入500+篇实战经验总结的知识库,精准解决Zabbix告警风暴、Housekeeping等问题。对比测试显示,该助手能有效过滤AI错误建议,提供安全可靠的解决方案,强化用户问题处理能力。此外,作者还是B站Zabbix入门课程主讲人,欢迎进一步学习!
1059 0
十万人好评的Zabbix AI助手,10分钟教你get
|
11月前
|
人工智能 Java API
Java 正式进入 Agentic AI 时代:Spring AI Alibaba 1.1 发布背后的技术演进
Spring AI Alibaba 1.1 正式发布,提供极简方式构建企业级AI智能体。基于ReactAgent核心,支持多智能体协作、上下文工程与生产级管控,助力开发者快速打造可靠、可扩展的智能应用。
5578 43

热门文章

最新文章