Страница 1 из 3

Локальный IP в инвайте в поле Contact (очередная тема, да)

Добавлено: 15 апр 2021, 07:44
Rupakoff
Приветствую!
Отчаялся разобраться самостоятельно, прошу намёка, что ещё посмотреть.

Вынужден начать немного с лирики, мне кажется, это важно )

Достался мне работающий 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 и т.п. двух астеров - всё идентично. Но тестовый работает правильно, а боевой нет.

Буду признателен за намёк, где ещё посмотреть.

Далее - пара подтверждений наличия проблемы.
wrong contact.PNG
###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

Re: Локальный IP в инвайте в поле Contact (очередная тема, д

Добавлено: 15 апр 2021, 10:03
Zavr2008
На паре англоязычных форумов в описании похожих случаев встретились мнения, что виноват 13й астериск, люди отписывались, что после обновления до 15 или 16 версии проблема решалась.
Коллеги, это диагноз, я прав?

Пишем про sip, выкладываем pjsip и то в виде сами видите каком..
Тему Asterisk за NAT не освоили.

Что за устройство делает NAT? Что там с SIP ALG?

Re: Локальный IP в инвайте в поле Contact (очередная тема, д

Добавлено: 15 апр 2021, 10:21
ded
Zavr2008, ты прав. Даже если ты не прав - тогда ты лев, что тоже почётно!
Изображение

Re: Локальный IP в инвайте в поле Contact (очередная тема, д

Добавлено: 15 апр 2021, 10:47
Rupakoff
Zavr2008 писал(а):
Пишем про sip, выкладываем pjsip и то в виде сами видите каком..
Тему Asterisk за NAT не освоили.

Что за устройство делает NAT? Что там с SIP ALG?
Я упомянул, что проблема воспроизводится и на SIP и на PJSIP транках. Пробовал оба варианта.

NAT на линуксе, Centos 7. Я понятия не имею, что там с SIP ALG, но на тестовом сервере прекрасно работало за этим же самым натом.

Re: Локальный IP в инвайте в поле Contact (очередная тема, д

Добавлено: 15 апр 2021, 12:04
Rupakoff
Более того, несколько SIP и PJSIP транков одного провайдера тоже работают через этот же NAT.
Просто тот провайдер не так внимательно смотрит на поле Contact.

Re: Локальный IP в инвайте в поле Contact (очередная тема, д

Добавлено: 15 апр 2021, 12:19
Zavr2008
конкретика нужна и на sip.
Конфиги

Re: Локальный IP в инвайте в поле Contact (очередная тема, д

Добавлено: 15 апр 2021, 12:49
Rupakoff
Дабы не распылять моё внимание и тех кто читает, пока только SIP.
Проблема продолжает воспроизводиться, проверил прямо во время подготовки поста
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: asterisk -rx "sip show settings"
Global Settings:
----------------
UDP Bindaddress: 0.0.0.0:5061
TCP SIP Bindaddress: Disabled
TLS SIP Bindaddress: 0.0.0.0:5061
RTP Bindaddress: Disabled
Videosupport: Yes
Textsupport: Yes
Ignore SDP sess. ver.: No
AutoCreate Peer: Off
Match Auth Username: Yes
Allow unknown access: Yes
Allow subscriptions: Yes
Allow overlap dialing: Yes
Allow promisc. redir: No
Enable call counters: No
SIP domain support: No
Path support : No
Realm. auth: No
Our auth realm asterisk
Use domains as realms: No
Call to non-local dom.: Yes
URI user is phone no: No
Always auth rejects: Yes
Direct RTP setup: No
User Agent: FPBX-15.0.17.24(16.15.1)
SDP Session Name: Asterisk PBX 16.15.1
SDP Owner Name: root
Reg. context: (not set)
Regexten on Qualify: No
Trust RPID: No
Send RPID: No
Legacy userfield parse: No
Send Diversion: Yes
Caller ID: Unknown
From: Domain:
Record SIP history: Off
Auth. Failure Events: Off
T.38 support: Yes
T.38 EC mode: Redundancy
T.38 MaxDtgrm: 400
SIP realtime: Disabled
Qualify Freq : 60000 ms
Q.850 Reason header: No
Store SIP_CAUSE: No

Network QoS Settings:
---------------------------
IP ToS SIP: CS3
IP ToS RTP audio: EF
IP ToS RTP video: AF41
IP ToS RTP text: CS0
802.1p CoS SIP: 4
802.1p CoS RTP audio: 5
802.1p CoS RTP video: 6
802.1p CoS RTP text: 5
Jitterbuffer enabled: No

Network Settings:
---------------------------
SIP address remapping: Disabled
Externhost: <none>
Externaddr: (null)
Externrefresh: 10
Localnet: 172.20.0.0/255.255.0.0
192.168.0.0/255.255.0.0

Global Signalling Settings:
---------------------------
Codecs: (ulaw|alaw|h264)
Relax DTMF: No
RFC2833 Compensation: No
Symmetric RTP: Yes
Compact SIP headers: No
RTP Keepalive: 0 (Disabled)
RTP Timeout: 30
RTP Hold Timeout: 300
MWI NOTIFY mime type: application/simple-message-summary
DNS SRV lookup: No
Pedantic SIP support: Yes
Reg. min duration 60 secs
Reg. max duration: 3600 secs
Reg. default duration: 120 secs
Sub. min duration 60 secs
Sub. max duration: 3600 secs
Outbound reg. timeout: 20 secs
Outbound reg. attempts: 0
Outbound reg. retry 403:No
Notify ringing state: Yes
Include CID: No
Notify hold state: Yes
SIP Transfer mode: open
Max Call Bitrate: 2048 kbps
Auto-Framing: No
Outb. proxy: <not set>
Session Timers: Accept
Session Refresher: uas
Session Expires: 1800 secs
Session Min-SE: 90 secs
Timer T1: 500
Timer T1 minimum: 100
Timer B: 32000
No premature media: Yes
Max forwards: 70

Default Settings:
-----------------
Allowed transports: UDP
Outbound transport: UDP
Context: from-sip-external
Record on feature: automon
Record off feature: automon
Force rport: Yes
DTMF: rfc2833
Qualify: 0
Keepalive: 0
Use ClientCode: No
Progress inband: Yes
Language: ru
Tone zone: <Not set>
MOH Interpret: default
MOH Suggest:
Voice Mail Extension: *97
RTCP Multiplexing: No
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: /etc/asterisk/sip_additional.conf ( не весь, разумеется, только sip транк)
[Beeline - SIP]
disallow=all
type=friend
port=5060
host=195.218.176.52
externip=46.229.xx.xx
context=from-trunk
allow=alaw
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: /etc/asterisk/sip_general_additional.conf
;--------------------------------------------------------------------------------;
; Do NOT edit this file as it is auto-generated by FreePBX. ;
;--------------------------------------------------------------------------------;
; For information on adding additional paramaters to this file, please visit the ;
; FreePBX.org wiki page, or ask on IRC. This file was created by the new FreePBX ;
; BMO - Big Module Object. Any similarity in naming with BMO from Adventure Time ;
; is totally deliberate. ;
;--------------------------------------------------------------------------------;
accept_outofcall_message=yes
auth_message_requests=no
outofcall_message_context=dpma_message_context
faxdetect=no
vmexten=*97
useragent=FPBX-15.0.17.24(16.15.1)
language=ru
disallow=all
allow=ulaw
allow=alaw
allow=h264
context=from-sip-external
callerid=Unknown
notifyringing=yes
notifyhold=yes
tos_sip=cs3
tos_audio=ef
tos_video=af41
alwaysauthreject=yes
limitonpeers=yes
progressinband=yes
prematuremedia=yes
textsupport=yes
accept_outofcall_message =yes
outofcall_message_context=messages
match_auth_username=yes
rtpend=20000
context=from-sip-external
callerid=Unknown
rtpstart=10000
tcpenable=no
callevents=yes
tlsprivatekey=/etc/asterisk/keys/default.key
tlscertfile=/etc/asterisk/keys/default.pem
jbenable=no
checkmwi=10
maxexpiry=3600
minexpiry=60
srvlookup=no
tlsenable=yes
allowguest=yes
notifyhold=yes
rtptimeout=30
canreinvite=no
t38pt_udptl=yes,redundancy,maxdatagram=400
tlsbindaddr=[::]:5061
rtpkeepalive=0
videosupport=yes
defaultexpiry=120
notifyringing=yes
maxcallbitrate=2048
rtpholdtimeout=300
g726nonstandard=no
registertimeout=20
tlsclientmethod=tlsv1
registerattempts=0
nat=force_rport,comedia
ALLOW_SIP_ANON=no
udpbindaddr=0.0.0.0:5061
tlscafile=/etc/pki/tls/certs/ca-bundle.crt
localnet=172.20.0.0/16
localnet=192.168.0.0/16
accept_outofcall_message=yes
auth_message_requests=no
outofcall_message_context=dpma_message_context
Что-то ещё нужно показать?

Re: Локальный IP в инвайте в поле Contact (очередная тема, д

Добавлено: 15 апр 2021, 13:19
ded

Код: Выделить всё

UDP Bindaddress: 0.0.0.0:5061
TCP SIP Bindaddress: Disabled
TLS SIP Bindaddress: 0.0.0.0:5061
Дальше можно не смотреть.
Я один это вижу?
[Beeline - SIP]
disallow=all
type=friend
port=5060
host=195.218.176.52
externip=46.229.xx.xx
Параметр externip= указывается не на пире.
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
Предложу для верности ещё раз указать
local_net : 172.20.0.0/255.255.0.0
и ещё раз
local_net : 172.20.0.0/255.255.0.0

Машу каслом не испортишь!

Re: Локальный IP в инвайте в поле Contact (очередная тема, д

Добавлено: 15 апр 2021, 13:44
Rupakoff

Код: Выделить всё

    UDP Bindaddress: 0.0.0.0:5061
    TCP SIP Bindaddress: Disabled
    TLS SIP Bindaddress: 0.0.0.0:5061
Дальше можно не смотреть.
Я один это вижу?
На тестовом сервере точно также, но работает правильно.
Я правильно понял, что сюда надо подставить мой публичный ip?
Ожидаю проблем с работой сип-телефонов филиалов с подсетями 192.168.x.0/24. То есть из сетей, которые не за натом, и отличны от локальной сети Астериска.
Параметр externip= указывается не на пире.
Это я, видимо, пытался "уговорить" его подставлять правильно )
Спасибо, исправлю.
и ещё раз
local_net : 172.20.0.0/255.255.0.0
Машу каслом не испортишь!
Разделяю вашу иронию. Я видел, что два раза повторяется. Конфиг сформирован FreePBX-ом, в его интерфейсе указано один раз, не могу знать, почему в конфиге два раза выводится )

Re: Локальный IP в инвайте в поле Contact (очередная тема, д

Добавлено: 15 апр 2021, 13:52
Rupakoff
добавил externip= 46.229.xx.xx в общий сип-конфиг, и заявленная проблема ушла.

Буду проверять, не поломалось ли в другом месте.
Странно, что тестовому серверу это не мешало нормально работать. Или мне показалось...