The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Проблема с голосом в одну сторону."
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (VoIP / FreeBSD)
Изначальное сообщение [ Отслеживать ]

"Проблема с голосом в одну сторону."  +/
Сообщение от rashuk (ok) on 16-Янв-15, 13:39 
Здравствуйте многоуважаемые форумчане.
Главный офис:
Телефоны SPA303.  
Сервер Asterisk в локальной сети без внешнего IP c адрессом 192.168.0.2 (за NAT).

У нужного пира опция nat=yes.

sip_nat.conf

externip=99.88.77.66
localnet=192.168.0.0/255.255.255.0


Шлюз ОС FreeBSD 10, интерфейсы: rl0 - 192.168.0.1, rl1 подключен к провайдеру без IP, внешний адрес 99.88.77.66 по PPPoE (tun0) на нем же NAT.

natd.conf

same_ports
redirect_port udp 192.168.0.2:5060-5070 5060-5070
redirect_port udp 192.168.0.2:10000-20000 10000-20000
redirect_port tcp 192.168.0.2:1720-1730 1720-1730

rc.firewall

00001 722546 294026189 divert 8668 ip from any to any via tun0
00002 355907  36756204 divert 8668 ip from 192.168.0.0/24 to any
00003 685557 506848710 allow ip from any to 192.168.0.0/24
00004 335261  30789916 allow ip from 192.168.0.0/24 to any
00005      1       257 divert 8668 udp from any to 99.88.77.66 dst-port 5060-5070,10000-20000 in recv tun0
00006   3676    381312 divert 8668 udp from any to 99.88.77.66 src-port 5060-5070,10000-20000 in recv tun0
00007     83      4980 divert 8668 tcp from any to 99.88.77.66 dst-port 1720-1730 in recv tun0
00008      6       296 divert 8668 tcp from any to 99.88.77.66 src-port 1720-1730 in recv tun0
00009      0         0 divert 8668 tcp from 192.168.0.2 to any dst-port 1720-1730 in recv tun0
00010      0         0 divert 8668 tcp from 192.168.0.2 1720-1730 to any in recv tun0
00011      0         0 divert 8668 udp from 192.168.0.2 to any dst-port 5060-5070,10000-20000 out xmit tun0
00012      0         0 divert 8668 udp from 192.168.0.2 5060-5070,10000-20000 to any out xmit tun0
00030      0         0 allow udp from 99.88.77.66 to 192.168.0.2 dst-port 5060-5070 in keep-state
00040      0         0 allow udp from 99.88.77.66 to 192.168.0.2 dst-port 4569 in keep-state
00050      0         0 allow udp from 99.88.77.66 to 192.168.0.2 dst-port 2727 in keep-state
00055      0         0 allow tcp from 99.88.77.66 to 192.168.0.2 dst-port 1720-1730 in keep-state
00056      0         0 allow tcp from 192.168.0.2 to any dst-port 1720-1730 in keep-state
00060      0         0 allow udp from 99.88.77.66 to 192.168.0.2 dst-port 9999-20001 in keep-state
00070      0         0 allow udp from 192.168.0.2 to any out keep-state
00080      0         0 allow udp from any to 192.168.0.2 out keep-state
00200      0         0 allow ip from any to any via rl0
00210   2516    513261 allow ip from any to any via rl1
00220 375213  42626433 allow ip from any to any via tun0
65535    676     60697 deny ip from any to any

(не судите строго это 999 версия rc.firewall)

Удаленный офис:
Телефон SPA303:
RTP(min-max):16384-16386

DSl Modem Speedport W 723V
Проброшены порты на локальный телефон

UDP: 5060-5065, 10000-20000
TCP: 1720-1725
Телефон регистрируется.

В общем суть проблемы:
Когда звоню с главного офиса на удаленный телефон, голос проходит (друг-друга слышно), когда же звоню с удаленного телефона на главный офис вызов проходит голоса не слышно (никто никого не слышит , в tcpdump пакеты c 192.168.0.2 на удаленный модем и обратно по RTP пакетам ходят).

Какие будут идеи?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Проблема с голосом в одну сторону."  +/
Сообщение от co6aka (ok) on 17-Янв-15, 00:23 
Какя версия астериска? Что логи астериска говорят? Что идет в консоли астериска, при звонке? Какой тип ната(параметр nat) вы используете в sip.conf? Если вы используете только sip и udp, то вам достаточно пробрасывать тлолько 5060 udp для сигнализации и 10000-20000 udp для голоса. И у вас реально тысячи звонков что вам нужно 10 000 портов открывать?

PS: А вообще похоже у вас голос не проходит из-за directmedia=yes  в sip.conf. Если это так, то внешний абонент не может создать прямое соединение с внутренним абонентом. В таком случае установите directmedia=no и голос пойдет через астериск на который у вас устновлен редирект и все будет работать.

PPS: Я не очень помню логику ipfw,  но вот это что за правило такое???

00060      0         0 allow udp from 99.88.77.66 to 192.168.0.2 dst-port 9999-20001 in keep-state

И разве после редиректа пакета с инета в локальную сеть, адрес отправителя заменяется на внешний адрес шлюза (99.88.77.66)???

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Проблема с голосом в одну сторону."  +/
Сообщение от universite email(ok) on 17-Янв-15, 04:23 

