Relatório Técnico Completo • TSi Telecom

Comunicação OpenSIPS ao SIPPROXY TSi Telecom

Este relatório descreve, de forma completa e acessível, a plataforma de comunicação SIP construída com OpenSIPS 3.6.6 na TSi Telecom, sua arquitetura de serviços, portas, módulos, fluxos de chamada e a integração com o SIP Proxy oficial sipproxy.tsitelecom.com.br.

SIP Proxysipproxy.tsitelecom.com.br
IPv4 do Proxy177.10.116.79
Porta SIP5060 (UDP/TCP)
Versão OpenSIPS3.6.6 (x86_64/linux)
Domínio SIPopensips.tsiapp.io
IP Público VPS177.10.116.10

1. O que é o OpenSIPS nesta arquitetura

O OpenSIPS é um servidor SIP de alto desempenho que atua como SBC (Session Border Controller), registrador, roteador e softswitch na infraestrutura da TSi Telecom. Ele é o ponto central que recebe e envia toda a sinalização SIP entre endpoints (telefones, softphones, PABXs) e o mundo externo.

Nesta implementação, o OpenSIPS não apenas registra usuários e roteia chamadas: ele também gerencia autenticação, diálogos, NAT traversal, áudio RTP (via RTPProxy), filas de call center, balanceamento de carga entre gateways e rastreamento de chamadas. Tudo isso é feito com base em módulos especializados carregados dinamicamente.

A conexão com a operadora de telefonia é feita por meio do SIPPROXY, o servidor SIP da TS Telecom que recebe as chamadas destinadas à rede pública (PSTN) e devolve as chamadas recebidas. O endereço desse proxy é sipproxy.tsitelecom.com.br, que resolve para 177.10.116.79 e escuta na porta 5060 (UDP e TCP).

2. Arquitetura e diagrama completo

A plataforma é dividida em camadas bem definidas. A camada de sinalização SIP é independente da camada web de relatórios, garantindo segurança e isolamento.

Endpoint SIP Telefone / Softphone UDP/TCP 5060 TLS 5061 OpenSIPS Core SBC / Softswitch / Registrar 172.20.50.2 OpenSIPS 3.6.6 RTPProxy Mídia RTP 172.20.50.5 30000-30100 UDP SIPPROXY TSi Telecom sipproxy.tsitelecom.com.br 177.10.116.79 5060 UDP/TCP MariaDB 172.20.50.3 Usuários, rotas, diálogos OpenSIPS-CP Painel Web opensips.tsiapp.io/cp MOH (Asterisk) Música de espera 172.20.50.7 Camada web deste relatório: Navegador → Cloudflare DNS → Traefik (177.10.116.10:443) → Nginx → Landpage OpenSIPS (HTTPS)

Nota importante: a landpage que você está lendo faz parte da camada web de documentação. A sinalização SIP em si flui diretamente entre o OpenSIPS Core e o SIPPROXY, sem passar por navegadores ou pela internet comum.

3. Serviços, containers e funções

Cada componente da stack é executado em um container Docker independente, conectado à rede interna tsi-network. Essa separação facilita manutenção, atualizações e escalabilidade.

ServiçoContainerIP internoFunção principal
OpenSIPS Core tsi-opensips-core 172.20.50.2 Processa toda a sinalização SIP: REGISTER, INVITE, BYE, OPTIONS etc. É o cérebro da plataforma.
MariaDB tsi-opensips-mariadb 172.20.50.3 Banco de dados relacional que armazena usuários SIP (subscriber), domínios, rotas PSTN, diálogos ativos, permissões e logs de call center.
OpenSIPS-CP tsi-opensips-ocp 172.20.50.4 Painel web de administração. Permite gerenciar usuários, aliases, rotas de discagem, DID, gateways, filas de call center e visualizar estatísticas.
RTPProxy tsi-opensips-rtpproxy 172.20.50.5 Media relay para áudio RTP. Faz o encaminhamento do fluxo de voz entre endpoints, especialmente em cenários com NAT.
MOH tsi-opensips-moh 172.20.50.7 Servidor Asterisk dedicado a fornecer música de espera para chamadas em fila do call center.
OpenSIPS-CLI tsi-opensips-cli 172.20.50.6 Ferramenta de linha de comando para diagnóstico e administração, executada sob demanda (perfil admin).

4. Portas, protocolos e firewall

Abaixo estão todas as portas utilizadas pelos serviços OpenSIPS, com indicação de onde são expostas e quem pode acessá-las.

Status de comunicação com o SIPPROXY

Testes de conectividade realizados diretamente com sipproxy.tsitelecom.com.br (177.10.116.79):

SIP UDP 5060 Comunicando — resposta SIP recebida do proxy
SIP TCP 5060 Comunicando — handshake TCP estabelecido
SIP TLS 5061 Comunicando — handshake TCP estabelecido
RTP 30000-30100 UDP Pronto — fluxo de mídia ativado durante chamadas
SMPP 2775 Sem resposta no momento — liberado, mas não confirmado pelo proxy

Portas expostas na internet (UFW)

