openwrt-pulse:我们做了一个开源 OpenWrt 实时流量面板,谁在占带宽一眼看清

11次阅读
没有评论

家里网突然变卡,打开 LuCI 只能看到一条总流量曲线,到底是哪台设备在下载、哪个摄像头在上传,还是看不出来。所以我们自己写了一个。

先说明:openwrt-pulse 是 Baffox 自己开发并开源的项目,MIT 协议,代码托管在 GitHub。本文介绍它是什么、能做什么、两种固件怎么安装,也会把目前的限制和安全注意事项讲清楚。

openwrt-pulse 是什么

openwrt-pulse 是一个 OpenWrt 路由器的实时流量面板。打开一个网页,就能看到流量从互联网经过路由器、交换机、无线 AP 流向每一台设备,每秒刷新一次,谁在用带宽、用了多少,一眼就能看出来。

它由两部分组成:

  • 前端:纯静态网页,原生 JavaScript 加 SVG,不需要构建,体积约 60 到 90 KB。可以装在路由器上,也可以直接在电脑上双击打开。
  • 采集器:路由器上的一个 CGI 脚本,只在浏览器请求时运行,不常驻内存。它读取系统里的接口计数、DHCP、无线客户端、WireGuard 和连接跟踪信息,返回累计字节数,由前端算出实时速率。

界面布局参考了 MikroTik 路由器的开源面板 routeros-lanpulse,但所有代码都是我们独立编写的,没有复制它的源码和资源,仓库里的 NOTICE 文件有说明。

openwrt-pulse:我们做了一个开源 OpenWrt 实时流量面板,谁在占带宽一眼看清
桌面版亮色主题:顶部指标卡、中间流量流向图、右侧事件流(演示数据,非真实网络)

为什么要做它

OpenWrt 自带的统计功能能用,但不好用:

  • LuCI 自带的实时图表太简单:只能按接口看总流量,看不出是哪台设备在用。
  • 按设备统计的插件大多是累计值:比如 nlbwmon,看的是今天、这个月每台设备总共用了多少,不是“现在这一秒”谁在跑满带宽。
  • 好看的方案门槛高:Bandix 需要较新的内核,ntopng 这类专业工具对家用路由器来说太重。
  • 老固件没人管:很多人手里的京东云、红米等高通机器跑的是 QWRT 这类基于 OpenWrt 19.07 的固件,还开着 NSS 硬件加速,常见的统计插件要么装不上,要么数据不准。

我们想要的很简单:一个页面,1 秒刷新,看清每台设备的实时速率,新设备上线、连接数暴涨、WireGuard 掉线都能马上看到。

主要功能

  • 顶部指标卡:WAN 下行和上行速率(带峰值和 90 秒曲线)、在线设备数、WireGuard 对端、活动连接数、DHCP 租约、路由器负载和内存。
  • 流量流向图:Internet、路由器、内网交换机、无线 AP、各设备依次连线,虚线按速率流动,颜色区分公网、WireGuard、有线和无线。
  • 实时事件流:新设备上线、DHCP 分配、流量突发、连接数激增、WireGuard 握手超时和重连。
  • 底部表格:内网 Top 设备(带 90 秒趋势)、WireGuard 对端列表、接口状态。
  • 使用体验:1 秒刷新,中文和英文切换,亮色和暗色主题,手机上流向图自动改成竖排。
openwrt-pulse:我们做了一个开源 OpenWrt 实时流量面板,谁在占带宽一眼看清
暗色主题,流向图里线越粗速度越快,鼠标悬停可以看详情(演示数据,非真实网络)
openwrt-pulse:我们做了一个开源 OpenWrt 实时流量面板,谁在占带宽一眼看清
手机版:指标卡两列排布,流向图改为竖排(演示数据,非真实网络)

两种采集器,覆盖新旧固件

目录 适用固件 采集器 每设备计数来源
router OpenWrt 23.05、24.10(有 ucode 和 nftables) ucode CGI nft 每 IP 计数表,依次回退到 Bandix、conntrack、nlbwmon
router19 OpenWrt 19.07、QSDK、QWRT(无 ucode) Lua 5.1 CGI conntrack 字节统计(开着 NSS/ECM 时由 ECM 回写)

两个采集器输出同一套 JSON,前端完全通用。Lua 版已经在一台运行 QWRT 固件的京东云 AX1800 Pro(高通 IPQ6018,内核 4.4,开着 NSS 和 ECM 硬件加速)上真机跑过;现代 OpenWrt 版目前只做过离线测试和模拟数据测试,还没有大规模真机验证,欢迎大家反馈。

先看效果:不用路由器也能跑

