ISP`s IT Аутсорсинг
Быстрый переход: Главная блога Главная сайта Форум
Если Вы чего то недопоняли или не нашли - задайте
вопрос на нашем форуме и мы попробуем Вам помочь.
Subnets.ru Регистрация IP и Автономных систем mega-net.ru

Архивные статьи в категории ‘VoIP’

Добро пожаловать в блог! Надеемся, что Вы еще вернетесь.

Статья: Asterisk: автообзвон (auto-dial out) и обратный звонок (callback) с использованием AGI

Проблема

При организации функции callback на Asterisk`е, когда Asterisk перезванивает и ты пытаешься ввести тоном номер, то нажатые тобой цифры начинают задваиваться, а то и затраиваться.

Причем это могло происходить не всегда и не зависело от аппарата, на котором набирали тоном.

Так же после многочисленных тестов стало точно понятно, что когда идет звонок из «города» на Asterisk, то подобных проблем не возникает, только если сам Asterisk звонит в «город».

VoIP соединение идет так:

E1 <—> Cisco AS5350 (c5350-js-mz.124-15.T11.bin) <—> Asterisk (версия 1.4.29_2)

Попробую более менее внятно рассказать о процессе нашего разбора с этой проблемой и последовательности действий, а вдруг кому ещё пригодится кроме меня, если я захочу освежить память по этому вопросу через какое то время.

Начали разбор полетов

Для того что бы выявить проблему стало понятно, что нужно подебажить DTMF на самом Asterisk. Как это сделать ?

Пока опыт работы с Asterisk не такой большой как хотелось бы, посему прибегнули к помощи гугла, через минут пять выяснили:

Открываем файл  logger.conf и там ищем строчку:

console => notice,warning,error

В нее дописывем dtmf, получаем:

console => notice,warning,error,dtmf

Сохраняем файл, входим в консоль Asterisk`а:

asterisk -r

И в консоле даем команду:

asterisk*CLI> logger reload

После чего, в той же консоле, задаем уровень дебага, я делал так:

asterisk*CLI> core set debug 3

Далее, для того что бы потестить нажатие кнопок, я внес нехитрые изменения в dialplan:

[dtmf_test]
exten => s,1,Answer()
exten => s,n,Wait(1)
exten => s,n(collect),Read(digito,,11)
exten => s,n,SayDigits(${digito})
exten => s,n,GoTo(collect)
exten => s,n,Hangup

Т.е. поднимаем трубку, ждем ввода 11-ти цифр, а затем проговариваем все что набрали, собственно в этот контекст я перенаправил callback вызовы.

Подготовились, значит можно начинать.

Делаю callback на свою мобилку, начинаю давить цифири на мобиле, в консоле Астериска вижу:

[ДАТА] DTMF[5031]: channel.c:2351 __ast_read: DTMF begin '9' received on SIP/gt-00000015
[ДАТА] DTMF[5031]: channel.c:2355 __ast_read: DTMF begin ignored '9' on SIP/gt-00000015
[ДАТА] DTMF[5031]: channel.c:2283 __ast_read: DTMF end '9' received on SIP/gt-00000015, duration 352 ms
[ДАТА] DTMF[5031]: channel.c:2336 __ast_read: DTMF end passthrough '9' on SIP/gt-00000015
[ДАТА] DTMF[5031]: channel.c:2351 __ast_read: DTMF begin '8' received on SIP/gt-00000015
[ДАТА] DTMF[5031]: channel.c:2355 __ast_read: DTMF begin ignored '8' on SIP/gt-00000015
[ДАТА] DTMF[5031]: channel.c:2283 __ast_read: DTMF end '8' received on SIP/gt-00000015, duration 376 ms
[ДАТА] DTMF[5031]: channel.c:2336 __ast_read: DTMF end passthrough '8' on SIP/gt-00000015

и т.д. Во, то что надо, дебаг нажатия кнопок есть.

На одно нажатие в дебаге 4-ре строки. Чем дальше я смотрел в дебаг тем больше понимал, что я нажимаю цифирь один раз, а в дебаге она могла появиться и 2 и 3 раза (т.к. после одного нажатия появлялось более 4-х строк).

Смотрим что вообще мы можем «потрогать» в Астериске на тему DTMF.

Открываем файл sip.conf:

relaxdtmf=yes ; Relax dtmf handling
dtmfmode = rfc2833 ; Set default dtmfmode for sending DTMF. Default: rfc2833
 ; Other options:
 ; info : SIP INFO messages
 ; inband : Inband audio (requires 64 kbit codec -alaw, ulaw)
 ; auto : Use rfc2833 if offered, inband otherwise

Это глобальные настройки, кроме них так же можно указать dtmfmode и для конкретного пира в его контексте.

Меняли режимы, ситуация не изменялась. Как работало через раз, так и продолжало работать.

Раз так, то смотреть нужно с обоих сторон, т.е. в какой то момент привлекли и девайс Cisco.

Смотрим что же у нас указано в dial-peer:

dial-peer voice 23 voip
 description 4_outgoing_asterisk
 translation-profile incoming fake_aon
 answer-address 0010.....
 session protocol sipv2
 voice-class codec 20
 dtmf-relay rtp-nte  h245-signal h245-alphanumeric
 no vad

В voice-class перечислены кодеки:

voice class codec 20
 codec preference 1 g723r53
 codec preference 2 g723ar53
 codec preference 3 g723r63
 codec preference 4 g723ar63
 codec preference 5 g729r8
 codec preference 6 g729br8
 codec preference 7 gsmfr
 codec preference 8 g726r16
 codec preference 9 g726r24
 codec preference 10 g726r32
 codec preference 11 g711alaw
 codec preference 12 g711ulaw

Решили ужать выбор кодеков до alaw и ulaw, т.к. тот же режим inband работет только с этими кодеками.

Тоже самое сделали и на Asterisk, запретив использование всех кодеков кроме этих двух, для этого в sip.conf, в настройках peer`а, который смотрит на Cisco, указали:

