Модуль ядра ses traf: відмінності між версіями

Матеріал з NoDeny
Перейти до навігації Перейти до пошуку
(Новая страница: «Если вы используете Radius, то в нем есть механизм регулярной отправки текущих данных по тр…»)
 
Немає опису редагування
Рядок 1: Рядок 1:
Если вы используете Radius, то в нем есть механизм регулярной отправки текущих данных по трафику по каждому абоненту. Это называется accounting. По умолчанию, NoDeny использует accounting только для того, чтобы удостовериться, что клиент все еще подключен. Данные по трафику просто игнорируются. Мы можем настроить настроить отправку этих данных в биллинг.
==Общая информация==
Если вы используете Radius, то в нем есть механизм регулярной отправки текущих данных по трафику по каждому абоненту. Это называется accounting. По умолчанию, NoDeny использует accounting только для того, чтобы удостовериться, что клиент все еще подключен. Данные по трафику просто игнорируются. Мы можем настроить отправку этих данных в биллинг.


Нам необходимо изменить mysql-процедуры accounting-а так, чтобы они:
Нам необходимо изменить mysql-процедуры accounting-а так, чтобы они:
1) принимали трафик от radius
# принимали трафик от radius
2) записывали в таблицу ses_traf
# записывали в таблицу ses_traf


Напрямую начислять трафик абонентам не получится т.к. радиус присылает общий трафик, а не за последний интервал времени. А нам нужно с каждым запросом увеличивать в базе данные по трафику. Поэтому используется проомежуточная таблица ses_traf и модуль ядра ses_traf, который обрабатывает данные из этой таблицы и начисляет абонентам.
Напрямую начислять трафик абонентам не получится т.к. радиус присылает общий трафик, а не за последний интервал времени. А нам нужно с каждым запросом увеличивать в базе данные по трафику. Поэтому используется проомежуточная таблица ses_traf и модуль ядра ses_traf, который обрабатывает данные из этой таблицы и начисляет абонентам.
==Настроим radius на отправку данных по трафику==
=== Freeradius версии 2==
В файле /usr/local/etc/raddb/sql.conf заменить
<pre>
postauth_query = "call radupdate('%{User-Name}','%{reply:Framed-IP-Address}',\
                'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')"
</pre>
на
<pre>
postauth_query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\
                    'user=%{Calling-Station-Id};nas=%{NAS-IP-Address};ses=%{Acct-Session-Id}','%{Acct-Session-Id}',\
                    (%{%{Acct-Input-Gigawords}:-0} * POWER(2, 32)) + %{%{Acct-Input-Octets}:-0},\
                    (%{%{Acct-Output-Gigawords}:-0} * POWER(2, 32)) + %{%{Acct-Output-Octets}:-0})"
</pre>
а также
<pre>
accounting_update_query = "call radupdate('%{User-Name}','%{reply:Framed-IP-Address}',\
                'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')"
</pre>
на
<pre>
accounting_update_query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\
                    'user=%{Calling-Station-Id};nas=%{NAS-IP-Address};ses=%{Acct-Session-Id}','%{Acct-Session-Id}',\
                    0,0})"
</pre>
=== Freeradius версии 3===
В файле /usr/local/etc/raddb/mods-enabled/sql  заменить
<pre>
start {
                query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\
                        'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')"
            }
</pre>
на
<pre>
start {
                query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\
                        'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')\
                        (%{%{Acct-Input-Gigawords}:-0} * POWER(2, 32)) + %{%{Acct-Input-Octets}:-0},\
                        (%{%{Acct-Output-Gigawords}:-0} * POWER(2, 32)) + %{%{Acct-Output-Octets}:-0})"
            }
</pre>

Версія за 07:50, 20 вересня 2019

Общая информация

Если вы используете Radius, то в нем есть механизм регулярной отправки текущих данных по трафику по каждому абоненту. Это называется accounting. По умолчанию, NoDeny использует accounting только для того, чтобы удостовериться, что клиент все еще подключен. Данные по трафику просто игнорируются. Мы можем настроить отправку этих данных в биллинг.

Нам необходимо изменить mysql-процедуры accounting-а так, чтобы они:

  1. принимали трафик от radius
  2. записывали в таблицу ses_traf

Напрямую начислять трафик абонентам не получится т.к. радиус присылает общий трафик, а не за последний интервал времени. А нам нужно с каждым запросом увеличивать в базе данные по трафику. Поэтому используется проомежуточная таблица ses_traf и модуль ядра ses_traf, который обрабатывает данные из этой таблицы и начисляет абонентам.

Настроим radius на отправку данных по трафику

= Freeradius версии 2

В файле /usr/local/etc/raddb/sql.conf заменить

postauth_query = "call radupdate('%{User-Name}','%{reply:Framed-IP-Address}',\
                'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')"

на

postauth_query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\
                    'user=%{Calling-Station-Id};nas=%{NAS-IP-Address};ses=%{Acct-Session-Id}','%{Acct-Session-Id}',\
                     (%{%{Acct-Input-Gigawords}:-0} * POWER(2, 32)) + %{%{Acct-Input-Octets}:-0},\
                    (%{%{Acct-Output-Gigawords}:-0} * POWER(2, 32)) + %{%{Acct-Output-Octets}:-0})"

а также

accounting_update_query = "call radupdate('%{User-Name}','%{reply:Framed-IP-Address}',\
                'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')"

на

accounting_update_query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\
                    'user=%{Calling-Station-Id};nas=%{NAS-IP-Address};ses=%{Acct-Session-Id}','%{Acct-Session-Id}',\
                     0,0})"

Freeradius версии 3

В файле /usr/local/etc/raddb/mods-enabled/sql заменить

start {
                query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\
                        'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')"
            }

на

start {
                query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\
                        'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')\
                        (%{%{Acct-Input-Gigawords}:-0} * POWER(2, 32)) + %{%{Acct-Input-Octets}:-0},\
                        (%{%{Acct-Output-Gigawords}:-0} * POWER(2, 32)) + %{%{Acct-Output-Octets}:-0})"
            }