在电脑上克隆仓库,用 Python 起一个本地网页服务,然后在浏览器打开 http://127.0.0.1:8765/?mock=1 就能看到演示数据:

git clone https://github.com/liujiand-bt/openwrt-pulse.git
cd openwrt-pulse
python3 -m http.server 8765 --directory web

直接双击 web 文件夹里的 index.html 也会进入演示模式,并弹出“连接路由器”对话框。网址后面还可以加 lang=en 切换英文、theme=dark 切换暗色。

安装:现代 OpenWrt(23.05 / 24.10)

装了 LuCI 的固件一般已经自带 ucode、nftables 和 uhttpd,缺什么安装脚本会用 opkg 或 apk 自动补上。在电脑上把整个目录传到路由器,再在路由器上执行安装脚本:

# 在电脑上执行
scp -O -r openwrt-pulse [email protected]:/tmp/

# 登录路由器后执行
sh /tmp/openwrt-pulse/router/install.sh

安装完成后用浏览器打开 http://192.168.1.1/pulse/ 即可(192.168.1.1 换成你的路由器地址)。脚本会安装采集器、前端和配置文件,并创建一张只计数、不拦截任何流量的 nftables 表。如果检测到开着 flow offloading,脚本会提示你每设备速率会偏低。

装好后建议马上设置访问口令,例如生成一个随机口令并写入配置:

uci set pulse.main.token="$(head -c 12 /dev/urandom | md5sum | cut -c1-16)"
uci commit pulse
uci get pulse.main.token

卸载执行同目录下的 uninstall.sh。scp 加 -O 参数,是因为路由器上的 dropbear 不支持新版 OpenSSH 默认使用的 SFTP 协议。

安装:QWRT / OpenWrt 19.07(如京东云 AX1800 Pro)

这类机器往往只剩几百 KB 闪存空间,所以建议只在路由器上装采集器,约 32 KB,网页放在自己电脑上打开。

第一步,在电脑上打包。仓库暂时没有发布预编译的安装包,需要运行打包脚本,它会用 lua5.1 做一次语法检查:

tools/build-qwrt.sh

第二步,上传到路由器,先诊断再安装:

scp -O dist/pulse-qwrt.tar.gz [email protected]:/tmp/
ssh [email protected]
cd /tmp && tar xzf pulse-qwrt.tar.gz
sh /tmp/pulse-qwrt/diag.sh           # 只诊断,不安装
sh /tmp/pulse-qwrt/install.sh tmp    # 临时试用:全部放在内存里,重启就没了
sh /tmp/pulse-qwrt/install.sh        # 常驻安装:约 32 KB 写入闪存

诊断脚本会检查 Lua 模块、uhttpd、conntrack 字节统计、ECM 和 NSS、无线客户端、WireGuard 和 IPv6 邻居,最后做一个 5 秒对比:WAN 接口速率和 conntrack 统计到的速率差多少。跑诊断时最好让某台设备在测速,对比才有意义。

常驻安装会自动生成口令并打印出来,忘了可以用 uci get pulse.main.token 查看。装完建议重启一次路由器,因为 conntrack 字节统计只对之后新建的连接生效。

第三步,在电脑上双击安装包里的 web/index.html,在“连接路由器”对话框里填采集器地址 http://192.168.1.1/cgi-bin/pulse 和口令。地址和口令只保存在这台电脑的浏览器里。

更详细的步骤、ssh 报错处理和卸载方法,见仓库 router19 目录下的 INSTALL-QWRT.md。

目前的限制,先说清楚

场景 影响
开启 flow offloading(软件或硬件) 被卸载的连接不经过防火墙转发链,现代 OpenWrt 上每设备速率会严重偏低;WAN 总速率来自网卡计数,一般仍准确。要准就关掉 flow offloading。
高通 NSS + ECM 硬件加速 加速流量不经过 netfilter,iptables 和 nft 计数不可靠。Lua 采集器读 conntrack,由 ECM 大约每秒回写一次字节数,所以每设备速率会有 1 到 3 秒延迟和跳动,面板会自动按约 3 秒窗口平滑。
独立 AP 或二级路由下的无线设备 主路由读不到它们的无线客户端列表,这些设备会显示为有线。只有路由器本机能枚举到的客户端才标为无线。
内网互拷(电脑到 NAS) 走交换芯片或网桥,不经过 conntrack,不计入每设备流量。面板只统计进出外网的流量。
IPv6 现代版目前每设备主要统计 IPv4;QWRT 版在 IPv6 邻居表可用时,会把 IPv6 连接算到对应设备。

安全:只在内网用

