Interligação de Servidores Asterisk via IAX2


Neste tutorial você vai aprender a interligar servidores Asterisk através do IAX


Saudações a galera Bando de Dados.

Não é difícil em servidores de voz a necessidade de se dividir tarefas visto a carga q o server tem q aguentar. Registrar ramais, gravar ligações, gerenciar regras, placas e links pode ser pesado…

Enfim, podemos deixar uma maquina registrando ramais, gravando ligações enquanto outra roteia as ligações e gerencia links e drivers de placas. Existem outros benefícios nesta separação como a não dependência de DNS para os registers no server q detêm os ramais, mas isso é historia para outro post.

Vamos dizer agora q temos um SipSever (q registra ramais) e um TrunkServer (q terá os troncos de saída), precisamos mandar ligações do Sip para o Trunk e eventualmente receber ligações do Trunk para o Sip. Vamos fazer esta inteligação usando IAX2, um protocolo próprio do Asterisk q se destaca frente ao uso do protocolo Sip, convido vcs a fazer algumas comparações entre os 2 pq não entrarei nesse mérito.

Bora pra configuração rápida (nível de segurança igual ao protocolo Sip)

IAX.conf

SipServer

[Link1]
type=friend
username=Link1
secret=Link1
context=contexto para receber
canreinvite=no
dtmfmode=rfc2833
host=IP do TrunkServer
qualify=yes
nat=no dependerá se os servers estão na mesma rede
trunk=no
requirecalltoken=no
disallow=all
allow=alaw,ulaw

CLI->iax2 reload

——————-

TrunkServer

[Link1]
type=friend
username=Link1
secret=Link1
context=contexto para receber
canreinvite=no
dtmfmode=rfc2833
host=IP do SipServer
qualify=yes
trunk=no
nat=no dependerá se os servers estão na mesma rede
requirecalltoken=no
disallow=all
allow=alaw,ulaw

CLI->iax2 reload

No seu Dialplan a discagem :

exten => _X.,1,Dial(IAX2/Link1/${EXTEN},60,Tt)

Como podem ver acima usei somente uma conta em cada server “type=friend“, vcs podem preferir criar 2 contas em cada server (uma conta q só faz e outra q só recebe) pra gerenciar falhas mais facilmente.

A opção “trunk=no” é outra facilidade do IAX2 para otimizar o uso da sua banda, pesquisa indispensável, já te adianto q para usá-lo em Asterisk 1.4 vc precisará de algum gerador de clock (presente em drivers de placas DAHDI por ex.) como não uso dispenso.

Com o código acima já temos uma interligação q numa rede interna tá show, porém se tratando de uma interligação envolvendo internet é sempre bom prezar pela segurança. O IAX2 nos fornece uma autenticação por chaves RSA dispensando a senha.

Bora digitar:

SipServer

1- #astgenkey -n       ->Cria  chave para o SipServer

O comando acima vai pedir a vc um nome para a chave , em seguida criará 2 arquivos (o nome.pub e nome.key)

2- Copie as chaves para /var/lib/asterisk/keys

3- Reinicie o Asterisk

Vc pode consultar as chaves carregadas com “keys show

4- Copie sua chave nome.pub para a mesma pasta do TrunkServer

Estes 4 passos devem ser feitos exatamente iguais no TrunkServer

————————————————————————–

Agora um novo IAX2.conf (mais demorado porém muito mais seguro)

SipServer (nesta modalidade criarei 2 contas, uma para fazer e outra para receber ligações)

[enviaTrunk]

username=LinkSaida

host=IP do Trunk

defaultip=(host)

deny=0.0.0.0/0.0.0.0

permit=range de IPs ou IP do Trunk/mascara

type=peer

qualify=yes

trunk=no

requirecalltoken=auto

disallow=all

allow=gsm

auth=rsa

outkey= chave publica q vc gerou no Trunk (somente o nome)

encryption=yes

————————————

[recebeTrunk]

deny=0.0.0.0/0.0.0.0

permit=igual ao anterior

context=indique um contexto para receber a ligação

type=user

trunk=no

requirecalltoken=auto

disallow=all

allow=gsm

auth=rsa

inkeys=chave q vc criou aqui mesmo no SipServer

encryption=yes

No seu Dialplan a discagem :

exten => _X.,1,Dial(IAX2/enviaTrunk/${EXTEN},60,Tt)

————————————-

Bom Amigos exatamente o mesmo deve ser feito no TrunkServer prestando atenção em indicar as chaves certas, daí é só alegria.

Espero q gostem

Falows

7 comentários em “Interligação de Servidores Asterisk via IAX2”

  1. Caro Jefferson, boa tarde!

    Gostei da sua explicação. Mt boa mesmo. Estou com uma dúvida referente à interligação de um SIPServer asterisk e um Gateway asterisk com uma placa E1. Podemos conversar via e-mail?
    Abraços!

  2. Parabéns pelo post.

    Tenho um trunk com dois servidores asterisk, porém agora estou com problemas em alguns ramais, pois trabalhamos com apenas 4 dígitos de ramais e alguns estão considindo, se eu deixar sem a opção insecure = invite no sip.conf do servidor a o ramal que é identico em um servdor b não liga para o servidor a, se eu deixar como insecure no servidor a, as ligações são identificadas como do servidor a.

    1. Boa tarde Joao.
      Se o problema for apenas a ligação entre servidores com ramais iguais não vejo necessidade de alterar o sip.conf, podemos apenas ajustar o extensions.conf.
      Estou te respondendo por email tb, assim se quiser pode me enviar os contextos q usa pra interligar os servers e poderei ajudar melhor.

      Att.

      1. Segue o Extensios do servidor B p/ ligar para o servidor A, eu coloco o 1 na frente para diferenciar de ramais internos

        exten => _18[789]XX,1,NoOp(Chamada para SIP Trunk ASTERISK A- Ramal: ${EXTEN} direciona para ${EXTEN:1}. Origem: ${CALLERID(num)} )
        same => n,Dial(SIP/trunk-voip/${EXTEN:1})
        same => n,HangUp()

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios são marcados com *