Como Configurar e Balancear Múltiplos Troncos SIP no Asterisk

O Asterisk permite configurar múltiplos troncos SIP para chamadas externas. No entanto, sem uma configuração específica, o Asterisk sempre usará o primeiro tronco disponível. Este artigo aborda como distribuir chamadas de forma eficiente entre troncos SIP.

1. Configuração Básica dos Troncos SIP

Primeiro, defina seus troncos no sip.conf:

[general]
context=default
bindport=5060
bindaddr=0.0.0.0

[tronco1]

type=peer host=sip1.provedor.com username=usuario1 secret=senha1 fromuser=usuario1 insecure=port,invite nat=force_rport,comedia context=from-external disallow=all allow=ulaw

[tronco2]

type=peer host=sip2.provedor.com username=usuario2 secret=senha2 fromuser=usuario2 insecure=port,invite nat=force_rport,comedia context=from-external disallow=all allow=ulaw

2. Configuração do Dialplan para Ramais Internos

No extensions.conf, defina as chamadas internas:

[default]
exten => 1001,1,Dial(SIP/1001)
exten => 1002,1,Dial(SIP/1002)

Agora, vamos configurar as chamadas externas com diferentes estratégias de balanceamento.

3. Métodos para Distribuir Chamadas Entre Múltiplos Troncos

3.1 Seleção por Ordem de Prioridade

Se um tronco falhar, o segundo será utilizado:

[default]
exten => _0X.,1,Dial(SIP/tronco1/${EXTEN:1})
exten => _0X.,n,Dial(SIP/tronco2/${EXTEN:1})
exten => _0X.,n,Hangup()

3.2 Seleção Aleatória de Tronco

Distribui chamadas aleatoriamente entre os troncos:

[default]
exten => _0X.,1,GotoIf($[${RAND(0,1)}=0]?tronco1:tronco2)

exten => tronco1,1,Dial(SIP/tronco1/${EXTEN:1})
exten => tronco1,n,Hangup()

exten => tronco2,1,Dial(SIP/tronco2/${EXTEN:1})
exten => tronco2,n,Hangup()

3.3 Balanceamento Automático com Contagem de Chamadas

Alterna os troncos a cada chamada:

[default]
exten => _0X.,1,Set(GROUP()=chamadas_externas)
exten => _0X.,n,GotoIf($[${GROUP_COUNT(chamadas_externas@default)}%2=0]?tronco1:tronco2)

exten => tronco1,1,Dial(SIP/tronco1/${EXTEN:1})
exten => tronco1,n,Hangup()

exten => tronco2,1,Dial(SIP/tronco2/${EXTEN:1})
exten => tronco2,n,Hangup()

4. Configuração para Recebimento de Chamadas

Quando uma chamada entra pelo tronco, você pode direcioná-la para um ramal:

[from-external]
exten => s,1,Dial(SIP/1001)
exten => s,n,Hangup()

5. Solução de Problemas Comuns

5.1 Erro “Forbidden”

Se ao discar aparece Received response: "Forbidden", verifique:

  • O provedor aceita o número no formato discado?
  • Seu fromuser e username estão corretos?
  • A autenticação está correta?

5.2 O Tronco Não Está Registrando

Se sip show peers mostra Unreachable, tente:

  • Conferir o firewall e liberar portas (5060 UDP e RTP 10000-20000)
  • Verificar nat=force_rport,comedia caso esteja atrás de NAT

5.3 A Chamada Está Indo para o Contexto Errado

Se um erro indica extension not found in context, revise:

  • O contexto no sip.conf do tronco deve corresponder ao extensions.conf

Conclusão

Essas estratégias ajudam a configurar e balancear múltiplos troncos no Asterisk, garantindo melhor distribuição de carga e confiabilidade nas chamadas externas. Teste cada abordagem conforme sua necessidade e ajuste conforme necessário.

Rolar para cima