Используйте другую реализацию NAT - ipfw nat
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Проблема с голосом в одну сторону."  +/
Сообщение от rashuk (ok) on 17-Янв-15, 15:55 
> Используйте другую реализацию NAT - ipfw nat

Последовав Вашему совету переписал на ядерный НАТ

rc.firewall

wif="tun0"
lif="rl0"
vif="ng*"
lo="lo0"

lip="192.168.0.1"
wip="99.88.77.66"
voip="192.168.0.2"

sip="5060-5070"
rtp="10000-20000"

ptvoip="redirect_port udp ${voip}:${sip} ${sip}"
ptrtp="redirect_port udp ${voip}:${rtp} ${rtp}"
pt1720="redirect_port tcp ${voip}:1720 1720"

cmd="ipfw -q"

${cmd} -f flush
${cmd} add 5 allow all from any to me 22
${cmd} add 6 allow icmp from any to me
${cmd} add 10 allow all from any to any via ${lif}
${cmd} add 11 allow all from any to any via ${lo}
${cmd} add 12 allow all from any to any via ${vif}
${cmd} add 13 allow all from any to me 1723 keep-state
${cmd} add 13 allow all from me 1723 to any keep-state
${cmd} add 17 allow gre from any to any
${cmd} nat 1 config log if ${wif} reset same_ports deny_in ${ptvoip} ${ptrtp} ${pt1720}
${cmd} add 20 nat 1 udp from any to ${wip} ${sip} in via ${wif}
${cmd} add 25 nat 1 udp from any to ${wip} ${rtp} in via ${wif}
${cmd} add 30 nat 1 tcp from any to ${wip} 1720 in via ${wif}
${cmd} add 35 nat 1 udp from ${voip} to any ${sip} out via ${wif}
${cmd} add 40 nat 1 udp from ${voip} to any ${rtp} out via ${wif}
${cmd} add 45 nat 1 tcp from ${voip} to any 1720 out via ${wif}
${cmd} add 50 nat 1 all from any to any via ${wif}
${cmd} add 65534 allow all from any to any

Последовав совету от co6aka вырубил directmedia=no.

Также изменено:

На DSL Modem Speedport W 723V убрал проброс портов.

Что изменилось:
регистрация проходит, звонки на удаленный телефон проходят вместе с голосом. Из удаленного офиса позвонить могут только один раз с передачей голоса, последующие звонки идут без голоса. Что самое интересное есть еще один удаленный офис с SPA303 за Dlink DSR-150, все слышно и оттуда и туда.

Логи Астериска 1.6:

400 удаленный за Speedport, 408 удаленный за D-Link, 777 мой на офисе.

Звонок с 400 на 777, 1 рабочий:
    -- Executing [777@from-internal:1] GotoIf("SIP/400-00000213", "0?ext-local,777,1") in new stack
    -- Executing [777@from-internal:2] Macro("SIP/400-00000213", "user-callerid,") in new stack
    -- Executing [s@macro-user-callerid:1] Set("SIP/400-00000213", "AMPUSER=400") in new stack
    -- Executing [s@macro-user-callerid:2] GotoIf("SIP/400-00000213", "0?report") in new stack
    -- Executing [s@macro-user-callerid:3] ExecIf("SIP/400-00000213", "1?Set(REALCALLERIDNUM=400)") in new stack
    -- Executing [s@macro-user-callerid:4] Set("SIP/400-00000213", "AMPUSER=400") in new stack
    -- Executing [s@macro-user-callerid:5] Set("SIP/400-00000213", "AMPUSERCIDNAME=Oleg Suslensky") in new stack
    -- Executing [s@macro-user-callerid:6] GotoIf("SIP/400-00000213", "0?report") in new stack
    -- Executing [s@macro-user-callerid:7] Set("SIP/400-00000213", "AMPUSERCID=400") in new stack
    -- Executing [s@macro-user-callerid:8] Set("SIP/400-00000213", "CALLERID(all)="Oleg Suslensky" <400>") in new stack
    -- Executing [s@macro-user-callerid:9] ExecIf("SIP/400-00000213", "1?Set(CHANNEL(language)=ru)") in new stack
    -- Executing [s@macro-user-callerid:10] GotoIf("SIP/400-00000213", "0?continue") in new stack
    -- Executing [s@macro-user-callerid:11] Set("SIP/400-00000213", "__TTL=64") in new stack
    -- Executing [s@macro-user-callerid:12] GotoIf("SIP/400-00000213", "1?continue") in new stack
    -- Goto (macro-user-callerid,s,19)
    -- Executing [s@macro-user-callerid:19] NoOp("SIP/400-00000213", "Using CallerID "Oleg Suslensky" <400>") in new stack
    -- Executing [777@from-internal:3] GotoIf("SIP/400-00000213", "1?skipdb") in new stack
    -- Goto (from-internal,777,5)
    -- Executing [777@from-internal:5] Set("SIP/400-00000213", "__NODEST=") in new stack
    -- Executing [777@from-internal:6] Set("SIP/400-00000213", "__BLKVM_OVERRIDE=BLKVM/777/SIP/400-00000213") in new stack
    -- Executing [777@from-internal:7] Set("SIP/400-00000213", "__BLKVM_BASE=777") in new stack
    -- Executing [777@from-internal:8] Set("SIP/400-00000213", "DB(BLKVM/777/SIP/400-00000213)=TRUE") in new stack
    -- Executing [777@from-internal:9] Set("SIP/400-00000213", "RRNODEST=") in new stack
    -- Executing [777@from-internal:10] Set("SIP/400-00000213", "__NODEST=777") in new stack
    -- Executing [777@from-internal:11] Set("SIP/400-00000213", "RecordMethod=Group") in new stack
    -- Executing [777@from-internal:12] Macro("SIP/400-00000213", "record-enable,777,Group") in new stack
    -- Executing [s@macro-record-enable:1] GotoIf("SIP/400-00000213", "1?check") in new stack
    -- Goto (macro-record-enable,s,4)
    -- Executing [s@macro-record-enable:4] AGI("SIP/400-00000213", "recordingcheck,20150117-132349,1421493829.540") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/recordingcheck
    -- <SIP/400-00000213>AGI Script recordingcheck completed, returning 0
    -- Executing [s@macro-record-enable:5] MacroExit("SIP/400-00000213", "") in new stack
    -- Executing [777@from-internal:13] Set("SIP/400-00000213", "RingGroupMethod=ringallv2") in new stack
    -- Executing [777@from-internal:14] Set("SIP/400-00000213", "_FMGRP=777") in new stack
    -- Executing [777@from-internal:15] GotoIf("SIP/400-00000213", "0?doconfirm") in new stack
    -- Executing [777@from-internal:16] Macro("SIP/400-00000213", "dial,20,tr,777") in new stack
    -- Executing [s@macro-dial:1] GotoIf("SIP/400-00000213", "1?dial") in new stack
    -- Goto (macro-dial,s,3)
    -- Executing [s@macro-dial:3] AGI("SIP/400-00000213", "dialparties.agi") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/dialparties.agi
