日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

mysql流量控制_Daloradius限制上网流量

發(fā)布時間:2024/4/11 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql流量控制_Daloradius限制上网流量 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

第十四節(jié):Daloradius限制上網(wǎng)流量

本節(jié)內(nèi)容主要通過在Daloradius下配置Freeradius,可以按月限制用戶的流量,Freeradius本身沒有內(nèi)置限制用戶每個月最大流量的功能。網(wǎng)上有很多類似的文章,但是都是針對freeradius版本2的文檔。由于版本3在很多地方與2有細微差別,直接用版本2的設(shè)置方法是行不通的。

這里總結(jié)整理了freeradius3的環(huán)境下每月流量限制功能的設(shè)置方法

1、增加radius自定義屬性

編輯字典文件:

vi /etc/raddb/dictionary

1

vi/etc/raddb/dictionary

在最下方增加兩行自定義屬性

ATTRIBUTE Max-Monthly-Traffic? 3003 integer

ATTRIBUTE Monthly-Traffic-Limit? ? 3004? ? integer

1

2

ATTRIBUTEMax-Monthly-Traffic?3003integer

ATTRIBUTEMonthly-Traffic-Limit??3004??integer

2、配置計數(shù)器SQL

1)新建月流量的計數(shù)器sql語句,下面的文件沒有需要新增

vi /etc/raddb/mods-config/sql/counter/mysql/monthlytrafficcounter.conf

1

vi/etc/raddb/mods-config/sql/counter/mysql/monthlytrafficcounter.conf

內(nèi)容如下

query = "SELECT SUM(acctinputoctets + acctoutputoctets) DIV 1048576 FROM radacct WHERE UserName='%{${key}}' AND UNIX_TIMESTAMP(AcctStartTime) > '%%b'"

1

query="SELECT SUM(acctinputoctets + acctoutputoctets) DIV 1048576 FROM radacct WHERE UserName='%{${key}}' AND UNIX_TIMESTAMP(AcctStartTime) > '%%b'"

重要說明:在radius 中的結(jié)果是以B來統(tǒng)計的,上面的語句中查詢結(jié)果除以 1048576 將單位轉(zhuǎn)換為MB,如果此處不 除以 1048576 ,最大只能限制2G,因為 int 最大為 2G

1KB=1024B;

1MB=1024KB=1024×1024B=1048576B

2)在sqlcounter模塊中增加新的計數(shù)器

編輯sqlcounter文件

vi /etc/raddb/mods-available/sqlcounter

1

vi/etc/raddb/mods-available/sqlcounter

在最下面一行追加以下內(nèi)容,注意,如果本文件中有其他內(nèi)容,請注視掉

sqlcounter monthlytrafficcounter {

sql_module_instance = sql

#dialect = ${modules.sql.dialect}

dialect = "mysql"

counter_name = Monthly-Traffic

check_name = Max-Monthly-Traffic

reply_name = Monthly-Traffic-Limit

key = User-Name

reset = monthly

$INCLUDE ${modconfdir}/sql/counter/${dialect}/${.:instance}.conf

}

1

2

3

4

5

6

7

8

9

10

11

sqlcountermonthlytrafficcounter{

sql_module_instance=sql

#dialect = ${modules.sql.dialect}

dialect="mysql"

counter_name=Monthly-Traffic

check_name=Max-Monthly-Traffic

reply_name=Monthly-Traffic-Limit

key=User-Name

reset=monthly

$INCLUDE${modconfdir}/sql/counter/${dialect}/${.:instance}.conf

}

啟用sqlcounter模塊

cd /etc/raddb/mods-enabled

ln -s ../mods-available/sqlcounter sqlcounter

1

2

cd/etc/raddb/mods-enabled

ln-s../mods-available/sqlcountersqlcounter

3、將monthlytrafficcounter模塊添加到用戶認證過程中

編輯以下文件

vi /etc/raddb/sites-enabled/default

1

vi/etc/raddb/sites-enabled/default

在authorize部分中的sql后面,添加monthlytrafficcounter,例如:

authorize {

...

sql

# check monthly usage limit

monthlytrafficcounter

...

}

1

2

3

4

5

6

7

authorize{

...

sql

# check monthly usage limit

monthlytrafficcounter

...

}

注意:monthlytrafficcounter 一定要放在sql的下方,否則不生效,在很多教程中沒有說明這一點

4、重啟radiusd

1)重啟服務(wù)(或者先用radiusd -X模式進行調(diào)試)

systemctl restart radiusd

1

systemctlrestartradiusd

2)故障排除,某些時候radiusd重啟后,會出現(xiàn)以下錯誤

/etc/freeradius/mods-enabled/sqlcounter[43]: Reference

"${modules.sql.dialect}" not found

1

2

/etc/freeradius/mods-enabled/sqlcounter[43]:Reference

"${modules.sql.dialect}"notfound

錯誤分析:這個錯誤的原因是在sqlcounter里面調(diào)用了sql模塊里面的dialect變量。如果模塊的啟動順序出現(xiàn)了啟動sqlcounter時,sql還沒有被加載的情況,就會導(dǎo)致這個變量獲取不到。

解決思路一:是在/etc/raddb/radiusd.conf中的instantiate部分指定模塊的啟動順序;

