null

Забивание гвоздей микроскопом

Есть объекты, которым мы нашли применение.
Мы используем их, хотя почти наверняка не так, как их используют пришельцы.
Я совершенно уверен, что  в  подавляющем  большинстве  случаев  мы забиваем микроскопами  гвозди.

Братья Стругатские "Пикник на обочине"

Дано:

IP PBX в рабочей сети, IP телефон в другой сети и настроенный на другую IP PBX, ноутбук, имеющий VPN до рабочей сети, временно находящийся в другой сети, и, наконец, я, не желающий разговаривать через гарнитуру.

Если рассуждать логически, то для решения задачи идеальным решением должен являться SIP proxy, который надо будет прописать вторым аккаунтом на телефоне, а поэтому:

Решение 1:

Ставим siproxd и радуемся. Конфигурационный файл на первый взгляд простой и понятный. Но после изучения документации выясняется, что система с siproxd должна быть маршрутизатором на пути от IP телефона к PBX. Но IP телефон получает адрес и маршруты от "местного" DHCP сервера и его PBX находится в другой подсети, а значит трогать его настройки сети крайне не желательно. Вывод - не устраивает. Переходим к:

Решение 2:

Ставим openser и...

root@hostname:/usr/ports/net/openser# make 
===>  openser-1.2.3_1 is only for i386, while you are running amd64.
*** Error code 1

Stop in /usr/ports/net/openser.

Как так получается, что программа  написанная "entirely in C" не может работать на 64-х битном процессоре не очень понятно. Я задумался.

Шутка. На ноутбуке то у меня старый 32-х битный процессор, и на нём openser таки поставился. Но на правда притащил за собой еще и radiusclient. Я напрягся.

Открываем конфигруационный файл openser.cfg и...

openser.cfg: unmodified: line 1 of 409 [0%]

409 строк? Для такой простой задачи как SIP proxy? Я испугался.

Когда я дошёл до секции конфигурационного файла, описывающей маршрутизацию, в которой описание первого маршрута занимает около 140 строк... В общем немедленного pkg_delete его спасло только моё желание написать слова выше.

Решение 3:

У всех пользователей ноутбуков в обязательном порядке установлен asterisk. Как? У Вас на ноутбуке до сих не установлен asterisk? Немедленно поставте! И тогда это решение для Вас.

Как Вы наверное уже смогли догадаться, самым простым решением оказалась настройка asterisk. Хотя бы потому, что было с ним всё понятно и ясно что и куда куда писать.

Настроить потребовалось файл sip.conf:

[general]
; Между сетями IP телефона и рабочей PBX нет маршрутизации
; Поэтому направляем весь RTP трафик через наш asterisk
directmedia=no
; Мы за чистый цифровой звук
disallow=all
allow=ulaw
; Регистрируемся на рабочей PBX
register=exten@192.168.xxx.xxx:xxx

; Peer для рабочей PBX
[tuneit]
; Определяем контекст, куда попадёт входящий звонок
context=fromtuneit
type=friend
qualify=yes
host=192.168.xxx.xxx
; Входящие звонки будут содержать неизвестных нашему asterisk пользователей
insecure=invite
; Перезаписываем наш номер для исходящих звонков
fromuser=exten

; Описываем IP телефон, тут всё стандартно
[90001]
username=90001
callerid="Dmitry Afanasiev"
context=totuneit
type=friend
qualify=yes
host=dynamic

И файл extensions.ael:

globals {
// Мы используем полностью статичный план набора
 static=yes;
 writeprotect=yes;
}

// Входящие звонки от офисной PBX
context fromtuneit {
// Из-за пустого extension звонок попадает на s
 s => Dial(SIP/90001);
}

context totuneit {
// Все исходящие звонки направляем на рабочую PBX
 _X. => Dial(SIP/tuneit/${EXTEN});
}

Вот и всё. И овцы целы и волки сыты. А с небольшими изменениями конфигурации IP телефон и asterisk можно продолжать использовать для демонстрации SIP транка с SoftCo5816 в рамках проводимого мной курса.

Коротко о себе:

Работаю в компании Tune-IT и тьютором кафедры Вычислительной техники в СПбГУИТМО.

Очень люблю команду cat, core solaris и IPv6.

Ещё на эту же тему:

Запрос внешних данных в asterisk 1.6
"А я вам не звонил". Реализуем атаку VoIP-spoofing.
Project Schedule Management
Назначение поля username в iax.conf
Установка UCEMS на MS SQL Server 2008 Express
Asterisk + Solaris 10