Диагностика проблем, связанных с SIP-портами
Мы уже знаем, что SIP-порты (5060/5061) отвечают за сигнализацию, а RTP-порты (обычно 10000-20000) — за передачу голоса. Но что делать, когда что-то идёт не так? Давайте разбираться, как диагностировать проблемы с портами.
Инструменты для диагностики
Для эффективной диагностики нам понадобятся эти Linux-утилиты:
netstatилиss: Покажут активные сетевые соединения, прослушиваемые порты и статистику.ss— современнее и быстрее.tcpdump: Захватывает и анализирует сетевой трафик на уровне пакетов. Незаменим для глубокой диагностики.firewall-cmd(для CentOS/RHEL): Управляетfirewalld, чтобы проверить, какие порты открыты или заблокированы.nmapилиtelnet: Проверят доступность портов с других машин.
Проверяем, что Asterisk слушает порты
Первым делом убедимся, что Asterisk действительно слушает нужные порты.
С помощью ss
ss -tuln | grep -E '5060|5061|10000'
Что означают эти флаги:
t: TCP-сокетыu: UDP-сокетыl: Только прослушиваемые сокетыn: Не разрешать имена сервисов и хостов (показывать номера портов)grep -E '5060|5061|10000': Фильтруем вывод, чтобы увидеть SIP-порты и начало диапазона RTP.
Вывод должен показать, что Asterisk (или процесс asterisk) слушает UDP-порты 5060 (для chan_sip или chan_pjsip) и/или 5061 (для TLS/SRTP PJSIP). Также должно быть видно прослушивание в диапазоне RTP.
Важно: Если вы используете
chan_pjsip, Asterisk по умолчанию может использовать другие порты для SIP-сигнализации, например, 5060 UDP/TCP и 5160 UDP/TCP. Проверьте конфигурацию PJSIP в FreePBX (Settings -> Asterisk SIP Settings -> PJSIP Settings) или в файлах/etc/asterisk/pjsip.confи/etc/asterisk/pjsip_custom.conf.
Проверяем диапазон RTP-портов
По умолчанию Asterisk использует RTP-порты 10000-20000. В FreePBX это настраивается в Settings -> Asterisk SIP Settings -> General SIP Settings -> RTP Port Ranges.
Чтобы убедиться, что Asterisk использует эти порты, посмотрите активные соединения во время звонка:
ss -uan | grep -E '1000[0-9]|100[1-9][0-9]|10[1-9][0-9][0-9]|1[1-9][0-9][0-9][0-9]|20000'
Этот grep поможет найти активные RTP-соединения в указанном диапазоне во время вызова.
Проверяем правила файрвола
Даже если Asterisk слушает порты, файрвол может их блокировать.
Проверка firewalld (CentOS/RHEL)
sudo firewall-cmd --list-all
Убедитесь, что порты 5060 (UDP/TCP), 5061 (UDP/TCP) и диапазон RTP (например, 10000-20000 UDP) разрешены в активной зоне.
Пример добавления портов (если они не открыты):
sudo firewall-cmd --permanent --add-port=5060/udp
sudo firewall-cmd --permanent --add-port=5060/tcp
sudo firewall-cmd --permanent --add-port=5061/udp
sudo firewall-cmd --permanent --add-port=5061/tcp
sudo firewall-cmd --permanent --add-port=10000-20000/udp
sudo firewall-cmd --reload
Внимание: Открытие портов делает вашу систему уязвимой. Всегда открывайте только те порты, которые действительно необходимы, и по возможности ограничивайте доступ по IP-адресам.
Диагностика с помощью tcpdump
tcpdump — ваш лучший друг при проблемах с портами. Он покажет, доходят ли пакеты до сервера и что с ними происходит.
Захват SIP-трафика
sudo tcpdump -i eth0 -n -s 0 port 5060 or port 5061
-i eth0: Укажите сетевой интерфейс (например,ens33).-n: Не преобразовывать IP-адреса и номера портов в имена.-s 0: Захватывать весь пакет (полный снимок).port 5060 or port 5061: Фильтруем по SIP-портам.
Если вы не видите SIP-пакеты, когда ожидаете их (например, при попытке регистрации телефона), это может указывать на:
- Блокировку на внешнем файрволе (провайдера, роутера).
- Неправильный IP-адрес или порт, на который отправляется трафик.
Захват RTP-трафика
Во время активного звонка захватите RTP-трафик:
sudo tcpdump -i eth0 -n -s 0 udp portrange 10000-20000
Если SIP-сигнализация проходит, но нет звука, и вы не видите RTP-пакеты, это может быть связано с:
- Проблемами NAT (особенно если RTP-пакеты уходят, но не приходят обратно).
- Неправильной настройкой диапазона RTP-портов.
- Блокировкой RTP-портов файрволом.
Типичные проблемы и их решения
-
Телефон не регистрируется (ошибка 408 Request Timeout или 403 Forbidden):
- Проверьте: Открыты ли SIP-порты (5060/5061) на сервере и на пути к нему. Используйте
tcpdumpна сервере, чтобы увидеть, доходят лиREGISTER-запросы. - Решение: Откройте порты в
firewalld, проверьте правила NAT на роутере.
- Проверьте: Открыты ли SIP-порты (5060/5061) на сервере и на пути к нему. Используйте
-
Нет звука в одну или обе стороны:
- Проверьте: Открыт ли диапазон RTP-портов (10000-20000 UDP) на сервере и на пути к нему.
- Используйте:
tcpdumpдля анализа RTP-трафика. Если видите исходящие RTP-пакеты, но не видите входящие, это часто указывает на проблему NAT или файрвола на стороне клиента или на пути. - Решение: Настройте NAT в FreePBX/Asterisk, проверьте правила файрвола.
-
Вызовы не устанавливаются (ошибка 486 Busy Here, 404 Not Found):
- Эти ошибки чаще связаны с диалпланом или регистрацией. Но иногда они могут быть косвенно связаны с недоступностью портов, если Asterisk не может установить соединение с внешним провайдером или другим пиром.
- Проверьте: Доступность портов до внешнего SIP-провайдера, если вы используете транк.
Понимание работы SIP- и RTP-портов и умение диагностировать связанные с ними проблемы — фундаментальные навыки для любого администратора Asterisk. Теперь, когда мы разобрались с диагностикой портов, пришло время заглянуть под капот FreePBX и понять, как он генерирует конфигурационные файлы Asterisk. Это поможет вам глубже понимать, что происходит «под капотом».