disallow=all
allow = alaw
allow = ulaw

Снова стали менять режимы в sip.conf, пробовать звонить, пофиг, все как было так и осталось.

Полезли на Cisco.com -> Configuring SIP DTMF Features, в частности интересовали предлагаемый самой циской debug:

Verifying SIP DTMF Support

To verify SIP DTMF support, perform the following steps as appropriate (commands are listed in alphabetical order).

SUMMARY STEPS

1. show running-config
2. show sip-ua retry
3. show sip-ua statistics
4. show sip-ua status
5. show sip-ua timers
6. show voip rtp connections
7. show sip-ua calls

Благодаря команде show sip-ua calls видно какой режим DTMF выбран в данный момент:

Call 1
SIP Call ID                : 12abb76a79d610df282e2b237177bfe5@XX.XXX.XXX.XXX
   State of the call       : STATE_SENT_ALERTING (14)
   Substate of the call    : SUBSTATE_NONE (0)
   Calling Number          : 001000119
   Called Number           : 8916XXXXXXX
   Bit Flags               : 0xC0001C 0x100 0x404
   CC Call ID              : 22371
   Source IP Address (Sig ): XXX.XXX.XXX.XXX
   Destn SIP Req Addr:Port : XXX.XXX.XXX.XXX:5060
   Destn SIP Resp Addr:Port: XXX.XXX.XXX.XXX:5060
   Destination Name        : XXX.XXX.XXX.XXX
   Number of Media Streams : 1
   Number of Active Streams: 0
   RTP Fork Object         : 0x0
   Media Mode              : flow-through
   Media Stream 1
     State of the stream      : STREAM_ADDING
     Stream Call ID           : -1
     Stream Type              : voice+dtmf (1)
     Negotiated Codec         : g711alaw (160 bytes)
     Codec Payload Type       : 8
     Negotiated Dtmf-relay    : rtp-nte
     Dtmf-relay Payload Type  : 101
     Media Source IP Addr:Port: XXX.XXX.XXX.XXX:18936
     Media Dest IP Addr:Port  : XXX.XXX.XXX.XXX:14328
     Orig Media Dest IP Addr:Port : 0.0.0.0:0

Итак теперь видно что происходит с двух сторон и какой режим выбирается и снова пробовали разнообразные режимы.

В Инете (в частности на www.voip-info.org/wiki/view/Asterisk+DTMF) иногда народ советовал прям в dialplan указывать режим DTMF перед набором чего-либо, сделать это можно командой SIPdtmfmode:

