Подключение к FREERADIUS. Часть 4

Материал из M-200 WIKI
Версия от 10:39, 3 декабря 2014; Pax (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Взаимодействие М-200 - freeradius позволяет средствами сервера управлять маршрутизацией вызовов. В идеале можно предположить полный отказ от использования таблиц маршрутизации и переход на внешний обработчик вызовов. Но это слишком серьезная задача, чтобы описать ее в этой статье. Так что сейчас я просто покажу, что можно сделать с вызовом, используя rlm_perl.


Из того, что м-200 отправляет в запросе, нас интересуют следующие поля:

$RAD_REQUEST{'Calling-Station-Id'}
$RAD_REQUEST{'Called-Station-Id'}
$RAD_REQUEST{'h323-gw-id'}
  • Calling-Station-Id - номер вызывающего абонента
  • Called-Station-Id - номер вызываемого абонента
  • h323-gw-id - точка входа


Для управления маршрутизацией используются следующие поля:

$RAD_REPLY{'Calling-Station-Id'}
$RAD_REPLY{'Called-Station-Id'}
$RAD_REPLY{'Connect-Info'}


  • Calling-Station-Id - номер вызывающего абонента
  • Called-Station-Id - номер вызываемого абонента


Соответственно эти параметры могут быть переданы в станцию, например вот так:

if ($RAD_REQUEST{'Calling-Station-Id'} == '904') {
   $RAD_REPLY{'Called-Station-Id'} = "060";
   $RAD_REPLY{'Calling-Station-Id'} = "3311554";
   return RLM_MODULE_OK;
}


Тестовый звонок:

SEIZ EXT<SIP>(904)$
CALL EXT<SIP>(904)$:6157 -> CallAuth_in(770:9)$:6205 [904,407]
SEIZ CallAuth_out(1538:9)$
CALL CallAuth_out(1538:9)$:6206 -> INT_IP(769/13)$:6131 [3311554,443]


Как видно, CallAuth_out организует вызов с измененными номерами.


  • Connect-Info


Для маршрутизации вызовов после прохождения авторизации используется таблица, к которой привязаны порты авторизации:

<geshi lang=smp lines=0>

   AIR [3] { PROFIL = 24             // AIR TYPE = AIR_UNIFIED
       PORT [1-10] { PROFIL = 67       // SIG = SIG_CALLAUTH
       GROUP = 17
   }
   ..............

   GROUP [17] { ROUTE = 7 }
   ..............
   ROUTE [7] { NAME = "Radius"
       RECORD "***" LOCAL
   }

</geshi>

В данном случае это ROUTE [7]. По этой таблице все 3-х значные номера рассматриваются как внутренние.

Если станция получает Connect-Info, вместо LOCAL будет использовано направление, которое передано этим параметром. Параметр может содержать:


Например, у меня есть направление ps:

<geshi lang=smp lines=0>

   DIR [14] { NAME = "ps" 7  }

</geshi>


Тогда, я могу перенаправить 3-х значный вызов в другое направление:

if ($RAD_REQUEST{'Calling-Station-Id'} == '904') {
   $RAD_REPLY{'h323-credit-time'} = "h323-credit-time=1000";
   $RAD_REPLY{'Connect-Info'} = "ps";
   $RAD_REPLY{'Called-Station-Id'} = "060";
   $RAD_REPLY{'Calling-Station-Id'} = "3311554";
   return RLM_MODULE_OK;
}


Тестовый звонок:

Коммутатор:

SEIZ EXT<SIP>(904)$
CALL EXT<SIP>(904)$:6157 -> CallAuth_in(770:10)$:6207 [904,407]
SEIZ CallAuth_out(1538:10)$
CALL CallAuth_out(1538:10)$:6208 -> INT_IP(769/14)$:6132 [3311554,060]

МАЛ

SEIZ INT_IP(772/14)$
CALL INT_IP(772/14)$:779 -> DSS1(1:3,out,,)$:7 [3311554,060]


Как видно, вызов ушел в поток.


Так же можно использовать физический адрес:

if ($RAD_REQUEST{'Calling-Station-Id'} == '904') {
   $RAD_REPLY{'h323-credit-time'} = "h323-credit-time=1000";
   $RAD_REPLY{'Connect-Info'} = "#100001015";
   $RAD_REPLY{'Called-Station-Id'} = "060";
   $RAD_REPLY{'Calling-Station-Id'} = "3311554";
   return RLM_MODULE_OK;
}

Но первый путь предпочтительнее.


Вот вкратце и все. Надеюсь эти заметки будут кому-нибудь полезны.

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты