SIP proxy e SBC em Kamailio para FusionPBX, com foco em atravessar NAT sem quebrar a mídia.
O problema
PBX atrás de NAT é a fonte clássica de chamada muda: a sinalização passa, o áudio não. As soluções prontas ou trazem dezenas de módulos que ninguém entende, ou não expõem o modo transparent que o cenário exige.
A arquitetura
Kamailio com vinte módulos em uso deliberado — a disciplina declarada do projeto é que módulo só entra se estiver em uso ativo. O relay de mídia e o NAT traversal ficam com o rtpengine em modo transparent. O painel é Flask 3.1 organizado em blueprints, com SQLAlchemy 2.0 usando reflection e mapeamento imperativo sobre as tabelas do próprio motor, e um cliente JSON-RPC sobre HTTP conversa com o Kamailio em porta dedicada. A infraestrutura tem quatro Dockerfiles (kamailio, rtpengine, fusionpbx e painel), migrations SQL versionadas e provisionamento do FusionPBX por unit systemd.
O resultado
Treze cenários de teste em SIPp cobrindo negociação G.729 (incluindo payload type dinâmico contra estático e AVPF sem rtpmap), INVITE de entrada e saída, REGISTER de ramal remoto e rejeição 403 e 404. Isso é teste de conformidade de sinalização SIP, não teste de aplicação.


🔒 Código-fonte
git clone https://git.programandosolucoes.com.br/git/repos/sipproxy-fusionpbx.git
Código-fonte privado. As credenciais de leitura são liberadas sob solicitação — me chame para conversar sobre o projeto.