SIPDtmfMode(inband|info|rfc2833)

Но это как то тоже не очень спасало. После многочасовых разборок решили глянуть, а что у Asterisk`а на тему vad есть.

Решение

В файле codecs.conf:

; voice activity detection [true / false]
; reduces bitrate when no voice detected, used only for CBR
; (implicit in VBR/ABR)
vad => true

Таксссс.. опять же народ в Инете, при разборках с DTMF, советует с первую очередь гасить vad к чертям, делаем это:

vad => false

Далее была обнаружена вот эта статья «Changing DTMF tone frequency in Asterisk«:

Changing the DTMF tones
The Asterisk module dsp.c contains the definitions for DTMF tones. Just look for a part of the source code that says:

static float dtmf_row[] =
{
    697.0,  770.0,  852.0,  941.0
};
static float dtmf_col[] =
{
    1209.0, 1336.0, 1477.0, 1633.0
};

And change that to:

static float dtmf_row[] =
{
        732.0,  809.0,  894.0, 988.0
        /* 697.0,  770.0,  852.0,  941.0 */
};
static float dtmf_col[] =
{
        1270.0, 1404.0, 1551.0, 1715.0
        /* 1209.0, 1336.0, 1477.0, 1633.0 */
};

This will raise all detected DTMF codes by some 40Hz, enough for Asterisk to become completely tone-blind to existing DTMF codes.


Once you made the change, you must recompile Asterisk by:

  • 1. Stopping Asterisk
  • 2. Go to your Asterisk source directory
  • 3. Enter make clean
  • 4. Enter make
  • 5. Enter make install

Note that you still can send Asterisk DTMF codes to transfer the call, start monitoring or what else — as long as you use the new DTMF tone matrix you just input. This is pretty easy to do with most industrial-grade call handling equipment.

«Ну что ж, не грех попробовать»  — сказали мы и выполнили как написано.

Диалпир на циске был приведен к виду:

dial-peer voice 23 voip
 description 4_outgoing_asterisk
 translation-profile incoming fake_aon
 answer-address 0010.....
 session protocol sipv2
 codec g711alaw
 dtmf-relay rtp-nte
 no vad

Наконец то оно заработало, заработало как надо. По крайней мере, после многочасовых тестов, ни одного сбоя в наборе тоном не было. Надеемся что и далее не будет проблем.

Я решил написать все это для того, что бы если кто-то тоже заморочится с этой темой и не будет знать как к этому подступиться, ну и если я вернусь к этому вопросу позднее, чтобы не вспоминать что уже было сделано :).

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА ! Пожалуйста, уважайте чужой труд.

Авторы:  Панфилов Алексей (lehis (at) subnets.ru), Николаев Дмитрий (virus (at) subnets.ru)

Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 6, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту

Всем привет!

Очередная практическая задача по реализации транскодинга на AS5350xm.

Что такое транскодирование коротко можно прочитать здесь: http://en.wikipedia.org/wiki/Transcode

А сама задача появилась из цели экономии средств отдаваемых поставщикам услуг.

Существующая схема услуг:

Поставщик А <—> Е1 <—> Арендованный канале Е1 у поставщика Б <—> Е1 <—> Cisco AS5350xm <—> VoIP (SIP, g711) <—> SIP SERVER <—> Клиенты

Посчитав затраты, было решено отказаться от арендованного канала Е1 поставщика Б, а услуги от поставщика А решено было получать по VoIP.  После того как вопрос был согласован, постащик А выдал ТУ на подключение услуги, в связи с чем новая схема должна было стать такой:

Поставщик А <—> VoIP (H323, g729) <—> Cisco AS5350xm <—> VoIP (SIP, g711) <—> SIP SERVER <—> Клиенты

Просмотрев сайт www.cisco.com, было обнаружено, что необходимое транскодирование g729 <->  g711 можно реализовать без каких либо проблем при наличии IOS версий выше 12.4(20)Т3, 12.4(22)YB и 15.0(1)М (номера 13 и 14 для  IOS компанией Cisco не используются, т.к.  эти числа считаются «не счастливыми» в культурах разных  стран).  Но при отсутствии оной пришлось реализовать следующую схему:

Поставщик А <—> VoIP (H323, g729) <—> Cisco AS5350xm <—> Е1 (loop) <—> Cisco AS5350xm <—> VoIP (SIP, g711) <—> SIP SERVER <—> Клиенты

Т.е. принимаем звонок от поставщика отправляем его в Е1, «заворачиваем» его обратно и далее он «уходит»  в VoIP уже с необходимыми нам параметрами.  Сразу оговорюсь, что такая схема работает при наличии двух свободных Е1 на вашем маршрутизаторе.

Для начала нам потребуется кабель с разъемами RJ-45 и следуюзщей «распиновкой»:

E1 —- E1

1  —- 4

2 —- 5

На моем маршрутизаторе были свободны порты E1 3/2 и 3/3. Соединяем порты созданным кабелем и приступаем к настройкам.

Задаем параметры физических интерфейсов Е1:
!
controller E1 3/2
framing NO-CRC4
pri-group timeslots 1-31
!
controller E1 3/3
framing NO-CRC4
pri-group timeslots 1-31

Затем настройки D-каналов:

!
interface Serial3/2:15
no ip address
encapsulation hdlc
isdn switch-type primary-net5
isdn protocol-emulate network
isdn incoming-voice modem
!
interface Serial3/3:15
no ip address
encapsulation hdlc
isdn switch-type primary-net5
isdn incoming-voice modem

И проверяем состояние наших Е1:

#show  controllers e1

E1 3/2 is up.
Applique type is Channelized E1 — balanced
No alarms detected.
alarm-trigger is not set
Version info of slot 3:  HW: 519, PLD Rev: 6
Framer Version: 0x9

E1 3/3 is up.
Applique type is Channelized E1 — balanced
No alarms detected.
alarm-trigger is not set
Version info of slot 3:  HW: 519, PLD Rev: 6
Framer Version: 0x9

Далее настраиваем необходимые пиры (сразу будут указаны различные pattern направлений, объяснение будет ниже):

POTS:

Настройки пиров для нашей «петли»

!
dial-peer voice 3 pots
description ###INCOMING FROM OUR VoIP###
incoming called-number .
direct-inward-dial
port 3/2:D
no register e164
!
dial-peer voice 4 pots
description ###INCOMING FROM PROVIDER-A###
incoming called-number .
direct-inward-dial
port 3/3:D
no register e164

! — этот пир «отправляет» звонки из нашей VoIP сети в loop

!
dial-peer voice 800 pots
description ###FROM OUR VoIP TO LOOP###
destination-pattern 011.T
progress_ind setup enable 3
progress_ind alert enable 8
port 3/2:D

! — этот пир «отправляет» звонки из сети VoIP Поставщика А в loop

!
dial-peer voice 801 pots
description ###FROM PROVIDER-A TO LOOP###
destination-pattern 022.T
progress_ind setup enable 3
progress_ind alert enable 8
port 3/3:D

VoIP:

! — этот пир «принимает и отправляет» звонки из сети/в сеть VoIP Поставщика А

!
dial-peer voice 888 voip
description ###VoIP PROVIDER A###
translation-profile incoming FROM-PROVIDER-A-TO-LOOP
! —- подставляем необходимый префикс
destination-pattern 033.T
codec g729r8
session target ras ! —- наш шлюз регистрируется на гэйткипере постащика А (об этих настройках в другой статье)

incoming called-number 7…… ! —- для того чтобы звонок на наши номера прошел через этот пир и мы смогли подставить префикс
dtmf-relay h245-signal rtp-nte
fax-relay ecm disable
fax protocol t38 ls-redundancy 0 hs-redundancy 0 fallback none
no vad

! — этот пир «принимает и отправляет» звонки из нашей сети/в наше сеть VoIP

!
dial-peer voice 700 voip
description ###OUR VOIP###
translation-profile incoming FROM-OUR-VoIP-TO-LOOP
! —- подставляем необходимый префикс

answer-address 4957……
! —- необходимо для того чтобы звонки от наших абонентов прошли через этот пир и мы подставили необходимый префикс
destination-pattern 4957……
session protocol sipv2
session target sip-server
codec g711alaw
fax-relay ecm disable
fax protocol t38 ls-redundancy 0 hs-redundancy 0 fallback none
no vad

!
voice-port 3/3:D
translation-profile incoming FROM-LOOP-TO-PROVIDER-A
! —- подставляем необходимый префикс
disc_pi_off
input gain 3
echo-cancel coverage 32
cptone RU
music-threshold -45
bearer-cap Speech

Теперь собственно сама логика работы и ее реализация.

Входящие звонки со стороны Провайдера А мы принимаем и отправляем в поток 3/3, со стороны нашей сети все входящие звонки мы отправляем в поток 3/2.

При входящем звонке (направление звонка рассматриваем относительно AS5350xm) со стороны Провайдера А к набираемому номеру нам необходимо подставить префикс 022495, 022 — чтобы однозначно определить необходимый нам поток  3/3, а 495 приходится подставлять из-за того, что в нашей сети используются 10-ти значные АОНы, а провайдер присылает звонки на 7-ми значные.  Для однозначного определения входящего voip пира для звонка со стороны провайдера в пире 888 voip используется команда incoming called-number.  Звонок уходит в порт 3/3 согласно пиру 801, 022 при этом отрежется и из потока 3/2 придет вызов на номер 4957…… который смаршрутизируется согласно пиру 700 voip.

При входящем звонке со стороны нашей сети подставляем префикс 011 для отправки звонка в поток 3/2. Звонок уходит в порт 3/2 согласно пиру 800 pots. Чтобы однозначно определить входящий пир для нашей VoIP сети используется команда answer-address в пире 700 voip. Далее этот звонок «выходит» из 3/3 и для того, чтобы точно его отправить в сторону Поставщика А мы подставляем префикс 033 (возможно это излишне, но мы сразу предположим, что таких провайдеров может быть несколько) и звонок будет смаршрутизирован согласно пиру 888 voip.

Правила трансляции:

voice translation-rule 2
rule 1 /^7495\.*/ /011/
rule 2 /^\.*/ /011/
!
voice translation-rule 3
rule 1 /^\.*/ /022495/
!
voice translation-rule 4
rule 1 /^\.*/ /033/
!
voice translation-profile FROM-PROVIDER-A-TO-LOOP
translate called 3
!
voice translation-profile FROM-OUR-VOIP-TO-LOOP
translate called 2
!
voice translation-profile FROM-LOOP-TO-PROVIDER-A
translate called 4

На этом все, если, кому-то будет это полезным, буду рад. Жду Ваших комментариев и замечаний. Всех благ)

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА ! Пожалуйста, уважайте чужой труд.

Автор:  zaikini

Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 8, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту

Перед нами стояла задача реализовать на Addpac (например: Addpac AP200B или Addpac 1100B)  следующие функции:

  1. Звонков между портами.
  2. Перехвата и перевода звонков.
  3. Блокировка 8-ки ( номеров начинающихся с 8 ) на одном из портов.
  4. Выход в город.

Рассмотрим реализацию задач.

Немного теории:

FXS (Foreign Exchange Station или Subscriber) — голосовой интерфейс, эмулирующий расширение интерфейса PBX, для подключения обычного телефона.
Аббревиатура FXS применима к любому оборудованию, которое, с точки зрения телефона, является АТС.

Для порядка в нашем IT хозяйстве подписываем нужные нам FXS порты (в которые подключены телефонные аппараты):

! FXS
voice-port 0/0
description Panasonic-DECT#999

! FXS
voice-port 0/1
description Red-Phone#555

Создаем dial-peer’ы, принимающие звонки на внутренние номера 999 и 555,

dial-peer voice 10 pots
destination-pattern 999F
port 0/0

!
dial-peer voice 11 pots
destination-pattern 555F
port 0/1

Создаем dial-peer’ы, принимающие звонки на выданный нам по VoIP нашим оператором городской телефонный номер (например, 1234567):

dial-peer voice 5 pots
destination-pattern 1234567F
port 0/0

!
dial-peer voice 6 pots
destination-pattern 1234567F
port 0/1
preference 1

Далее, прописываем в режиме глобального конфигурирования:

dial-peer call-pickup 11
dial-peer call-hold h
dial-peer call-transfer h

Теперь для перехвата звонка надо будет нажать 11,  для перевода звонка — короткий отбой или флеш и телефонный номер.

Реализуем функцию блокировки 8:

dial-peer voice 20 voip
description Block_out_8*
destination-pattern 8T
huntstop
out-barred-group 1

Создаем группу 1, в которой будет прописан номер (например, 999), с которого запрещен набор 8-ки:

dialpattern-group 1
pattern 1 999F

И в конце разрешаем исходящие звонки в ТфОП через шлюз (в примере это IP-адрес 192.168.57.23) нашего VoIP провайдера:

dial-peer voice 30 voip
description out_calls
destination-pattern .T
session target 192.168.57.23
session protocol sip
codec g729
dtmf-relay rtp-2833
no vad

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Автор: neona

Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 3, среднее: 4,33 из 5)
Загрузка...
Отправить на почту Отправить на почту

Исходные данные

  1. Несколько vlan на сisco catalyst 3560G. В качестве примера будут использоваться vlan 10,20 и 30
  2. Сервер на FreeBSD с работающим trafd и сетевым интерфейсом «смотрящим» в cisco catalyst 3560G

Задача

Получить статистику по трафику для каждого из вланов по отдельности.

Вариант решения

1. Настройка зеркалирования трафика на 3560.

Предполагаем, что интерфейс сервера соединён с портом Gi0/1 на 3560.

Настраиваем порт:
c3560# conf t
c3560(config)# interface GigabitEthernet0/1
c3560(config-if)# description mirror_server
c3560(config-if)# switchport trunk encapsulation dot1q
c3560(config-if)# switchport trunk allowed vlan 10,20,30
c3560(config-if)# switchport mode trunk
c3560(config-if)# exit
c3560(config)# exit
c3560# wri

Создаём сессию span:
c3560# conf t
c3560(config)#monitor session 2 source vlan 10 , 20 , 30 both
c3560(config)#monitor session 2 destination interface Gi0/1 encapsulation dot1q
c3560(config)# exit
c3560# wri

На вторую команду коммутатор может сказать что-то похожее

% Warning: One or more specified dest port does not support requested encapsulation.

Однако порт нормально добавляется в сессию
c3560# sho monitor session 2

Session 2
---------
Type              : Local Session
Source VLANs      :
Both          : 10,20,30
Destination Ports : Gi0/11
Encapsulation : DOT1Q
Ingress : Disabled

2. Настройка интерфейсов сервера и trafd
Предполагаем, что на сервере для получения зеркалируемого трафика используется интерфейс bge1.

Создаём vlan’ы на интерфейсе bge1:

/sbin/ifconfig bge1 up
/sbin/ifconfig vlan10 create vlan 10 vlandev bge1
/sbin/ifconfig vlan10 up promisc
/sbin/ifconfig vlan20 create vlan 20 vlandev bge1
/sbin/ifconfig vlan20 up promisc
/sbin/ifconfig vlan30 create vlan 30 vlandev bge1
/sbin/ifconfig vlan30 up promisc
/sbin/ifconfig bge1 -promisc

Устанавливаем trafd:

cd /usr/ports/net-mgmt/trafd
make install clean

После установки смотрим, что он установился:

/usr/sbin/pkg_info | grep trafd
trafd-3.0.1_2 The BPF Traffic Collector

Описываем trafd в /etc/rc.conf (параметры будут использоваться стартовым скриптом /usr/local/etc/rc.d/trafd.sh.sample):

trafd_enable=»YES»
trafd_ifaces=»vlan10 vlan20 vlan30″
trafd_flags=»-r -p»

Стартуем trafd:
/usr/local/etc/rc.d/trafd.sh.sample start

И наблюдаем запущенные процессы:

/bin/ps -ax | grep trafd

93173  ??  Ss     0:04.28 /usr/local/bin/trafd -i vlan10 -r -p
93175  ??  Ss     0:12.64 /usr/local/bin/trafd -i vlan20 -r -p
93177  ??  Ss     2:05.00 /usr/local/bin/trafd -i vlan30 -r -p

Добавляем в планировщик (/etc/crontab) периодический сброс накопленной trafd информации:

*/10 * * * * root /usr/local/bin/trafdump vlan10; sleep 2; /usr/local/bin/trafsave vlan10
*/10 * * * * root /usr/local/bin/trafdump vlan20; sleep 2; /usr/local/bin/trafsave vlan20
*/10 * * * * root /usr/local/bin/trafdump vlan30; sleep 2; /usr/local/bin/trafsave vlan30

Логи будут сохраняться в директории /usr/local/var/trafd как отдельные файлы вида trafd.vlan10, trafd.vlan20, trafd.vlan30 в бинарном формате. Каждые 10 минут будет происходить дописывание вновь сбрасываемого трафика в эти файлы, т.е. append.
Файл с историей дампа трафика по умолчанию: /var/log/traffic.log

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

/sbin/sysctl net.inet.ip.forwarding=0
net.inet.ip.forwarding: 1 -> 0

а также терминировать полученные зеркалированные пакеты на сервере, запретив их хождение через вланы каким-либо файрволлом, например ipfw (правила лучше разместить где-нибудь вначале):

/sbin/ipfw add 10 deny ip from any to any via vlan10
/sbin/ipfw add 20 deny ip from any to any via vlan20
/sbin/ipfw add 30 deny ip from any to any via vlan30

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Автор: MadMax
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 4, среднее: 4,25 из 5)
Загрузка...
Отправить на почту Отправить на почту

Появилась задача, организовать конференции в Asterisk.

Все кажется просто, поправить два конфига и вуаля, но на деле все оказалось не просто.

Читаем инструкцию Asterisk cmd MeetMe. Пробуем, получаем облом. Не работает. Почему ? Расскажу как было у меня:

посмотрим, что у нас в подгруженных в Asterisk модулях, для этого зайдем в его CLI:

/usr/local/sbin/asterisk -r

и выполним команду show modules:

Asterisk 1.4.23.1, Copyright (C) 1999 — 2008 Digium, Inc. and others.
Created by Mark Spencer <markster@digium.com>
Asterisk comes with ABSOLUTELY NO WARRANTY; type ‘core show warranty’ for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type ‘core show license’ for details.
=========================================================================
Connected to Asterisk 1.4.23.1 currently running on core (pid = 13061)

aster*CLI> show modules

у себя я обнаружил, что модуля app_meetme.so в списке нету….

можно выполнить и более предметную команду:

aster*CLI> module show like app_meetme

а в логах честно об этом написано:

pbx_extension_helper: No application ‘MeetMe’

Начинаем гуглить и копать. Выясняется, что для того, чтобы был этот модуль нужно собрать zaptel

Ну чтож… идем в порт asterisk`а, делаем:

  1. cd /usr/ports/net/asterisk
  2. make rmconfig
  3. make

