Skip to main content

O Asterisk é um software livre e de código aberto que implementa um Private Automatic Branch Exchange (PABX), em português significa Troca Automática de Ramais Privados. O PABX é um sistema telefônico privado instalado em empresas e escritórios para gerenciar as chamadas internas e externas, é como uma central telefônica que conecta diversos ramais à rede pública de telefonia (PSTN) e à internet.


Tendo isso em mente, o Asterisk é um software que implementa um sistema de telefonia dentro de uma rede.


Um ramal é um dispositivo de comunicação interna que permite aos colaboradores de uma empresa se comunicarem entre si. Cada colaborador pode ter seu próprio número de ramal, o que facilita a identificação e o contato individual entre os colaboradores. Os ramais também podem ser utilizados para receber chamadas externas de clientes, fornecedores ou parceiros.



Como se conectar ao Asterisk?


Existem três maneiras comuns de se conectar a um sistema de telefone VoIP:

  • hardphones
    É um telefone de mesa, mas diferente do convencional, esse telefone tem entrada para fone de ouvido e normalmente tem uma tela, alguns tem uma porta para conexão com switch e PC e outros apenas com PC.

  • softphones
    Um aplicativo de software que roda em laptops, desktops, smartphones, etc. Ele faz a conexão com o PABX permitindo fazer chamadas VoIP.

  • ATAs
    Um dispositivo que permite que telefones analógicos tradicionais se conectem a uma rede VoIP. Um ATA normalmente é bem pequeno e possui um conector RJ-11 para o telefone (conhecido como porta FXS), um conector RJ-45 para a rede e uma fonte de alimentação.

    Alguns ATAs podem suportar mais de um telefone. Outros ATAs podem ter recursos avançados, como firewall ou porta FXO (porta analógica que pode se conectar a uma linha PSTN). Para o PBX, o ATA se parece exatamente com um telefone SIP.


O Asterisk permite que você use uma combinação dessas opções. Você pode ter um único número de extensão tocando em vários dispositivos simultaneamente (telefone de mesa, softphone do laptop, telefone móvel, etc.).



Trajeto da comunicação


A primeira coisa que fazemos quando queremos fazer uma ligação dentro da empresa é discar o número desejado no telefone que envia um sinal digital para o PABX. O PABX recebe o sinal digital do telefone e o interpreta. Ele identifica se a ligação é interna (entre ramais do PABX) ou externa (para a rede PSTN). Se a ligação for interna, o PABX direciona o sinal para o ramal desejado, conectando os dois aparelhos telefônicos da empresa. A conversa flui sem intermediários, rápida e eficiente.


Se a ligação for externa o PABX precisa converter o sinal digital do telefone em um sinal analógico compatível com a rede PSTN. É aqui que entra em cena o FXO Gateway (Foreign Exchange Office Gateway). O FXO Gateway atua como um tradutor experiente, convertendo o sinal digital do PABX em um sinal analógico que a PSTN entenda. O sinal analógico, agora pronto para o mundo exterior, viaja pela rede PSTN, percorrendo cabos, roteadores e centrais telefônicas até chegar ao destino final.


Esse é uma visualização das comunicações sem toda a complexidade que ocorre de fato.



PSTN

A Public Switched Telephone Network (PSTN), que em português significa Rede Pública de Telefonia Comutada é a rede telefônica tradicional que conecta telefones fixos e celulares em todo o mundo. A PSTN utiliza a tecnologia de comutação de circuitos para estabelecer conexões entre os telefones. Para se interconectar com a PSTN é necessário ter um hardware específico, geralmente chamado de Foreign Exchange Office gateway (FXO gateway).


O FXO Gateway é um dispositivo que converte os sinais digitais vindos do PABX em sinais analógicos para serem transmitidos na PSTN e vice-versa. Essa conversão garante a compatibilidade entre as duas redes, permitindo a comunicação entre linhas telefônicas analógicas e sistemas telefônicos digitais. O hardware do FXO Gateway suporta diversos protocolos de comunicação, como E1, T1 e J1.


