В экстеншенах нужно указывать:
nat yes
canreinvite no (это запрет на соединение клинтов напрямую, минуя сервер)
Также на фаерволе должны быть открыты порты:
5060 UDP (это sip)
10000-20000 UDP(это медиа поток)
sip_general_custom.conf
context=from-sip-external
allowguest=no
allowoverlap=no
alwaysauthreject=yes
ignoresdpversion=yes
useragent=Asterisk
defaultexpiry=360
callevents=yes
limitonpeer=yes
tcpenable=yes
tcpbindaddr=0.0.0.0
rtptimeout=60
rtpholdtimeout=300
rtpkeepalive=5
dtmfmode=info
canreinvite=no
language=ru
bindport=5060
bindaddr=0.0.0.0
srvlookup=yes
nat=yes
qualify=yes
qualify=300 ; проверять соединение каждые 300 мс.
localnet=192.168.0.0/255.255.0.0 ; Локальная сеть
externip=XX.XX.XX.XX ; Внешний IP адрес
allowexternaldomains=no
rtp.conf
[general]
rtpstart=10000
rtpend=20000
В настройках роутера должен быть проброшен NAT с внешнего IP XX.XX.XX.XX
Пример показан для роутера Mikrotik
/ip firewall nat
add action=dst-nat chain=dstnat comment="ASTERISK XX.XX.XX.XX" disabled=no \
dst-address=XX.XX.XX.XX dst-port=5060-5180 protocol=udp to-addresses=\
192.168.0.212 to-ports=5060-5180
add action=dst-nat chain=dstnat disabled=no dst-address=XX.XX.XX.XX dst-port=\
10000-20000 protocol=udp to-addresses=192.168.0.212 to-ports=10000-20000