Для поддержания открытыми порты на NAT можно использовать:
- Уменьшенное значение Expire Time при регистрации. Например, поставить 30с и телефон будет вынужден каждые 30 секунд заново регистрироваться.
- Посылку "keep alive" пакетов. На транспортном уровне в UDP такой возможности нет, поэтому функционал работает на прикладном уровне: телефон и станция обмениваются служебными пакетами, например, OPTIONS. Смысловой нагрузки в них не много, их задача - поддерживать сессию на NAT + показывать станции доступность телефона.
На разных NAT по-разному реализован механизм SIP ALG, поэтому могут быть с ним проблемы. Если проблемный телефон находится за отдельным NAT, на это стоит обратить внимание.