padrões para transmissão de sinais de telecomunicações digitais

O E1 fornece uma taxa de transmissão de 2.048 Mbps e pode transportar até 32 canais de voz. Já o T1 oferece uma taxa de transmissão de 1.544 Mbps e pode transportar até 24 canais de voz. O J1 oferece uma taxa de transmissão de 1.544 Mbps e pode transportar até 24 canais de voz.


O J1 é similar ao T1, mas é utilizado nas redes de telecomunicações japonesas para a transmissão de voz e dados. As características técnicas são equivalentes às do T1, mas ele é padronizado e implementado conforme as normas japonesas.


Os canais são a quantidade de ligações simultâneas.


Esses protocolos são cruciais para a transmissão de sinais de voz e dados através das redes telefônicas, assegurando uma comunicação eficiente e estável. O hardware do FXO Gateway conecta-se à rede PSTN da operadora de telefonia através de interfaces físicas, como cabos ou links de dados.


O PABX se conecta à ao FXO através de interfaces físicas, as principais interfaces utilizadas são placas instaladas em servidores do tipo TE4 e WCTDM, elas são instaladas em servidores ou centrais PABX. Essas placas fornecem conexões para um número limitado de canais (geralmente 2, 4 ou 8 canais). Elas permitem a conexão direta de linhas telefônicas à rede interna do PABX, facilitando a gestão e o encaminhamento das chamadas.

Resumindo, o FXO Gateway se conecta placas de interface como TE4 e WCTDM utilizam os protocolos E1/T1/J1 para conectar-se à rede PSTN da operadora de telefonia. Essas placas são instaladas em servidores ou centrais PABX, permitindo a conexão direta de linhas telefônicas à rede interna do PABX. Isso facilita a gestão e o encaminhamento das chamadas, suportando um número limitado de canais (geralmente 2, 4 ou 8 canais) para a transmissão eficiente de sinais de voz e dados.


O FXO Gateway converte os sinais digitais do PABX para os sinais analógicos da PSTN e vice-versa, garantindo a compatibilidade entre as duas redes. O hardware suporta diversos protocolos de comunicação, como E1 e T1, que são os protocolos mais comuns utilizados na PSTN. O hardware se conecta à rede PSTN da operadora de telefonia através de interfaces físicas, como cabos ou links de dados. Placas de interface: São instaladas em servidores ou centrais PABX e fornecem interfaces para um número limitado de canais (geralmente 2, 4 ou 8 canais).

Como funciona a comunicação dentro de uma mesma rede usando pabx ?



Protocolos


O VoIP (Voz sobre IP) é uma tecnologia que faz as chamadas telefônicas via internet de banda larga ao invés de termos que usar uma linha de telefone analógica. Usa o protocolo TCP/IP para trafegar as informações.


Sua principal função é redução de custos e integração de todas as plataformas que usam essa tecnologia. Alguns exemplos que temos hoje é o Whatssap, Telegram e Skype, onde todos fornecem um meio de fazer chamadas de voz usando a Internet.



Protocolos


O VoIP usa alguns protocolos para sinalização de chamadas, como: SIP, H.323, H.248, IAX dentro outros. A função desses protocolos é cuidar da sessão estabelecida entre origem e destino, sendo assim, podemos saber se uma chamada foi estabelecida, quanto tempo durou dentre outras informações.


SIP

O Asterisk não é um SIP Proxy nem Redirector, ele é uma Meida Gateway, ou seja, ele conecta dois canais de SIP como se fossem canais de um PABX.


IAX

Foi desenvolvido com a finalidade de estabelecer comunicação entre servidores Asterisk e suas derivações.

Com ele podemos economizar banda, ele aproveita um único cabeçalho IAX para multiplas ligações simultaneas e facilita o transporte de redes com Firewall e/ou NAT.



Codecs


Sua função é codificar e decodificar sinais, tranformam um sinal analógico em digital e vice-versa. Sua outra utilidade é a de poder comprimir (reduzir) o tamanho de um sinal digital, com isso podemos otimizar o consumo de banda.