PortaProtocoloOrigem permitidaFunção
5060UDP/TCPAnywhereSinalização SIP padrão (registro e chamadas)
5061TCPAnywhereSinalização SIP criptografada com TLS
30000-30100UDPAnywhereFluxo de mídia RTP (áudio das chamadas)
5060UDP/TCP177.10.116.79SIP exclusivo para o SIPPROXY TSi Telecom
5061TCP177.10.116.79SIP/TLS exclusivo para o SIPPROXY TSi Telecom
2775TCP177.10.116.79SMPP (SMS) para integração com o SIPPROXY, se necessário

Portas internas (rede Docker tsi-network)

PortaProtocoloServiçoAcessoFunção
3306TCPMariaDB172.20.0.0/16Banco de dados da plataforma
8888TCPOpenSIPS MI HTTP172.20.0.0/16API de gerenciamento interno (Management Interface)
9060TCPOpenSIPS Homer172.20.0.0/16Captura de traces SIP para análise (atualmente desabilitado)
7899UDPRTPProxyRede internaControle do RTPProxy pelo OpenSIPS
80TCPOpenSIPS-CPVia TraefikPainel web de administração
As portas 8888 (MI HTTP) e 3306 (MariaDB) são restritas à rede Docker interna e não devem ser expostas diretamente à internet, pois concedem controle administrativo total sobre a plataforma.

5. Módulos ativos e o que cada um faz

O poder do OpenSIPS vem dos seus módulos. Cada módulo adiciona uma capacidade específica à plataforma. Abaixo estão os principais módulos carregados na configuração atual.

MóduloFunção resumida
signalingEnvio de respostas SIP e funções básicas de sinalização.
slRespostas SIP stateless, como erros rápidos.
tmGerenciamento de transações SIP (stateful forwarding) — essencial para t_relay().
rrRecord-Route, garante que as respostas SIP retornem pelo mesmo caminho.
maxfwdValida o cabeçalho Max-Forwards para evitar loops infinitos.
sipmsgops / textopsManipulação de cabeçalhos e corpo das mensagens SIP.
proto_udp / proto_tcp / proto_tlsTransportes SIP: UDP, TCP e TLS.
tls_mgm / tls_opensslGerenciamento de certificados TLS para chamadas seguras.
db_mysqlConector MySQL/MariaDB para os módulos que precisam de banco.
usrlocLocalização dos usuários SIP registrados (onde cada ramal pode ser encontrado).
registrarProcessa mensagens REGISTER e armazena o binding no banco.
auth / auth_dbAutenticação digest dos usuários contra a tabela subscriber.
domainGerenciamento de domínios SIP suportados pela plataforma.
dialogControle de diálogos ativos, com persistência no banco.
accAccounting: registra detalhes de chamadas para bilhetagem.
nathelperAjuda a resolver cenários de NAT, mantendo endpoints atrás de roteadores alcançáveis.
rtpproxyIntegração com o RTPProxy para encaminhamento de mídia.
presenceSuporte a presença SIP (disponível/ocupado).
b2b_entities / b2b_logicBack-to-Back User Agent, útil para cenários avançados de controle de chamadas.
permissionsListas de permissões por endereço IP (tabela address).
load_balancerDistribuição de carga entre gateways SIP.
call_centerFilas de atendimento e distribuição de chamadas para agentes.
droutingRoteamento dinâmico de chamadas, usado para rotear números para o PSTN.
tracerCaptura de traces SIP para auditoria e depuração.
proto_smppProtocolo SMPP para integração com gateways de SMS.

6. Fluxo completo de uma chamada

Entender o caminho de uma chamada ajuda a diagnosticar problemas e a treinar equipes. Abaixo está o fluxo passo a passo.

6.1 Registro de um ramal (REGISTER)

  1. O telefone envia um REGISTER sip:opensips.tsiapp.io SIP/2.0 para a VPS na porta 5060.
  2. O OpenSIPS recebe a mensagem e verifica se o domínio é conhecido (is_myself("$rd")).
  3. O módulo auth_db exige autenticação digest usando usuário e senha da tabela subscriber.
  4. Se autenticado, o registrar salva a localização do ramal no usrloc e no MariaDB.
  5. O telefone recebe 200 OK e fica disponível para receber chamadas.

6.2 Chamada para fora (INVITE → PSTN via SIPPROXY)

  1. O ramal disca um número, por exemplo 5511999999999, e envia INVITE ao OpenSIPS.
  2. A rota principal detecta que o destino é numérico e direciona para route(pstn).
  3. route(require_auth) verifica se o originador é confiável (tabela address) ou exige autenticação.
  4. O módulo drouting consulta as rotas de discagem e define o próximo salto.
  5. O rtpproxy insere um SDP intermediário para permitir que o áudio flua corretamente.
  6. O OpenSIPS encaminha o INVITE para sipproxy.tsitelecom.com.br:5060 (177.10.116.79).
  7. O SIPPROXY completa a chamada na rede pública (PSTN).
  8. Respostas e BYE trafegam pelo mesmo caminho, gerenciados pelo módulo dialog.