dialparties.agi: Starting New Dialparties.agi
dialparties.agi: Caller ID name is 'Oleg Suslensky' number is '400'
       > dialparties.agi: USE_CONFIRMATION:  'FALSE'
       > dialparties.agi: RINGGROUP_INDEX:   ''

dialparties.agi: Methodology of ring is  'ringallv2'
    -- dialparties.agi: Added extension 777 to extension map
       > dialparties.agi: got fmgrp_prering: 2, fmgrp_grptime: 20
       > dialparties.agi: fmgrp_totalprering: 22
       > dialparties.agi: found extension in pre-ring and array
       > dialparties.agi: ringallv2 ring times: REALPRERING: 22, PRERING: 2

    -- dialparties.agi: Extension 777 cf is disabled
    -- dialparties.agi: Extension 777 do not disturb is disabled
       > dialparties.agi: extnum 777 has:  cw: 1; hascfb: 0 [] hascfu: 0 []

    -- dialparties.agi: dbset CALLTRACE/777 to 400
    -- dialparties.agi: Filtered ARG3: 777
       > dialparties.agi: NODEST: 777 adding M(auto-blkvm) to dialopts: trM(auto-blkvm)
       > dialparties.agi: NODEST: 777 blkvm enabled macro already in dialopts: trM(auto-blkvm)

    -- <SIP/400-00000213>AGI Script dialparties.agi completed, returning 0
    -- Executing [s@macro-dial:7] Dial("SIP/400-00000213", "SIP/777,22,trM(auto-blkvm)") in new stack
    -- Called 777
    -- SIP/777-00000214 is ringing
    -- SIP/777-00000214 answered SIP/400-00000213


Звонок 1 завершен
    -- Executing [s@macro-auto-blkvm:1] Set("SIP/777-00000214", "__MACRO_RESULT=") in new stack
    -- Executing [s@macro-auto-blkvm:2] DBdel("SIP/777-00000214", "BLKVM/777/SIP/400-00000213") in new stack
    -- DBdel: family=BLKVM, key=777/SIP/400-00000213
    -- Executing [h@macro-dial:1] Macro("SIP/400-00000213", "hangupcall") in new stack
    -- Executing [s@macro-hangupcall:1] GotoIf("SIP/400-00000213", "1?skiprg") in new stack
    -- Goto (macro-hangupcall,s,4)
    -- Executing [s@macro-hangupcall:4] GotoIf("SIP/400-00000213", "0?skipblkvm") in new stack
    -- Executing [s@macro-hangupcall:5] NoOp("SIP/400-00000213", "Cleaning Up Block VM Flag: BLKVM/777/SIP/400-00000213") in new stack
    -- Executing [s@macro-hangupcall:6] DBdel("SIP/400-00000213", "BLKVM/777/SIP/400-00000213") in new stack
    -- DBdel: family=BLKVM, key=777/SIP/400-00000213
    -- DBdel: Error deleting key from database.
    -- Executing [s@macro-hangupcall:7] GotoIf("SIP/400-00000213", "1?theend") in new stack
    -- Goto (macro-hangupcall,s,9)
    -- Executing [s@macro-hangupcall:9] Hangup("SIP/400-00000213", "") in new stack
  == Spawn extension (macro-hangupcall, s, 9) exited non-zero on 'SIP/400-00000213' in macro 'hangupcall'
  == Spawn extension (macro-dial, s, 7) exited non-zero on 'SIP/400-00000213' in macro 'dial'
  == Spawn extension (from-internal, 777, 16) exited non-zero on 'SIP/400-00000213'