G711

  • G711a

    Padrão mais usado nas operadoras do Brasil.

  • G711a (alaw)

    Usa 64 kbps (um pouco alto), mas seu perfil é de baixa compressão, o que não necessita de muito poder de CPU.

  • G711u (ulaw)

    Usa 64 kbps (um pouco alto), mas seu perfil é de baixa compressão, o que não necessita de muito poder de CPU.


Esses codecs são indicados para rede LAN.



GSM

Mesmo padrão usado pelos telefones celulares. Usa 13,2kbps por chamada, com isso já podemos ver que ele usa compressão e possui uma certa latência. Recomendado para redes WAN.



Outros Codecs

  • G729a (Esse codec é pago)

    Codec de propriedade da Digium.

    Usa apenas 8kbps, possui maior compressão e requer mais uso de CPU e pode ter uma latencia um pouco maior.


  • ILBC

    Sua maior habilidade é ser resistente a perda de pacotes, usa apenas 13,3 ou 15 Kbps.


  • G.723.1

    Usa apenas 5,3 ou 6,3 Kbps, acaba exigindo muito poder de processamento.


Caso os Codes usados pela origem e destino sejam diferentes, o Asterisk faz a transcodificação, ou seja, ela vai converter o formato do Codec e isso pode gerar latência.


A prioridade dos codecs é sempre definido pelo dispositivo que inicia a chamada.



Instalação no Ubuntu


Precisamos baixar e instalar os pacotes: Dahdi, Libpri e Asterisk. Todos devem ser compilados.


Faça todo o processo com root!


# Instalando todas as depedencias necessárias para o Asterisk funcionar corretamente:
add-apt-repository multiverse && apt update

# Instale as dependencias:
apt install -y autoconf automake build-essential git libedit-dev libjansson-dev libncurses5-dev libnewt-dev libsqlite3-dev libssl-dev libtool libxml2-dev linux-headers-$(uname -r) pkg-config sqlite3 subversion uuid-dev wget


Instalação do DAHDI


DAHDI é uma coleção de drivers (Open Source), desenvolvido para linux, que são usados para fazer interface com uma variedade de hardware relacionado à telefonia. A primeira parte dessa coleção consiste no Dahdi-Linux que vamos fazer a instalação a seguir. O Dahdi-Linux contém os drivers de placa individuais para os hardwares que são suportados.


# Entrando do diretório /usr/src:
cd /usr/src/

# Clonar o repo do Dahdi do Git:
git clone -b next git://git.asterisk.org/dahdi/linux dahdi-linux

# Entrar na pasta:
cd dahdi-linux

# Iniciar a compilação:
make -j3

# Instalar:
make install

# Ao final da compilação, você deve ver o seguinte:
###################################################
###
### DAHDI installed successfully.
### If you have not done so before, install the package
### dahdi-tools.
###
###################################################


Instalação do DAHDI Tools


O Dahdi-Tools e a segunda parte dos drivers Dahdi, aqui temos utilitários que são usados para configurar e testar drivers.


# Entrando do diretório /usr/src:
cd /usr/src/

# Clonar o repo do Dahdi-tools do Git:
sudo git clone -b next git://git.asterisk.org/dahdi/tools dahdi-tools

# Entrar na pasta:
cd dahdi-tools

# Compilar:
autoreconf -i
./configure
make -j3
make install
make install-config
dahdi_genconf modules


Instalação do Libpri


Libpri fornece ao Asterisk uma API, permitindo que uma interface de comunicação se comunique com interfaces do tipo ISDN.

# Entrando do diretório /usr/src:
cd /usr/src/

# Baixando o código fonte do Git:
git clone https://gerrit.asterisk.org/libpri libpri

# Entrando na pasta:
cd libpri

# Compilar a libpri:
make -j3
make install


Instalação do Asterisk


# Entrando do diretório /usr/src:
cd /usr/src/

# Baixando a versão 16.8.0 do Asterisk
git clone -b 18 https://gerrit.asterisk.org/asterisk asterisk-18

# Entrando no diretório Asterisk:
cd asterisk-18

