Если говорить только в рамках астериска,для надежности уберем из схемы сервисы stun и прочее, то:1. У вас нат нужен для доступа из локальной сети к днс(в общем случае) и создания ответного соединения от астериска к внешнему абоненту - ставите нат на шлюзе и правила фаервола для доступа в инет;
2. Для доступа внешних абонентов к астериску, который стоит за шлюзом, на шлюзе разрешаете входящие соединения от инет абонентов на шлюз(99.88.77.66) к портам sip(и/или h323), rtp и пробрасываете порты(для sip: 5060/udp или tcp, h323: 1720 tcp, rtp: 10000-20000 udp) из инета на астериск(192.168.0.2). Т.е. внешний абонент подключается к вашему шлюзу(99.88.77.66), а он, в свою очередь, перекидывает пакеты к астериску(192.168.0.2) в локальной сети. В этом случае на астериск приходят пакеты вида - отправитель 111.222.333.444(где-то в инете), получатель 192.168.0.2;
3. Для работы внешних абонентов, на астериске в фаерволе, разрешаете подключаться к портам sip(и/или h323), rtp из инета;
3. Для работы локальных/внутренних абонентов так же разрешаете подключаться из локальной сети к астериску по портам sip(и/или h323), rtp;
4. Астериску указываете его внешний интернет ip адрес(адрес шлюза) - externaddr=99.88.77.66. Это для того, что бы он в отправляемых инвайтах sip вписывал в поле отправителя адрес шлюза(т.е. на какой ip-адрес, внешний абонент, должен отправлять ответ);
5. Так же астериску надо указать в секции [general], а не пира!, какой тип прохождения ната он должен использовать. В версии астериска 1.6 возможно достаточно указать nat=yes, но в последующих есть несколько типов обработки соединений через нат астериском...
6. Астериск, по умолчанию, указывает абонентам голосовые соединения создавать напрямую. Т.е. из локальной сети до абонента в инете(интернет ip) разговаривать будет можно, а вот обратный случай понятно что не получиться. По этому, в секцию [general], добавьте directmedia = no (хотя в старших версиях можно указать nonat). Смысл прост, запретить прямое соединение голоса между абонентами, т.е. голос пускать через астериск. В случае nonat голос пойдет через астериск только при соединении абонентов не локальной сети;
7. Проверьте, что все разрешенные кодеки(кодирование/декодирование)поддерживаются и вашими телефонами.
PS: В общем как-то так. Не забудьте про безопасность... Разбираться в ваших макросах я не стал... многовато. Сделайте простой диалплан, без макросов и прочего. Включите режим отладки в консоли астериска и сделайте звонок, только постарайтесь, что бы в это время никто больше не звонил. Информации будет очень много... только сюда ее выкладывать все же не надо...