Звонок 2-й с 400 на 408 не рабочий:
    -- Executing [408@from-internal:1] Set("SIP/400-00000215", "__RINGTIMER=120") in new stack
    -- Executing [408@from-internal:2] Macro("SIP/400-00000215", "exten-vm,408,408") in new stack
    -- Executing [s@macro-exten-vm:1] Macro("SIP/400-00000215", "user-callerid") in new stack
    -- Executing [s@macro-user-callerid:1] Set("SIP/400-00000215", "AMPUSER=400") in new stack
    -- Executing [s@macro-user-callerid:2] GotoIf("SIP/400-00000215", "0?report") in new stack
    -- Executing [s@macro-user-callerid:3] ExecIf("SIP/400-00000215", "1?Set(REALCALLERIDNUM=400)") in new stack
    -- Executing [s@macro-user-callerid:4] Set("SIP/400-00000215", "AMPUSER=400") in new stack
    -- Executing [s@macro-user-callerid:5] Set("SIP/400-00000215", "AMPUSERCIDNAME=Oleg Suslensky") in new stack
    -- Executing [s@macro-user-callerid:6] GotoIf("SIP/400-00000215", "0?report") in new stack
    -- Executing [s@macro-user-callerid:7] Set("SIP/400-00000215", "AMPUSERCID=400") in new stack
    -- Executing [s@macro-user-callerid:8] Set("SIP/400-00000215", "CALLERID(all)="Oleg Suslensky" <400>") in new stack
    -- Executing [s@macro-user-callerid:9] ExecIf("SIP/400-00000215", "1?Set(CHANNEL(language)=ru)") in new stack
    -- Executing [s@macro-user-callerid:10] GotoIf("SIP/400-00000215", "0?continue") in new stack
    -- Executing [s@macro-user-callerid:11] Set("SIP/400-00000215", "__TTL=64") in new stack
    -- Executing [s@macro-user-callerid:12] GotoIf("SIP/400-00000215", "1?continue") in new stack
    -- Goto (macro-user-callerid,s,19)
    -- Executing [s@macro-user-callerid:19] NoOp("SIP/400-00000215", "Using CallerID "Oleg Suslensky" <400>") in new stack
    -- Executing [s@macro-exten-vm:2] Set("SIP/400-00000215", "RingGroupMethod=none") in new stack
    -- Executing [s@macro-exten-vm:3] Set("SIP/400-00000215", "VMBOX=408") in new stack
    -- Executing [s@macro-exten-vm:4] Set("SIP/400-00000215", "EXTTOCALL=408") in new stack
    -- Executing [s@macro-exten-vm:5] Set("SIP/400-00000215", "CFUEXT=") in new stack
    -- Executing [s@macro-exten-vm:6] Set("SIP/400-00000215", "CFBEXT=*1972592588930") in new stack
    -- Executing [s@macro-exten-vm:7] Set("SIP/400-00000215", "RT=120") in new stack
    -- Executing [s@macro-exten-vm:8] Macro("SIP/400-00000215", "record-enable,408,IN") in new stack
    -- Executing [s@macro-record-enable:1] GotoIf("SIP/400-00000215", "1?check") in new stack
    -- Goto (macro-record-enable,s,4)
    -- Executing [s@macro-record-enable:4] AGI("SIP/400-00000215", "recordingcheck,20150117-132412,1421493852.542") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/recordingcheck
recordingcheck,20150117-132412,1421493852.542: Inbound recording not enabled
    -- <SIP/400-00000215>AGI Script recordingcheck completed, returning 0
    -- Executing [s@macro-record-enable:5] MacroExit("SIP/400-00000215", "") in new stack
    -- Executing [s@macro-exten-vm:9] Macro("SIP/400-00000215", "dial,120,tr,408") in new stack
    -- Executing [s@macro-dial:1] GotoIf("SIP/400-00000215", "1?dial") in new stack
    -- Goto (macro-dial,s,3)
    -- Executing [s@macro-dial:3] AGI("SIP/400-00000215", "dialparties.agi") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/dialparties.agi
dialparties.agi: Starting New Dialparties.agi
dialparties.agi: Caller ID name is 'Oleg Suslensky' number is '400'
       > dialparties.agi: USE_CONFIRMATION:  'FALSE'
       > dialparties.agi: RINGGROUP_INDEX:   ''

dialparties.agi: Methodology of ring is  'none'
    -- dialparties.agi: Added extension 408 to extension map
    -- dialparties.agi: Extension 408 cf is disabled
    -- dialparties.agi: Extension 408 do not disturb is disabled
       > dialparties.agi: extnum 408 has:  cw: 1; hascfb: 1 [*1972592588930] hascfu: 0 []

