Здравствуйте.
Столкнулся с проблемой.
1. Имеется FortiGate 80F, 2 ISP со статическими белыми IP и настроенный SD-WAN.
2. Имеется FreePBX 15. В SIP настройках указан внешний IP одного из провайдеров и настроен транк для звонков на внешние номера через MTT.
Периодически возникает проблема односторонней слышимости. Собеседника я слышу, а меня собеседник не слышит.
Транк типа SIP с регистрацией по логину/паролю.
Сам FreePBX говорит что SIP: registered Status: OK. В личном кабинете MTT так же показано что регистрация есть.
Сейчас помогают следующие манипуляции:
На FortiGate удаляю все сеансы у которых sours ip равен адресу FreePBX. В личном кабинете MTT удаляю существующую регистрацию. Перезагружаю FreePBX.
После этого проблема исчезает на пару дней. Но не всегда это помогает с первого раза. иногда приходится повторять эту процедуру раза 3.
Читал что односторонняя слышимость это проблема с RTP пакетами.
Но как диагностировать неисправность и решить проблему с односторонней слышимостью не знаю.
Подскажите пожалуйста как действовать? Какие методы диагностики и исправления данной проблемы существуют?
Скорее всего ты не слышиш клиента, а значить в SIP пакете не правильно указан адрес RTP. Раз проблема не постоянная, значит сбоит механизм подмены этого адреса, делаю ставку что это фортик косячик. Если клиент не слышит менеджера, то скорее всего ты не указал на freepbx адрес локальных подсетей.
Когда появляется проблема сними дамп трафика с внешнего интерфейса фортика и проанализируй SIP сессию через wireshark. 90% что шалит фортик. Обычно помогает отключение SIP ALG на устройстве которое назимается NAT (в твоем случае фортик) и настройка проброса портов SIP и RTP.
Какой тип регистрачии транка?
В SIP настройках указан внешний IP одного из провайдеров
Не забыл указать список локальных сетей?
Уверен что регистрация транка всегда идет через один и тот же внешний адрес?
Нет, не забыл. Локальные сети прописаны. Помимо внешних звонков еще есть между филиалами по VPN. С ними всегда все стабильно работает.
Запускал в консольке FreePBX команду sip set debug peer TRUNK_NAME в моментах когда слышимость нормальная и когда односторонняя, но ничего полезного для себя я там не увидел.
По поводу проброса портов сомневаюсь, потому что проблема носит периодический характер, то работает то не работает. SIP ALG отключил, понаблюдаю.
Уверен что регистрация транка всегда идет через один и тот же внешний адрес?
Думаю что да. В личном кабинете MTT в строке регистрации написан мой внешний ИП который на FreePBX указан, но тем не менее односторонняя слышимость присутствует.
На фортике был проброс всех портов до сегодняшнего утра для IP адреса провайдера MTT. Сегодня утром проблема повторилась и сменил условие все порты, на конкретно 5060. Связь сразу же восстановилась. Но при звонках вываливается сообщение:
[2024-04-11 08:43:08] WARNING[2587]: chan_sip.c:4167 retrans_pkt: Hanging up call SDfs6f101-cb91d337b6572b63d41abb7e7504791f000@127.0.0.1 - no reply to our critical packet (see https://wiki.asterisk.org/wiki/display/AST/SIP+Ret...).
Возможно на это можно закрыть глаза, ведь звонки то работают.
Потестирую какое то время. Если все норм, то вернусь и подведу итог что помогло.
Спасибо за советы.
Valentin Barbolin,
Проблема спустя 5 дней не повторялась.
Как Вы и сказали, на фортике пробросил порты 5060, 5160 и диапазон RTP портов. Осталось разобраться с проблемой когда основной провайдер отваливается и инет идет по второму провайдеру. А то приходится лезть на FreePBX и править внешний адрес. Но это уже в другой теме, если ответа не найду))))
А то приходится лезть на FreePBX и править внешний адрес.
В теории SIP ALG должен решать эту проблему. То есть ты НЕ указываеш внешний IP на FreePBX, а SIP ALG самостоятельно правил SIP пакеры и подставляет нужный IP. Соответственно, когда менается провайдер, то и SIP ALG менает IP.
Но как показывает практика этот механизм часто работает кривова-то.
Алексей, если используется древний chan sip, то надо каждый раз заменять внешний адрес в конфиге sip.conf и делать sip reload externip = ваш_текущий_внешний_IP_адрес
если используете chan pjsip, тогда можно использовать так:
1 - так же заменять текущий IP адрес и делать pjsip reload (не помню, поможет ли)
type = transport
external_media_address = ваш_текущий_внешний_IP_адрес
external_signaling_address = ваш_текущий_внешний_IP_адрес
2 - использовать своё внешнее DNS имя
type = transport
external_media_address = ваш_текущий_внешний_DNS_адрес
external_signaling_address = ваш_текущий_внешний_DNS_адрес
ваш_текущий_внешний_DNS_адрес - должен резолвить на текущий активный IP адрес
Провайдер ссылается на поставщика услуг интернета. Якобы он шлет не туда RTP пакеты. Но поставщик услуг интернета тут не причем. Где то на моей стороне ошибка, которую я не могу найти.