выбираем в списке zaptel и после мейка делаем:

make install

в /usr/local/etc/rc.d появляется файл zaptel:

/usr/local/etc/rc.d/zaptel

дописываем в /etc/rc.conf:

zaptel_enable=»YES»

запускаем:

/usr/local/etc/rc.d/zaptel start

после этого проверяем наличие загруженных модулей zaptel.ko и ztdummy.ko:

/sbin/kldstat

Id Refs Address Size Name
………………
3    5 0xc4fb9000 32000    zaptel.ko
…………………
14 1 0xc62a2000 2000 ztdummy.ko

если не подгрузилось, то они лежат тут: /usr/local/lib/zaptel, подгрузите их руками.

проверяем, что в /usr/local/lib/asterisk/modules появился app_meetme.so.

открываем файл /usr/local/etc/asterisk/modules.conf и добавляем:

load => app_meetme.so

открываем /usr/local/etc/asterisk/meetme.conf и добавляем конференцию:

conf => 501

открываем /usr/local/etc/asterisk/extensions.conf и добавляем экстенш для того, что бы попадать в эту конференцию:

exten => 501,1,MeetMe(501)

т.е. при звонке на внутренний номер 501 мы должны попадать в конференцию с номером 501.

да, замечу, что номер exten и номер конференции могут не совпадать.

