想找一个 OpenWrt 可以使用的,并且能根据 IP 统计流量的插件,主要看中了 nlbwmmon 和 Bandwidthd 两种。前者统计比较粗略,只有统计期间内的流量合计,没法查看各个期间的使用情况,最终还是决定使用 Bandwidthd。

因为担心重启或者升级后数据丢失,选择了 PostgreSQL 数据库版本,PHP 网页服务端也分开部署,修改起来也方便。不过只找到了 OpenWrt 官方的文档,没有其他资料可以参考,所以踩了不少坑。这里记录一下,方便同样有需求的朋友。

本人技术小白,主要使用宝塔面板来安装,可视化操作更方便。

安装和配置 PostgreSQL 数据库

请安装 PostgreSQL v11 版本,v12 及更高版本会报错。同时开启远程访问,修改postgresql.confpg_hba.conf两个文件就行。宝塔面板可在 PostgreSQL 管理器中修改,截止目前 2.5 版本有 bug,无法保存设置,我使用的是 2.3 版本。

然后新建数据库,可以使用命令行。比如,用户名postgres,数据库名称bandwidthd,密码12345

使用宝塔面板请注意,最好不要在 PostgreSQL 管理器中间新增数据库!不然数据库页面中找不到,后面也无法使用计划任务来备份。

之后是初始化数据表,从 https://github.com/NethServer/bandwidthd 下载schema.postgresql这个文件,假如上传到/www/wwwroot,之后终端运行:

1
2
3
su - postgres

psql bandwidthd postgres < /www/wwwroot/schema.postgresql

如果提示类似下面的结果,表示成功了。

1
2
3
4
5
6
7
8
9
10
11
12
13
root@Debian:~# su - postgres
$ psql bandwidthd postgres < /www/wwwroot/schema.postgresql
CREATE TABLE
CREATE INDEX
CREATE INDEX
CREATE TABLE
CREATE INDEX
CREATE INDEX
CREATE TABLE
CREATE INDEX
CREATE TABLE
CREATE INDEX
CREATE TABLE

打开 PgSQL 工具箱查看,发现多了几张表,表明成功了。

安装和配置 bandwidthd-pgsql

LEDE 可以在编译的时候直接加到固件中,x86_64 版本的 ipk 可以从 https://archive.openwrt.org/releases/23.05.2/packages/x86_64/packages/ 这个网址下载,其他版本可在上述网站的其他文件夹中找到。

假如把 bandwidthd-pgsql_2.0.1-35-7_x86_64.ipk 上传到 /tmp 目录,运行以下命令:

1
2
3
4
5
6
cd /tmp
opkg install bandwidthd-pgsql_2.0.1-35-7_x86_64.ipk

# 安装完成后再运行下面的命令
/etc/init.d/bandwidthd enable
/etc/init.d/bandwidthd start

之后是修改etc/config/bandwidthd配置文件,这里就不再赘述了,可参考官方文档(在文章的最后)。重点注意option pgsql_connect_string,官方文件写得不是很清楚,请参考下面我的配置。如果使用默认端口,端口号可以不用写。

1
2
3
4
5
6
7
8
9
10
11
12
13
config bandwidthd
option dev br-lan
option subnets "192.168.1.0/24"
option skip_intervals 0
option graph_cutoff 1024
option promiscuous true
option output_cdf false
option recover_cdf false
option filter ip
option graph false
option meta_refresh 150
option pgsql_connect_string "user = postgres password = 12345 dbname = bandwidthd host = 192.168.1.1 port = 8888"
option sensor_id "openwrt-lede"

安装和配置 PHP 服务端

请安装 PHP v7.0 版本,更高版本会报错,有些函数不支持。然后安装扩展pgsql,宝塔面板可在 PHP 设置中搜索安装 。最后重启 PHP。

https://github.com/NethServer/bandwidthd 下载phphtdocs文件夹中的内容,并将上传到服务器。修改config.conf,如下面所示:

1
2
3
4
5
6
7
<?
define("DFLT_WIDTH", 900);
define("DFLT_HEIGHT", 256);
define("DFLT_INTERVAL", INT_DAILY);

$db_connect_string = "user = postgres password = 12345 dbname = bandwidthd host = 192.168.1.1 port = 8888";

又有需要注意的了,请下载tag 2.01,不要下载tag 2.01-34tag 2.01-35。如果怕搞错,从 https://github.com/NethServer/bandwidthd/tags 这个网址下载吧。

最后,刷新网页,应该就能看到数据了。下面是网上找的图片,可供参考。

参考文章:
OpenWrt Wiki Bandwidthd