面板会显示设备名、IP、MAC 和 WireGuard 端点,这些都是不该公开的信息。

  • 不要暴露到公网:不要给 80、443 或 8088 端口做端口转发。在外面想看,先用 WireGuard 连回家里。
  • 一定要设口令:请求必须带上口令才返回数据。不过它是共享口令加明文 HTTP,只能防家里人随手打开,扛不住有针对性的攻击。
  • 采集器只读:不改路由和防火墙规则(只有手动把计数方式改成 iptables 时,才会建一条只计数的链),WireGuard 私钥不会输出。

如果你在家里还跑着 NAS、网站等服务,可以搭配我们之前介绍的 Uptime Kuma,一个看实时流量,一个看服务在不在线。

优缺点

优点:

  • 真正的每设备实时速率:1 秒刷新,不只是累计用量。
  • 新旧固件都能用:现代 OpenWrt 和 QWRT 这类 19.07 老固件各有一套采集器。
  • 很轻:采集器按需运行不常驻,QWRT 上只占约 32 KB 闪存,前端不需要构建。
  • 自带诊断:老固件上先跑诊断脚本,就知道数据能不能准。
  • 开源免费:MIT 协议,可以随便改。

缺点:

  • 项目刚发布:现代 OpenWrt 还没有大规模真机验证。
  • 硬件加速下有误差:NSS/ECM 下速率会滞后和跳动,开着 flow offloading 时每设备数据偏低。
  • 不存历史:只看最近 90 秒,不能查“上个月谁用得最多”。
  • 安装要用命令行:目前没有 ipk 包,也不能在 LuCI 里一键安装。

适合谁

  • 想知道“现在是谁在占网速”的家庭和小办公室网管。
  • 用京东云、红米等高通机器刷 QWRT,苦于没有好用流量统计的玩家。
  • 用 WireGuard 连回家、想顺便看看对端在不在线的人。

如果你需要按天、按月统计每台设备的总用量,nlbwmon 更合适;需要深度分析每条连接、协议和应用,ntopng 更专业。

和同类方案对比

对比项 openwrt-pulse Bandix nlbwmon luci-app-statistics ntopng
主要用途 实时流向和每设备速率 每设备流量监控 每设备累计用量 系统和接口历史图表 专业流量分析
每设备实时速率 支持,1 秒刷新 支持 不是实时,看累计值 按接口,不按设备 支持
历史数据 只保留最近 90 秒 有 按天和月 有(collectd 加 RRD) 有
固件要求 23.05 及以上,或 19.07 和 QWRT 内核 6.x,建议 24.10 及以上 通用 通用 官方建议小型网络 2 GB 以上内存
硬件加速下 需关闭 offloading;NSS 下读 conntrack 需关闭硬件 offloading 和 Turbo ACC 同样受影响 接口计数基本不受影响 依赖抓包,同样受影响
界面 独立网页,支持手机 LuCI 页面 LuCI 页面 LuCI 页面 独立网页

Bandix 的要求来自它的官方 README;ntopng 的内存要求来自官方硬件规格文档(小型网络 2 核、2 GB 内存起),大多数家用路由器达不到,通常要装在单独的机器上。另外,openwrt-pulse 能读取 Bandix 和 nlbwmon 的数据作为每设备计数来源,它们不冲突,可以一起装。

项目信息

项目 信息
名称 openwrt-pulse
开发 Baffox
GitHub liujiand-bt/openwrt-pulse
开源协议 MIT
适用固件 OpenWrt 23.05、24.10;OpenWrt 19.07、QSDK、QWRT
真机测试 京东云 AX1800 Pro(QWRT,IPQ6018,NSS/ECM)
前端 原生 JavaScript 加 SVG,无需构建
采集器 ucode CGI(现代版)、Lua 5.1 CGI(QWRT 版)
界面语言 中文、English
发布时间 2026 年 10 月 11 日

项目刚刚发布,如果它对你有用,欢迎到 GitHub 点个 Star。你的路由器型号和固件跑不起来、数据对不上,也欢迎提 Issue,附上诊断脚本的输出(MAC 和公网 IP 已自动打码),我们会尽快适配。

资料来源

正文完
 0
liujiana
版权声明:本站原创文章,由 liujiana 于2026-10-11发表,共计5146字。
转载说明:本文由(baffox.com)根据项目官网、开源社区及公开资料整理。工具的功能、价格、授权与服务条款可能随时间调整,请以官方最新页面为准。合理引用请注明出处并保留本页链接;如发现内容错误、版权或侵权问题,请通过联系邮箱进行反馈,我们将第一时间核实处理。
评论(没有评论)
验证码