Ну чтож, вроде все хорошо и здорово, перезапускаем asterisk:

/usr/local/etc/rc.d/asterisk restart

звоним на номер 501 и слышим: «В настоящий момент вы единственный в этой конференции» и трубка вешается (происходит Hangup)

как говориться «приехали»…..

смотрим в логи и видим:

app_meetme.c:800 build_conf: Unable to open pseudo device

начинаем гуглить и толком ничего не находим. Кто-то так и не смог решить проблему, кто-то ремил куски кода в исходках.

Что бы мы не делали, тока менялись ошибки:

app_meetme.c:1022 conf_run: Unable to set flags: Inappropriate ioctl for device

или

app_meetme.c:1756 conf_run: Unable to set buffering information: Bad file descriptor

или

app_meetme.c:1777 conf_run: Error getting conference

или

app_meetme.c: Unable to set flags: Inappropriate ioctl for device

Вот последнее что удалось добиться:

WARNING[4670] app_meetme.c: Unable to set flags: Inappropriate ioctl for device
WARNING[4670] app_meetme.c: Unable to set buffering information: Bad file descriptor
WARNING[4670] app_meetme.c: Unable to set linear mode: Bad file descriptor
WARNING[4670] app_meetme.c: Error getting conference
WARNING[4670] app_meetme.c: Error setting conference
WARNING[4670] app_meetme.c: Error flushing channel
WARNING[4670] app_meetme.c: Failed to read frame: Bad file descriptor

