freeradius显示与nas相比在线用户数不正确

ebdffaop  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(335)

场景:freeradius服务器2.2.8作为ubuntu服务器上的计费系统,nas是mikrotik路由器ccr1036 v 6.42.4
问题:在nas上,我可以看到900个活动/在线用户,而在freeradius上,我可以看到500个会话(acctstop time为空)
我使用下面的查询来计算fr中的在线用户数。

mysql -uroot -s -e "use radius; select * from radacct  WHERE acctstoptime IS NULL;" |wc -l

我尝试断开nas上所有用户的连接,清除freeradius上的所有会话,用户重新连接正常,但nas上的用户数与freeradius上的用户数仍然不匹配。我应该检查什么?

z9smfwbn

z9smfwbn1#

这是一个基本问题,因为radius是一个有损协议。如果用户脱机,并且由于某种原因,radius服务器不会收到 Acct-Status-Type=Stop 数据包,则会话将永久标记为打开。
如果您使用来自freeradius v3的sql查询,您将看到它们有一个 AcctUpdateTime 现场。这个 AcctUpdateTime 字段设置为 NOW() 每次会话更改时。
https://github.com/freeradius/freeradius-server/blob/v3.0.x/raddb/mods-config/sql/main/mysql/queries.conf#l332
此字段的目的是通过查看上次更新会话的时间,使外部脚本能够轻松进入并更正明显过时的会话。
如果您想解决这个问题,我要么更新到freeradius v3.0.x(2.2.8暂时不受支持),要么使用v3.0.x模式和查询(它们应该大部分都能工作)。
然后每10分钟运行一次查询,用
NULL AcctStopTime ,其中 NOW() 以及 AcctUpdateTime

<NAS Interim Interval> * 2 ,设置 AcctStopTimeNOW() .
为此,需要在nas上启用临时更新。这些是从nas定期发送的记帐请求,用于更新诸如流量计数器之类的内容,但在本例中,它们也可以用作有用的心跳消息。
如果您不知道这个静态配置选项在您的nas上的何处,有时可以通过返回 Acct-Interim-Interval 属性 Access-Accept ,它将以秒为单位指定中间间隔。

相关问题