Приветствую!
Отчаялся разобраться самостоятельно, прошу намёка, что ещё посмотреть.
Вынужден начать немного с лирики, мне кажется, это важно )
Достался мне работающий FreePBX 13, с несколькими sip-транками одного провайдера, и H323 до Панасоника. Захотели попробовать билайновский FMTN.
Билайн дал нам sip-транк без регистрации, который заработал немного неправильно - исходящие звонки обрывались на 30 секунде, и не срабатывал отбой вызова.
Проблема оказалась в том, что мой астериск неправильно формирует инвайт, а именно - подставляет локальный ip в поле Contact. Технический специалист Билайна подтвердил, что это критично.
Были прочитаны и более-менее осознаны несколько руководств и статей на тему "asterisk за NAT", всё было несколько раз перепроверено и оказалось правильно настроено. Дальше было интенсивное гугление, как правило у людей всё решалось правильной настройкой, у меня всё уже было правильно. На паре англоязычных форумов в описании похожих случаев встретились мнения, что виноват 13й астериск, люди отписывались, что после обновления до 15 или 16 версии проблема решалась.
Тогда я для проверки поставил FreePBX 15 distro и на нём всё заработало как нужно, стал формироваться правильный Contact в инвайте и вызовы стали работать правильно.
Дальше был перенос конфы боевого 13го FreePBX на 15й. Получилось даже неплохо, почти всё заработало, но вместе с конфой перенеслась и проблема, я снова получаю неправильный Contact.
Транк пробовал поднимать и sip и pjsip, на результат не влияет.
Сравнивал файлы конфигов рабочего и нерабочего астериска /etc/asterisk/* - значимых отличий не нашёл (кроме того, что в боевом больше транков и экстеншенов)
Сравнивал выводы команд sip show settings и т.п. двух астеров - всё идентично. Но тестовый работает правильно, а боевой нет.
Буду признателен за намёк, где ещё посмотреть.
Далее - пара подтверждений наличия проблемы.
###asterisk -rx "pjsip show transport 0.0.0.0-udp"
Transport: <TransportId........> <Type> <cos> <tos> <BindAddress....................>
==========================================================================================
Transport: 0.0.0.0-udp udp 3 96 0.0.0.0:5060
ParameterName : ParameterValue
====================================================
allow_reload : false
async_operations : 1
bind : 0.0.0.0:5060
ca_list_file :
ca_list_path :
cert_file :
cipher :
cos : 3
domain :
external_media_address : 46.229.xx.xxx
external_signaling_address : 46.229.xx.xxx
external_signaling_port : 0
local_net : 172.20.0.0/255.255.0.0
local_net : 192.168.0.0/255.255.0.0
local_net : 172.20.0.0/255.255.0.0
method : unspecified
password :
priv_key_file :
protocol : udp
require_client_cert : No
symmetric_transport : false
tos : 96
verify_client : No
verify_server : No
websocket_write_timeout : 100
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
### *CLI> pjsip show settings
Global Settings:
ParameterName : ParameterValue
=======================================================================================
contact_expiration_check_interval : 30
debug : no
default_from_user : asterisk
default_outbound_endpoint : dpma_endpoint
default_realm : asterisk
default_voicemail_extension :
disable_multi_domain : false
endpoint_identifier_order : auth_username,username,header,ip,anonymous
ignore_uri_user_options : false
keep_alive_interval : 90
max_forwards : 70
max_initial_qualify_time : 0
mwi_disable_initial_unsolicited : false
mwi_tps_queue_high : 500
mwi_tps_queue_low : -1
norefersub : yes
regcontext :
send_contact_status_on_update_registration : no
taskprocessor_overload_trigger : pjsip_only
unidentified_request_count : 5
unidentified_request_period : 5
unidentified_request_prune_interval : 30
use_callerid_contact : no
user_agent : FPBX-15.0.17.24(16.15.1)
System Settings:
ParameterName : ParameterValue
============================================
accept_multiple_sdp_answers : false
compact_headers : false
disable_rport : false
disable_tcp_switch : true
follow_early_media_fork : true
threadpool_auto_increment : 5
threadpool_idle_timeout : 60
threadpool_initial_size : 0
threadpool_max_size : 50
timer_b : 32000
timer_t1 : 500