当Freeradius设置了Simultaneous-Use :=
1,限制用户连接数为1时,用户非正常下线以及NAS意外掉电导致用户重新登录时无法通过验证。
通过查找相关文档,FreeRadius是靠radacct表中的acctstoptime字段来判断用户是否在线,如果acctstoptime为null表示用户在线。用户非正常断线,NAS没有向radius发送“Acct-Status-Type
= Stop”的计费数据包,radius就没有更新acctstoptime字段,造成用户无法通过认证。
通过cron定时任务执行mysql脚本,来更新数据库中的acctstoptime字段。
UPDATE radacct SET acctstoptime = acctstarttime + acctsessiontime WHERE
((UNIX_TIMESTAMP(acctstarttime) + acctsessiontime + 120 –
UNIX_TIMESTAMP())<0)
AND acctstoptime IS NULL;
注:acctstarttime(开始时间) + acctsessiontime (会话时间) + 单位时间 < 当前时间
表示用户已经断开了。就将acctstoptime更新为acctstarttime(开始时间) + acctsessiontime
(会话时间)。单位时间为NAS向radius发送计费信息的间隔时间(Interim Update)
在线?请教一个问题
回复删除