场景: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上的用户数仍然不匹配。我应该检查什么?
1条答案
按热度按时间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
是