конференция так и не заработала…

Изрядно подустав от этого дела, мы обнаружили что существует альтернатива для app_meetme.so и это app_conference.so.

Читаем Asterisk cmd Conference

Приступаем к инсталлу:

  1. cd /usr/ports/net/asterisk
  2. make extract
  3. cd work/asterisk-1.4.23.1
  4. fetch http://dfn.dl.sourceforge.net/sourceforge/appconference/appconference-2.0.1.tar.gz
  5. tar -zxf appconference-2.0.1.tar.gz
  6. cd appconference-2.0.1
  7. Правим файл Makefile, вот diff:
    --- Makefile    2008-02-26 19:05:57.000000000 +0300
    +++ Makefile.new        2009-02-10 21:03:09.000000000 +0300
    @@ -18,9 +18,9 @@
    #
    
    INSTALL_PREFIX :=
    -INSTALL_MODULES_DIR := $(INSTALL_PREFIX)/usr/lib/asterisk/modules
    +INSTALL_MODULES_DIR := $(INSTALL_PREFIX)/usr/local/lib/asterisk/modules
    
    -ASTERISK_INCLUDE_DIR ?= ../asterisk/include
    +ASTERISK_INCLUDE_DIR ?= /usr/local/include
    
    REVISION = $(shell svnversion -n .)
  8. gmake
  9. gmake install

