Freeradius显示不正确的在线用户数与NAS

时间:2018-07-10 06:24:14

标签: mysql freeradius radius

场景: Freeradius服务器2.2.8作为Ubuntu服务器上的计费系统, NAS是Mikrotik路由器ccr1036 v 6.42.4

问题: 在NAS上,我可以看到900个活跃/在线用户,而在freeradius上,我可以看到500个会话(acctstop时间为NULL)

我使用以下查询来计算法国的在线用户数。

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

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

1 个答案:

答案 0 :(得分:0)

这是一个基本问题,因为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之间的差为> {{ 1}} <NAS Interim Interval> *,将2设置为AcctStopTime

为此,需要在NAS上启用“临时更新”。这些是从NAS定期发送以更新流量计数器之类的计费请求,但是在这种情况下,它们也可以用作有用的心跳消息。

如果您不知道此静态配置选项在NAS上的什么位置,有时可以通过返回NOW()中的Acct-Interim-Interval属性来启用它,该属性将指定临时时间间隔(以秒为单位)。