# Rode o script abaixo, instala o que for necessário para criar o módulo MP3, assim podemos usar arquivos .mp3 no asterisk:
contrib/scripts/get_mp3_source.sh

# Rode o script para instalar as dependencias necessarias:
contrib/scripts/install_prereq install

# Compilação e instalação completa do Asterisk:
./configure --with-jansson-bundled
make menuselect
make -j3
make install
make config
ldconfig

### make menuselect = É uma forma de compilar por meio de um menu, onde podemos escolher colocar ou não alguns módulos no Asterisk.

# Criando exemplos de Arquvios de configurações do Asterisk em /etc/asterisk como sip.conf, extensions.conf, entre todos os outros.(comando opcional):
make samples && cd

# Iniciando o Dahdi e Asterisk:
systemctl restart asterisk

# Entrando em modo verbose do Asterisk
asterisk -vvvvvvc

# Habilitar no boot:
systemctl enable asterisk

# Reiniciar o serviço:
systemctl restart asterisk

# Entrar na cli do asterisk usando o verbose:
asterisk -vvvvvvvvvvvvr


Instalação no CentOS


Vamos ver como realizar as mesmas instalações vistas anteriormente mas no CentOS.

# Atualize os pacotes e instale o wget e vim:
yum update && yum -y install wget vim

# Desabilite o SELinux, editando o arquivo /etc/selinux/config:
vim /etc/selinux/config

## Deixe SELINUX igual abaixo:
SELINUX=disabled

# Agora, vamos desativar o firewall:
systemctl stop firewalld ; systemctl disable firewalld ; init 6

# Agora, vamos instalar o EPEL:
wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

# Instale o pacote:
rpm -ivh epel-release-latest-7.noarch.rpm

# Instalando todas as depedencias necessárias para o Asterisk funcionar corretamente:
yum install openssl-devel ncurses-devel newt-devel libxml2-devel sqlite-devel libuuid-devel git subversion libsqlite3x-devel autoconf automake libtool libedit-devel kernel-devel gcc-c++ bzip2 patch -y ; yum groupinstall 'Development Tools'


Instalação do Dahdi-Linux


# Entrando do diretório /usr/src:
cd /usr/src/

## Baixando o Dahdi na versão 3:
wget downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-3.0.0+3.0.0.tar.gz

# Descompactando o Dahdi:
tar zxvf dahdi-linux-complete*

# Entrando no diretório do Dahdi:
cd dahdi-linux-complete

# Instalando o Driver Dahdi:
make && make install && make config


Instalação do Libpri


# Instalando o libpri na versão 1.6"
cd /usr/src/

# Baixando o pacote:
wget downloads.asterisk.org/pub/telephony/libpri/libpri-1.6.0.tar.gz

# Descompactando:
tar zxvf libpri*

# Entrando na pasta:
cd libpri*

# Compilando:
make && make install


Instalação do Libjanssons


# Instalando o libjanssons:
cd /usr/src/ && wget www.digip.org/jansson/releases/jansson-2.11.tar.gz

# Descompactando:
tar -zxf jansson-*

# Entrando na pasta:
cd jansson*

# Compilando:
./configure --prefix=/usr/ && make clean && make && make install && ldconfig


Instalação do Asterisk


# Entrando do diretório /usr/src:
cd /usr/src/

# Baixando a versão 16.0.1 do Asterisk
wget downloads.asterisk.org/pub/telephony/asterisk/asterisk-16.1.1.tar.gz

# Descompactando o Asterisk:
tar zxvf asterisk*

# Entrando no diretório Asterisk:
cd asterisk*

# Compilação e instalação completa do Asterisk:
./configure && make menuselect && make && make install && make config

# Criando exemplos de Arquvios de configurações do Asterisk em /etc/asterisk como sip.conf, extensions.conf, entre todos os outros.(comando opcional):
make samples && cd

# Reiniciando o Asterisk:
systemctl restart asterisk

# Entrando em modo verbose do Asterisk
asterisk -vvvvvvr


Criando um usuário para o Asterisk


