Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila Snep PDF
Apostila Snep PDF
www.4linux.com.br
Sumário
# - Indica o “console de terminal do linux”, como usuário root. Os comandos desta linha
somente funcionarão em um terminal linux e como usuário root.
Módulo 1
1. Cenário do Curso
Olá! Seja bem-vindo (a) ao nosso curso!
O OBJETIVO deste curso é preparar você para lidar com PABX IP com Asterisk de
pequeno e médio porte! Para ajudá-lo a conseguir este objetivo, vamos usar um
cenário que nos permitirá ter uma visão macro da telefonia como um todo.
Vamos orientá-lo a fazer a melhor solução e seguir um modelo mais simples, assim
você será capaz, ao final do curso, de implementar PABX IP com Asterisk de
maneira coerente como ocorre atualmente nas pequenas e médias empresas.
1.1.1. A Dexter
A DEXTER Courier é uma empresa que trabalhará o máximo possível com código
aberto e conta com vários serviços, como servidor de arquivos, dns, email, proxy,
autenticação de usuários e agora Asterisk para gerenciar sua telefonia.
A DEXTER atua no segmento de logística e tem como principal objetivo prestar ser-
viços de coleta e entregas com qualidade em todos os detalhes e precisa da
telefonia VOIP para poder aumentar sua margem de clientes.
Introdução a
telefonia
4linux.com.br 2. Introdução a telefonia
2. Introdução a telefonia
2.1. O início
A telefonia, assim como inúmeras outras áreas da Engenharia Elétrica e ciência
modernas, teve seu início com a descoberta e desenvolvimento da Eletricidade e do
Magnetismo, cujos estudos foram iniciados em 1830 pelo inglês Michael Faraday.
A primeira invenção foi feita em 1837 por Samuel Morse: o Telégrafo Elétrico, que
permite a comunicação entre dois pontos ligados por uma fiação condutora. Daí
surgiram duas tecnologias de Telecomunicações, a que suprimia a fiação condutora,
usando transmissões de ondas eletromagnéticas no ar (Rádio, Televisão) e a que
mantinha a fiação (Telégrafo, Telefone, Fax).
Ao longo da rua passa um grosso cabo preenchido com 100 ou mais pares de fios
de cobre. Dependendo de onde você está, este cabo ira diretamente ao interruptor
da companhia telefônica, ou a uma caixa do tamanho de uma geladeira, que age
como um concentrador digital.
voz com dezenas de outras vozes através de um MUX (Multiplexador) e emite-as por
um único fio (geralmente um cabo coaxial ou um cabo de fibra ótica) até a
companhia telefônica.
2.2.1. Conceitos
• Filas de atendimento;
• Correio de voz;
• Salas de conferência;
• Estacionamento de chamadas;
• Gravação de chamadas;
• Registro detalhado das chamadas de entrada e saída;
• E muito mais …
Por que utilizar o Asterisk?
• Sistema aberto;
• Redução de custos;
• Controle total;
• Aumento de produtividade;
• Melhoria no atendimento;
A Digium
Devido ao fato de que algumas empresas tem objeções ao uso de softwares open
source, a Digium fornece o Asterisk em três licenças diferentes:
aplicações.
Voz sobre IP, também conhecida como VoIP (Voice over Internet Protocol), telefonia
IP ou telefonia Internet, é um conjunto de tecnologias, largamente utilizadas em
redes IP, Internet ou Intranet, com o objetivo de realizar comunicação de voz. Os
principais benefícios do VoIP são:
VOIP – Implementação
• O usuário Alice faz uma chamada para Bob, uma requisição INVITE é enviada
ao servidor;
• O INVITE é negado pelo servidor, que envia uma reposta 407 solicitando as
credencias do usuário Alice;
• Uma nova requisição INVITE é gerado pela Alice, agora esse INVITE é
acompanhado de um novo cabeçalho contendo um hash MD5 a ser validado
pelo Asterisk;
• O Asterisk gera um novo INVITE e envia para o destino, nesse caso o usuário
Bob. Logo após o telefone de Bob envia uma mensagem 180, indicando que
o mesmo começou a tocar (ringing);
• Quando Bob atende o telefone uma reposta 200 OK é enviado ao Asterisk
que por sua vez encaminha para Alice e é neste momento em que a sessão
entre os dois canais é estabelecida;
• O Áudio da chamada está no fluxo de mídia RTP. Observe que o protocolo de
sessão SIP neste momento não é mais necessário;
• Quando o usuário Bob desliga o telefone uma reaquisição do tipo BYE é
enviado ao Asterisk informando que a sessão foi encerrada, o fluxo de mídia é
interrompido e uma resposta 200 OK confirma o recebimento do BYE;
• Este fluxo de mensagens do INVITE até o BYE é conhecido como Diálogo
SIP. Desta forma o Asterisk consegue bilhetar a chamada, pois ele sabe
quando a sessão iniciou e quando foi finalizada.
Visão Geral
Dentro de uma visão geral, o Asterisk é um PABX híbrido que integra tecnologias
como TDM e telefonia IP agregando funcionalidades extras como correio de voz,
URA, DAC e outras.
100% VoIP
O Asterisk pode operar em uma rede puramente VoIP sem interfaces TDM, essa
solução pode ser bem econômica quando não existe conexão Digital E1 ou
Analógica com a Operadora. As operadoras já fornecem em alguns pontos um
tronco conhecido por NGN ou SIP Trunk, estes troncos operam puramente em IP
não sendo necessário a compra de interfaces ISDN ou R2 nem tanto analógicas. O
Asterisk executa todas essas funções de forma simplificada.
Softswitchs
PABX 1x1
Media Gateway
• atender;
• discar;
• desligar;
• reconhecer dígitos;
• falar;
• etc.
Compilando e
Instalando
4linux.com.br 3. Compilando e Instalando
3. Compilando e Instalando
Existem várias versões que podem ser baixadas, sendo a versão 12 a mais recente.
Ao escolher sua versão do Asterisk, leve em consideração:
Release Series Release Type Release Date Security Fix Only EOL
1.2.X 2005-11-21 2007-08-07 2010-11-21
1.4.X LTS 2006-12-23 2011-04-21 2012-04-21
1.6.0.X Standard 2008-10-01 2010-05-01 2010-10-01
1.6.1.X Standard 2009-04-27 2010-05-01 2011-04-27
1.6.2.X Standard 2009-12-18 2011-04-21 2012-04-21
1.8.X LTS 2010-10-21 2014-10-21 2015-10-21
10.X Standard 2011-12-15 2012-12-15 2013-12-15
11.x LTS 2012-10-25 2016-10-25 2017-10-25
12.x Standard 2013-10 (tentative) 2014-10 (tentative) 2015-10 (tentative)
13.x LTS 2014-10 (tentative) 2018-10 (tentative) 2019-10 (tentative)
Fonte: https://wiki.asterisk.org/wiki/display/AST/Asterisk+Versions
O Asterisk pode ser instalado a partir dos pacotes prontos nas diversas distribuições
GNU/Linux ou através da compilação do código fonte. É recomendável que a
instalação através dos pacotes de software seja voltada apenas para estudos do
Asterisk.
1. LibPRI
2. DAHDI
3. Asterisk
Seguindo esta ordem o Asterisk terá todos os pré-requisitos para a compilação dos
módulos gerais.
Diretórios:
Arquivos em /etc/asterisk:
# /usr/sbin/asterisk –vvvgc
*CLI>
onde:
Antes de usar o Asterisk, você deve criar os arquivos de configuração. Muito embora
a quantidade de configurações possíveis seja muito grande, apenas um pequeno
conjunto é necessário de forma a iniciar o Asterisk com sucesso.
# make config
Por padrão o script de inicialização vem configurado para rodar o asterisk como root,
o que não é uma boa opção. Para ajustar isso, altere no script de inicialização as
variáveis AST_USER e AST_GROUP. Não esqueça de ajustar as permissões de
dono e grupo dos arquivos e diretórios do Asterisk.
3.7.1. Objetivos
# cd /usr/src
# wget
http://downloads.asterisk.org/pub/telephony/asterisk/asterisk
-1.8-current.tar.gz
# wget http://downloads.asterisk.org/pub/telephony/dahdi-
linux-complete/dahdi-linux-complete-current.tar.gz
# wget
http://downloads.asterisk.org/pub/telephony/libpri/libpri-
1.4-current.tar.gz
# cd /usr/src/dahdi*
# make all
# make install
# make config
# cd /usr/src/libpri*
# make
# make install
• Compilar o Asterisk
# cd /usr/src/asterisk*
# ./configure
# make menuselect :: Selecione SAVE & EXIT
# make :: Compila o Asterisk
# make install :: Instala o Asterisk
# make samples :: Arquivos de exemplo, /etc/asterisk
# make config :: Script de inicialização, /etc/init.d/
# asterisk -vvvr
# asterisk -vvvgc
Se o Asterisk carregar com sucesso você terá acesso à sua CLI, note que
agora você não consegue sair da CLI
*CLI> exit
*CLI>
Telefonia TDM
4linux.com.br 4. Telefonia TDM
4. Telefonia TDM
◦ Tom de discagem;
◦ Sinal de ocupado;
◦ Tom de retorno (ringback);
◦ Congestionamento (congestion);
◦ Número inválido;
◦ Tom de confirmação.
4.1.1. Interfaces FX
dos pacotes ou mensagens trocadas entre entidades de uma mesma camada. Ele
define as opções de serviço como a solicitação do início da comunicação, a
confirmação do pedido, a configuração da transmissão de dados ou mídia, a
resposta ao envio de informações e a desconexão definindo também sub protocolos
responsáveis por controles específicos.
como a KHOMP possuem hardware para soluções com alta disponibilidade e melhor
adequação. Outros fabricantes mais conhecidos: Sangoma, Aligera, Digivoice,
RedFone, YXWireless, Audiocodes.
Configurando um
PABX
4linux.com.br 5. Configurando um PABX-IP
5. Configurando um PABX-IP
• Contexto
9 Extensão
9 Prioridade
9 Aplicação
5.1.1. Contextos
segundo para declaração de variáveis globais que podem ser utilizadas ao longo da
programação, abordado com mais detalhes nos módulos à frente. A seguir
apresentamos um exemplo de Dialplan com os contextos [general] e [gobals]
[general] ;Opções gerais do Dialplan
writeprotect=yes ;Modo somente leitura
static=yes ;Modo estático
5.1.2. Extensões
[interno]
exten => 2000,1,Dial(SIP/2000,60)
exten => 2000,2,voicemail(2000,u)
exten => 2000,3,Hangup()
onde:
• exten => - descreve o início de uma regra;
Neste exemplo, o Asterisk ao receber uma chamada para o número 2000, fará tocar
o Ramal 2000 por 60 segundos, se não atender, será desviado para a próxima
prioridade que executa o Voicemail (caixa postal) e depois desliga a chamada.
exten => define o início de regra, seguido por um identificador por uma prioridade e
uma aplicação.
• Numérico
• Alfanumérico
exten => ?
ER Função Exemplo
X Um número entre 0 e 9 _XX -> qualquer número de 00 a 99
Z Um número entre 1 e 9 _ZZ -> qualquer número de 11 a 99 – exceto (20,30,40,...)
N Um número entre 2 e 9 _NN -> qualquer número de 22 a 99 – exceto (20,21,30,31,...)
_[0-9] -> um número entre 0 e 9 - é equivalente a X
_[15-7] -> um número da lista: 1 ou 5 até 7.
[e] Lista de opções
_[13457] -> um número da lista: 1 ou 3 ou 4 ou 5 ou 7.
_[a-zA-Z] -> uma letra maiúscula ou minúscula do alfabeto.
_0800. -> Expressão regular que vale para qualquer número
Qualquer carácter,
. que inicie com _0800 + qualquer outro carácter, infinitas
infinitas vezes
vezes.
_0800! -> funciona como um ponto, mas trata de forma
! Coringa inclusivo
diferente, testando todas as outras possibilidades primeiro,
Antes
[ramais]
exten => 2000,1,Dial(SIP/2000)
exten => 2001,1,Dial(SIP/2001)
exten => 2002,1,Dial(SIP/2002)
Depois
[ramais]
exten => _200X,1,Dial(SIP/${EXTEN})
5.1.3. Prioridades
Numéricas:
Próxima (next):
5.1.4. Aplicações
tradicional, uma linha PSTN ou ainda um canal IP, como uma chamada SIP via
Internet.
[general]
udpbindaddr=0.0.0.0:5060
context=default
disallow=all
allow=ulaw,alaw,gsm
directmedia=no
;;
[2000]
type=friend
secret=2000
dtmfmode=rfc2833
host=dynamic
;;
[2001]
type=friend
secret=2001
dtmfmode=rfc2833
host=dynamic
Exemplos de Softphones:
• Zoiper http://www.zoiper.com,
• Bria http://www.counterpath.com
• Twinkle http://mfnboer.home.xs4all.nl/twinkle/
• Ekiga http://www.ekiga.org/
• Jitsi https://jitsi.org/
• Linphone http://www.linphone.org/
A ISO (Imagem de CD bootável) foi criada com o intuito de facilitar todo o processo
de instalação dos softwares necessários para o completo funcionamento do SNEP.
As configurações básicas de alguns softwares também são feitas automaticamente,
o que torna a instalação do SNEP um processo simples, rápido e eficiente. A ISO do
SNEP instala e configura:
• O SO Linux Debian
• O servidor WEB Apache
• O Asterisk
• A Banco de dados MySQL
• O PHP
• O SNEP
A instalação também pode ser feita manualmente, baixando o arquivo .tgz ou o
pacote .deb do SNEP. Estes arquivos e os respectivos manuais de instalação podem
ser encontrados no site www.sneplivre.com.br.
Ramais – Os Ramais são o meio físico utilizado para prover comunicação entre
duas ou mais pessoas. Os tipos de ramais mais comuns podem ser:
5.4.1. Objetivos
# cd /etc/asterisk
# mv sip.conf sip.conf.old
# nano /etc/asterisk/sip.conf
Copie este modelo trocando as letras NN pelo número do prefixo de sua filial
passado pelo Instrutor.
[general]
udpbindaddr=0.0.0.0
context=interno
disallow=all
allow=ulaw,alaw,gsm
;;
[NN01]
type=friend
secret=NN01
dtmfmode=rfc2833
host=dynamic
language=pt_BR
mailbox=NN01
callerid=<NN01> “SeuNome01”
[NN02]
type=friend
secret=NN02
host=dynamic
dtmfmode=rfc2833
language=pt_BR
mailbox=NN02
callerid=<NN02> “SeuNome02”
# asterisk -vvvr
*CLI> sip reload
*CLI> sip show peers
O arquivo extensions.conf padrão do Asterisk, não será utilizado, portanto deve ser
renomeado e criado um novo arquivo vazio.
# cd /etc/asterisk
# mv extensions.conf extensions.conf.old
# nano /etc/asterisk/extensions.conf
Copie este modelo trocando as letras NN pelo número do prefixo de sua filial
passado pelo Instrutor.
[interno]
exten => NN01,1,Dial(SIP/NN01,60,tT)
exten => NN02,1,Dial(SIP/NN02,60,tT)
# asterisk -vvvr
*CLI> dialplan reload
Caso não esteja instalado execute o comando seguinte para instalar no Debian.
Ao executar o Twinkle pela primeira vez uma tela solicitando a criação de um perfil
será apresentada, clique em OK para continuar
Você pode configurar o Twinkle de várias formas. Neste laboratório vamos usar o
guia de configuração Wizard.
a) Ligue para o ramal 5000 pelo Softphone e pelo telefone IP, uma mensagem será
tocada para o usuário.
# a2enmod rewrite
# service apache2 restart
# cd /usr/src/
# wget
http://downloads.sourceforge.net/project/snep/snep/unstable/snep-
2.0.1-rc1.tar.gz .
# cd /var/www/
# chown -R www-data.www-data *
# chmod 775 snep-2.0-rc1
# ln -s snep-2.0-rc1 snep
# cd /etc/apache2/sites-enabled/
# cp /var/www/snep/install/snep.apache2 001-snep
# cd /var/log
# mkdir snep
# touch snep/ui.log
# touch snep/agi.log
# chown -R www-data.www-data snep/
# cd /var/lib/asterisk/agi-bin/
# ln -sf /var/www/snep2/agi snep
# chmod 776 /var/www/snep/agi -R
Habilite o php-cgi para receber parâmetros. Edite os arquivos listados abaixo usando
seu editor preferido (vi, nano, etc), procure as linhas referente apenas aos valores
citados e efetue apenas estas alterações:
para: register_argc_argv = On
• /etc/php5/cli/php.ini
• /etc/php5/cgi/php.ini
• /etc/php5/apache2/php.ini
# cp /var/www/snep/install/etc/odbc* /etc/
# cp /var/www/snep/install/etc/asterisk/manager.conf /etc/asterisk
# cp /var/www/snep/install/etc/asterisk/cdr* /etc/asterisk
# cp
/var/www/snep/install/etc/asterisk/res_odbc.conf /etc/asterisk
# mv /var/spool/asterisk/monitor /var/spool/asterisk/monitor.snep
# ln -sf /var/www/snep/arquivos /var/spool/asterisk/monitor
• Músicas de espera
# cd /var/lib/asterisk
# cd /usr/src
# wget
http://svn.softwarepublico.gov.br/trac/snep/export/3/trunk/as
terisk-sounds.tgz
# mkdir -p /var/lib/asterisk/sounds/pt_BR/tmp
# mkdir -p /var/lib/asterisk/sounds/tmp
# mkdir -p /var/lib/asterisk/sounds/pt_BR/backup
# mkdir -p /var/lib/asterisk/sounds/backup
# cd /var/www/snep/sounds/
# ln -sf /var/lib/asterisk/moh/ moh
# ln -sf /var/lib/asterisk/sounds/pt_BR/ pt_BR
# cd /var/www/snep/install/
# cd /var/www/snep/modules/default/installer
# cd /var/www/snep/modules/updateModule/install
http://_ip_do_servidor/snep
• Login: admin
• Senha: admin123
• Nome da Empresa
• Range de ramais
No menu Cadastros >> Ramais, cadastre novos ramais (diferente dos cadastrados
no Asterisk) e analise o arquivo /etc/asterisk/snep/snep-sip.conf.
#include snep/snep-sip.conf
Obs: Os ramais que você cadastro no Asterisk também podem ser incluídos na
interface do SNEP. Para isso, na seção “tecnologia de canais”, altere o tipo para
Manual, e no campo Manual, utilize a combinação: SIP/numero_ramal.
Análise de rede
4linux.com.br 6. Análise de rede
6. Análise de rede
Precisamos entender que até o começo da década de 1990 haviam dois tipos bem
distintos de rede pública:
6.1.1. VoIP
Voz sobre IP pode agregar, portanto, várias áreas de estudo de redes de telefonia e
de computadores, uma vez que existe um panorama bastante inóspito para a
transmissão de voz em tempo real, transmissão esta fragmentada em pacotes.
• tecnologias/protocolos de sinalização;
• tecnologias/protocolos para descrever quais os tipos de mídia suportados em
cada ponta da comunicação;
• tecnologias/protocolos para transmissão das mídias em ambos os sentidos;
• tecnologias/protocolos para garantir a qualidade do serviço (QoS).
Enquanto que os três primeiros estão mais ligados às pontas da comunicação,
geralmente dois usuários finais, é no último item, qualidade de serviço, que reside
Por isso, toda a tecnologia VoIP foi desenvolvida com base no modelo OSI de forma
que para o seu uso, independam o meio físico e a tecnologia de enlace utilizada. Os
protocolos e codec's VoIP fazem parte das camadas de Aplicações, Sessão e
Transporte do modelos OSI conforme tabela abaixo.
Quando o pacote chega ao seu destino, ele é aberto e dá-se inicio ao processo
inverso, onde o pacote é aberto, remove-se seu cabeçalho, restando o segmento,
esse é aberto, remove-se seu cabeçalho restando a aplicação.
6.3.1. SIP
6.3.2. IAX2
6.3.3. H323
Largamente usado em voz sobre ip. Essencial na conectividade com projetos mais
antigos usando roteadores Cisco ou gateways de voz. H323 ainda é padrão para
fornecedores de PABX e roteadores, muito em bora eles comecem a adotar o SIP.
Excelente para videoconferência.
• Pontos fortes: larga adoção do mercado, padronização pela ITU;
• Pontos fracos: complexo, pouco adotado em telefonia IP em detrimento ao
SIP.
6.3.4. RTP/RTCP
gateway, tipicamente, suporta vários codec's diferentes e quando vão falar um com
outro negociam quais codec's serão empregados. Alguns codec's como o G.729
necessitam de pagamento de royalties para o seu uso. Quando dois dispositivos
conectados ao Asterisk não possuem codec's compatíveis entre si, o Asterisk
executa um processo chamado transcodificação para traduzir os codec's entre os
terminais. A tabela a seguir exibe um comparativo entre os principais codec's
utilizados no Asterisk:
MOS - A qualidade de voz é medida em MOS (Mean Opinion Score, ou média dos resultados das
opiniões). Os testes para MOS seguem a norma P.800 da ITU. O MOS varia em uma escala de um
(qualidade ruim) a cinco (qualidade excelente);
• Codec's para redes WAN: Em uma rede WAN (Wide Area Network),
normalmente temos uma banda passante pequena (64, 128 ou 256 Kbps)
onde podemos priorizar o tráfego de voz. Nesse tipo de redes, normalmente,
é pouco comum ocorrerem perdas de pacotes. Há três bons codec's para
esse tipo de rede: o G.729 provavelmente se destaca, pois provê uma
excelente qualidade de voz com uma compressão de 8 para 1; o G.723
permite taxas de compressão ainda maiores, mas com certa perda de
qualidade; por fim temos o GSM que é uma alternativa para aqueles que
procuram custo/benefício. O ponto negativo do GSM fica para o fato de não
ter suporte ao codec na maioria dos telefones IP’s e ATA’s;
• Codec's para Internet: Em uma rede com Internet há dois desafios: banda
passante e falta de controle do meio. Por isso temos uma latência alta e jitter
(variação da latência), que culminam com a perda de pacotes. Alguns codec's
foram desenvolvidos com esses requisitos em mente. O codec mais indicado
para esse tipo de rede é o iLBC, que tem uma boa resistência a perda de
pacotes e usa pouca banda passante. Mais informações podem ser
encontradas na tabela de codec's deste módulo.
Quando os dados são enviados através de uma rede orientada a pacote, cada
pacote possui uma série de cabeçalhos, os cabeçalhos contém diversas
informações importantes para o envio/recebimento destes pacotes. Porém os
cabeçalhos podem causar uma sobrecarga (overhead) dependendo da tecnologia
de enlace e protocolos envolvidos.
allow=G729:40
Se esse processo puder ser evitado pode-se poupar recursos de CPU e evitar a
compra de licenças G.729 desnecessárias.
6.7.1. Objetivos
# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 42
model name : Intel(R) Core(TM) i3-2370M CPU @ 2.40GHz
stepping : 7
microcode : 0x28
cpu MHz : 2394.670
cache size : 3072 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fdiv_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep
mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse
sse2 ss ht tm pbe nx rdtscp lm constant_tsc arch_perfmon pebs
bts xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq
dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid
sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave avx
lahf_lm arat epb xsaveopt pln pts dtherm tpr_shadow vnmi
flexpriority ept vpid
bogomips : 4789.34
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
Outra informação relevante são as flags do tipo SSSE3, SSE3 e SSE4, estas
identificam a presença de co-processadores que auxiliam no desempenho da
transcodificação.
# uname -a
◦ Para 32 Bits
◦ Para 64 bits
# asterisk -vvvr
*CLI> core show version
• codec_G729-ast18-icc-glibc-x86_64-pentium4.so
◦ codec_G729-ast18-icc-glibc-x86_64-core2-sse4.so
◦ codec_G729-ast18-icc-glibc-pentium4.so
# cd /usr/lib/asterisk/modules
# wget http://asterisk.hosting.lv/bin/codec_g729-ast18-icc-
glibc-pentium4.so .
# mv codec_g729-ast18-icc-glibc-pentium4.so codec_g729.so
# chmod +x codec_g729.so
# asterisk -vvvr
*CLI> module load codec_g729.so
Loaded codec_G729.so
== Registered translator 'g729tolin' from format G729 to slin, cost
2000
== Registered translator 'lintoG729' from format slin to g729, cost
9000
Loaded codec_G729.so => (g729 Coder/Decoder, based on IPP)
• Testando o G729
somente o uso do G729, desta forma quando o telefone fizer uma chamada
para o softphone o Asterisk ira transcodificar o áudio de G711 para G729.
# nano /etc/asterisk/sip.conf
[NN00]
type=friend
host=dynamic
disallow=all
allow=g729
Protocolo IAX
4linux.com.br 7. Protocolo IAX
7. Protocolo IAX
O tráfego de informação do protocolo IAX também pode ser feito em modo trunk, de
tal maneira que várias chamadas podem ser agrupadas em um único conjunto de
pacotes, com um único cabeçalho IP, economizando os recursos de rede e
diminuindo o atraso dos pacotes de voz.
• md5 – Hash MD5 oferece uma segurança extra, ele opera de forma
semelhante ao SIP, fazendo um processo conhecido como Three-Way-
handshake;
• rsa – Par de chaves de criptografia RSA. É método mais seguro pois utiliza as
chaves para autenticação. Necessita de configuração em ambos servidores.
[curso-out]
type=peer
username=curso_username
secret=curso_secret
host=curso.com
;
;
[iax-gateway]
type=friend
allow=192.168.0.1
context=incoming
host=192.168.0.1
Na seção [general] um número de parâmetros que afetam todo o sistema pode ser
configurado. Especificamente os codec's default, portas, endereços, comportamento
do jitter, bits de TOS e registros.
Diretiva Descrição
port = <portnum> Define a porta em que o IAX vai se ligar. O padrão é 4569.
Isto permite ligar o IAX a um endereço IP especifico e não
bindaddr = <ipaddr> a todos os endereços. O padrão é: 0.0.0.0 (todos
endereços)
A seleção de banda passante define a seleção de codec's
com valores apropriados para uma determinada banda.
high – habilita todos os codec's e é recomendado para
conexões acima de 10Mbps.
médium – elimina os codec's U-law e A-law deixando
bandwidth = [low|medium|high] apenas os codec's com 32Kbps ou menos (Com MP3 como
um caso especial). Isto pode ser usado em conexões de
banda larga se desejado.
low – elimina o ADPCM e MP3, deixando apenas o G723,
GSM e LPC10. A configuração recomendada é selecionar
“low” e depois desabilitar LPC10. O LPC10 tem a voz
robotizada.
allow/disallow=[gsm|lpc10| O "allow" e "disallow" permite fazer uma seleção criteriosa
g723.1|adpcm|ulaw|alaw|mp3|
slinear|all] de codec's.
Diretiva Descrição
O buffer de jitter deve sempre estar habilitado a menos que
jitterbuffer = [yes|no]
você saiba que todas as suas conexões estão na LAN.
A quantidade de drops é o número máximo de pacotes de
dropcount = <dropamount> voz que você vai permitir que sejam descartados. Valores
úteis são 3-10.
O “maxjitterbuffer” é a quantidade máxima de buffer de jitter
maxjitterbuffer = <max>
que pode ser usado.
O “maxexcessbuffer” é a quantidade máxima de excesso no
maxexcessbuffer = <max> buffer de jitter que é permitido antes que o buffer de jitter
seja lentamente comprimido para eliminar a latência.
Configura o código de contabilização para registros
accountcode = <code> recebidos com o IAX. O código de contabilização pode
sobrescrever a base por usuário para chamadas entrantes.
Controla como o registro é etiquetado:
omit – faz com que nenhum registro seja escrito;
amaflags = [default|omit|
billing|documentation] billing e documentation – etiquetam os registros como
registros para cobrança e documentação respectivamente;
default – seleciona o default do sistema.
O IAX pode opcionalmente configurar o bit TOS (Type of
Service) do cabeçalho IP. Isto ajuda a performance no
tos=[lowdelay|throughput|
reliability|mincost|none] roteamento. O valor recomendado é “lowdelay”, que muitos
roteadores vão reconhecer e dar prioridade melhorando a
qualidade da voz.
O registro permite notificar um servidor Asterisk remoto
(com um endereço fixo) qual seu endereço atual. Para que
o registro funcione, o Asterisk remoto vai precisar ter uma
entrada com o mesmo nome to tipo “dynamic peer” (e
senha (secret) se fornecido). O nome é um campo
obrigatório e é o nome do “peer” remoto a quem nós
register=><name>[:<secret>]@<
host>[:port]: desejamos nos identificar. Entretanto se em colchetes ( [ ] )
então é interpretado como o nome de uma chave RSA a ser
usada. Neste caso o Asterisk deve ter a chave privada e o
servidor remoto terá a correspondente chave pública
(/var/lib/asterisk/keys/<name>.key). O campo "host" é
obrigatório e é o nome do host ou endereço IP do servidor
Asterisk remoto. A especificação da porta é opcional.
Diretiva Descrição
[identifier] A seção inicia com um identificador em colchetes ( [ ] ). O
identificador deve ser uma string alfanumérica.
type=[user|peer| Esta linha diz ao asterisk como interpretar esta entidade. Usuários
friend] são dispositivos que se conectam a nós, enquanto “peers” são
pessoas às quais nos conectamos, e “friend” é um atalho para criar
um “user” e um “peer” com informações idênticas.
Diretiva Descrição
Uma ou mais linhas de contexto podem ser especificadas
pelo usuário, deste modo dando ao usuário a possibilidade de
context = <context>
colocar as chamadas em dados contextos. A maioria dos
usuários usa o contexto “default”.
As regras de permitir e negar podem ser aplicadas a
usuários, permitindo a eles se conectar de determinados
endereços IP e não de outros. As regras são interpretadas na
seqüência e são todas avaliadas em um dado endereço IP,
permit = <ipaddr>/<netmask> com o resultado final sendo a decisão Por exemplo:
deny = <ipaddr>/<netmask> permit=0.0.0.0/0.0.0.0
deny=192.168.0.0/255.255.255.0
Esta combinação ira negar qualquer um em 192.168.0.0 com
mascara de 24 bits (classe C).
Você pode sobrescrever o identificador de chamada passado
pelo usuário para você (Se ele escolher enviar) de maneira
callerid = <callerid>
que ele sempre esteja correto do ponto de vista do seu
servidor.
Você pode selecionar que métodos de autenticação são
auth = [md5|plaintext|rsa] permitidos. Múltiplos métodos podem ser especificados,
separado por vírgulas.
A linha “secret” especifica a senha compartilhada para os
secret = <secret>
métodos md5 ou autenticação em texto simples.
A linha "inkeys" especifica que chaves nós podemos usar
para autenticar um “peer” remoto. Os arquivos de chave
inkeys = key1[:key2...]
ficam em /var/lib/asterisk/keys/<name>.pub e são chaves
públicas.
[8035]
type=friend
context=default
auth=md5
secret=senha
notransfer=0
callerid=8035
host=dynamic
allow=gsm
Neste cenário, é feita a conexão a um provedor de telefonia IAX como a Brasil Vox
Telecom (http://www.brasilvox.com.br).
Cenário onde dois servidores Asterisk estão ligados usando o protocolo IAX2.
Existem diversas maneiras de fazer esta conexão, sendo a mestre-escravo a mais
conhecida.
Porém, se você está em uma rede confiável, pode abstrair diversas diretivas da
configuração do arquivo iax.conf. O exemplo a seguir mostra como conectar dois
Asterisk de maneira muito simples, utilizando o protocolo IAX. Note que a única
diferença reside no número IP, um apontando para o outro.
O objetivo de exercício é permitir que cada filial possa ligar para as outras por
intermédio de uma conexão IAX2 Trunk.
# cd /etc/asterisk
# mv iax.conf iax.conf.old
# nano /etc/asterisk/iax.conf
• Criando as contas para as outras filiais no seu iax.conf: Crie uma conta
IAX para cada uma das filiais conforme o modelo. Não é necessário criar uma
conta para a sua filial. Esta conta é utilizada para autenticar a chamada
entrante vinda das outras equipes. Ajuste o modelo abaixo de acordo com as
instruções passadas:
[general]
bindport=4569
bindaddr=0.0.0.0
disallow=all
allow=ulaw,alaw,g729
;
; Primeira filial
;
[filial-NN]
host=IP_Filial-NN
type=user
context=from-filiais
secret=filial-NN
trunk=yes
;
; Segunda Filial
;
[filial-NN]
host=IP_Filial-NN
type=user
context=from-filiais
secret=filial-NN
trunk=yes
• Crie uma extensão no plano de discagem para cada ligar para outras
filiais: Edite o arquivo /etc/asterisk/extensions.conf e crie uma extensão
para cada uma das equipes.
[interno]
;Filial-01
exten=>_100X,1,Dial(IAX2/filial-FF:filial-FF@IPdafilial-01/$
{EXTEN},60,tT)
..
;Filial-02
exten=>_110X,1,Dial(IAX2/filial-FF:filial-FF@IPdafilial-02/$
{EXTEN},60,tT)
;
;
[from-filiais]
;regra de entrada das chamadas vindas das outras filiais
exten => _XXXX,1,Goto(interno,${EXTEN},1)
Lembre-se que para a comunicação entre você e a filial, ambos devem ter um tronco
entre si.
#include snep/snep-iax2-trunks.conf
#include snep/snep-iax.conf
Verifique no menu Status >> Ramais, Troncos Ip, Filas, na seção Troncos IAX, se
o servidor registrou corretamente.
Protocolo SIP
4linux.com.br 8. Protocolo SIP
8. Protocolo SIP
8.2.1. Arquitetura
• Agente de Usuário
◦ Função: Interagir com o usuário do sistema SIP;
◦ Características: Envia e recebe requisições SIP;
◦ Papel: Pode atuar como cliente (UAC – Agente Utilizador Cliente) ou
servidor (UAS – Agente Utilizador Servidor).
• Proxy SIP
◦ Função: Recebe as requisições e as encaminha para servidores mais
próximos do destino;
◦ Papel: Servidor intermediário. Atua como cliente e servidor;
◦ Tipo: Stateful Proxy Server e Stateless Proxy Server:
▪ O Stateful Proxy Server mantém o estado da chamada e permite dividir
a chamada, criando uma árvore de busca pelo usuário nos múltiplos
servidores. Vantagens: maior confiabilidade, capacidade de mensurar o
gasto do cliente, utiliza o protocolo TCP;
▪ O Stateless Proxy Server encaminha para os próximos saltos tanto as
requisições com as respostas e não mantêm o estado das conexões.
Vantagem: maior velocidade.
• Servidor de Redirecionamento
◦ Função: Responde uma requisição do Agente do Usuário com o nome e a
localização do usuário;
◦ Características: Não reencaminha pedidos.
• Servidor de Registro
◦ Função: Serviço de localização;
◦ Características: Armazena registro sobre usuários.
Uma requisição SIP válida deve conter ao menos os campos To, From, CSeq, Call-
ID e Max-Forwards, os quais são todos obrigatórios em todas as mensagens SIP.
Outros campos podem se juntar a esses.
8.2.3. Comunicação
8.2.4. Autenticação
• Na figura acima, podemos observar que a sessão SIP é iniciada quando Alice
envia uma mensagem INVITE para Bob, por UDP na porta 5060. A porta 5060
é a porta padrão do protocolo SIP e este também pode receber mensagens
por TCP. Nesta mensagem, estão contidos um identificador para Bob, o
endereço de Alice, o tipo de dado que Alice deseja receber: áudio em
codificação AVP 0 (PCM codificado com lei µ), o protocolo de transporte RTP
e a porta que ela receberá os pacotes: 25012;
• Ao receber esta mensagem de Alice, a campainha de Bob toca;
• Ao atender, Bob envia uma resposta com o código 200 OK para Alice na porta
5060. Nesta mensagem de Bob, constam o seu endereço IP, a porta em que
deseja receber os pacotes de áudio utilizando o protocolo de transporte RTP:
43569, e a codificação de áudio que deseja receber os dados: AVP 3
(codificação GSM);
• Após receber a resposta de Bob, Alice envia uma mensagem com a primitiva
ACK, confirmando que a comunicação foi estabelecida com sucesso.
Observe que, neste exemplo, ambos os usuários utilizaram codificadores de
voz diferentes, pois o SIP não determina o tipo da mídia que será transmitida
durante a sessão. Alice deverá codificar seu áudio com GSM e Bob com a lei
µ do PCM.
• Após o fim da transmissão, Bob aciona o seu aplicativo SIP para terminar a
sessão. Então o agente de usuário de Bob envia uma mensagem com a
primitiva BYE para Alice.
Outra questão é o suporte a protocolos LDAP, Radius e Diameter que no SIP Proxy
já são nativos, e no B2BUA não, mas também são possíveis.
B2BUA SipProxy
O Asterisk é um B2BUA O Openser é um SIPProxy
Não trabalha tão bem com clientes NAT Gerencia melhor clientes que utilizam NAT
Gerencia tradução de CODEC's, protocolos, Arquitetura mais rápida
B2BUA SipProxy
serviços de URA e outros
Possui serviços de mídia, como áudio, vídeo, É melhor para escalabilidade e balanceamento
correio e reconhecimento de voz de carga
Utilizado para comunicação com a rede pública Gerencia toda a sinalização SIP
8.5.1. Proxy
registrado);
2. O servidor encaminhou o INVITE para o ramal do usuário Carlos que está
registrado no mesmo servidor (ligação interna), e respondeu ao Lucien “100
Trying” informando que está tentando efetuar a ligação;
3. O ramal do Carlos quando recebe a solicitação da chamada envia o “180
Ringing” para o servidor, informando que recebeu o INVITE e está chamando;
4. O servidor repassa para o ramal do Lucien a mensagem informando que o
telefone está chamando;
5. O Carlos atende o telefone, neste momento o ramal dele envia “200 OK”
informando que o telefone foi atendido e já é possível estabelecer o fluxo de
mídia;
6. O servidor repassa o “200 OK” para o ramal originador da chamada (Lucien)
que responde com “ACK” (Acknowledge) confirmando que recebeu o “200
OK”;
7. O servidor repassa o “ACK” para o ramal do Carlos que ao receber a
confirmação abre a sessão de mídia diretamente entre os dois ramais, dando
inicio a conversação entre os dois usuários;
8. O usuário Carlos encerra a chamada, nesse momento o ramal envia a
mensagem de BYE, informando o sinal de desligamento;
9. O servidor repassa o BYE para o ramal do Lucien, que responde com 200 Ok,
confirmando o encerramento da chamada.
8.5.2. Redirect
VOIP passo-a-passo.
Um fato importante deste modo de operação é que o servidor SIP só está presente
no início da chamada VOIP, no momento em que o usuário Carlos faz a primeira
requisição. Logo, neste modo, não é possível estabelecer nenhum controle sobre a
chamada, como tarifação por exemplo, em contra-partida o consumo de recursos
computacionais do servidor é extremamente baixo.
SIP/[exten@]peer[:portno]
onde:
• exten – Se definido, então o Asterisk ira requisitar ao “peer” que se conecte à
extensão “exten”;
• peer – O nome do peer ao qual se conectar, podendo ser:
◦ Um “peer” ou “friend” definido em sip.conf;
◦ Um endereço IP;
◦ Um nome de domínio. Para nomes de domínio o Asterisk ira primeiro olhar
no registro DNS SRV para aquele domínio.
• portno – A porta UDP a ser usada. Se omitido o Asterisk ira utilizar a 5060.
Exemplos:
exten=>s,1,Dial(SIP/ipphone)
exten=>s,1,Dial(SIP/curso@4linux.com.br)
exten=>s,1,Dial(SIP/192.168.1.8:5060,20)
exten=>s,1,Dial(SIP/8500@sip.com:9876)
Na seção [general] um número de parâmetros que afetam todo o sistema pode ser
configurado. Especificamente os codec's default, portas, endereços, comportamento
do jitter, bits de TOS e registros. A seção [general] do sip.conf inclui as seguintes
diretivas:
Diretiva Significado
Permite codec's na ordem de preferência (use DISALLOW=ALL
allow = <codec>
primeiro, antes de permitir outros codec's)
disallow = all Desabilita todos os codec's (configuração global)
Se configurado, qualquer um estará apto a se logar como um
autocreatepeer = yes|no peer (Sem checagem de credenciais, útil para operar com o
SER).
bindaddr = 0.0.0.0 Endereço IP onde o serviço está instalado
canreinvite = update|yes|no (configuração global)
Contexto default para a entradas de chamadas em
context = default
extensions.conf.
defaultexpirey = 120 Tempo padrão do registro de entrada e a saída.
Endereço IP que será colocado em mensagens SIP, se o
externip = 200.180.4.110
Asterisk estiver atrás de um dispositivo NAT.
localnet =
10.10.1.0/255.255.255.0 endereço local e máscara de rede
Diretiva Significado
Habilita a checagem dos cabeçalhos identificadores de
pedantic= yes|no chamada, cabeçalhos SIP com múltiplas linhas e cabeçalhos
codificados em URI (uniform resource identifier), to-tag, from-tag.
port=<portno> Porta TCP a qual se ligar
register => <username>@<sip
client/peer_id_in_sip.conf>/<e Registra com um provedor SIP
xtension>
srvlookup = yes|no Habilita DNS SRV lookups em chamadas
tos=<valor> lowdelay|
throughput|reliability mincost
|none Seta o campo tipo de serviço nos pacotes SIP.
(valores núméricos também são
aceitos, como tos=184)
videosupport=yes|no Liga o suporte para vídeo no SIP
Permite que o cabeçalho SIP “User-Agent” possa ser
useragent
customizado.
trustpid = yes|no Se é possível confiar na identificação da parte remota
Muda a forma de autenticação do Asterisk(default) para sua
realm = meu realm
própria.
Diretiva Significado
[identifier] A seção inicia com um identificador em chaves ([]’s). O identificador
deve ser uma string alfanumérica.
type=[user|peer| Esta linha diz ao asterisk como interpretar esta entidade. Usuários
friend] são dispositivos que se conectam a nós, enquanto “peers” são
pessoas às quais nos conectamos, e “friend” é um atalho para criar
um “user” e um “peer” com informações idênticas.
accountcode Usuários podem estar associados a um código de contabilização.
amaflags=default|omit| Categorização de registros CDR (CDR – Registro detalhado de
billing|documentation chamadas usado na bilhetagem).
callgroup
canreinvite Se o cliente é capaz de suportar SIP reinvites
context Contexto no plano de discagem para as chamadas de saída deste
cliente.
defaultip Endereço Ip default deste cliente, se especificado
host=“dynamic” Usado se o cliente não registrou em qualquer outro endereço IP
dtmfmode Como o cliente gerencia a sinalização DTMF
fromuser Especifica o usuário para colocar no “from” ao invés do callerid
(sobrescreve o callerid) quando colocando chamadas para outro peer
(outro SIP proxy).
Diretiva Significado
fromdomain=<domain> Configura o domínio default “from:” nas mensagens SIP quando
colocando chamadas para um “peer”.
host= Como encontrar o cliente: IP ou nome do host. Se você quiser que o
telefone se registre, use a palavra dynamic ao invés do IP do host.
incominglimit e Limita o número de chamadas ativas simultâneas para um cliente
outgoinglimit SIP.
insecure Não verifica o ip do host e a porta para o peer (não usuário).
language O código de linguagem definido em indications.conf – Define a
linguagem para os “prompts” e sinais locais de telefonia.
mailbox Extensão da caixa postal de e-mail (Para indicações de espera de
mensagens)
md5secret Hash MD5 de “<usuário>:asterisk:<secret>” (pode ser usado ao invés
de secret).
nat =yes|no Esta variável muda o comportamento do Asterisk para cliente atrás
de um firewall. Isto não resolve o problema se o Asterisk estiver atrás
de um Firewall e o cliente fora.
permit,deny,mask Endereço IP e restrição de rede
pickupgroup Grupo que pode capturar as chamadas de colegas usando *8 e a
aplicação pickup() na extensão *8
port Porta SIP do cliente
qualify=yes|no Verifica se o cliente está alcançável ou não
restrictid=yes|no Para ter o callerid restrito -> Enviando como ANI;use isto para ocultar
o callerid
rtptimeout Termina as chamadas se não houver atividade RTP por x segundos,
quando não estiver em espera (hold)
rtpholdtimeout Termina a chamada se não houver atividade RTP quando em espera
(hold) (deve ser maior que o rtptimeout)
type=peer|user|friend Relacionamento com o cliente (provedor de saída ou full client)
secret Se o Asterisk estiver agindo como um servidor SIP, então este cliente
SIP deve logar com esta senha.Se o Asterisk estiver agindo como S
IP Client para um servidor SIP remoto que requer autenticação do
tipo SIP INVITE, então este campo é usado para autenticar os SIP
INVITEs que o Asterisk envia para o servidor remoto
username Nome do usuário usado no SIP INVITE
allow-disallow Permitir ou negar codec's
musiconhold Configura as classes de música em espera em chamadas de um
telefone SIP.
Por exemplo:
No caso de cone restrito, o par IP/Porta externo só é aberto uma vez que o
computador interno envie dados para o endereço de destino IP específico.
Por exemplo:
No caso onde o cliente envia um pacote para um computador externo, o NAT mapeia
o cliente 10.0.0.1:8000 para o 200.180.4.168:1234. Assim o computador externo
pode enviar pacotes de volta. Entretanto o NAT ira bloquear pacotes vindos de
outros computadores externos.
Um NAT do tipo “port restricted” é quase idêntico ao “Restricted Cone”, mas neste
caso o NAT ira bloquear todos os pacotes a menos que o cliente tenha previamente
enviado um pacote para o IP e porta que está enviando para o NAT.
Desta forma, se o cliente enviar para um computador externo para a porta 1010, o
NAT apenas ira permitir pacotes de volta se eles vierem de 200.180.4.168 na porta
1010.
8.7.4. Simétrico
Por exemplo:
Para simplificar, vamos usar duas situações que são as mais típicas. O Asterisk está
atrás de um Firewall sob domínio da área técnica da empresa. Os clientes são
externos e não temos domínio sobre a configuração dos firewalls destes clientes.
[general]
externip = 200.84.7.1
localnet = 192.168.1.0/255.255.255.0
Além disso, é preciso redirecionar as portas UDP 5060 e RTP de 10000 à 20000 no
Firewall. Se você quiser reduzir esta faixa pode editar o arquivo rtp.conf.
/etc/asterisk/sip.conf
nat=yes
directmedia=no
qualify=yes
onde:
• nat=yes – ignora o cabeçalho VIA e usa o endereço de onde chega o pacote.
• directmedia=no – força o fluxo de mídia pelo Asterisk.
• qualify=yes – força que um pacote exploratório mantenha o NAT aberto.
8.8. DTMF
DTMF é a sigla em inglês de "Dual-Tone Multi-Frequency", ou seja, são os tons
resultantes do cruzamento de duas frequências. As frequências destes tons e suas
combinações são mostradas na tabela a seguir.
• auto – O Asterisk tenta enviar os dígitos via rfc2833, em caso de falha envia
inband.
[general]
register => filial-FF:senha-FF@EnderecoIPdoProvedorVoIP
[op-voip]
type=peer
defaultuser=filial-FF
secret=senha-FF
context=interno
host=IPdoServidor
dtmfmode=rfc2833
directmedia=no
insecure=port,invite
qualify=yes
fromuser=filial-FF
fromdomain=IPdoServidor
[interno]
...
...
include=>to-pstn
[to-pstn]
exten => _0XXXX,1,Dial(SIP/op-voip/${EXTEN:1},30,tT)
[from-pstn]
exten => _FFXX,1,Dial(SIP/${EXTEN},60,t)
Disque para os ramais das outras equipes para testar as configurações. Não
esqueça de discar o (zero) “0” antes dos números dos ramais das outras equipes.
Caso você não coloque o “0” antes do número, você utilizará as regras criadas no
exercício anterior.
No menu Cadastros >> Troncos, crie um tronco do tipo “SNEP SIP” com outra filial.
Lembre-se que para a comunicação entre você e a filial, ambos devem ter um tronco
entre si.
No menu Cadastro >> Troncos, crie um tronco com uma operadora VoIP (os dados
serão fornecidos pelo instrutor).
#include snep/snep-sip-trunks.conf
#include snep/snep-sip.conf
Verifique no menu Status >> Ramais, Troncos Ip, Filas, na seção Troncos SP, se o
servidor registrou corretamente.
Plano de discagem
4linux.com.br 9. Plano de discagem
9. Plano de discagem
O plano de discagem é o coração do Asterisk. Ele é quem define como o Asterisk ira
gerenciar as chamadas. Consiste basicamente de uma lista de instruções ou passos
que o Asterisk deve seguir. Essas instruções são disparadas a partir dos dígitos
recebidos de um canal ou aplicação. Para configurar o Asterisk é fundamental que
se entenda o plano de discagem dele.
O arquivo extensions.conf
[ general ]
Define algumas configurações gerais, como por exemplo:
Diretiva Significado
static Esta opção afeta apenas a operação do comando save dialplan. O valor
default é no, mas o arquivo exemplo do extensions.conf instalado com o
Asterisk explicitamente seta static=yes.
writeprotect Se writeprotect=no e static=yes, então você pode salvar o plano de discagem
atual com o comando save dialplan.
Definições nas variáveis globais na categoria [globals] permanecem sem
modificação. O valor default é “no”.
clearglobalvars Apaga as variáveis globais quado o plano de discagem for recarregado
(*CLI>dialplan reload).
[ globals ]
Na seção [globals], você pode definir as variáveis globais (ou constantes) e seus
valores iniciais. Elas são usadas para simplificar mudanças futuras na configuração
do PABX. O valor atual das variáveis globais pode ser mudado usando a função
GLOBAL. O valor da variável global pode ser referenciado, usando a sintaxe: $
{NOMEDAVARIAVEL}. As variáveis globais não são sensíveis a
maiúscula/minúscula, mas por convenção são declaradas em maiúsculo.
Exemplos:
RINGTIME=3
VMANNOUNCE=mysounds/my-vm-annouce
Determina qual arquivo de áudio deve ser tocado como anuncio do voicemail.
[ramais]
[fixo]
;fixo-local
exten => _[2-5]XXXXXXX,1,Dial(DAHDI/g0/${EXTEN},60,T)
;fixo-DDD
exten => _0ZZZZ[2-5]XXXXXXX,1,Dial(DAHDI/g0/${EXTEN},60,T)
[celular]
;Celular Local
exten => _[6-9]XXXXXXX,1,Dial(DAHDI/g0/${EXTEN},60,T)
9.2. Variáveis
O conceito de variável no Asterisk é comum a qualquer linguagem de programação.
Podemos criar nossas próprias variáveis ou fazer uso das variáveis já existentes, ou
criadas em tempo de execução do próprio Asterisk.
São configuradas usando o comando Set. Cada canal recebe seu próprio espaço de
variáveis, de forma que não há chance de colisões entre diferentes chamadas, e a
variável é automaticamente destruída quando o canal é desligado. Existem algumas
variáveis de canal configuradas pelo Asterisk que você pode se referir como
definições do plano de discagem. Variáveis definidas pelo Asterisk diferenciam
caixas alta e baixa.
Variável Significado
${ENV(nomedavariavel)}
${ENV(ASTERISK_PROMPT)} O prompt atual da linha de comando CLI
O nome do arquivo gravado pela última vez com o comando
${ENV(RECORDED_FILE)}
Record
Variável Significado
${ARG1} O primeiro argumento passado pela macro.
${ARG2} O segundo argumento passado pela macro e assim por diante.
${MACRO_CONTEXT} O Contexto da extensão que disparou a macro.
${MACRO_EXTEN} A extensão que disparou a macro.
Configurado por uma macro para influenciar a prioridade de execução
${MACRO_OFFSET}
ao sair da macro.
${MACRO_PRIORITY} A prioridade na extensão onde esta macro foi disparada.
http://www.voip-info.org/wiki/view/Asterisk+variables
9.3. Expressões
O uso de expressões no plano de discagem do Asterisk permite programar
determinadas operações em uma linha de código, mantendo assim o plano de
discagem mais claro e elegante. As expressões podem ser divididas em:
Operador Ação
+ Somar
- Subtrair
* Multiplicar
/ Dividir
% Módulo
Operador Ação
& E
| Ou
! Negação
Operador Ação
> Maior
< Menor
>= Maior ou igual
<= Menor ou igual
= Igual
!= Diferente
• Caso 4 seja maior que 3: vai para o contexto ura, extension s e prioridade 1;
• Caso seja falso vai para contexto ura, extensão i (invalid) e prioridade 1.
Executa algo caso a hora seja a hora especificada. Você pode usa-la no horário de
almoço por exemplo, tocando um arquivo de audio que diz que a empresa está em
seu horário de almoço.
9.4. Funções
As funções possuem um tratamento avançado no plano de discagem, assim como
em qualquer linguagem de programação o Asterisk possui uma série de funções que
podem ser utilizadas para criar funcionalidades avançadas no plano de discagem,
para saber mais sobre as funções verifique na CLI com o seguinte comando:
Exemplo:
exten=>100,1,Set(Fruta=pera)
exten=>100,2,NoOp(${LEN(Fruta)}) ;; # 1
exten=>100,3,NoOp(${LEN(${Fruta})}) ;; # 2
Exemplo:
exten => s,1,set(CallTime=${STRFTIME(${EPOCH},GMT-3,%C%y%m%d
%H%M)})
• IFTIME(<timespecs?[<true>][:<false>])
onde:
Exemplo:
exten => s,1,Set(foo=${IFTIME(*|mon|8-15|nov?
Bom:Ruim)})
onde:
* – Em qualquer horário
mon – De uma segunda-feira
8-15 – Que seja entre os dias 8 e 15
nov – Do mês de novembro
?Bom – Caso a condição seja válida, responde: Bom
:Ruim – Senão, responde: Ruim
• GotoIfTime(<timespecs>?[labeliftrue][:labeliffalse])
Desvia o fluxo da chamada para “labeliftrue” se as condições de tempo de
onde:
* – Em qualquer horário
* – Em qualquer dia da semana
26-30 – Que seja entre os dias 26 a 30
May – Do mês de maio
?telefonista - Desvia chamada para o contexto telefonista.
Substrings
${string:offset:length}
Exemplos:
exten=>_NXX.,1,Set(DDD=${EXTEN:0:3}) ;; #1
exten=>_516XXXXXXX,1,Dial(${EXTEN:3}) ;; #2
Concatenação
Exemplos:
${foo}${bar}
555${Onumero}
${DDD}555${ONumero)
Onde temos:
A macro deverá ser criada antes do uso nos contextos, por exemplo:
[macro-exemplo]
exten => s,1,Dial(${ARG1}/${ARG2},${ARG3})
;
; Definicao do contexto interno
;
[interno]
exten => _4XXX,1,Macro(exemplo,SIP,${EXTEN},30)
Na macro acima, estamos usando a aplicação Dial. Desta forma, temos uma macro
chamada exemplo, que chama a aplicação Dial, com os argumentos padrão,
Tecnologia (SIP,AIX,DGV, etc), identificação da extensão, timeout (opcional no Dial).
Podemos facilmente ter digitado:
Dial(SIP/${EXTEN},30)
Não existe uma diferença muito grande, em digitar daquela forma e essa, pois
usamos uma linha somente, agora imagine, várias linhas em vez de uma. Vejamos
outro exemplo:
[macro-hello]
exten => s,1,Answer
exten => s,n,Playback(${ARG1})
;
; Definicao do contexto ramais
;
[ramais]
exten => 1234,1,Macro(ola)
Desta forma fica um pouco mais claro o uso. Criamos a macro hello, que atenderá a
chamada através da aplicação Answer, e depois tocará uma música que será
passada como argumento na chamada da macro, através da aplicação Playback.
O Asterisk na versão 1.8 ou superior tem suporte uma nova aplicação chamada
Gosub() que tem a mesma função da aplicação Macro, porém com uma pequena
diferença na sintaxe do comando. Em versões futuras a aplicação Macro será
depreciada sendo substituída pela nova Gosub.
onde:
• context = nome do contexto
• times / weekdays / mdays / months – veja a especificação <timespec>
descrita no item Funções >> Condicionais.
Exemplo:
Supondo que uma empresa trabalhe somente nos dia úteis, e das 8 as 18 hs, as
chamadas entrantes vão para a URA dentro do horário de expediente. Caso
contrário, toca uma mensagem e encerra a chamada.
Os dados são agrupados em famílias e identificados com uma chave que é única
dentro da família.
9.8.1. Famílias
Uma Rota executa ações no SNEP e para que isso aconteça, algumas condições
devem ser satisfeitas, como:
Ao acessar o menu Regras de Negócio >> Rotas, será exibida uma tela com a lista
de rotas já cadastradas (veja próxima figura).
/etc/asterisk/extensions.conf
[interno]
exten => 9200,1,Set(NAME="ASTERISK")
exten => 9200,n,Set(I=4)
exten => 9200,n,NoOP(${NAME})
exten => 9200,n,NoOP(${I})
exten => 9200,n,Answer()
exten => 9200,n,SayDigits(${I})
exten => 9200,n,Wait(1)
exten => 9200,n,NoOP($[${I}+${I}])
exten => 9200,n,SayDigits($[${I} + ${I}])
exten => 9200,n,NoOP($[${I}=4])
exten => 9200,n,NoOP($[${I}=4 & ${NAME}=”ASTERISK”])
exten => 9200,n,NoOP($[${I}=4?"MATCH"::"DO NOT MATCH"])
exten => 9200,n,Hangup
• Crie uma extensão de saída para celular interurbano dentro do contexto to-
pstn.
exten => _0ZZZZ[6-9]XXXXXXX,1,Dial(SIP/op-voip/055$
{EXTEN:3},20)
Faça com que as chamadas vidas do provedor SNEP sejam encaminhadas para os
ramais 01 e 02 respectivamente utilizando uma varável global.
/etc/asterisk/extensions.conf
[globals]
HUNTGROUP=SIP/FF01&SIP/FF02 ;Troque FF pelo seu prefixo
[from-pstn]
; exten => _FFXX,1,Dial(SIP/${EXTEN},60,t) ; Comente esta linha
[expediente]
exten => _FFXX,1,Dial(${HUNTGROUP},20,t) ;Troque FF pelo seu
prefixo
[foraexpediente]
exten => _X.,1,Answer()
exten => _X.,n,Playback(queue-thankyou)
Crie uma Macro abaixo dos contextos criados anteriormente, depois utilize a
aplicação Macro para executar uma chamada através da mesma.
[interno]
[macro-discaramal]
exten => s,1,Dial(${ARG1},10,tT)
exten => s,n,Goto(s-${DIALSTATUS},1)
exten => s,n,Hangup()
exten => s-BUSY,1,Voicemail(${ARG1},b)
exten => s-BUSY,n,Hangup()
# cd /etc/asterisk
# cp
/var/www/snep2/install/etc/asterisk/extensions.conf .
/extensions-snep.conf
# include extensions-snep.conf
# cd /etc/asterisk
# cp /var/www/snep2/install/etc/asterisk/res_odbc.conf ./
# cp /var/www/snep2/install/etc/asterisk/manager.conf ./
# cp /var/www/snep2/install/etc/asterisk/agents.conf ./
# cp /var/www/snep2/install/etc/asterisk/cdr_odbc.conf ./
# cp /var/www/snep2/install/etc/asterisk/extconfig.conf ./
• Crie uma rota para fazer chamadas para uma filial qualquer, utilizando os
seguintes parâmetros:
◦ Origem: Grupo → todas
◦ Destino: Expressão Regular → NNXX (onde NN = Número da Filial)
◦ Ações:
▪ Definir Centro de Custos → 9-Internas
▪ Discar para tronco → Tronco da Filial NN
• Crie uma rota para receber chamadas de uma filial qualquer, utilizando os
seguintes parâmetros:
◦ Origem: Expressão Regular → NNXX (onde NN = Número da Filial)
◦ Destino: Grupo → todas
◦ Ações:
▪ Definir Centro de Custos → 9-Internas
▪ Discar para ramal
• Crie uma rota para fazer chamadas para telefones Fixos Locais, utilizando os
seguintes parâmetros:
◦ Origem: Grupo → Todas
◦ Destino: Alias de Expressão → Fixo Local
◦ Ações:
▪ Definir Centro de Custos → 2-Saidas
▪ Discar para Tronco (Escolha um tronco de saída)
9.11.4. Desafio
Recursos da classe V
4linux.com.br 10. Recursos da classe V
• Answer()
• Bakground(<arquivoDeAudio>)
• WaitExten(<seg>)
◦ Caso o prompt da URA seja tocada até o fim o usuário ainda pode digitar
uma opção em mais x segundos passado como argumento.
• Goto(<contexto>,<extensão>,<prioridade>)
• Read(<var>) - Opcional
• Record(<arquivo>) - Opcional
Exemplo de URA
[entrada]
exten => _X.,1,Goto(URA,s,1) ;Toda a chamada entrante é
;desviada para a URA
[URA]
exten => s,1,Answer() ;Atende o canal
exten => s,n,Background(menuDaUra) ;Toca o audio do menu da URA
exten => s,n,WaitExten(2) ;Aguarda mais 2 segundos
[suporte]
exten => s,1,Dial(SIP/2000,40) ;Chama o ramal do suporte
[comercial]
exten => s,1,Dial(SIP/2001,40) ;Chama o ramal do comercial
[financeiro]
exten => s,1,Dial(SIP/2002,40) ;Chama o ramal do financeiro
10.2. Estacionamento
Pode ser usado para estacionar uma chamada. Isto auxilia quando você está
atendendo em um telefone fora da sua sala. Estaciona a chamada em uma
determinada extensão e quando se move de volta a sua sala digita a extensão onde
a chamada está estacionada.
Como funciona:
Onde configurar:
include=>parkedcalls
[general]
parkext=>700
parkpos = >701-720
context=>parkedcalls
parkingtime=>45
onde:
10.3. Captura
A captura permite que você puxe um chamado de um colega no mesmo grupo de
chamadas. Isto evita que você tenha de levantar para atender um telefone do seu
vizinho que não para de tocar. Discando *8 você pode capturar uma chamada no
seu grupo de chamadas. Este recurso pode ser alterado via arquivo features.conf No
arquivo sip.conf vamos adicionar duas linhas em cada ramal.
callgroup=xx
pickupgroup=xx
pickupexten=>*8
Sua sintaxe é:
Pickup(extensão[@contexto])
Onde:
• extensão - Extensão que deseja capturar;
• contexto - Contexto no qual está a extensão que deseja capturar.
10.4. Transferência
Existem duas possibilidades de transferência de chamadas. Transferência direta e
Transferência assistida. A configuração desses dois tipos de transferência também
pode ser feita diretamente no Asterisk, sendo útil para telefones convencionais que
não possuem as teclas de HOLD e TRANSFER. Esta configuração está no
arquivo /etc/asterisk/features.conf.
/etc/asterisk/features.conf
atxfer => *2
/etc/asterisk/featues.conf
blindxfer => #
Exemplo:
10.5. Conferência
A conferência no Asterisk é feita usando o aplicativo MeetMe(). O MeetMe() é uma
funcionalidade muito simples de usar com a vantagem de funcionar com qualquer
tipo de canal. Alguns telefones padrão SIP, por exemplo, têm seus próprios
mecanismos de conferência que também podem ser usados, mas o método padrão
para conferência é o MeetMe().
10.5.1. Formato:
MeetMe(Confno[|options][|password])
onde:
◦ v – modo vídeo;
• password – Especifica uma senha a aser solicitada para cada usuário que
entrar na sala de confer6encia.
10.5.2. Configuração
Vamos configurar a nossa sala de conferência. Para isso vamos apagar o conteúdo
do arquivo meetme.conf em /etc/asterisk e editar o seu novo conteúdo:
[general]
audiobuffers =32
[rooms]
conf => 5001
conf => 5002 ,123456
onde:
10.5.3. Aplicação
exten=>5001,1,MeetMe(5001)
/etc/asterisk/musiconhold.conf
[default]
mode=files
directory=/var/lib/asterisk/moh
random=yes
onde:
/etc/asterisk/sip.conf
[general]
musicclass=default
10.7. Siga-me
Para implementar esta funcionalidade é necessário criar um contexto específico para
ativar e desativar a funcionalidade. Este contexto pode ser criado dentro do
arquivo /etc/asterisk/extensions.conf. Veja o exemplo:
/etc/asterisk/extensions.conf
[interna]
exten => _1XXX,1,Noop(CF/${EXTEN})
exten => _1XXX,2,Set(siga=${DB(CF/${EXTEN})})
exten => _1XXX,3,Dial(SIP/${siga},30,Ttw)
Neste caso, todas as ligações que forem feitas para qualquer o número 1XXX, ele
vai verificar na base de dados do asterisk se existe algum registro CF referente ao
ramal de destino e se existe um valor para esse registro, caso haja, ele efetua o
siga-me, caso não faz a ligação normal.
[default]
include = > sigame-on
include = > sigame-off
include = > internas
10.8. VoiceMail
O VoiceMail, ou correio de voz é o serviço de "secretária eletrônica"do Asterisk, isto
é, ao identificar que o destino de uma chamada não está disponível, possibilita ao
originador da chamada deixar uma mensagem de voz, a qual é gravada em um
arquivo de áudio na caixa postal do ramal chamado.
3. Configure uma extensão para que o usuário possa o uvir seu correio de voz e
administrá-lo.
[general]
format=wav49|gsm|wav
attach=yes
delete=no
maxmsg=100
maxsecs=180
minsecs=10
maxsilence=3
serveremail=asterisk
emailsubject=[Voip 4Linux]: Nova Mensagem ${VM_MSGNUM} na caixa
postal ${VM_MAILBOX}
emailbody=Caro(a) ${VM_NAME}:\n\nvoce tem nova mensagem de
voz.\nDuracao:${VM_DUR}.\nEnviado por: ${VM_CALLERID}, em $
{VM_DATE}.\n Para ouvir sua caixa postal disque para
9900.\n\nObrigado!\n\n\tDexter\n\twww.dexter.com.br\n\t\n\n
emaildateformat=%A, %B %d, %Y at %r
[zonemessages]
brazil=America/Sao_Paulo|’vm-received’ QR 16
[default]
SIP/9001 => 1234,Dexter Clem,root@localhost, delete=yes
SIP/9002 => 1234,Administrativo,root@localhost , delete=yes
SIP/9003 => 1234,Comercial,root@localhost, delete=yes
[macro-ramal]
exten => s,1,Dial(${ARG1}/${ARG2},20,tT) ;ARG1=SIP ; ARG2=90XX
exten => s,n,Goto(${DIALSTATUS},1)
exten => BUSY,1,VoiceMail(${ARG2},b)
exten => NOANSWER ,1,VoiceMail(${ARG2},u)
exten => CHANUNAVAIL ,1,VoiceMail(${ARG2},u)
[ramais]
exten => _90XX,1,Macro(ramal,SIP,${EXTEN})
Para criar as regras de discagem para que os usuários possam verificar suas caixas
postais, edite novamente o arquivo: /etc/asterisk/extensions.conf. Adicione as linhas
a seguir ao final do contexto treinamento para permitir aos seus usuários a consulta
as suas caixas postais
/etc/asterisk/snep/snep-features.conf
• Estacionamento 700
• Captura direta *55 + No. Ramal
• Captura por grupo *8
• Siga-me – Ativar *20
• Siga-me – Desativar *21
• Não perturbe – ativar *22
• Não perturbe – Desativar *23
• Espionar Canais *99 + No. Ramal
• Espionar Canais – Sussurro *98 + No. Ramal
• Espionar Canais por grupo *97 + No. Ramal
• Espionar Canais por grupo – Sussurro *96 + No. Ramal
• Saber o número do ramal *503
• Gravar audio *100
• Ouvir última gravação do *100 *101
• Agenda (Cadastros >> Contatos) *12 + Cód (P/telefone fixo)
*13 + Cód (P/ telefone celular)
/etc/asterisk/snep/snep-authconferences.conf
/etc/asterisk/snep/snep-conferences.conf
• Salas de conferência 901 a 915
/etc/asterisk/snep/snep-musiconhold.conf
Vamos criar uma extensão para gerar as gravações a serem utilizadas nas
URAs que serão construídas mais adiante. Edite o arquivo
/etc/asterisk/extensions.conf e, dentro do contexto [interno], adicione as
seguintes linhas:
[interno]
...
exten => _777.,1,Record(${EXTEN:3}:ulaw)
exten => _777.,n,wait(1)
exten => _777.,n,Playback(${EXTEN:3})
exten => _777.,n,Hangup()
• Gravando as mensagens
[expediente]
;exten => _FFXX,1,Dial(${HUNTGROUP},20,t)
exten => _X.,1,goto(ura,s,1)
[ura]
exten => s,1,Answer()
exten => s,2,BackGround(111)
exten => s,3,WaitExten(2)
exten => t,1,Dial(${TELEFONISTA})
exten=> 1,1,Playback(222)
exten=> 1,n,Dial(SIP/FF01)
exten=> 1,n,Hangup()
exten=> 2,1,Playback(333)
exten=> 2,n,Dial(SIP/FF02)
exten=> 2,n,Hangup()
exten=> 3,1,Playback(444)
exten=> 3,n,Dial(SIP/FF03)
exten=> 3,n,Hangup()
*CLI>dialplan reload
• Música em Espera
[interno]
...
exten => 9100,1,Answer()
exten => 9100,n,MusicOnHold(default,30)
Após atender, transfira a ligação para o número 700. O sistema vai lhe
informar o número da sala onde a ligação foi estacionada. Desligue.
Agora disque para o número da sala informado no item anterior e veja o que
acontece.
callgroup=1
pickupgroup=1
directmedia=no
Peça para alguém de outra filial para discar para um dos seus ramais.
A partir do outro telefone (que não está tocando) disque *8# e capture a
ligação.
conf=>9500
conf=>9501,1234
exten=>9500,1,MeetMe(9500)
exten=>9501,1,Meetme(9501)
Peça para alguém dos outros grupos para discar para algum dos seus ramais
e transfira a ligação para uma das salas de conferência.
#include snep/snep-musiconhold.conf
DAC
4linux.com.br 11. DAC
11. DAC
O DAC (Distribuição de Chamadas Automaticamente) é composto por Filas e
Agentes. As filas são configuradas no arquivo queues.conf e os agentes no arquivo
agents.conf. As filas são grupos de agentes/ramais que irão receber as chamadas
entrantes na fila. Os agentes são os dispositivos que irão receber as chamadas. O
principio de funcionamento das filas de atendimento pode ser resumido nos
seguintes passos:
Recursos adicionais como “pausas” podem ser atribuídas aos agentes, fazendo com
que os mesmos fiquem sem receber chamadas temporariamente. Os agentes foram
criados com o propósito principal de estarem logados em filas de atendimento.
11.3. Configuração
[general]
persistentmembers = yes
autofill = yes
monitor-type = MixMonitor
;
[Comercial] ;; Nome da fila
musicclass = default
strategy = ringall
timeout = 15
retry = 5
maxlen = 0
onde:
11.3.2. Os agentes
/etc/asterisk/agents.conf
[general]
persistentagents=yes
multiplelogin=yes
;
[agents] ; aqui se inicia as configurações dos
agentes
maxlogintries=3
autologoff=15
autologoffunavail=yes
endcall=yes
musiconhold => default
group=1
; ======= Definicao dos agentes =======
; Essa parte é dedicada a configuração do agente seguindo a
sintaxe:
; agent => agentid,agentpassword,name
[agents]
agent => X00,X00,Agente X00
agent => X01,X01,Agente X01
onde:
AddQueueMember(fila, agente)
; Login do Agente
exten => _550,1,Answer
exten => _550,2,AddQueueMember(Comercial,Agent/${CALLERID(num)})
exten => _550,3,Hangup
RemoveQueueMember(fila, agente)
; Logout do Agente
exten => _551,1,Answer
exten => _551,2,RemoveQueueMember(Comercial,Agent/$
{CALLERID(num)})
exten => _551,3,Hangup
/etc/asterisk/queues.conf
[general]
;Habilita a gravação de chamadas endereçadas aos agentes.
;
monitor-type=MixMonitor
;
;Formato usado para gravar as chamadas (wav, gsm, wav49)
;O mais indicado é o wav49 pois ocupa pouco espaço e é compatível
;com a maioria dos Sistemas Operacionais.
;
monitor-format=gsm|wav|wav49;
;
;O diretório padrão para salvar as gravações
;
/var/spool/asterisk/monitor
• Nome da fila : nome que identifica a fila. Observar para não usar espaços ou
caracteres acentuados/especiais como: çãé@#%...;
• Classe das músicas de espera: conjunto de arquivos de som a serem
usados como músicas de espera. (Veja mais em: Configurações >> Músicas
em Espera);
• Arquivo de anúncio da fila: define o arquivo de som que contém a
mensagem informando o nome da fila que o chamador está;
• Intervalo de repetição das mensagens: tempo em segundos que as
mensagens de aviso serão repetidas durante uma espera;
• Estratégia de distribuição: Estratégias de distribuição de chamadas
[vendas]
strategy=rrmemory
music = default
timeout = 15
retry = 2
maxlen = 0
[interno]
;Executa Login do agente
exten => 550,1,Set(FILA=vendas)
exten => 550,n,Goto(memberAdd,s,1)
[from-pstn]
; Recebendo as ligações do seu provedor e entregando no DAC
exten=>0800FF,1,Answer ; FF = Número da sua filial
[to-pstn]
;Discando para DAC das outras filiais
exten => _0800XX,1,Dial(SIP/${EXTEN}@op-voip,20,tT)
[memberAdd]
exten => s,1,AddQueueMember(${FILA},SIP/${CALLERID(NUM)})
exten => s,n,ExecIf($["${AQMSTATUS}" = "ADDED"]?Background(agent-
loginok))
exten => s,n,hangup()
[memberRemove]
exten => s,1,RemoveQueueMember(${FILA},SIP/${CALLERID(NUM)})
exten => s,n,ExecIf($["${RQMSTATUS}" = "REMOVED"]?
Background(agent-loggedoff))
exten => s,n,hangup()
Obs.: FF é o número da sua filial. Não esqueça de digitar “dialplan reload” para
ativar as alterações realizadas.
Teste
• Disque para o número 550 do seu ramal SIP para se logar como um agente.
• Digite o comando
• Peça para outro aluno ligar para a sua filial 0800NFF, onde FF é o número da
sua filial.
• Ajustando as rotas: Altere a rota que recebe chamadas das filiais e, troque a
ação:
por
• Teste: Peça para um colega de outra filial discar para seu ramal. Note que:
Segurança
4linux.com.br 12. Segurança
12. Segurança
• Pare o Asterisk.
# /etc/init.d/asterisk stop
# groupadd asterisk
AST_USER=asterisk
AST_GROUP=asterisk
Allowguest=no
Autocreatepeer=no
alwaysauthreject = yes
call-limit=1 deny =0.0.0.0/0.0.0.0
permit =192.168.0.0/255.255.255.0 a
lwaysauthreject=yes
realm=sip.4linux.com.br
domain=sip.4linux.com.br
onde:
seu ser;
• Alwaysauthreject = yes Esta opção foi por um tempo (desde 1.2?), mas o
padrão é "não", que permite o vazamento de informações de extensão. Definir
esta opção como "sim" irá rejeitar os pedidos de autenticação de usuários
válidos ruim com as informações rejeição mesmo que com nomes de usuário
inválido, negando atacantes remotos a capacidade de detectar extensões
existentes com ataques de força bruta adivinhar;
• Realm=sip.4linux.com.br – Define qual nome de domínio real para facilitar a
tradução de endereço para o usuário;
• domain=sip.4linux.com.br – FQDN de domínio do Asterisk.
12.4.1. Download
# apt-get update
# apt-get install bzip2
Após descompactar o pacote, o ideal é que o arquivo README seja lido com
atenção, adiantando o processo, um requisito do produto (contido no leia-me, seria a
versão do Python >= ao 2.3). Instale-o:
# apt-get update
# apt-get install python (ou python2.4)
12.4.2. Instalação
# cd fail2ban-0.8.4
# python setup.py install
Não vamos editar nada neste diretório. O que interessa neste momento é a
verificação da existência dos arquivos binários no nosso PATH. O comando a seguir
deverá exibir a versão do produto:
# fail2ban-server -V
# fail2ban-client -V
# fail2ban-regex -V
# mkdir -p /etc/fail2ban
# chown root.root /etc/fail2ban -R
Apenas alguns ajustes serão necessários neste script, vamos precisar organizar o
PATH (caso necessário. No meu caso, os executáveis estão em /usr/local/bin), edite
no arquivo /etc/init.d/fail2ban as seguintes linhas:
• (Linha 25 EDIT)DAEMON=/usr/local/bin/$NAME-client
# cd /etc/init.d/
# chmod +x fail2ban
# /etc/init.d/fail2ban start
Olhando os logs:
# tail -f /var/log/fail2ban.log
Agora que o serviço está ativo em execução, vamos definir sua inicialização
automática no Sistema Operacional:
# cd /etc/init.d/
# update-rc.d -f fail2ban defaults
12.4.4. Configuração
#
# Asterisk
#
[asterisk]
enabled = true
filter = asterisk
action = iptables-allports[name=asterisk, protocol=all]
sendmail-whois[name=Asterisk, dest= TI@EMPRESA.com.br, sender=
security@CLIENTE.com.br]
logpath = /var/log/asterisk/full
maxretry = 5
bantime = 172800
/etc/fail2ban/filter.d/asterisk.conf
NOTICE.* .*: Host <HOST> failed MD5 authentication for '.*' (.*)
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is
ignored.
# Values: TEXT
#
ignoreregex =
Asterisk Realtime
4linux.com.br 13. Asterisk Realtime
Além dos dados ficarem em tabelas do MySQL, também a recarga das alterações
são feitas automaticamente pelo Asterisk dispensando o comando reload, isto
porque quando chega uma requisição no Asterisk ele procura a informação no banco
caso não seja encontrada na memória.
13.2.1. Dependências
[asterisk]
Driver = MySQL
Description = MySQL ODBC 3.51 Driver DSN
Server = localhost
Port = 3306
Database = asterisk
Option = 3
Socket =
[MySQL]
Description = MySQL driver
Driver = /usr/lib/odbc/libmyodbc.so
Setup = /usr/lib/odbc/libodbcmyS.so
CPTimeout =
CPReuse =
[asterisk]
enabled => yes
dsn => asterisk
; Altere abaixo o usuario de conexao com o banco
username => myuser
; Altere abaixo a senha de conexao com o banco
password => mypass
pre-connect => yes
[settings]
sippeers => odbc,asterisk,sipfriends
• Criar um arquivo sipfriends.sql com o conteúdo sql da tabela que pode ser
encontrado em:
http://www.voip-info.org/wiki/view/Asterisk+RealTime+Sip.
Nao havendo erro nenhum você pode configurar o usuário 1000 com a senh
“senha$456” no telefone ou softphone.
Para poder verificar o status, você pode usar o comando abaixo no cli do asterisk
Laboratório – Asterisk
# cd /etc/asterisk
# gedit res_mysql.conf
res_mysql.conf
[general]
dbhost = 127.0.0.1
dbname = asteriskdb
dbuser = asterisk
dbpass = asterisk
dbport = 3306
;dbsock = /tmp/mysql.sock
# mysql -u root -p
Enter password:
wget http://endereçoipdoinstrutor/realtime/realtime.sql
mysql –p –u asterisk <realtime.sql
/etc/asterisk/extconfig.conf
[settings]
iaxusers => mysql,asteriskdb,iax_buddies
iaxpeers => mysql,asteriskdb,iax_buddies
sipusers => mysql,asteriskdb,sip_buddies
sippeers => mysql,asteriskdb,sip_buddies
voicemail => mysql,asteriskdb,voicemail
extensions => mysql,asteriskdb,extensions_table
# mysql -u asterisk -p
Enter password:
# mysql -u asterisk -p
Enter password:
mysql> use asteriskdb;
mysql> insert into extensions_table(id, context, exten, priority,
app, appdata) VALUES ('1','teste', 'FF10','1','Dial','SIP/FF10');
mysql> insert into extensions_table(id, context, exten, priority,
app, appdata) VALUES ('2','teste', 'FF11','1','Dial','SIP/FF11');
*CLI>dialplan reload
• Reconfigure seu telefone SIP e o softphone para os ramais NN10 e NN11 Não
se esqueça de reiniciar os telefones para que se registrem novamente. Use o
comando sip show peers e verifique que os peers não aparecem enquanto
não há uma ligação.
*CLI>sip show peers
14. Os Autores
Felipe Ribeiro Pasa, profissional de redes Asterisk certificado dCAP e LPI possui 8
anos de experiência com projetos e implantação de redes VoIP e 10 anos de
experiência com Linux. Já desempenhou várias funções como suporte, analista de
redes, desenvolvimento e pré-venda de equipamentos para redes VoIP. Atua como
instrutor Asterisk e Linux desde 2007, já ministrou treinamentos em 10 capitais
brasileiras totalizando mais de 3.000 horas/aula. Hoje atua como instrutor e
consultor auxiliando as empresas que trabalham no desenvolvimento de sistemas
integrados a tecnologias VoIP como Asterisk, FreeSwitch e OpenSIPS.
15. Bibliografia
http://ead.opens.com.br/course/view.php?id=5
http://www.sneplivre.com.br
http://wiki.sj.ifsc.edu.br/wiki
http://ensinar.wordpress.com/2008/12/21/a-importancia-dos-codec's/
https://wiki.asterisk.org/wiki
http://www.voipexperts.com.br/
http://www.asteriskdocs.com.br/blog/
http://www.voip-info.org/wiki