2016-08-27 10 views
0

CentOS 6.xでFreeRadiusサーバを設定し、mysqlデータベースで認証が正常に動作します。 しかし、私はmysqlデータベースから私のユーザーを使用してpreiodicaly合計の帯域幅を確認するsqlcounterを使用することはできません。ヒット帯域幅を使用しているユーザを切断する

私はこのようなSQLCOUNTます

sqlcounter wifi_Limit{ 
count-attribute = Acct-Input-Octets 
counter-name = Mikrotik-Total-Limit 
check-name = Mikrotik-Total-Limit 
reply-name = Session-Timeout 
sqlmod-inst = sql 
key = User-Name 
reset = never 
query = "SELECT ((SUM(AcctInputOctets)+SUM(AcctOutputOctets))) FROM radacct WHERE UserName='%{%k}'" 

}

をしても、 "サイト使用可能なデフォルト" にwifi_limiteを挿入するには、次のように} {認可:

poyrazwifi_Limit{ 
    reject = 1 
} 
if(reject){ 
    reject 
} 

と私はこのようにradcheckに「Mikrotik-Total-Limit」属性を挿入します:

insert into radcheck(username,attribute,op,value) values('test','Mikrotik-Total-Limit',':=','999999') 

この設定は、このユーザが再びログインすることができなくなった後に、「999999」のpppoe接続を使用して総帯域を使用した後に正常に動作します。

しかし、総帯域幅「999999」を使用すると自動的にユーザーの接続を切断したいと思います。

この問題を修正するように教えてください。 には、設定した、あなたが名前sqlcounter異なりAUTHORIZEのセクションでは、

poyrazwifi_Limit

を定義しているあなたは

答えて

3

まず感謝: -

wifi_Limit sqlcounter {

第二には、あなたはsqlcounterを構成し、これは間違った構成であるむしろあなたは、これを必要としない

返信名=セッションタイムアウト

を与えています。これにより、ユーザーがSession-Timeoutとしてブラウズするために残されるデータのバイトが送信されます。

たとえば、ユーザーの「Mikrotik-Total-Limit」を999999に設定し、ユーザーが999990バイトを閲覧したとします。

したがって、ユーザーがSession-Timeout = 9の応答属性を認証すると返信されます。だから、9秒後にユーザーは残りの9バイトを閲覧したかどうかにかかわらず、ユーザーの認証が解除されます。これはあなたが望むものではないと思います。

だから、単にカウンタを設定することができます -

sqlcounter wifi_Limit{ 
count-attribute = Acct-Input-Octets 
counter-name = Mikrotik-Total-Limit 
check-name = Mikrotik-Total-Limit 
sqlmod-inst = sql 
key = User-Name 
reset = never 
query = "SELECT ((SUM(AcctInputOctets)+SUM(AcctOutputOctets))) FROM radacct WHERE UserName='%{%k}'" 

としてセクションを承認: -

authorize { 
...... 
wifi_Limit 
...... 
} 

第三に、今ではデータの制限セットに達したときに自動的にユーザーを切断する方法について。あなたはそれを達成するためにunlangを使用することができ、それで、あなたは、各アカウンティングパケットをチェックして、ユーザを切断するために次のコードを使用する必要があります: -

accounting { 
...... 
if ("%{sql: SELECT ((SUM(AcctInputOctets)+SUM(AcctOutputOctets))) FROM radacct WHERE UserName='%{User-Name}'}" > "%{sql: SELECT value from radcheck where username='%{User-Name}' and attribute='Mikrotik-Total-Limit'}") { 
    update disconnect { 
      User-Name = "%{User-Name}" 
      Calling-Station-Id = "%{Calling-Station-Id}" 
    } 
} 
...... 
} 

注:このために、あなたのNASは、あなたの半径のCOAやPODの要求に耳を傾けなければなりません、NASはFreeRadiusのclient.confファイルでCOAサーバとして設定する必要があります

関連する問題