PJSIP, избитый NAT и MCN
Добавлено: 07 фев 2025, 21:42
Добрый день, Товарищи!
Понимаю, что вопрос с этими долбаными НАТами уже миллиарды раз разжёван, пережёван и съеден, но всё же.
Более того, я не уверен, что тут дело в нате, хотя все признаки на лицо.
Окружение и версии
Как настроена сеть
Конфиги астериска
cat asterisk.conf | grep -v ";"
cat pjsip.conf | grep -v ";"
cat pjsip_wizard.conf | grep -v ";"
cat extensions.conf | grep -v ";"
cat modules.conf | grep -v ";"
Логи Астериска - не вмещаются тут, криминала 0, вот конец
tail -n 10000 /var/log/asterisk/debug.log | grep "21:27"
/var/log/asterisk/messages.log | grep "21:27"
Понимаю, что вопрос с этими долбаными НАТами уже миллиарды раз разжёван, пережёван и съеден, но всё же.
Более того, я не уверен, что тут дело в нате, хотя все признаки на лицо.
Окружение и версии
Код: Выделить всё
ОС: FreeBSD 14.2 amd64, Asterisk 22.1.1
Провайдер MCN, SIP линия.
Итого от провайдера информация:
логин, пароль, сервер, кодеки G.711a и G.729
Метод передачи DTMF: RFC 2833
Код: Выделить всё
Стоит микрот с белым адресом 1.2.3.4, извне порт 1.2.3.4:UDP/30600 =>(DST-NAT) 192.168.23.15:5060 (для подключения ТА)
За микротом стоит сервер с Asterisk'ом IP: 192.168.23.15, висит астериск на порту 5060
Трубка (ТА) с которой я проверяю - LinPhone, из интернета настроена на сервер 1.2.3.4:30600, UDP, login: 101, pass: password
cat asterisk.conf | grep -v ";"
Код: Выделить всё
[directories](!)
astcachedir => /var/cache/asterisk
astetcdir => /usr/local/etc/asterisk
astmoddir => /usr/local/lib/asterisk/modules
astvarlibdir => /usr/local/share/asterisk
astdbdir => /var/db/asterisk
astkeydir => /usr/local/share/asterisk
astdatadir => /usr/local/share/asterisk
astagidir => /usr/local/share/asterisk/agi-bin
astspooldir => /var/spool/asterisk
astrundir => /var/run/asterisk
astlogdir => /var/log/asterisk
astsbindir => /usr/local/sbin
[options]
verbose = 9
debug = 9
Код: Выделить всё
[global]
user_agent = SITE.RU - VoIP System
default_fromuser = SITE.RU - VoIP System
default_realm = SITE.RU - VoIP System
unidentified_request_count=5
unidentified_request_period=5
unidentified_request_prune_interval=30
[transport-udp]
type = transport
protocol = udp
bind = 192.168.23.15
local_net = 192.168.23.0/24
external_media_address = 1.2.3.4
external_signaling_address = 1.2.3.4
[MCN_81111111111]
type = registration
transport = transport-udp
outbound_auth = MCN_81111111111_auth
server_uri = sip:sip.mcn.ru
client_uri = sip:123456@sip.mcn.ru
retry_interval = 60
expiration = 120
contact_user = 81111111111
[MCN_81111111111_auth]
type = auth
auth_type = userpass
password = xxx
username = 123456
[MCN_81111111111_aor]
type = aor
contact = sip:sip.mcn.ru:5060
max_contacts = 2
[MCN_81111111111_endpoint]
type = endpoint
transport = transport-udp
context = mcn-81111111111-in
disallow = all
allow = alaw
allow = ulaw
allow = g729
outbound_auth = MCN_81111111111_auth
aors = MCN_81111111111_aor
from_user = 123456
from_domain = sip.mcn.ru
direct_media = no
rtp_symmetric = yes
force_rport = yes
[MCN_81111111111_ident]
type = identify
endpoint = MCN_81111111111_endpoint
match = sip.mcn.ru
Код: Выделить всё
[phone-template](!)
type = wizard
accepts_auth = yes
accepts_registrations = yes
endpoint/disallow = all
endpoint/allow = alaw,ulaw
aor/max_contacts = 2
endpoint/rewrite_contact= yes
endpoint/transport = transport-udp
endpoint/context = mcn-out
[101](phone-template)
inbound_auth/username = 101
inbound_auth/password = aaabbbccc
NAME = My TEST 1
direct_media = no
force_rport = yes
rtp_symmetric = yes
[102](phone-template)
inbound_auth/username = 102
inbound_auth/password = aaabbbccc
NAME = My TEST 2
direct_media = no
force_rport = yes
rtp_symmetric = yes
rewrite_contact = yes
Код: Выделить всё
[general]
static=yes
writeprotect=yes
autofallthrough=no
extenpatternmatchnew=no
clearglobalvars=no
userscontext=default
[globals]
[handup-sip]
exten => _X!,1,HangUp()
[mcn-81111111111-in]
exten => _X.,1,NoOp(${EXTEN})
exten => _X.,n,NoOp(${CALLERID(num)})
exten => _X.,n,NoOp(XXX)
exten => 71111111111,n,Dial(PJSIP/101)
exten => 71111111111,n,Hangup()
[mcn-out]
exten => _XXX,1,Dial(PJSIP/${EXTEN})
exten => _XXX.,1,SET(CALLERID(all)=81111111111)
exten => _XXX.,n,MixMonitor(/var/lib/asterisk/call_${CALLID}.wav)
exten => _XXX.,n,Dial(PJSIP/${EXTEN}@MCN_81111111111_endpoint)
exten => _XXX.,n,HangUp()
Код: Выделить всё
[modules]
autoload = yes
require = chan_pjsip.so
noload = res_phoneprov.so
noload = res_pjsip_notify.so
load = res_musiconhold.so
noload = app_adsiprog.so
noload = app_agent_pool.so
noload = app_alarmreceiver.so
noload = app_confbridge.so
noload = app_getcpeid.so
noload = app_amd.so
noload = app_festival.so
noload = app_followme.so
noload = app_minivm.so
noload = app_page.so
noload = app_queue.so
noload = app_stasis.so
noload = app_voicemail.so
noload = app_voicemail_imap.so
noload = cdr_adaptive_odbc.so
noload = cdr_csv.so
noload = cdr_custom.so
noload = cdr_manager.so
noload = cdr_odbc.so
noload = cdr_sqlite3_custom.so
noload = cdr_tds.so
noload = cel_custom.so
noload = cel_manager.so
noload = cel_odbc.so
noload = cel_sqlite3_custom.so
noload = cel_tds.so
noload = chan_console.so
noload = chan_iax2.so
noload = chan_unistim.so
noload = func_odbc.so
noload = res_adsi.so
noload = res_ari.so
noload = res_ari_applications.so
noload = res_ari_asterisk.so
noload = res_ari_bridges.so
noload = res_ari_channels.so
noload = res_ari_device_states.so
noload = res_ari_endpoints.so
noload = res_ari_events.so
noload = res_ari_playbacks.so
noload = res_ari_recordings.so
noload = res_ari_sounds.so
noload = res_calendar.so
noload = res_clialiases.so
noload = res_config_odbc.so
load = res_config_sqlite3.so
noload = res_fax.so
noload = res_hep.so
noload = res_hep_pjsip.so
noload = res_hep_rtcp.so
noload = res_musiconhold.so
noload = res_odbc.so
noload = res_odbc_transaction.so
noload = res_parking.so
load = res_pjsip_config_wizard.so
noload = res_pjsip_phoneprov_provider.so
noload = res_pjsip_transport_websocket.so
noload = res_prometheus.so
noload = res_smdi.so
noload = res_snmp.so
noload = res_stasis.so
noload = res_stasis_answer.so
noload = res_stasis_device_state.so
noload = res_stasis_playback.so
noload = res_stasis_recording.so
noload = res_stasis_snoop.so
noload = res_statsd.so
noload = res_stun_monitor.so
noload = pbx_ael.so
load = pbx_config.so
noload = pbx_dundi.so
tail -n 10000 /var/log/asterisk/debug.log | grep "21:27"
Код: Выделить всё
[2025-02-07 21:27:18.8q] VERBOSE[102016] pbx_functions.c: Registered custom function 'FRAME_TRACE'
[2025-02-07 21:27:18.8q] VERBOSE[102016] loader.c: func_frame_trace.so => (Frame Trace for internal ast_frame debugging.)
[2025-02-07 21:27:18.8q] DEBUG[102016] loader.c: START: func_frame_trace.so [128] 0
[2025-02-07 21:27:18.8q] VERBOSE[102016] loader.c: Loading app_senddtmf.so.
[2025-02-07 21:27:18.8q] VERBOSE[102016] manager.c: Manager registered action PlayDTMF
[2025-02-07 21:27:18.8q] VERBOSE[102016] manager.c: Manager registered action SendFlash
[2025-02-07 21:27:18.8q] VERBOSE[102016] pbx_app.c: Registered application 'SendDTMF'
[2025-02-07 21:27:18.8q] VERBOSE[102016] loader.c: app_senddtmf.so => (Send DTMF digits Application)
[2025-02-07 21:27:18.8q] DEBUG[102016] loader.c: START: app_senddtmf.so [128] 0
[2025-02-07 21:27:18.8q] VERBOSE[102016] loader.c: Loading res_pjsip_endpoint_identifier_anonymous.so.
[2025-02-07 21:27:18.8q] DEBUG[102016] res_pjsip.c: Register endpoint identifier anonymous(0x8b3ac6ac0)
[2025-02-07 21:27:18.8q] VERBOSE[102016] loader.c: res_pjsip_endpoint_identifier_anonymous.so => (PJSIP Anonymous endpoint identifier)
[2025-02-07 21:27:18.8q] DEBUG[102016] loader.c: START: res_pjsip_endpoint_identifier_anonymous.so [128] 0
[2025-02-07 21:27:18.8q] VERBOSE[102016] loader.c: Loading func_pjsip_aor.so.
[2025-02-07 21:27:18.8q] VERBOSE[102016] pbx_functions.c: Registered custom function 'PJSIP_AOR'
[2025-02-07 21:27:18.8q] VERBOSE[102016] loader.c: func_pjsip_aor.so => (Get information about a PJSIP AOR)
[2025-02-07 21:27:18.8q] DEBUG[102016] loader.c: START: func_pjsip_aor.so [128] 0
[2025-02-07 21:27:18.8q] VERBOSE[102016] loader.c: Loading func_pjsip_contact.so.
[2025-02-07 21:27:18.8q] VERBOSE[102016] pbx_functions.c: Registered custom function 'PJSIP_CONTACT'
[2025-02-07 21:27:18.8q] VERBOSE[102016] loader.c: func_pjsip_contact.so => (Get information about a PJSIP contact)
[2025-02-07 21:27:18.8q] DEBUG[102016] loader.c: START: func_pjsip_contact.so [128] 0
[2025-02-07 21:27:18.8q] VERBOSE[102016] loader.c: Loading res_manager_presencestate.so.
[2025-02-07 21:27:18.8q] VERBOSE[102016] manager.c: Manager registered action PresenceStateList
[2025-02-07 21:27:18.8q] VERBOSE[102016] loader.c: res_manager_presencestate.so => (Manager Presence State Topic Forwarder)
[2025-02-07 21:27:18.8q] DEBUG[102016] loader.c: START: res_manager_presencestate.so [150] 0
[2025-02-07 21:27:18.8q] VERBOSE[102016] loader.c: Loading res_manager_devicestate.so.
[2025-02-07 21:27:18.8q] VERBOSE[102016] manager.c: Manager registered action DeviceStateList
[2025-02-07 21:27:18.8q] VERBOSE[102016] loader.c: res_manager_devicestate.so => (Manager Device State Topic Forwarder)
[2025-02-07 21:27:18.8q] DEBUG[102016] loader.c: START: res_manager_devicestate.so [150] 0
[2025-02-07 21:27:18.8q] DEBUG[102016] loader.c: Loader time without AST_XML_DOCS: 0.190127
[2025-02-07 21:27:18.8q] WARNING[102323] pbx_config.c: users.conf is deprecated and will be removed in a future version of Asterisk
[2025-02-07 21:27:18.8q] VERBOSE[102016] asterisk.c: Asterisk Ready.
[2025-02-07 21:27:27.8q] DEBUG[102345] res_pjsip_outbound_registration.c: Outbound REGISTER attempt 1 to 'sip:sip.mcn.ru' with client 'sip:123456@sip.mcn.ru'
[2025-02-07 21:27:27.8q] DEBUG[102345] res_pjsip/pjsip_resolver.c: Performing SIP DNS resolution of target 'sip.mcn.ru'
[2025-02-07 21:27:27.8q] DEBUG[102345] res_pjsip/pjsip_resolver.c: Transport type for target 'sip.mcn.ru' is 'UDP transport'
[2025-02-07 21:27:27.8q] DEBUG[102345] res_pjsip/pjsip_resolver.c: [0x3a9d8b66b018] Created resolution tracking for target 'sip.mcn.ru'
[2025-02-07 21:27:27.8q] DEBUG[102345] res_pjsip/pjsip_resolver.c: [0x3a9d8b66b018] Added target 'sip.mcn.ru' with record type '35', transport 'UDP transport', and port '5060'
[2025-02-07 21:27:27.8q] DEBUG[102345] res_pjsip/pjsip_resolver.c: [0x3a9d8b66b018] Added target '_sip._udp.sip.mcn.ru' with record type '33', transport 'UDP transport', and port '5123456060'
[2025-02-07 21:27:27.8q] DEBUG[102345] res_pjsip/pjsip_resolver.c: [0x3a9d8b66b018] Added target 'sip.mcn.ru' with record type '1', transport 'UDP transport', and port '5060'
[2025-02-07 21:27:27.8q] DEBUG[102345] res_pjsip/pjsip_resolver.c: [0x3a9d8b66b018] Starting initial resolution using parallel queries for target 'sip.mcn.ru'
[2025-02-07 21:27:27.8q] DEBUG[102333] dns.c: DNS search failed for sip.mcn.ru
[2025-02-07 21:27:27.8q] DEBUG[102333] dns_system_resolver.c: DNS search failed for query: 'sip.mcn.ru'
[2025-02-07 21:27:27.8q] DEBUG[102333] dns.c: DNS search failed for _sip._udp.sip.mcn.ru
[2025-02-07 21:27:27.8q] DEBUG[102333] dns_system_resolver.c: DNS search failed for query: '_sip._udp.sip.mcn.ru'
[2025-02-07 21:27:27.8q] DEBUG[102333] res_pjsip/pjsip_resolver.c: [0x3a9d8b66b018] All parallel queries completed
[2025-02-07 21:27:27.8q] DEBUG[102333] res_pjsip/pjsip_resolver.c: [0x3a9d8b66b018] A record received on target 'sip.mcn.ru'
[2025-02-07 21:27:27.8q] DEBUG[102333] res_pjsip/pjsip_resolver.c: [0x3a9d8b66b018] Resolution completed - 1 viable targets
[2025-02-07 21:27:27.8q] DEBUG[102345] res_pjsip/pjsip_resolver.c: [0x3a9d8b66b018] Address '0' is 85.94.32.82:5060 with transport 'UDP transport'
[2025-02-07 21:27:27.8q] DEBUG[102345] res_pjsip/pjsip_resolver.c: [0x3a9d8b66b018] Invoking user callback with '1' addresses
[2025-02-07 21:27:27.8q] DEBUG[102345] res_pjsip/pjsip_message_filter.c: Re-wrote Contact URI host/port to 192.168.23.15:5060 (this may be re-written again later)
[2025-02-07 21:27:27.8q] DEBUG[102345] netsock2.c: Splitting '85.94.32.82' into...
[2025-02-07 21:27:27.8q] DEBUG[102345] netsock2.c: ...host '85.94.32.82' and port ''.
[2025-02-07 21:27:27.8q] DEBUG[102344] res_pjsip/pjsip_distributor.c: No dialog serializer for Response msg 200/REGISTER/cseq=3156 (rdata0x3a9d8b206468). Using request transaction as basis.
[2025-02-07 21:27:27.8q] DEBUG[102344] res_pjsip/pjsip_distributor.c: Found transaction tsx0x3a9d8b6660a8 for Response msg 200/REGISTER/cseq=3156 (rdata0x3a9d8b206468).
[2025-02-07 21:27:27.8q] DEBUG[102344] res_pjsip/pjsip_distributor.c: Found serializer pjsip/outreg/MCN_ 81111111111-00000052 on transaction tsx0x3a9d8b6660a8
[2025-02-07 21:27:27.8q] DEBUG[102345] res_pjsip_outbound_registration.c: Received REGISTER response 200(OK)
[2025-02-07 21:27:27.8q] DEBUG[102345] res_pjsip_outbound_registration.c: Processing REGISTER response 200 from server 'sip:sip.mcn.ru' for client 'sip:123456@sip.mcn.ru'
[2025-02-07 21:27:27.8q] DEBUG[102345] res_pjsip_outbound_registration.c: Outbound registration to 'sip:sip.mcn.ru' with client 'sip:123456@sip.mcn.ru' successful
[2025-02-07 21:27:27.8q] DEBUG[102345] res_pjsip_outbound_registration.c: Scheduling outbound registration to server 'sip:sip.mcn.ru' from client 'sip:123456@sip.mcn.ru' in 159 seconds
Код: Выделить всё
[2025-02-07 21:27:18.8q] Asterisk 22.1.1 built by root @ voip_asterisk.my.domain on a amd64 running FreeBSD on 2025-02-01 19:41:36 UTC
[2025-02-07 21:27:18.8q] NOTICE[102016] loader.c: 260 modules will be loaded.
[2025-02-07 21:27:18.8q] NOTICE[102016] cdr.c: CDR logging disabled.
[2025-02-07 21:27:18.8q] NOTICE[102016] indications.c: Default country for indication tones: ru
[2025-02-07 21:27:18.8q] NOTICE[102016] indications.c: Setting default indication country to 'ru'
[2025-02-07 21:27:18.8q] WARNING[102323] pbx_config.c: users.conf is deprecated and will be removed in a future version of Asterisk