Назад | Перейти на главную страницу

Asterisk и SIP за NAT

Я пытаюсь настроить сервер Asterisk для приема вызовов от клиента в другой сети. Сервер и клиент находятся за NAT.

Я уже активировал STUN на клиенте, но все еще не могу слышать другую сторону на обоих. Через некоторое время вызов завершается, и в журнале Asterisk появляется сообщение о том, что истекло время ожидания повторной передачи, и появляется сообщение Нет ответа на полученный критический пакет.

Самый простой и ленивый способ обойти это - установить для вашего поля звездочки конфигурацию 1: 1 nat (часто называемую хостом DMZ на домашних маршрутизаторах) и убедиться, что externip = установлен в sip.conf.

Обычные проблемы с SIP и NAT:

  • Заголовки SIP содержат информацию об источнике и получателе вызова (IP-адреса), которые могут быть недоступны для клиентов и серверов, находящихся за nat.
  • Как правило, для потоков RTP необходимо перенаправить широкий диапазон портов (аудио и все остальное)
  • Многие устройства NAT (например, Ciscos, о котором упоминал Джеймс Снирингер) пытаются «помочь» и обычно плохо справляются с искажением заголовков.
  • Некоторые SIP-устройства будут пытаться «повторно пригласить», что в основном означает установление прямого соединения с вызывающим устройством, а не маршрутизацию его через УАТС. NAT полностью это нарушает.

Предполагая, что вы не можете использовать звездочку NAT 1: 1, попробуйте следующее:

В общем разделе sip.conf:

  • Убедитесь, что установлен externip (externip =)
  • Установите nat = yes (этим часто злоупотребляют / неправильно понимают, но попробуйте)
  • убедитесь, что установлена ​​маска подсети localnet = / (например, 192.168.1.23/255.255.255.0) (это приведет к тому, что звездочка запишет свой частный IP-адрес в заголовки SIP, отправляемые на телефоны в этой сети, но используйте externip везде)

В разделе устройств для проблемного телефона: - qualify = 5000 (Это приведет к тому, что звездочка будет проверять добавочный номер каждые 5 секунд. Отрегулируйте по желанию, если он короче тайм-аута NAT, сопоставление должно сохраняться)

На вашем NAT / брандмауэре - убедитесь, что весь диапазон портов UDP, перечисленных в rtp.conf, имеет записи пересылки на ваш сервер asterisk. Обычно это примерно 10000-12000 (каждый вызов может использовать до 4 каналов RTP, так что этот параметр будет обрабатывать не менее 500 одновременных вызовов). И конечно же 5060 (сигнализация SIP)

Я нашел эту страницу полезной в прошлом: http://asteriskguru.com/tutorials/sip_nat_oneway_or_no_audio_asterisk.html

Если вы используете один из дистрибутивов звездочки с веб-интерфейсом (FreePBX, Elastix, Trixbox, PBX-in-a-flash и т.д.), дайте мне знать, и я могу предложить некоторые настройки графического интерфейса, а не редактировать файлы conf напрямую. У меня было неудовольствие отладить проблемы с большинством из них ...

Стоит отметить, что после настройки внешнего IP-адреса вам может не понадобиться (и, возможно, не нужно) настраивать локальный сетевой адрес. Комментарий Джеймса: если ваш брандмауэр обрабатывает это за вас, он может создать невероятно загадочную петлевую ситуацию.