Por padrão o Asterisk roda sobre o usuário root, o que abre muitas brechas de segurança, por isso vamos colocar ele para rodar sobre outro usuário.

sudo adduser --system --group --home /var/lib/asterisk --no-create-home --gecos "Asterisk PBX" asterisk

Com o usuário criado, precisamos dizer ao Asterisk para usar o usuário criado, assim ele saberá que deve rodar usando outro usuário.

# Edite o arquivo:
vim /etc/default/asterisk

### Deixe as opções como abaixo:
AST_USER="asterisk"
AST_GROUP="asterisk"

Adicione o usuário asterisk aos grupos dialout e audio:

sudo usermod -a -G dialout,audio asterisk

Agora vamos alterar o User e Group dono dos arquivos do Asterisk:

sudo chown -R asterisk: /var/{lib,log,run,spool}/asterisk /usr/lib/asterisk /etc/asterisk
sudo chmod -R 750 /var/{lib,log,run,spool}/asterisk /usr/lib/asterisk /etc/asterisk

Reinicie o serviço:

sudo systemctl restart asterisk


Firewall


Por padrão o SIP usa a porta 5060 UDP, se você estiver usando o RTP (Real time Protocol) você vai precisar liberar o range de porta de 10000 até 20000.



Opções do Asterisk


O comando mais usado para trabalhar com Asterisk é o asterisk, vejamos algumas opções dele:


ComandoDescrição
-rAo invés de tentar rodar um novo processo do Asterisk, essa opção tenta se conectar a um processo que já esteja rodando.
-vHabilita o verbose, quantos mais v nós colocarmos, mais verbose teremos, o máximo é vvv.
-VMostra a versão.
Dentro da CLI
core show versionAlém de ser similar ao -V, mostra algumas informações a mais.
core show applicationsMostra todos os comandos disponiveis para uso e mostra também uma pequena introdução do que ele faz.
core show application DialMostra uma documentação do comando Dial.
core set verboseConfigura o nivel de verbosidade.
core show channelsMostra quantas chamadas estão em andamento e em processo.
core restart (gracefully | now | when)Reiniciar o Asterisk
now = Reinicia agora;
when = Quando não houver mais chamadas;
gracefully = Não vai permitir novas chamadas, e quando finalizar todas as chamadas, ele vai reiniciar.
module show like (module name)Mostra os módulos que estão rodando. Ex: module show like sip
module load (module name)Carrega um módulo. Ex: module load chan_sip.so
sip show peer 2001Exibe informações do ramal 2001
sip reloadRecarrega as informações do SIP.

ATENÇÃO

Cuidado ao usar o SystemD para reiniciar o Asterisk, isso vai derrubar todas as ligações em andamento!

(sudo systemctl restart asterisk).


A maioria dos arquivos de configuração do Asterisk fica em /etc/asterisk/. Os arquivos principais são: iax.conf, sip.conf e ext*.conf (são os arquivos extensions).


Todos os arquivos de configuração seguem o padrão abaixo:

[sessão]
Parametro = Valor

### Existem 2 sessões importantes!

[global]
# Define as variáveis globais para o arquivo de configuração inteiro.

[gerenal]
# Define apenas para as sessões seguintes a ele, não define nada para sessão que for criada antes dele, apenas depois.


Criando um canal de comunicação SIP


Aqui vamos trabalhar com o arquivo sip.conf.

# Renomeie esse arquivo (no meu caso é um arquivo de exemplo).
sudo mv /etc/asterisk/sip.conf /etc/asterisk/sip.conf.old

# Crie um arquivo novo:
sudo bash -c "> /etc/asterisk/sip.conf"

# Atribua o dono e grupo correto do arquivo:
sudo chown asterisk. /etc/asterisk/sip.conf

# Aplique as permissoes corretas:
sudo chmod 750 /etc/asterisk/sip.con


Agora vamos editar esse arquivo, a saída abaixo será o código dentro do arquivo com detalhes, logo após terá apenas a configuração.

[general]
allowguest=no

; Não criar um tipo de canal sip automaticamente:
autocreatepeer=no

