Тестовая среда состоит из клиента CSipSimple, сервера Asterisk и маршрутизатора с NAT. Раньше оборудование использовало UDP порт 5060, и все было хорошо. Затем я изменил номер порта на 15000 в Asterisk, в правиле переадресации маршрутизатора и в клиентском приложении. Теперь при доступе к сети извне клиент может зарегистрироваться, но при вызове какого-либо расширения Asterisk жалуется на невозможность создания канала DAHDI. Когда клиент находится в локальной сети, звонки работают.
Что пошло не так? Я изменил только номер порта управления.
Обновить
Прежде всего, я должен упомянуть, что Asterisk всегда жалуется на невозможность создания канала DAHDI, когда я звоню на внутренний номер 100, независимо от того, работает голос или нет. Таким образом, это сообщение об ошибке можно игнорировать.
Теперь разные хвосты подробных журналов вызовов:
Мобильный клиент зарегистрирован через 3G, нет звука (звонок, перехват, тайм-аут):
-- SIP/103-00000001 answered SIP/101-00000000
> 0x7fda800295a0 -- Probation passed - setting RTP source address to 192.168.1.100:5062
Вот и все. Больше сообщений нет.
Мобильный клиент зарегистрирован по WiFi, звук работает (звонок, звонок, разговор, зависание):
-- SIP/103-00000003 answered SIP/101-00000002
> 0x7fda88026620 -- Probation passed - setting RTP source address to 192.168.1.100:5062
> 0x7fda78013fb0 -- Probation passed - setting RTP source address to 192.168.1.112:4000
> 0x7fda78013fb0 -- Probation passed - setting RTP source address to 192.168.1.112:4000
-- Executing [h@macro-dial-one:1] Macro("SIP/101-00000002", "hangupcall,") in new stack
-- Executing [s@macro-hangupcall:1] GotoIf("SIP/101-00000002", "1?theend") in new stack
-- Goto (macro-hangupcall,s,3)
-- Executing [s@macro-hangupcall:3] ExecIf("SIP/101-00000002", "0?Set(CDR(recordingfile)=)") in new stack
-- Executing [s@macro-hangupcall:4] Hangup("SIP/101-00000002", "") in new stack
== Spawn extension (macro-hangupcall, s, 4) exited non-zero on 'SIP/101-00000002' in macro 'hangupcall'
== Spawn extension (macro-dial-one, h, 1) exited non-zero on 'SIP/101-00000002'
== Spawn extension (macro-dial-one, s, 43) exited non-zero on 'SIP/101-00000002' in macro 'dial-one'
== Spawn extension (macro-exten-vm, s, 9) exited non-zero on 'SIP/101-00000002' in macro 'exten-vm'
== Spawn extension (from-internal, 103, 2) exited non-zero on 'SIP/101-00000002'
Я подозреваю, что ваш порт SIP теперь находится в диапазоне RTP, поэтому Asterisk не понимает, что это SIP-соединение. Либо переместите порт SIP, либо переместите диапазон портов RTP, чтобы они не перекрывались.
Захватите вывод CLI неудавшегося вызова (вне локальной сети) и успешного вызова (в локальной сети) и опубликуйте результаты здесь.
Чтобы записать вывод CLI, из командной строки bash:
asterisk -r
core set verbose 10
Затем сделайте звонок из вашей локальной сети, которая работает, затем сделайте звонок из-за пределов вашей локальной сети, которая не работает. Опубликуйте полный вывод вышеуказанного (я предполагаю, что у вас есть простой диалплан). Если вы используете стандартную АТС, такую как Elastix или FreePBX, вывод может быть слишком длинным, чтобы размещать здесь ...