dialparties.agi: EXTENSION_STATE: 0 (NOT_INUSE)
dialparties.agi: Extension 408 has ExtensionState: 0
    -- dialparties.agi: Checking CW and CFB status for extension 408
    -- dialparties.agi: dbset CALLTRACE/408 to 400
    -- dialparties.agi: Filtered ARG3: 408
    -- <SIP/400-00000215>AGI Script dialparties.agi completed, returning 0
    -- Executing [s@macro-dial:7] Dial("SIP/400-00000215", "SIP/408,120,tr") in new stack
    -- Called 408
    -- SIP/408-00000216 is ringing
    -- SIP/408-00000216 answered SIP/400-00000215

Звонок 2-й звершен:
    -- Executing [h@macro-dial:1] Macro("SIP/400-00000215", "hangupcall") in new stack
    -- Executing [s@macro-hangupcall:1] GotoIf("SIP/400-00000215", "1?skiprg") in new stack
    -- Goto (macro-hangupcall,s,4)
    -- Executing [s@macro-hangupcall:4] GotoIf("SIP/400-00000215", "1?skipblkvm") in new stack
    -- Goto (macro-hangupcall,s,7)
    -- Executing [s@macro-hangupcall:7] GotoIf("SIP/400-00000215", "1?theend") in new stack
    -- Goto (macro-hangupcall,s,9)
    -- Executing [s@macro-hangupcall:9] Hangup("SIP/400-00000215", "") in new stack
  == Spawn extension (macro-hangupcall, s, 9) exited non-zero on 'SIP/400-00000215' in macro 'hangupcall'
  == Spawn extension (macro-dial, h, 1) exited non-zero on 'SIP/400-00000215'
  == Spawn extension (macro-dial, s, 7) exited non-zero on 'SIP/400-00000215' in macro 'dial'
  == Spawn extension (macro-exten-vm, s, 9) exited non-zero on 'SIP/400-00000215' in macro 'exten-vm'
  == Spawn extension (from-internal, 408, 2) exited non-zero on 'SIP/400-00000215'
    -- Executing [h@from-internal:1] Macro("SIP/400-00000215", "hangupcall") in new stack
    -- Executing [s@macro-hangupcall:1] GotoIf("SIP/400-00000215", "1?skiprg") in new stack
    -- Goto (macro-hangupcall,s,4)
    -- Executing [s@macro-hangupcall:4] GotoIf("SIP/400-00000215", "1?skipblkvm") in new stack
    -- Goto (macro-hangupcall,s,7)
    -- Executing [s@macro-hangupcall:7] GotoIf("SIP/400-00000215", "1?theend") in new stack
    -- Goto (macro-hangupcall,s,9)
    -- Executing [s@macro-hangupcall:9] Hangup("SIP/400-00000215", "") in new stack
  == Spawn extension (macro-hangupcall, s, 9) exited non-zero on 'SIP/400-00000215' in macro 'hangupcall'
  == Spawn extension (from-internal, h, 1) exited non-zero on 'SIP/400-00000215'

Звонок 408 на 400 не рабочий:
    -- Executing [400@from-internal:1] Set("SIP/408-00000219", "__RINGTIMER=120") in new stack
    -- Executing [400@from-internal:2] Macro("SIP/408-00000219", "exten-vm,400,400") in new stack
    -- Executing [s@macro-exten-vm:1] Macro("SIP/408-00000219", "user-callerid") in new stack
    -- Executing [s@macro-user-callerid:1] Set("SIP/408-00000219", "AMPUSER=408") in new stack
    -- Executing [s@macro-user-callerid:2] GotoIf("SIP/408-00000219", "0?report") in new stack
    -- Executing [s@macro-user-callerid:3] ExecIf("SIP/408-00000219", "1?Set(REALCALLERIDNUM=408)") in new stack
    -- Executing [s@macro-user-callerid:4] Set("SIP/408-00000219", "AMPUSER=408") in new stack
    -- Executing [s@macro-user-callerid:5] Set("SIP/408-00000219", "AMPUSERCIDNAME=Logistics") in new stack
    -- Executing [s@macro-user-callerid:6] GotoIf("SIP/408-00000219", "0?report") in new stack
    -- Executing [s@macro-user-callerid:7] Set("SIP/408-00000219", "AMPUSERCID=408") in new stack
    -- Executing [s@macro-user-callerid:8] Set("SIP/408-00000219", "CALLERID(all)="Logistics" <408>") in new stack
    -- Executing [s@macro-user-callerid:9] ExecIf("SIP/408-00000219", "1?Set(CHANNEL(language)=ru)") in new stack
    -- Executing [s@macro-user-callerid:10] GotoIf("SIP/408-00000219", "0?continue") in new stack
    -- Executing [s@macro-user-callerid:11] Set("SIP/408-00000219", "__TTL=64") in new stack
    -- Executing [s@macro-user-callerid:12] GotoIf("SIP/408-00000219", "1?continue") in new stack
    -- Goto (macro-user-callerid,s,19)
    -- Executing [s@macro-user-callerid:19] NoOp("SIP/408-00000219", "Using CallerID "Logistics" <408>") in new stack
    -- Executing [s@macro-exten-vm:2] Set("SIP/408-00000219", "RingGroupMethod=none") in new stack
    -- Executing [s@macro-exten-vm:3] Set("SIP/408-00000219", "VMBOX=400") in new stack
    -- Executing [s@macro-exten-vm:4] Set("SIP/408-00000219", "EXTTOCALL=400") in new stack
    -- Executing [s@macro-exten-vm:5] Set("SIP/408-00000219", "CFUEXT=") in new stack
    -- Executing [s@macro-exten-vm:6] Set("SIP/408-00000219", "CFBEXT=") in new stack
    -- Executing [s@macro-exten-vm:7] Set("SIP/408-00000219", "RT=120") in new stack
    -- Executing [s@macro-exten-vm:8] Macro("SIP/408-00000219", "record-enable,400,IN") in new stack
    -- Executing [s@macro-record-enable:1] GotoIf("SIP/408-00000219", "1?check") in new stack
    -- Goto (macro-record-enable,s,4)
    -- Executing [s@macro-record-enable:4] AGI("SIP/408-00000219", "recordingcheck,20150117-132437,1421493877.546") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/recordingcheck
