stongswan订制每月每年流量方法
网上好多都是订制月份的比较多,本人由于工作需要,订制每月,每年,每半年的流量需要,找了好多资料都是每月的多,我自己研究出订制方法,希望可以帮助有需要的网友。
其实你订制完每月的方法后,再依此订制年或半年的方法如下:
月的大家都会我就不说了,我写一下年的:
vi /etc/raddb/sql/mysql/counter.conf
在文件最末尾增加如下:
sqlcounter yearlytrafficcounter {
counter-name = yearly-Traffic
check-name = Max-yearly-Traffic
reply-name = yearly-Traffic-Limit
sqlmod-inst = sql
key = User-Name
reset = 12m
query = "SELECT SUM(acctinputoctets + acctoutputoctets) FROM radacct WHERE UserName='%{%k}' AND UNIX_TIMESTAMP(AcctStartTime) > '%b'"
增加完保存退出,再编辑vi /etc/raddb/dictionary,在文件增加如下:
ATTRIBUTE Max-Monthly-Traffic 3003 integer
ATTRIBUTE Monthly-Traffic-Limit 3004 integer
ATTRIBUTE Max-yearly-Traffic 3005 integer
ATTRIBUTE yearly-Traffic-Limit 3006 integer
上面两个是月的,下面这两个是年的,然后保存退出
最后再编辑vi /etc/raddb/sites-enabled/default文件,在authorize的末尾大概在223位置,在}上面增加
monthlytrafficcounter
yearlytrafficcounter
再把下面的代码加到default文件中的90行位置就行了。
update request {
Group-Name := "%{sql:SELECT groupname FROM radusergroup WHERE username='%{User-Name}' ORDER BY priority}"
}
if ("%{sql: SELECT SUM(acctinputoctets+acctoutputoctets) FROM radacct WHERE username='%{User-Name}' AND date_format(acctstarttime, '%Y-%m-%d') >= date_format(now(),'%Y-%m-01') AND date_format(acctstoptime, '%Y-%m-%d') <= last_day(now());}" >= "%{sql: SELECT value FROM radgroupreply WHERE groupname='%{Group-Name}' AND attribute like 'Max%';}") {
reject
}
把上面这内容加到/etc/raddb/sites-enabled/default加到authorize的90行位置就行了
这样就完美了。哈哈
至此解决了问题。