Com o SIP, a sinalização é feita via SIP e o áudio digitalizado é enviado através de um protocolo diferente, o RTP. O SIP e o RTP podem e geralmente são enviados para diferentes endereços IP. Isso normalmente não é um problema, desde que os endereços IP estejam todos acessíveis.
O que está acontecendo na sua situação é algo assim:
O PBX2 envia um SIP INVITE para o PBX1. Incluído nesse INVITE está a informação sobre para onde enviar o áudio. O PBX2 especifica seu próprio endereço IP. Como seu endereço IP é acessível a partir do PBX1, as chamadas entre os dois trabalham.
Agora, quando o receptor é uma linha externa, o PBX1 envia seu próprio CONVITE para o seu provedor e transmite no INVITE as informações sobre para onde enviar o áudio (ou seja, o endereço IP do PBX2) Se os dois PBXs estivessem ligados IPs públicos, isso seria ótimo. Como eles não são ambos acessíveis a partir do exterior, você precisa modificar o comportamento do PBX1
No PBX1, no seu arquivo sip.conf
, deve haver uma configuração de mesmo nível para o PBX2. Nesta configuração de pares, você precisa adicionar a seguinte linha:
canreinvite=no
(Em versões mais recentes do asterisco, você usaria directmedia=no
em vez disso. )
Isso fará com que o PBX1 permaneça no caminho da mídia sempre que estiver envolvido em uma chamada com PBX2. Em outras palavras, quando você liga para o mundo externo, o PBX1 fornecerá ao seu provedor seu próprio endereço IP para onde enviar o áudio, ele fará a proxy desse áudio e o enviará para o PBX2.
Espero que isso ajude!