recordingcheck,20150117-132437,1421493877.546: Inbound recording not enabled
    -- <SIP/408-00000219>AGI Script recordingcheck completed, returning 0
    -- Executing [s@macro-record-enable:5] MacroExit("SIP/408-00000219", "") in new stack
    -- Executing [s@macro-exten-vm:9] Macro("SIP/408-00000219", "dial,120,tr,400") in new stack
    -- Executing [s@macro-dial:1] GotoIf("SIP/408-00000219", "1?dial") in new stack
    -- Goto (macro-dial,s,3)
    -- Executing [s@macro-dial:3] AGI("SIP/408-00000219", "dialparties.agi") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/dialparties.agi
dialparties.agi: Starting New Dialparties.agi
dialparties.agi: Caller ID name is 'Logistics' number is '408'
       > dialparties.agi: USE_CONFIRMATION:  'FALSE'
       > dialparties.agi: RINGGROUP_INDEX:   ''

dialparties.agi: Methodology of ring is  'none'
    -- dialparties.agi: Added extension 400 to extension map
    -- dialparties.agi: Extension 400 cf is disabled
    -- dialparties.agi: Extension 400 do not disturb is disabled
       > dialparties.agi: extnum 400 has:  cw: 1; hascfb: 0 [] hascfu: 0 []

dialparties.agi: EXTENSION_STATE: 1 (INUSE)
dialparties.agi: Extension 400 has call waiting enabled with state: 1
    -- dialparties.agi: dbset CALLTRACE/400 to 408
    -- dialparties.agi: Filtered ARG3: 400
    -- <SIP/408-00000219>AGI Script dialparties.agi completed, returning 0
    -- Executing [s@macro-dial:7] Dial("SIP/408-00000219", "SIP/400,120,tr") in new stack
    -- Called 400
    -- SIP/400-0000021a is ringing
    -- SIP/400-0000021a answered SIP/408-00000219

Ответ 408 без голоса и положена трубка:
    -- Executing [h@macro-dial:1] Macro("SIP/408-00000219", "hangupcall") in new stack
    -- Executing [s@macro-hangupcall:1] GotoIf("SIP/408-00000219", "1?skiprg") in new stack
    -- Goto (macro-hangupcall,s,4)
    -- Executing [s@macro-hangupcall:4] GotoIf("SIP/408-00000219", "1?skipblkvm") in new stack
    -- Goto (macro-hangupcall,s,7)
    -- Executing [s@macro-hangupcall:7] GotoIf("SIP/408-00000219", "1?theend") in new stack
    -- Goto (macro-hangupcall,s,9)
    -- Executing [s@macro-hangupcall:9] Hangup("SIP/408-00000219", "") in new stack
  == Spawn extension (macro-hangupcall, s, 9) exited non-zero on 'SIP/408-00000219' in macro 'hangupcall'
  == Spawn extension (macro-dial, s, 7) exited non-zero on 'SIP/408-00000219' in macro 'dial'
  == Spawn extension (macro-exten-vm, s, 9) exited non-zero on 'SIP/408-00000219' in macro 'exten-vm'
  == Spawn extension (from-internal, 400, 2) exited non-zero on 'SIP/408-00000219'

