第十四节:Daloradius限制上网流量

本节内容主要通过在Daloradius下配置Freeradius,可以按月限制用户的流量,Freeradius本身没有内置限制用户每个月最大流量的功能。网上有很多类似的文章,但是都是针对freeradius版本2的文档。由于版本3在很多地方与2有细微差别,直接用版本2的设置方法是行不通的。

这里总结整理了freeradius3的环境下每月流量限制功能的设置方法

1、增加radius自定义属性

编辑字典文件:

在最下方增加两行自定义属性

2、配置计数器SQL

1)新建月流量的计数器sql语句

内容如下

2)在sqlcounter模块中增加新的计数器

编辑sqlcounter文件

在最下面一行追加以下内容:

启用sqlcounter模块

3、将monthlytrafficcounter模块添加到用户认证过程中

编辑以下文件

在authorize部分中的sql后面,添加monthlytrafficcounter,例如:

注意:monthlytrafficcounter 一定要放在sql的下方,否则不生效,在很多教程中没有说明这一点

4、重启radiusd

1)重启服务(或者先用radiusd -X模式进行调试)

2)故障排除,某些时候radiusd重启后,会出现以下错误

错误分析:这个错误的原因是在sqlcounter里面调用了sql模块里面的dialect变量。如果模块的启动顺序出现了启动sqlcounter时,sql还没有被加载的情况,就会导致这个变量获取不到。
解决思路一:是在/etc/raddb/radiusd.conf中的instantiate部分指定模块的启动顺序;

解决思路二:简单粗暴的方式,直接在sqlcounter中将所有的dialect都指定为’mysql’。例如:

5、对目标用户或者组设置限量属性

例如:增加mygroup组,对这个组限制每个月最大流量为1MB(1048576字节)。如果用户已经超过这个使用量,认证将失败。

在radius数据库的check表以及reply表中,分别添加以下两条记录(也可以使用第三方的radius操作界面进行操作,例如daloradius系统)

如果用户使用量已经超过限制,radius认证会失败。使用radtest调试,可以看到返回的信息

返回的错误信息样例:

1KB=1024B;

1MB=1024KB=1024×1024B=1048576B

故1MB=1048576字节

6、【可选】为daloRadius系统添加dictionary辅助定义

使用daloRadius管理界面管理为用户或组添加属性时,选择Vendor的下拉框可以很方便的选择属性。对于自定义的属性,也可以使用SQL语句添加到dictionary表里使其出现在下拉列表里