Freeradius sqlcounter不起作用

时间:2015-10-06 13:55:25

标签: mysql freeradius captivenetwork coovachilli

我正在使用freeradius和mysql以及choovachilli来实现强制网络门户。我目前正在尝试使用rlm_sqlcounter实现日常帐户,但没有成功。这是我在全局配置中包含的配置文件:

sqlcounter dailycounter {
    counter-name = 'Daily-Session-Time'
    check-name = 'Max-Daily-Session'
    sql_module_instance = 'sql'
    key = 'User-Name'
    reset = daily
    query = "SELECT SUM(acctsessiontime - GREATEST((%b - UNIX_TIMESTAMP(acctstarttime)), 0)) FROM radacct WHERE username='%{${key}}' AND UNIX_TIMESTAMP(acctstarttime) + acctsessiontime > '%b'"
}

authorize {
    sql
    dailycounter
}

accounting {
    sql
}

在freeradius日志中,只有与计数器相关的输出:

Tue Oct  6 13:02:22 2015 : Debug:  Module: Linked to module rlm_expr
Tue Oct  6 13:02:22 2015 : Debug:  Module: Instantiating module "expr" from file /etc/freeradius/modules/expr
Tue Oct  6 13:02:22 2015 : Debug:     (Loaded rlm_counter, checking if it's valid)
Tue Oct  6 13:02:22 2015 : Debug:  Module: Linked to module rlm_counter
Tue Oct  6 13:02:22 2015 : Debug:  Module: Instantiating module "daily" from file /etc/freeradius/modules/counter
Tue Oct  6 13:02:22 2015 : Debug:   counter daily {
Tue Oct  6 13:02:22 2015 : Debug:   filename = "/etc/freeradius/db.daily"
Tue Oct  6 13:02:22 2015 : Debug:   key = "User-Name"
Tue Oct  6 13:02:22 2015 : Debug:   reset = "daily"
Tue Oct  6 13:02:22 2015 : Debug:   count-attribute = "Acct-Session-Time"
Tue Oct  6 13:02:22 2015 : Debug:   counter-name = "Daily-Session-Time"
Tue Oct  6 13:02:22 2015 : Debug:   check-name = "Max-Daily-Session"
Tue Oct  6 13:02:22 2015 : Debug:   reply-name = "Session-Timeout"
Tue Oct  6 13:02:22 2015 : Debug:   allowed-servicetype = "Framed-User"
Tue Oct  6 13:02:22 2015 : Debug:   cache-size = 5000
Tue Oct  6 13:02:22 2015 : Debug:   }
Tue Oct  6 13:02:22 2015 : Debug: rlm_counter: Counter attribute Daily-Session-Time is number 3000
Tue Oct  6 13:02:22 2015 : Debug: rlm_counter: Current Time: 1444129342 [2015-10-06 13:02:22], Next reset 1444168800 [2015-10-07 00:00:00]

如果有人能向我解释这个计数器是如何运作的,我真的很感激。我设法理解了check-name和reset的重点,但是查询选项让我很困惑。我理解查询语法和将返回值的内容,但我不明白该查询何时被调用以及谁将使用其返回值以及如何使用?

1 个答案:

答案 0 :(得分:2)

每日会话时间的解释。

  1. 用户可以每天登录和在线3000次
  2. 使用Max-Daily-Session。你将值增加到3000.这意味着3000s。
  3. Radius会将属性Session-Timeout回复到nas 3000s。这意味着必须在3000s中断开用户连接
  4. 如果用户登录并在线持续1000秒,他会退出。然后他再次登录,radius将回复Session-Timeout到nas 2000s。
  5. 用户使用全部3000后,他无法登录。他需要等到明天。