Вызов безуспешный на 777:
    -- Executing [777@from-internal:1] GotoIf("SIP/400-0000021b", "0?ext-local,777,1") in new stack
    -- Executing [777@from-internal:2] Macro("SIP/400-0000021b", "user-callerid,") in new stack
    -- Executing [s@macro-user-callerid:1] Set("SIP/400-0000021b", "AMPUSER=400") in new stack
    -- Executing [s@macro-user-callerid:2] GotoIf("SIP/400-0000021b", "0?report") in new stack
    -- Executing [s@macro-user-callerid:3] ExecIf("SIP/400-0000021b", "1?Set(REALCALLERIDNUM=400)") in new stack
    -- Executing [s@macro-user-callerid:4] Set("SIP/400-0000021b", "AMPUSER=400") in new stack
    -- Executing [s@macro-user-callerid:5] Set("SIP/400-0000021b", "AMPUSERCIDNAME=Oleg Suslensky") in new stack
    -- Executing [s@macro-user-callerid:6] GotoIf("SIP/400-0000021b", "0?report") in new stack
    -- Executing [s@macro-user-callerid:7] Set("SIP/400-0000021b", "AMPUSERCID=400") in new stack
    -- Executing [s@macro-user-callerid:8] Set("SIP/400-0000021b", "CALLERID(all)="Oleg Suslensky" <400>") in new stack
    -- Executing [s@macro-user-callerid:9] ExecIf("SIP/400-0000021b", "1?Set(CHANNEL(language)=ru)") in new stack
    -- Executing [s@macro-user-callerid:10] GotoIf("SIP/400-0000021b", "0?continue") in new stack
    -- Executing [s@macro-user-callerid:11] Set("SIP/400-0000021b", "__TTL=64") in new stack
    -- Executing [s@macro-user-callerid:12] GotoIf("SIP/400-0000021b", "1?continue") in new stack
    -- Goto (macro-user-callerid,s,19)
    -- Executing [s@macro-user-callerid:19] NoOp("SIP/400-0000021b", "Using CallerID "Oleg Suslensky" <400>") in new stack
    -- Executing [777@from-internal:3] GotoIf("SIP/400-0000021b", "1?skipdb") in new stack
    -- Goto (from-internal,777,5)
    -- Executing [777@from-internal:5] Set("SIP/400-0000021b", "__NODEST=") in new stack
    -- Executing [777@from-internal:6] Set("SIP/400-0000021b", "__BLKVM_OVERRIDE=BLKVM/777/SIP/400-0000021b") in new stack
    -- Executing [777@from-internal:7] Set("SIP/400-0000021b", "__BLKVM_BASE=777") in new stack
    -- Executing [777@from-internal:8] Set("SIP/400-0000021b", "DB(BLKVM/777/SIP/400-0000021b)=TRUE") in new stack
    -- Executing [777@from-internal:9] Set("SIP/400-0000021b", "RRNODEST=") in new stack
    -- Executing [777@from-internal:10] Set("SIP/400-0000021b", "__NODEST=777") in new stack
    -- Executing [777@from-internal:11] Set("SIP/400-0000021b", "RecordMethod=Group") in new stack
    -- Executing [777@from-internal:12] Macro("SIP/400-0000021b", "record-enable,777,Group") in new stack
    -- Executing [s@macro-record-enable:1] GotoIf("SIP/400-0000021b", "1?check") in new stack
    -- Goto (macro-record-enable,s,4)
    -- Executing [s@macro-record-enable:4] AGI("SIP/400-0000021b", "recordingcheck,20150117-132501,1421493901.548") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/recordingcheck
    -- <SIP/400-0000021b>AGI Script recordingcheck completed, returning 0
    -- Executing [s@macro-record-enable:5] MacroExit("SIP/400-0000021b", "") in new stack
    -- Executing [777@from-internal:13] Set("SIP/400-0000021b", "RingGroupMethod=ringallv2") in new stack
    -- Executing [777@from-internal:14] Set("SIP/400-0000021b", "_FMGRP=777") in new stack
    -- Executing [777@from-internal:15] GotoIf("SIP/400-0000021b", "0?doconfirm") in new stack
    -- Executing [777@from-internal:16] Macro("SIP/400-0000021b", "dial,20,tr,777") in new stack
    -- Executing [s@macro-dial:1] GotoIf("SIP/400-0000021b", "1?dial") in new stack
    -- Goto (macro-dial,s,3)
    -- Executing [s@macro-dial:3] AGI("SIP/400-0000021b", "dialparties.agi") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/dialparties.agi
dialparties.agi: Starting New Dialparties.agi
dialparties.agi: Caller ID name is 'Oleg Suslensky' number is '400'
       > dialparties.agi: USE_CONFIRMATION:  'FALSE'
       > dialparties.agi: RINGGROUP_INDEX:   ''

dialparties.agi: Methodology of ring is  'ringallv2'
    -- dialparties.agi: Added extension 777 to extension map
       > dialparties.agi: got fmgrp_prering: 2, fmgrp_grptime: 20
       > dialparties.agi: fmgrp_totalprering: 22
       > dialparties.agi: found extension in pre-ring and array
       > dialparties.agi: ringallv2 ring times: REALPRERING: 22, PRERING: 2

    -- dialparties.agi: Extension 777 cf is disabled
    -- dialparties.agi: Extension 777 do not disturb is disabled
       > dialparties.agi: extnum 777 has:  cw: 1; hascfb: 0 [] hascfu: 0 []

    -- dialparties.agi: dbset CALLTRACE/777 to 400
    -- dialparties.agi: Filtered ARG3: 777
       > dialparties.agi: NODEST: 777 adding M(auto-blkvm) to dialopts: trM(auto-blkvm)
       > dialparties.agi: NODEST: 777 blkvm enabled macro already in dialopts: trM(auto-blkvm)

    -- <SIP/400-0000021b>AGI Script dialparties.agi completed, returning 0
    -- Executing [s@macro-dial:7] Dial("SIP/400-0000021b", "SIP/777,22,trM(auto-blkvm)") in new stack
    -- Called 777
    -- SIP/777-0000021c is ringing
    -- SIP/777-0000021c answered SIP/400-0000021b

