与 NAS 相比,Freeradius 显示的在线用户数量不正确
Freeradius showing incorrect number of online users vs NAS
场景:
Freeradius 服务器 2.2.8 作为 Ubuntu 服务器上的计费系统,
NAS 是 Mikrotik 路由器 ccr1036 v 6.42.4
问题:
在 NAS 上我可以看到 900 active/online 用户,而在 freeradius 上我看到 500 个会话(acctstop 时间为 NULL)
我使用以下查询来计算 FR 中的在线用户数。
mysql -uroot -s -e "use radius; select * from radacct WHERE acctstoptime IS NULL;" |wc -l
我尝试断开 NAS 上的所有用户,清除 freeradius 的所有会话,用户重新连接正常,但 NAS 上的用户数与 freeradius 上的用户数仍然不匹配。我应该检查什么?
这是一个根本问题,因为 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
之间的差异是 >
<NAS Interim Interval>
*
2
, 设置 AcctStopTime
为 NOW()
.
为此,需要在您的 NAS 上启用临时更新。这些是 NAS 定期发送的记帐请求,用于更新流量计数器等内容,但在这种情况下,它们也可以用作有用的心跳消息。
如果您无法弄清楚 NAS 上的静态配置选项在哪里,有时可以通过返回 Access-Accept
中的 Acct-Interim-Interval
属性来启用它,这将指定以秒为单位的临时间隔。
场景: Freeradius 服务器 2.2.8 作为 Ubuntu 服务器上的计费系统, NAS 是 Mikrotik 路由器 ccr1036 v 6.42.4
问题: 在 NAS 上我可以看到 900 active/online 用户,而在 freeradius 上我看到 500 个会话(acctstop 时间为 NULL)
我使用以下查询来计算 FR 中的在线用户数。
mysql -uroot -s -e "use radius; select * from radacct WHERE acctstoptime IS NULL;" |wc -l
我尝试断开 NAS 上的所有用户,清除 freeradius 的所有会话,用户重新连接正常,但 NAS 上的用户数与 freeradius 上的用户数仍然不匹配。我应该检查什么?
这是一个根本问题,因为 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
之间的差异是 >
<NAS Interim Interval>
*
2
, 设置 AcctStopTime
为 NOW()
.
为此,需要在您的 NAS 上启用临时更新。这些是 NAS 定期发送的记帐请求,用于更新流量计数器等内容,但在这种情况下,它们也可以用作有用的心跳消息。
如果您无法弄清楚 NAS 上的静态配置选项在哪里,有时可以通过返回 Access-Accept
中的 Acct-Interim-Interval
属性来启用它,这将指定以秒为单位的临时间隔。