Также посмотрите в сторону алгоритмов "разделяй и властвуй"
Если задачу можно разделить на несколько независимых подзадач, то их(подзадачи) можно запускать в отдельных потоках.
Клиент за NAT?
Что сам asterisk говорит по этому поводу?
Пробовали включать sip debug
Может клиент пытается подключиться и шлет свой локальный IP, астериск получает входящий пакет и шлет ответ на локальный IP клиента, а не на внешний
sip debug можно включить и на IP и на клиента и посмотреть