Para o FreeSWITCH, acredito que esta funcionalidade possa ser tratada pelos perfis interno / externo do gole. Você pode encontrar mais informações em wiki.freeswitch.org
A configuração NAT do (s) seu (s) provedor (es) VoIP externo (s) pode ser configurada no perfil externo (por exemplo /usr/local/freeswitch/conf/sip_profiles/external/voipprovider.xml). Você pode definir esses dois parâmetros para corresponder ao seu endereço IP público:
<include>
<gateway name="voipprovider">
<param name="ext-rtp-ip" value="x.x.x.x"/>
<param name="ext-sip-ip" value="x.x.x.x"/>
<param name="username" value="user"/>
<param name="password" value="password"/>
<param name="realm" value="sip.voipprovider.com"/>
</gateway>
</include>
Para usar seus provedores voip externos, você configuraria seu dialplan (/usr/local/freeswitch/conf/dialplan/default.xml) algo como isto. Para usar diferentes provedores voip dependendo do destino, você pode ajustar o regex:
<include>
<extension name="Dial Out VoIP Provider">
<condition field="destination_number" expression="^9(1\d{10})$">
<action application="bridge" data="sofia/gateway/voipprovider/$1"/>
</condition>
</extension>
</include>
Espero que isso ajude. Eu não tenho nenhuma experiência com o Asterisk, então não tenho certeza de como você configuraria esse switch.