убеждаемся что файл app_conference.so появился в /usr/local/lib/asterisk/modules/

открываем файл /usr/local/etc/asterisk/modules.conf и добавляем:

load => app_conference

открываем /usr/local/etc/asterisk/extensions.conf и добавляем экстенш для того, что бы попадать в конференцию:

exten => 502,1,Conference(502)

перегружаем asterisk и убеждаемся что модуль подгружен:

aster*CLI> module show like app_conference

Module                         Description                              Use Count
app_conference.so              Channel Independent Conference Applicati 0
1 modules loaded

Основное отличие app_meetme.so и это app_conference.so в том что app_conference.so создает конференцию налету (on the fly) и не требует наличия zaptel.

Экстеншеном 502 мы попадаем в автоматом созданную конференцию 502.

И все РАБОТАЕТ !

Но app_conference.so не полный аналог app_meetme.so. Например не поставить PIN на вход или так же просто записать разговор в конференции. Эти вопросы можно решить с помощью самого asterisk 😉

о PIN: Asterisk cmd Conference в разделе » Setting up conferences».

запись разговора в конференции: Asterisk cmd Monitor

пример записи конференции, extensions.conf :

exten => 502,1,Answer
exten => 502,2,Wait(1)
exten => 502,3,Monitor(wav,myfilename)
exten => 502,4,Conference(502,ps)

Записанные файлы myfilename-in.wav и myfilename-out.wav будут лежать в /var/spool/asterisk/monitor/

Удачных вам конференций !

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Авторы: Николаев Дмитрий (virus (at) subnets.ru) и Панфилов Алексей (lehis (at) subnets.ru)
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 6, среднее: 4,50 из 5)
Загрузка...
Отправить на почту Отправить на почту