Simult Chek: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
Строка 8: Строка 8:
 
В результате, возможна ситуация когда из-за различных причин, как например, нагрузка NAS-a или потерь в сети, в результате возникает некоторый промежмежуток времени, в течении которого возможно авторизоваться повторно.
 
В результате, возможна ситуация когда из-за различных причин, как например, нагрузка NAS-a или потерь в сети, в результате возникает некоторый промежмежуток времени, в течении которого возможно авторизоваться повторно.
   
Следующяя схема илюстрирует эту ситуацию
 
   
 
Следующяя схема илюстрирует эту ситуацию:
  +
С UserName=test пробуют соединиться 2 различных клиента.
   
  +
<PRE>
  +
mysql> select * from radcheck where username='test';
  +
+-------+-----------+------------------+----+-----------+
  +
| id | UserName | Attribute | op | Value |
  +
+-------+-----------+------------------+----+-----------+
  +
| 9295 | test | Pool-Name | := | ippool_1 |
  +
| 9294 | test | Password | == | password |
  +
| 9293 | test | Auth-Type | := | MS-CHAP |
  +
| 9296 | test | Simultaneous-Use | := | 1 |
  +
+-------+-----------+------------------+----+-----------+
  +
4 rows in set (0.00 sec)
  +
</PRE>
   
 
<TABLE border=1>
 
<TABLE border=1>
 
<TR>
 
<TR>
<TD>Время ("кванты")</TD><TD>Первый клиент</TD><TD>Второй клиент</TD><TD>Radius-Сервер</TD>
+
<TD>Время ("кванты")</TD><TD>Первый клиент (UserName=test)</TD><TD>Второй клиент (UserName=test)</TD><TD>Radius-Сервер</TD>
 
</TR>
 
</TR>
 
<TR>
 
<TR>
<TD>1</TD><TD>Установка соединения (ppp)</TD><TD> </TD>
+
<TD>1</TD><TD>Установка соединения (ppp)</TD><TD> </TD><TD></TD>
 
</TR>
 
</TR>
 
<TR>
 
<TR>
<TD>2</TD><TD>Запрос к радиусу Auth-Request</TD><TD>Установка соединения (ppp)</TD>
+
<TD>2</TD><TD>Запрос к радиусу Auth-Request</TD><TD>Установка соединения (ppp)</TD><TD>Получение запроса от Клиента 1, проверка атрибутов, Вычисление значения </TD>
 
</TR>
 
</TR>
 
<TR>
 
<TR>

Версия 10:49, 29 апреля 2009

Описание проблемы

В сети используется VPN (accel-pptp) с авторизацией на центральном radius-сервере (freeradius). При попытке авторизации 2 и более клиентов с одинаковыми UserName может возникнуть ситуация когда пытающиеся авторизоваться (или часть из них) пройдут авторизацию успешно.

Это связано с особенностью провеки одновременности подключений - запрос

simul_count_query = "SELECT COUNT(*) FROM ${acct_table1} WHERE UserName=\'%{SQL-User-Name}\' AND AcctStopTime = 0"

проверяет тольк наличие сессий в таблице acct_table1 (обычно radacct). Сессии в таблице acct_table1 создаются только при получении Acct-пакета от NAS-а (VPN-серверов в моем случае ). В результате, возможна ситуация когда из-за различных причин, как например, нагрузка NAS-a или потерь в сети, в результате возникает некоторый промежмежуток времени, в течении которого возможно авторизоваться повторно.


Следующяя схема илюстрирует эту ситуацию: С UserName=test пробуют соединиться 2 различных клиента.

mysql> select * from radcheck where username='test';
+-------+-----------+------------------+----+-----------+
| id    | UserName  | Attribute        | op | Value     |
+-------+-----------+------------------+----+-----------+
|  9295 | test      | Pool-Name        | := | ippool_1  |
|  9294 | test      | Password         | == | password  |
|  9293 | test      | Auth-Type        | := | MS-CHAP   |
|  9296 | test      | Simultaneous-Use | := | 1         |
+-------+-----------+------------------+----+-----------+
4 rows in set (0.00 sec)
Время ("кванты")Первый клиент (UserName=test)Второй клиент (UserName=test)Radius-Сервер
1Установка соединения (ppp)
2Запрос к радиусу Auth-RequestУстановка соединения (ppp)Получение запроса от Клиента 1, проверка атрибутов, Вычисление значения
2Запрос к радиусу Auth-Request