Кто-либо сталкивался с пропаданием звука в Asterisk?
Поднят Asterisk 13.5.0 на CentOS 7. Firewalld и iptables отключены. Настройки сделаны make samples. Изменены лишь sip.conf, extensions.conf, astersik.conf. Отключил hep. Возникают проблемы с пропаданием звука в обе стороны. Снимая tcpdump'ом наблюдаю что в дампе от астериска до офисных телефонов пропадает речь извне. В дампе от астериска до провайдера-voip пропадает речь от офисных телефонов. Т.е. Будто бы астериск забывает перекинуть некоторые пакеты.
Интерфейс один, смотрящий в офисную сеть. в трафике от выше стоящего оператора нет проблем с входящим звуком, но есть проблемы с исходящим. В трафике от астериска до офисных телефонов - наоборот.
Есть другой asterisk v11, поднят в kvm. На нем все работает отлично. Поднял на hp proliant dl160 esxi 6.0. На ней создал виртуалку с CentOS 7 и Asterisk v13. Настройки тупо перекопировал. На этой виртуалке работает все с глюками.
так все таки покажите asterisk.conf, sip.conf, и в двух словах схему сети. Что-то мне интуиция подсказывает, что оно у вас за натом и все дело в конфигурации сети... ну и... системы у вас случаем не одновременно работают?
[options]
progressinband=yes
internal_timing=yes
silencesuppression=no
;verbose = 3
;debug = 3
;alwaysfork = yes ; Same as -F at startup.
;nofork = yes ; Same as -f at startup.
;quiet = yes ; Same as -q at startup.
;timestamp = yes ; Same as -T at startup.
;execincludes = yes ; Support #exec in config files.
;console = yes ; Run as console (same as -c at startup).
;highpriority = yes ; Run realtime priority (same as -p at
; startup).
;initcrypto = yes ; Initialize crypto keys (same as -i at
; startup).
nocolor = yes ; Disable console colors.
;dontwarn = yes ; Disable some warnings.
;dumpcore = yes ; Dump core on crash (same as -g at startup).
;languageprefix = yes ; Use the new sound prefix path syntax.
systemname = aster1enter ; Prefix uniqueid with a system name for
; Global uniqueness issues.
;autosystemname = yes ; Automatically set systemname to hostname,
; uses 'localhost' on failure, or systemname if
; set.
;mindtmfduration = 80 ; Set minimum DTMF duration in ms (default 80 ms)
; If we get shorter DTMF messages, these will be
; changed to the minimum duration
;maxcalls = 10 ; Maximum amount of calls allowed.
;maxload = 0.9 ; Asterisk stops accepting new calls if the
; load average exceed this limit.
;maxfiles = 1000 ; Maximum amount of openfiles.
;minmemfree = 1 ; In MBs, Asterisk stops accepting new calls if
; the amount of free memory falls below this
; watermark.
;cache_record_files = yes ; Cache recorded sound files to another
; directory during recording.
;record_cache_dir = /tmp ; Specify cache directory (used in conjunction
; with cache_record_files).
;transmit_silence = yes ; Transmit silence while a channel is in a
; waiting state, a recording only state, or
; when DTMF is being generated. Note that the
; silence internally is generated in raw signed
; linear format. This means that it must be
; transcoded into the native format of the
; channel before it can be sent to the device.
; It is for this reason that this is optional,
; as it may result in requiring a temporary
; codec translation path for a channel that may
; not otherwise require one.
;transcode_via_sln = yes ; Build transcode paths via SLINEAR, instead of
; directly.
runuser = asteriskpbx ; The user to run as.
rungroup = asteriskpbx ; The group to run as.
;lightbackground = yes ; If your terminal is set for a light-colored
; background.
;forceblackbackground = yes ; Force the background of the terminal to be
; black, in order for terminal colors to show
; up properly.
defaultlanguage = ru ; Default language
documentation_language = en_US ; Set the language you want documentation
; displayed in. Value is in the same format as
; locale names.
;hideconnect = yes ; Hide messages displayed when a remote console
; connects and disconnects.
;lockconfdir = no ; Protect the directory containing the
; configuration files (/etc/asterisk) with a
; lock.
;stdexten = gosub ; How to invoke the extensions.conf stdexten.
; macro - Invoke the stdexten using a macro as
; done by legacy Asterisk versions.
; gosub - Invoke the stdexten using a gosub as
; documented in extensions.conf.sample.
; Default gosub.
;live_dangerously = no ; Enable the execution of 'dangerous' dialplan
; functions from external sources (AMI,
; etc.) These functions (such as SHELL) are
; considered dangerous because they can allow
; privilege escalation.
; Default yes, for backward compatability.
; Changing the following lines may compromise your security.
;[files]
;astctlpermissions = 0660
;astctlowner = root
;astctlgroup = apache
;astctl = asterisk.ctl
[compat]
pbx_realtime=1.6
res_agi=1.6
app_set=1.6
Да, вы правы. Все за натом. Но у старого астериска с этим проблем нет. А я просто взял его конфиги и IP. Так что NAT тут должен быть не причем. У меня есть микротик. Он имеет внешний IP (белый), натит все src-nat. Что тут еще о сети можно сказать)
у вас опцию nat=force_rport,comedia перекрывает нижеидущая nat=no
заменитие canreivite на directmedia, проверьте диапазон rtp портов - здесь они у вас не указаны, возможно лежат в rtp.conf и сравните с пробросом на микротике, для удобства впишите в sip.conf, уменьшиете значение qualify
это первое, что приходит в глову при виде конфига. если не поможет и rtp-диапазон совпадает с установленным на микротике - будем думать дальше
Иван Байдин: По поводу портов на микротике: на астериск приходит аудиопоток от вышестоящего оператора. Это видно по tcpdump'у. Астериск иногда не пробрасывает через себя потоки. В обе стороны.
Axelertortt: сорри, слишком бегло посмотрел. но ттаки у нас в процессе работы что-то меняется и в первую очередь это nat=no у внутренних, во вторую - несовпадение диапазано rtp. не скажу сейчас на вскидку, какой он по умолчанию у *13 ну и без шпаргалки не скажу, что *13 делает с устаревшим canreinvite
Абстрактно: Имхо если до внесенных изменений в conf'ы звук был, надо внимательно проанализировать сделанные изменения. Ну либо какой-то аппаратный сбой, проверять железо.