0

Centos 6.x で FreeRadius サーバーを構成し、mysql データベースで認証が正常に機能します。しかし、sqlcounter を使用して、mysql データベースからユーザーを使用して事前に合計帯域幅を確認することはできません。

私は次のように 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}'"

}

また、次のように「サイトで利用可能なデフォルト」authorize{} に 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」を使用すると、ユーザーを自動的に切断するのが好きです。

この問題を解決する方法を教えてください。ありがとうございました

4

1 に答える 1

3

まず、定義しました

poyrazwifi_Limit

構成した sqlcounter 名とは異なる承認セクション:-

sqlcounter wifi_Limit{

次に、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 は Radius の COA または POD 要求をリッスンする必要があり、NAS は FreeRadius client.conf ファイルで COA サーバーとして構成する必要があります。

于 2016-10-19T15:20:13.650 に答える