6.3 Chamada para o Call Center (filas)

  1. O usuário disca *800.
  2. O OpenSIPS identifica o prefixo e direciona para route(callcenter).
  3. O módulo call_center coloca a chamada na fila tsiapp_support.
  4. Quando um agente fica disponível, a chamada é entregue a ele.
  5. Durante a espera, o MOH (Asterisk) fornece música de espera.

7. Configuração do SIPPROXY explicada

No arquivo /opt/tsi-stack/apps/opensips/config/opensips.cfg, existe um tratamento especial para mensagens REGISTER cujo domínio de destino seja o SIPPROXY. Isso é útil quando endpoints são configurados para se registrar diretamente no domínio da operadora, mas o OpenSIPS precisa interceptar e redirecionar para o IP correto.

Trecho de configuração

if (is_method("REGISTER")) {
    if ($rd == "sipproxy.tsitelecom.com.br") {
        xlog("L_INFO", "REGISTER outbound override: $rd -> 177.10.116.79:5060\n");
        $rd = "177.10.116.79";
        $rp = "5060";
    }
}

O que esse trecho faz?

Por que isso é importante?

Alguns telefones e PABXs são configurados com o domínio textual da operadora em vez do IP. Sem esse override, o OpenSIPS tentaria resolver o domínio ou tratar a mensagem localmente, o que poderia falhar. Com o override, a mensagem é encaminhada de forma determinística para o IP correto.

Validação oficial: segundo a documentação do OpenSIPS, $rd e $rp são pseudo-variáveis do Request-URI, e a atribuição direta a elas é equivalente ao uso das funções sethost() e setport(). A função t_relay() é o mecanismo recomendado para encaminhamento stateful de mensagens SIP.

8. Ferramentas de operação

OpenSIPS-CP

Painel web disponível em opensips.tsiapp.io/cp. Por meio dele é possível:

  • Criar e editar usuários SIP (ramais).
  • Gerenciar aliases e domínios.
  • Configurar rotas de discagem (drouting).
  • Visualizar e administrar filas de call center.
  • Acompanhar estatísticas e logs básicos.

OpenSIPS-CLI

Ferramenta de terminal para administradores. Permite:

  • Recarregar tabelas de rotas e permissões.
  • Consultar estatísticas de tráfego.
  • Depurar configurações e variáveis.
  • Executar scripts de manutenção.

MI HTTP (Management Interface)

A porta 8888 expõe uma API JSON-RPC que permite consultar e controlar o OpenSIPS programaticamente. Exemplo de consulta de versão:

POST http://172.20.50.2:8888/mi/
Content-Type: application/json

{
  "jsonrpc": "2.0",
  "method": "version",
  "id": 1
}

Resposta típica:

{"jsonrpc":"2.0","result":{"Server":"OpenSIPS (3.6.6 (x86_64/linux))"},"id":1}

Backup e recuperação

O script /opt/tsi-stack/apps/opensips/scripts/backup.sh realiza backup automatizado do banco MariaDB e dos arquivos de configuração. Os backups são armazenados em /opt/tsi-stack/apps/opensips/backups/ com data e hora.

9. Camadas de segurança

🔐 Autenticação digest

Ramais precisam se autenticar com usuário e senha armazenados no MariaDB. Gateways confiáveis são listados na tabela address do módulo permissions.

🛡️ TLS para SIP

Chamadas criptografadas utilizam TLS na porta 5061. Os certificados estão em /opt/tsi-stack/apps/opensips/certs.

🚫 Lockout no painel

O OpenSIPS-CP possui proteção contra brute-force: 5 tentativas falhas de login geram bloqueio de 15 minutos.

🔒 Firewall UFW

Apenas as portas necessárias estão abertas. Portas administrativas (8888, 3306, 9060) são restritas à rede Docker interna.

🧱 Separação de camadas

A camada web (landpage e OCP) é servida pelo Traefik, enquanto a sinalização SIP flui diretamente pelo OpenSIPS. Isso evita que a interface web tenha acesso direto ao tráfego de voz.

📝 Accounting e tracing

Os módulos acc e tracer registram eventos de chamada e mensagens SIP, permitindo auditoria e investigação de incidentes.

10. Troubleshooting rápido

SintomaPossível causaAção sugerida
Ramal não registra Credenciais incorretas ou domínio errado Verificar usuário/senha no OCP e confirmar domínio opensips.tsiapp.io.
Chamada cai após atender Problema de RTP ou NAT Verificar se o RTPProxy está ativo e se as portas 30000-30100 UDP estão liberadas.
Não disca para números externos Rota PSTN ou SIPPROXY inacessível Testar conectividade para 177.10.116.79:5060 e verificar tabela drouting.
Sem áudio em ambos os lados SDP ou RTP bloqueado Confirmar que rtpproxy_offer e rtpproxy_answer estão ativos nas rotas.
Painel OCP não abre Container com problema ou credenciais bloqueadas Verificar logs com docker logs tsi-opensips-ocp e aguardar lockout expirar.