解決思路二:簡單粗暴的方式,直接在sqlcounter中將所有的dialect都指定為’mysql’。例如:

sqlcounter dailycounter {

sql_module_instance = sql

#dialect = ${modules.sql.dialect}

dialect = "mysql"

counter_name = Daily-Session-Time

check_name = Max-Daily-Session

reply_name = Session-Timeout

key = User-Name

reset = daily

$INCLUDE ${modconfdir}/sql/counter/${dialect}/${.:instance}.conf

}

1

2

3

4

5

6

7

8

9

10

11

12

sqlcounterdailycounter{

sql_module_instance=sql

#dialect = ${modules.sql.dialect}

dialect="mysql"

counter_name=Daily-Session-Time

check_name=Max-Daily-Session

reply_name=Session-Timeout

key=User-Name

reset=daily

$INCLUDE${modconfdir}/sql/counter/${dialect}/${.:instance}.conf

}

5、對目標用戶或者組設(shè)置限量屬性

例如:增加mygroup組,對這個組限制每個月最大流量為1GB(1024MB)此處的單位已經(jīng)轉(zhuǎn)換為MB了。如果用戶已經(jīng)超過這個使用量,認證將失敗。

在radius數(shù)據(jù)庫的check表以及reply表中,分別添加以下兩條記錄(也可以使用第三方的radius操作界面進行操作,例如daloradius系統(tǒng))

# 在數(shù)據(jù)庫中限制用戶組的最大流量為1GB(本例中的用戶組名為mygroup)

mysql> INSERT INTO radgroupcheck (groupname,attribute,op,VALUE) VALUES ('mygroup','Max-Monthly-Traffic',':=','1024');

# 流量統(tǒng)計時間的間隔(60秒)

mysql> INSERT INTO radgroupreply (groupname,attribute,op,VALUE) VALUES ('mygroup','Acct-Interim-Interval',':=','60');

1

2

3

4

5

# 在數(shù)據(jù)庫中限制用戶組的最大流量為1GB(本例中的用戶組名為mygroup)

mysql>INSERTINTOradgroupcheck(groupname,attribute,op,VALUE)VALUES('mygroup','Max-Monthly-Traffic',':=','1024');

# 流量統(tǒng)計時間的間隔(60秒)

mysql>INSERTINTOradgroupreply(groupname,attribute,op,VALUE)VALUES('mygroup','Acct-Interim-Interval',':=','60');

如果用戶使用量已經(jīng)超過限制,radius認證會失敗。使用radtest調(diào)試,可以看到返回的信息

返回的錯誤信息樣例:

Sending Access-Request Id 219 from 0.0.0.0:40100 to 127.0.0.1:1812

User-Name = 'myusername'

User-Password = 'mypassword'

NAS-IP-Address = 172.16.241.135

NAS-Port = 0

Message-Authenticator = 0x00

Received Access-Reject Id 219 from 127.0.0.1:1812 to 127.0.0.1:40100 length 70

Reply-Message = 'Your maximum monthly usage time has been reached'

(0) -: Expected Access-Accept got Access-Reject

1

2

3

4

5

6

7

8

9

SendingAccess-RequestId219from0.0.0.0:40100to127.0.0.1:1812

User-Name='myusername'

User-Password='mypassword'

NAS-IP-Address=172.16.241.135

NAS-Port=0

Message-Authenticator=0x00

ReceivedAccess-RejectId219from127.0.0.1:1812to127.0.0.1:40100length70

Reply-Message='Your maximum monthly usage time has been reached'

(0)-:ExpectedAccess-AcceptgotAccess-Reject

6、【可選】為daloRadius系統(tǒng)添加dictionary輔助定義

使用daloRadius管理界面管理為用戶或組添加屬性時,選擇Vendor的下拉框可以很方便的選擇屬性。對于自定義的屬性,也可以使用SQL語句添加到dictionary表里使其出現(xiàn)在下拉列表里

INSERT INTO dictionary (Type, Attribute,Vendor, RecommendedOP,RecommendedTable,RecommendedHelper,RecommendedTooltip) VALUES ('integer','Max-Monthly-Traffic','dictionary.freeradius.vpntraffic', ':=', 'check', 'The traffic of user per month', '1024=1G');

INSERT INTO dictionary (Type, Attribute,Vendor, RecommendedOP,RecommendedTable,RecommendedHelper,RecommendedTooltip) VALUES ('integer','Monthly-Traffic-Limit','dictionary.freeradius.vpntraffic', ':=', 'reply', 'The traffic of user per month', '1024=1G');

1

2

3

INSERTINTOdictionary(Type,Attribute,Vendor,RecommendedOP,RecommendedTable,RecommendedHelper,RecommendedTooltip)VALUES('integer','Max-Monthly-Traffic','dictionary.freeradius.vpntraffic',':=','check','The traffic of user per month','1024=1G');

INSERTINTOdictionary(Type,Attribute,Vendor,RecommendedOP,RecommendedTable,RecommendedHelper,RecommendedTooltip)VALUES('integer','Monthly-Traffic-Limit','dictionary.freeradius.vpntraffic',':=','reply','The traffic of user per month','1024=1G');

總結(jié)

以上是生活随笔為你收集整理的mysql流量控制_Daloradius限制上网流量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。