场景: 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上的用户数量仍然不匹配。我应该检查什么?
答案 0 :(得分:0)
这是一个基本问题,因为RADIUS是有损协议。如果用户下线,并且由于某种原因,RADIUS服务器未收到Acct-Status-Type=Stop
数据包,则该会话将被永久标记为已打开。
如果您使用FreeRADIUS v3中的SQL查询,则会看到它们有一个AcctUpdateTime
字段。每次更改会话时,都将AcctUpdateTime
字段设置为NOW()
。
此字段的目的是通过查看会话的最后更新时间,使外部脚本可以轻松进入并纠正明显过时的会话。
如果您要修复此问题,我将更新为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
属性来启用它,该属性将指定临时时间间隔(以秒为单位)。