awayssauthreject=yes

; Qual IP:porta que ele vai aceitar (qualquer IP no caso)
; Tente mudar a porta por sec!
udpbindaddr=0.0.0.0:5060

; Contexto do extension.conf chamado ramais:
context=ramais

; IP do seu linux (IP local):
localnet=192.168.122.217/255.255.255.0

; Caso queira contratar um operadora VoIP, use o register:
; register=senha:login@hostoperadoravoip:5060

externip=meuip.com.br:5060


;; Criando um Ramal

; Nome do nosso ramal:
[2001]
; Nome do user:
defaultuser=2001

; Senha:
secret=12345

; Cria uma descrição:
description="Ramal do fulano"

; Nosso telefone faz e recebe chamadas:
; Outros tipos são: peer (só faz chamada), user (Só recebe chamadas)
type=friend

; O host (end-point) sempre vai ter o IP alterado, fica mudando:
host=dynamic

; Não vai ter nat no meio da conf:
nat=no

; Deixe 'auto' porque não sabemos qual equipamento o cliente vai usar:
dtmfmode=auto

canreinvite=no

; Deixe o mesmo numero do ramal:
regext=2001

; Desabilita todos os codecs:
disallow=all

; Permite somente os codecs abaixo:
allow=ulaw,gsm

; Para qual grupo esse ramal pode pegar ou transferir chamadas:
callgroup=1
pickupgroup=1

Veja somente a configuração:

[general]
allowguest=no
autocreatepeer=no
awayssauthreject=yes
udpbindaddr=0.0.0.0:5060
context=ramais
localnet=192.168.122.217/255.255.255.0
externip=meuip.com.br:5060

;; Criando um Ramal

[2001]
defaultuser=2001
secret=12345
description="Ramal do fulano"
type=friend
host=dynamic
nat=no
dtmfmode=auto
canreinvite=no
regext=2001
disallow=all
allow=ulaw,gsm
callgroup=1
pickupgroup=1

Após alterar algumas configurações, vamos aplicar elas:

# Entre na cli do asterisk:
sudo asterisk -vvvr

# Agora recarregue as mudanças:
sip reload


Depois de alterar o extensions.conf (dial etc), rodar o comando diaplan reload

PJSIP


PJSIP é um conjunto de bibliotecas de comunicação multimídia Open Source que implementa os protocolos padrões como SIP, SDP, RTP dentre outros. Ela combina o protocolo SIP com uma estrutura multimídia e a funcionalidade de NAT para comunicação entre diversos sistemas e redes.


Para obter o conversor de sip.conf para pjsip.conf siga o passo a passo abaixo:

# Copie a pasta para o asterisk, isso não é necessário, mas eu acho mais fácil:
cp -r /usr/src/asterisk-18/contrib/scripts/ /etc/asterisk/

# Aplique as confs de user, grupo e permissão:
sudo chown -R asterisk: /etc/asterisk/scripts
sudo chmod -R 750 /etc/asterisk/scripts


# extensions.conf

[general]
static=yes
writeprotect=no

[globals]
ATENDENTE=SIP/2002&SIP/2001
TELEFONISTA2=SIP/2001

[ramais]
exten => _2XXX,1,Dial(SIP/${EXTEN},60,tTkK)
exten => _2XXX,n,HangUp()

exten => 2222,1,Answer();
exten => 2222,n,MP3Player(/music/teste-song.mp3)
;exten => 2222,n,Playback(/music/teste-song.mp3)
;exten => 2222,n,Hangup();

Fontes


https://linuxize.com/post/how-to-install-asterisk-on-ubuntu-20-04/

https://wiki.asterisk.org/wiki/display/DAHDI/DAHDI

https://subscription.packtpub.com/book/networking-and-servers/9781847194466/1/ch01lvl1sec04/libpriisdn+pri+library

https://techhub.hpe.com/eginfolib/networking/docs/routers/msrv7/cg/5200-3026_voice_cg/content/471827303.htm

https://my.digium.com/en/docs/misc/fxs_fxo_desc/