Завершаем звонок:
    -- Executing [s@macro-auto-blkvm:1] Set("SIP/777-0000021c", "__MACRO_RESULT=") in new stack
    -- Executing [s@macro-auto-blkvm:2] DBdel("SIP/777-0000021c", "BLKVM/777/SIP/400-0000021b") in new stack
    -- DBdel: family=BLKVM, key=777/SIP/400-0000021b
    -- Executing [h@macro-dial:1] Macro("SIP/400-0000021b", "hangupcall") in new stack
    -- Executing [s@macro-hangupcall:1] GotoIf("SIP/400-0000021b", "1?skiprg") in new stack
    -- Goto (macro-hangupcall,s,4)
    -- Executing [s@macro-hangupcall:4] GotoIf("SIP/400-0000021b", "0?skipblkvm") in new stack
    -- Executing [s@macro-hangupcall:5] NoOp("SIP/400-0000021b", "Cleaning Up Block VM Flag: BLKVM/777/SIP/400-0000021b") in new stack
    -- Executing [s@macro-hangupcall:6] DBdel("SIP/400-0000021b", "BLKVM/777/SIP/400-0000021b") in new stack
    -- DBdel: family=BLKVM, key=777/SIP/400-0000021b
    -- DBdel: Error deleting key from database.
    -- Executing [s@macro-hangupcall:7] GotoIf("SIP/400-0000021b", "1?theend") in new stack
    -- Goto (macro-hangupcall,s,9)
    -- Executing [s@macro-hangupcall:9] Hangup("SIP/400-0000021b", "") in new stack
  == Spawn extension (macro-hangupcall, s, 9) exited non-zero on 'SIP/400-0000021b' in macro 'hangupcall'
  == Spawn extension (macro-dial, s, 7) exited non-zero on 'SIP/400-0000021b' in macro 'dial'
  == Spawn extension (from-internal, 777, 16) exited non-zero on 'SIP/400-0000021b'

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Проблема с голосом в одну сторону."  +/
Сообщение от co6aka (ok) on 18-Янв-15, 02:21 
Если говорить только в рамках астериска,для надежности уберем из схемы сервисы stun и прочее, то:

1. У вас нат нужен для доступа из локальной сети к днс(в общем случае) и создания ответного соединения от астериска к внешнему абоненту - ставите нат на шлюзе и правила фаервола для доступа в инет;

2. Для доступа внешних абонентов к астериску, который стоит за шлюзом, на шлюзе разрешаете входящие соединения от инет абонентов на шлюз(99.88.77.66) к портам sip(и/или h323), rtp и пробрасываете порты(для sip: 5060/udp или tcp, h323: 1720 tcp, rtp: 10000-20000 udp) из инета на астериск(192.168.0.2). Т.е. внешний абонент подключается к вашему шлюзу(99.88.77.66), а он, в свою очередь, перекидывает пакеты к астериску(192.168.0.2) в локальной сети. В этом случае на астериск приходят пакеты вида - отправитель 111.222.333.444(где-то в инете), получатель 192.168.0.2;

3. Для работы внешних абонентов, на астериске в фаерволе, разрешаете подключаться к портам sip(и/или h323), rtp из инета;

3. Для работы локальных/внутренних абонентов так же разрешаете подключаться из локальной сети к астериску по портам  sip(и/или h323), rtp;

4. Астериску указываете его внешний интернет ip адрес(адрес шлюза) - externaddr=99.88.77.66. Это для того, что бы он в отправляемых инвайтах sip вписывал в поле отправителя адрес шлюза(т.е. на какой ip-адрес, внешний абонент, должен отправлять ответ);

5. Так же астериску надо указать в секции [general], а не пира!, какой тип прохождения ната он должен использовать. В версии астериска 1.6 возможно достаточно указать  nat=yes, но в последующих есть несколько типов обработки соединений через нат астериском...

6. Астериск, по умолчанию, указывает абонентам голосовые соединения создавать напрямую. Т.е. из локальной сети до абонента в инете(интернет ip) разговаривать будет можно, а вот обратный случай понятно что не получиться. По этому, в секцию [general], добавьте  directmedia = no (хотя в старших версиях можно указать nonat). Смысл прост, запретить прямое соединение голоса между абонентами, т.е. голос пускать через астериск. В случае nonat голос пойдет через астериск только при соединении абонентов не локальной сети;

7. Проверьте, что все разрешенные кодеки(кодирование/декодирование)поддерживаются и вашими телефонами.

PS: В общем как-то так. Не забудьте про безопасность... Разбираться в ваших макросах я не стал... многовато. Сделайте простой диалплан, без макросов и прочего. Включите режим отладки в консоли астериска и сделайте звонок, только постарайтесь, что бы в это время никто больше не звонил. Информации будет очень много... только сюда ее выкладывать все же не надо...

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Проблема с голосом в одну сторону."  +/
Сообщение от co6aka (ok) on 18-Янв-15, 02:29 
Какие кодеки вы используете на астериске и на телефоне с однократным разговором?
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру