Você está na página 1de 160

Só na 4Linux o aluno aprende

MUITO MAIS!

1 - Bem-vindo

INSTRUTORES

Felipe R. Pasa

Flávio Henrique Somensi

HORÁRIOS

08:30 as 12:00 Intervalo para cofee-break (15 minutos)

13:30 as 18:00 Intervalo para cofee-break (15 minutos)

A Dexter – plano de ação

A Dexter – plano de ação ➢ Ramais ➢ Troncos Interligação c/ filiais ➢ Interligação c/

Ramais Troncos

Interligação c/ filiais Interligação c/ operadoras

Chamadas internas Chamadas externas

Estacionamento Correio de Voz Não perturbe Siga-me Filas

Segurança

Interface gráfica

2 - Introdução a telefonia

2 - Introdução a telefonia 5

Objetivos da Aula

Conceituar telefonia básica

Explicar o que é o Asterisk e a sua relação com outros projetos

Descrever qual o papel da Digium neste ecosistema

Reconhecer a arquitetura do Asterisk

Conceituar VoIP

Apontar alguns cenários de uso do Asterisk

Projeto Asterisk

O

 Asterisk

 e

 um

 toolkit

 que

 transforma

 um

 PC
 
 ordinário

 em

 uma

 poderosa

 central

 telefônica

 multi- protocolo
com
recursos
avançados.



uma

 poderosa

 central

 telefônica

 multi- protocolo
com
 recursos 
avançados.

 7

Porque utilizar o Asterisk

Sistema aberto

Redução de custos

Controle total

Aumento de produtividade

Melhoria no atendimento

Roda no Linux

O papel da Digium

Mantenedora oficial do projeto Asterisk

Fundada por Mark Spencer (atual CTO da Empresa)

Desenvolve hardware para Asterisk

Também comercializa versões especiais do Asterisk

Asterisk GPL

Asterisk Business Edition

Asterisk OEM

Arquitetura do Asterisk

Arquitetura do Asterisk 10

Arquitetura do Asterisk

CANAIS

TDM: DAHDI, KHOMP, DGV

IP ou VoIP: SIP, H323, IAX2

ESPECIAIS: Agent, Console, Local

CODEC'S

GSM, G711, G729, iLBC, etc

APLICAÇÕES

Transfer, Meetme, Goto, etc

VoIP

É um conjunto de tecnologias utilizadas em redes IP com o objetivo de realizar comunicação de voz e vídeo.

Principais benefícios:

Redução de custo com infra estrutura

Flexibilidade

Interoperabilidade

VoIP - Implementação

DIFICULDADES

Protocolo UDP

Roteamento de Tráfego

Firewalls, NAT

DESAFIOS

Latência

Perda de Pacotes

Jitter

QoS

Segurança

Cenários de uso

PABX HÍBRIDO

Cenários de uso PABX HÍBRIDO 14

Cenários de uso

100% VoIP

Cenários de uso 100% VoIP 15

Cenários de uso

Cenários de uso SOFTSWITCH 16

SOFTSWITCH

Cenários de uso

PABX 1x1

Cenários de uso PABX 1x1 17

Cenários de uso

PABX como banco de canais

Cenários de uso PABX como banco de canais 18

Cenários de uso

MEDIA GATEWAY

Cenários de uso MEDIA GATEWAY 19

Cenários de uso

URA

Cenários de uso URA 20

3 – Compilando e instalando

3 – Compilando e instalando 21

Objetivos da Aula

Dimensionar o hardware necessário para o Asterisk

Instalar o Linux e as bibliotecas necessárias

Fazer o download do Asterisk

Compilar o Asterisk

Iniciar o Asterisk na carga do sistema

Estrutura e principais arquivos do Asterisk

Dimensionar hardware

CANAIS

Quantos e quais telefones serão utilizados?

Quantas linhas externas, qual tipo?

Quantas chamadas simultâneas?

Quais CODECs serão empregados?

Será necessário transcodificação?

Dimensionar hardware

RECURSOS

Cancelamento de eco

Correio de voz

Conferência

Gravação

Fax

Definir hardware

Item

Levar em consideração

Até 5 canais

Até 10 canais

Até 15 canais

 

-

Número de chamadas

simultâneas

 

Processador

- Gravação das chamadas

x86 400 Mhz

x86 1 Ghz

x86 3 Ghz

- codec's utilizados

 

- Funcionalidades utilizadas

 

- Número de chamadas

 

simultâneas

Memória RAM

- Gravação de chamadas

256Mb

512Mb

1 Gb

- codec's utilizados

 

Disco Rígido

- Gravação de Chamadas

- Sem gravação: 10 Gb - Com gravação: 10 Gb para SO e 1,2 Mb por minuto gravado (WAV)

Placa mãe

- Placas de telefonia x Slots PCI disponíveis

 

Sistema

Operacional

- Distribuição Linux de sua preferência

 

Sistema Operacional

SISTEMA OPERACIONAL

GNU/Linux, FreeBSD, NetBSD, OpenBSD, Mac OS X, Solaris.

BIBLIOTECAS

As bibliotecas necessárias para a compilação e instalação do Asterisk dependem dos módulos que se deseja utilizar.

Compartilhamento de IRQ

O hardware de telefonia é muito sensível em questões relacionadas a temporização

Caso um dispositivo não consiga acessar um IRQ dentro de um espaço de tempo determinado, pode haver problemas com a qualidade da voz

É interessante que as placas de telefonia não compartilhem IRQs com os outros dispositivos do PABX

Compilar e instalar o Asterisk

DOWNLOAD

http://downloads.asterisk.org → /usr/src

COMPILAR

cd /usr/src/asterisk

./configure

make menuselect

make

INSTALAR

make install

make config

make samples

Iniciando o Asterisk

BACKGROUND

# service asterisk start

FOREGROUND

# asterisk -vvvgc

onde:

c: habilita o modo console

v: Aumenta a verbosidade na CLI

g: Faz o core dump em caso de crash do Asterisk

Parando o Asterisk

BACKGROUND

# service asterisk stop

*CLI> core stop

FOREGROUND

*CLI> core stop

gracefully now when convenient

gracefully now when convenient

Estrutura do Asterisk

DIRETÓRIOS

/etc/asterisk

/var/log/asterisk

/var/lib/asterisk

/var/spool/asterisk

➢ /var/lib/asterisk ➢ /var/spool/asterisk Importante: Estes diretórios são configuráveis no

Importante: Estes diretórios são configuráveis no arquivo asterisk.conf em /etc/asterisk.

Estrutura do Asterisk

ARQUIVOS (/etc/asterisk)

extensions.conf

sip.conf

iax.conf

features.conf

modules.conf

cdr.conf

voicemail.conf

queues.conf

Laboratório

Objetivos:

Baixar o Asterisk

Compilar e instalar o Asterisk

Compilar e instalar bibliotecas

Gerenciar o processo

4 - Telefonia TDM

4 - Telefonia TDM 35

Objetivos da Aula

Conhecer os tipos de sinalização

Diferenciar interfaces FXS de FXO

Conhecer canais digitais e seus protocolos

Reconhecer os principais hardwares de telefonia

Tipos de sinalização

SUPERVISÃO

On-hook

Off-hook

Ringing

ENDEREÇAMENTO

TOM (dtmf)

PULSO (decádico)

INFORMAÇÃO

Tom de discagem

Sinal de ocupado

Tom de retorno (ringback)

Congestionamento

Número inválido

Tom de confirmação

Interfaces analógicas FX

Interfaces analógicas FX FXO (foreign exchange office) ➢ Se comunica diretamente com a operadora FXS (foreign

FXO (foreign exchange office)

Se comunica diretamente com a operadora

FXS (foreign exchange station)

Se comunica diretamente com o telefone

Canais digitais

Utilizado quando o número de linhas telefônicas necessárias é muito grande ( geralmente > 10 ).

Canais digitais Utilizado quando o número de linhas telefônicas necessárias é muito grande ( geralmente >

Sinalização digital

MFC/R2 ou R2

Também chamada de CAS (sinalização associada ao

canal)

Muito comum no Brasil

ISDN ou RDSI

Também chamada de CCS (sinalização comum de canal)

Mais rápido - utiliza um canal exclusivo para sinalização

Hardwares de telefonia

Hardwares de telefonia TELEFONES IP 41

TELEFONES IP

Hardwares de telefonia TELEFONES IP 41

Hardwares de telefonia

INTERFACES DE COMUNICAÇÃO

Hardwares de telefonia INTERFACES DE COMUNICAÇÃO 42
Hardwares de telefonia INTERFACES DE COMUNICAÇÃO 42

Hardwares de telefonia

GATEWAYS FXO/FXS

Hardwares de telefonia GATEWAYS FXO/FXS 43

Hardwares de telefonia

GATEWAYS GSM
GATEWAYS GSM

Hardwares de telefonia

KHOMP EBS

Hardwares de telefonia KHOMP EBS 45
Hardwares de telefonia KHOMP EBS 45

5 - Configurando um PABX-IP

5 - Configurando um PABX-IP 46

Objetivos da Aula

Entender e editar os arquivos de configuração

Instalar softphones baseados em SIP

Configurar um plano de discagem simples

Discar entre ramais

Discar para uma mensagem gravada

Apresentando a interface gráfica SNEP

Plano de Discagem

CONCEITOS

Lista de instruções que o Asterisk deve seguir para processar as chamadas

Disparadas a partir dos dígitos recebidos

Configuradas em /etc/asterisk/extensions.conf

Módulos de Planos de Discagem

LUA (pbx_lua.so)

AEL (pbx_ael.so)

conf (pbx_config.so)

Plano de discagem

LÓGICA HIERÁRQUICA

Contexto Extensão

Prioridade

Exemplo:

Aplicação

[default] [default]

exten exten => => _XXXX,1,Dial(SIP/2000) _XXXX,1,Dial(SIP/2000)

Plano de discagem

CONTEXTOS

Definem o escopo

Permitem criar diferentes classes de ramais

Estão relacionados diretamente aos canais

São o ponto de entrada de uma chamada

Sintaxe:

[ nome_do_contexto ]

Plano de discagem

EXTENSÕES

Regras de discagem declaradas dentro do contexto Podem ser definidas de 3 maneiras:

Numérica

Numéricas com callerid

Alfanuméricas

Máscaras baseadas em ER

exten => 9052 exten => 9052/32009000 exten => ura32

É um padrão baseado em Expressão Regular

Plano de discagem

EXPRESSÃO REGULAR

E.R.

Função

Exemplo

X

Qualquer número de 0 a 9

_XX → qualquer número de 00 a 99

 

Z

Qualquer número de 1 a 9

_ZZ → qualquer número de 11 a 99 – exceto (20,30,40,

)

N

Qualquer número de 2 a 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 → um número da lista: 1 ou 5 até 7.

 

[e]

Lista de opções

_[15-7]

_[13457] → um número da lista: 1 ou 3 ou 4 ou 5 ou 7. _[a-zA-Z] → uma letra maiúscula/minúscula do alfabeto.

 

Qualquer carácter,

_0800. → Expressão regular que vale para qualquer número que inicie com _0800 + qualquer outro carácter, infinitas vezes.

 

. infinitas vezes

! Coringa inclusivo

_0800! → funciona como um ponto, mas trata de forma diferente, testando todas as outras possibilidades primeiro.

 

Plano de discagem

EXPRESSÃO REGULAR - Exemplo

Antes

Depois

[ramais] exten => 2000,1,Dial(SIP/2000) exten => 2001,1,Dial(SIP/2001) exten => 2002,1,Dial(SIP/2002)

[ramais] exten => _200X,1,Dial(SIP/${EXTEN})

Plano de discagem

PRIORIDADES

Definem a ordem de execução de uma extensão Podem ser:

Numéricas

exten exten => => 2000,1,Dial(SIP/2000) 2000,1,Dial(SIP/2000)

exten exten => => 2000,2,Voicemail(2000,u) 2000,2,Voicemail(2000,u)

exten exten => => 2000,3,Hangup() 2000,3,Hangup()

Plano de discagem

PRIORIDADE Próxima (n – next)

exten exten => => 2000,1,Dial(SIP/2000) 2000,1,Dial(SIP/2000)

exten exten => => 2000,n,Voicemail(2000,u) 2000,n,Voicemail(2000,u)

exten exten => => 2000,n,Hangup() 2000,n,Hangup()

Próxima (n – next) com rótulo

exten exten => => 2000,1,Dial(SIP/2000) 2000,1,Dial(SIP/2000)

exten exten => => 2000,n,GotoIf($[${VAR}=BUSY]?ocupado:desliga) 2000,n,GotoIf($[${VAR}=BUSY]?ocupado:desliga)

exten exten => => 2000,n(ocupado),Voicemail(2000,b) 2000,n(ocupado),Voicemail(2000,b)

exten exten => => 2000,n(desliga),Hangup() 2000,n(desliga),Hangup()

Plano de discagem

APLICAÇÕES

É o destino final da execução de uma extensão

Cada aplicação tem uma finalidade EXCLUSIVA

O Asterisk possui mais de 150 aplicações

Exemplos:

Dial

Hangup

MixMonitor

MeetMe

Canais SIP

CONCEITOS

Um canal pode ser interpretado como um uma conexão de E/S de uma chamada no Asterisk

SIP é o canal mais comum dentre os canais IP

É configurado em /etc/asterisk/sip.conf

/etc/asterisk/sip.conf

[general] [general]

udpbindaddr=0.0.0.0:5060 udpbindaddr=0.0.0.0:5060 context=default context=default disallow=all disallow=all

allow=ulaw,alaw,gsm allow=ulaw,alaw,gsm directmedia=no directmedia=no

;---------------------------

;---------------------------

;Comentarios ;Comentarios iniciam iniciam com com “;” “;”

;---------------------------

;---------------------------

[2000] [2000] type=friend type=friend

secret=2000 secret=2000

dtmfmode=rfc2833 dtmfmode=rfc2833

host=dynamic host=dynamic

Laboratório

Objetivos:

Configurar ramais SIP

Criar um plano de discagem

Discar de uma ramal para outro

Interface Gráfica SNEP

CONCEITUALMENTE

É um PBX IP completo de grande porte e recursos que fornece

Suporte à Telefonia Convencional e Telefonia IP e é baseado em GNU/Linux e Asterisk.

TECNICAMENTE

É um Interface de administração, configuração e monitoramento que

agrega Inteligência ao Asterisk.

Interface Gráfica SNEP

ESTRUTURA LÓGICA:

A instalação do SNEP sempre está baseada em um “Core”, ou sistema base, e a ela são adicionados módulos que dão ao “Core” funcionalidades adicionais. Este “core” é o Snep Livre.

Módulo A

Módulo B

Módulo C

Módulo A Módulo B Módulo C SNEP
Módulo A Módulo B Módulo C SNEP
Módulo A Módulo B Módulo C SNEP

SNEP

Módulo A Módulo B Módulo C SNEP
Módulo A Módulo B Módulo C SNEP
Módulo A Módulo B Módulo C SNEP

Mysql

Mysql Asterisk

Asterisk

Apache

Interface Gráfica SNEP

RAMAIS

Os Ramais definem os membros dos sistemas SNEP que estarão habilitados ou não a fazer / receber chamadas. O SNEP também usa como conceito que: ”todo ramal é igualmente um “usuário” da Interface e tem suas permissões/restrições definidas pelo Administrador do Sistema”. Ramais podem usar tecnologia:

IP

Virtual

Khomp

( SIP / IAX )

Interface Gráfica SNEP

RamaisRamais KhompKhomp

EBS-FXS
EBS-FXS
Interface Gráfica SNEP Ramais Ramais Khomp Khomp EBS-FXS Conexão LAN Conexão WAN Conexão Cabo Ramais Ramais
Interface Gráfica SNEP Ramais Ramais Khomp Khomp EBS-FXS Conexão LAN Conexão WAN Conexão Cabo Ramais Ramais
Interface Gráfica SNEP Ramais Ramais Khomp Khomp EBS-FXS Conexão LAN Conexão WAN Conexão Cabo Ramais Ramais

Conexão LANInterface Gráfica SNEP Ramais Ramais Khomp Khomp EBS-FXS Conexão WAN Conexão Cabo Ramais Ramais Virtuais Virtuais

Conexão WANInterface Gráfica SNEP Ramais Ramais Khomp Khomp EBS-FXS Conexão LAN Conexão Cabo Ramais Ramais Virtuais Virtuais

Conexão CaboInterface Gráfica SNEP Ramais Ramais Khomp Khomp EBS-FXS Conexão LAN Conexão WAN Ramais Ramais Virtuais Virtuais

SNEP Ramais Ramais Khomp Khomp EBS-FXS Conexão LAN Conexão WAN Conexão Cabo Ramais Ramais Virtuais Virtuais

RamaisRamais VirtuaisVirtuais

SNEP Ramais Ramais Khomp Khomp EBS-FXS Conexão LAN Conexão WAN Conexão Cabo Ramais Ramais Virtuais Virtuais

Laboratório

Objetivos:

Baixar e instalar o SNEP

Criar ramais via interface gráfica

6 - Análise de rede

6 - Análise de rede 65

Objetivos da Aula

Entender arquitetura de redes voltadas a VoIP

Conhecer os protocolos VoIP

Conhecer e analisar a aplicação de Codec's

Entender os tipos de registros SIP/IAX

Análise de rede

Até o começo da década de 1990 haviam dois tipos bem distintos de rede pública :

Rede de telefonia (PSTN)

Rede de computadores (Internet)

Época atual : convergência = união das redes

VoIP e o modelo OSI

VoIP e o modelo OSI 68

Definindo um protocolo

SIP

Pontos fortes: padrão da IETF, larga adoção do mercado

Pontos fracos: problemas no uso do NAT, uso da banda com RTP é alto

IAX2

Pontos fortes: eficiência em banda passante, segurança e facilidade com NAT

Pontos fracos: proprietário, baixa adoção pelo mercado

Definindo um protocolo

H323

Pontos fortes: larga adoção do mercado, padronização pela ITU

Pontos fracos: complexo, pouco adotado em telefonia IP em detrimento ao SIP

Definindo um protocolo

Quadro comparativo

Protocolo

Mantenedor

Utilização

 

- Troncos entre servidores Asterisk

IAX2

Digium

- Terminais atrás de NAT

 

- Conexão com provedores de serviço

SIP

IETF

- Telefones IP

 

-

Conexão com provedores de serviço

H323

ITU-T

- Telefones H323

 

-

Gateways H323

SCCP

Cisco (Proprietário)

- Telefones IP Cisco

Definindo um CODEC

São utilizados para codificar / decodificar um sinal analógico em digital

São originados a partir do PCM (Pulse Code Modulation)

Diferentes equipamentos utilizam diferentes CODEC's Ao estabelecer uma sessão estes equipamentos negociam um CODEC entre si

TRANSCODIFICAÇÃO

Conversão dos pacotes de voz de um CODEC para outro.

CODEC's

QUADRO COMPARATIVO

 

G.711

G.729

G.723

GSM

iLBC

Largura de Banda (Kbps)

64

8

5,3 ou 6,3

13

13,3 ou 15

Complexidade (Mips)

0,35

13

19

5

18

Resistência a perda de pacotes

——-

3%

3%

3%

5% ou 7%

MOS

4,41

4,14

3,79

3.7

4,07

Overhead, payload e banda

OVERHEAD

É a soma dos cabeçalhos dos pacotes

PAYLOAD

Quantidade de media inserida em um determinado pacote

CÁLCULO DE BANDA

http:// www.bandcalc.com

Cálculo de banda

QUADRO COMPARATIVO

Codec

Link

Cálculo

Resultado

 

Ethernet

Ethernet + IP + UDP + RTP + g.711

95.2 Kbps (x1.48)

G.711

PPP

PPP + IP + UDP + RTP + g.711

82.4 Kbps (x1.28)

Frame Relay

FR + IP + UDP + RTP + g.711

82.8 Kbps (x1.29)

 

Ethernet

Ethernet + IP + UDP + RTP + g.729

39.2 Kbps (x4.9)

G.729

PPP

PPP + IP + UDP + RTP + g.729

26.4 Kbps (x3.3)

Frame Relay

FR + IP + UDP + RTP + g.729

26.8 Kbps (x3.35)

Tipos de registros SIP/IAX2

Tipos de registros SIP/IAX2 76
Tipos de registros SIP/IAX2 76
Tipos de registros SIP/IAX2 76

Laboratório

Objetivos:

Instalar o CODEC OpenG729

7 - Protocolo IAX2

7 - Protocolo IAX2 78

Objetivos da Aula

Conhecer os métodos de autenticação

Visualizar alguns cenários de uso

Utilizar o IAX2 em modo trunked

Determinar a banda passante utilizada pelo IAX

Configurar o iax.conf

Conhecer os comandos de console do IAX

IAX2 - Conceitos

É um protocolo desenvolvido pela Digium com o objetivo de estabelecer comunicação entre servidores Asterisk

Definido na RFC 5456

Transporta sinalização e media e uma única porta : 4569

IAX2 é a segunda versão do protocolo IAX

Provê transparência ao NAT

Suporta o modo trunked

IAX2 – Métodos de Autenticação

plaintext Texto puro, esse método é o padrão e oferece pouca segurança pelo fato da senha passar em texto puro na rede e que pode ser facilmente identificado

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

O arquivo /etc/asterisk/iax.conf

[general] [general]

bindport=4569 bindport=4569

bindaddr=0.0.0.0 bindaddr=0.0.0.0 disallow=all disallow=all

allow=ulaw,alaw,g729 allow=ulaw,alaw,g729

;---------------

;---------------

;Primeira ;Primeira filial filial

;---------------

;---------------

[filial-01] [filial-01]

type=user type=user context=from-filiais context=from-filiais secret=filial-01 secret=filial-01

callerid=”Filial-01” callerid=”Filial-01” <1000> <1000>

trunk=yes trunk=yes

IAX2 – Cenários de uso

CLIENTE IAX

Asterisk suportando conexões de telefones via protocolo IAX. Exemplo de configuração no iax.conf:

[8035] [8035] type=friend type=friend

context=default context=default auth=md5 auth=md5 secret=senha secret=senha notransfer=0 notransfer=0

callerid=<8035> callerid=<8035>

host=dynamic host=dynamic

allow=gsm allow=gsm

IAX2 – Cenários de uso

PROVEDOR IAX

Asterisk se conectando a um provedor IAX.

IAX2 – Cenários de uso PROVEDOR IAX ➢ Asterisk se conectando a um provedor IAX. 84

IAX2 – Cenários de uso

ENTRONCAMENTO IAX

Servidores Asterisk se conectando através do protocolo IAX.

IAX2 – Cenários de uso ENTRONCAMENTO IAX ➢ Servidores Asterisk se conectando através do protocolo IAX.

IAX2 – Comandos da CLI>

Comando

Finalidade

iax2 show netstats Exibe estatísticas sobre os pacotes IAX

iax2 show peers

Exibe uma lista de todos os “peers” IAX2 configurados no sistema (troncos e ramais)

iax2 show channels Exibe uma lista de todos os “canais” IAX2 no servidor

iax2 show registry Exibe todos os registros feitos pelo servidor

iax2 set debug

Ativa o LOG dos pacotes IAX na *CLI> do Asterisk

Laboratório

Objetivos:

Entrocar pelo menos uma filial usando IAX

Discar para o ramal da filial

Receber chamada da filial

Interface Gráfica SNEP

TRONCOS

Os Troncos definem as rotas de Entrada e Saída das ligações que passam pelo SNEP. Podem ser considerados Troncos:

Link E1 Digital

Linha Analógica

CHIP de Operadora GSM

Conta em um Provedor VOIP

Interligação entre duas Centrais Telefônicas

Laboratório

Objetivos:

Criar tronco com filiais através da interface gráfica

8 - Protocolo SIP

8 - Protocolo SIP 90

Objetivos da Aula

Entender a teoria de operação do SIP

Entender as características do protocolo

Entender o fluxo das mensagens SIP

Conhecer os tipos de NAT (problemas e soluções)

Configurar um tronco com uma operadora VoIP

Entender o processo de registro do SIP

Protocolo SIP

PONTOS FORTES

Protocolo maduro e padronizado

É o protocolo padrão do mercado

SIP Proxies tem grande escalabilidade

Sinalização e mídia são tratados separadamente

PONTOS FRACOS

Dificuldades com travessia de NAT

Dificuldades com bilhetagem

Uso de banda

Segurança

Estrutura de uma rede SIP

Estrutura de uma rede SIP 93

SIP – Processo de registro

SIP – Processo de registro 94

Fluxo de uma mensagem SIP

Fluxo de uma mensagem SIP 95

SIP com B2BUA

directmedia = no

SIP com B2BUA directmedia = no 96

SIP com B2BUA

directmedia = yes

SIP com B2BUA directmedia = yes 97

SIP e NAT

NAT FULL CONE

O mapeamento é bem estabelecido e qualquer um da Internet pública que queira alcançar um cliente atrás do NAT, precisa apenas saber o esquema de mapeamento de forma a mandar pacotes para ele.

alcançar um cliente atrás do NAT, precisa apenas saber o esquema de mapeamento de forma a

SIP e NAT

NAT PORT RESTRICTED

É quase idêntico ao “Restricted Cone”, mas neste caso o NAT irá 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.

os pacotes a menos que o cliente tenha previamente enviado um pacote para o IP e

SIP e NAT

NAT CONE RESTRICTED

O par IP/Porta externo só é aberto uma vez que o computador interno envie dados para o endereço de destino IP específico.

externo só é aberto uma vez que o computador interno envie dados para o endereço de

SIP e NAT

NAT SIMÉTRICO

Um mapeamento específico do IP:Porta para um NAT público IP:Porta é dependente do endereço de destino para o qual o pacote é enviado.

do IP:Porta para um NAT público IP:Porta é dependente do endereço de destino para o qual

SIP e NAT - Soluções

ASTERISK ATRÁS DE NAT /etc/asterisk/sip.conf

[general] [general]

externip externip = = 200.84.7.1 200.84.7.1

localnet localnet = = 192.168.1.0/255.255.255.0 192.168.1.0/255.255.255.0

CLIENTE ATRÁS DE NAT /etc/asterisk/sip.conf

[2000] [2000] nat nat = = yes yes

directmedia directmedia = = no no

qualify qualify = = yes yes

SIP e dtmf

info: Os dígitos serão enviados dentro do pacote SIP

rfc2833: Os dígitos são enviados dentro do cabeçalho do pacote RTP

inband: Os dígitos são enviados dentro do payload de voz

auto: O Asterisk tenta enviar os dígitos via rfc2833, em caso de falha envia inband

/etc/asterisk/sip.conf

[general] [general]

register register => => asteriskNN:senhaNN@EnderecoIPdoProvedorVoIP asteriskNN:senhaNN@EnderecoIPdoProvedorVoIP

[operadora_voip] [operadora_voip]

type=peer type=peer fromuser=usuario fromuser=usuario

fromdomain=IPdoServidor fromdomain=IPdoServidor defaultuser=asteriskNN defaultuser=asteriskNN secret=senhaNN secret=senhaNN context=default context=default host=IPdoServidor host=IPdoServidor dtmfmode=rfc2833 dtmfmode=rfc2833 directmedia=no directmedia=no

insecure=port,invite insecure=port,invite

qualify=yes qualify=yes

SIP - Comandos da CLI>

Comando

Finalidade

sip show peers

Exibe todas as contas do tipo peer incluindo friends

sip show registry

Exibe o estado de registro do servidor

sip set debug

Habilita o debug SIP

sip reload

Recarrega o módulo SIP do Asterisk

sip show settings

Exibe as configurações

Laboratório

Objetivos:

Entrocar com um provedor VoIP

Fazer chamadas externas

Receber chamadas externas

9 - Plano de discagem

9 - Plano de discagem 107

Objetivos da Aula

Reconhecer e aprender a trabalhar com o arquivo extensions.conf

Configurar um plano de discagem simples

Compreender os padrões (máscaras) utilizadas em um plano de discagem

Descrever variáveis, funções e aplicações

Compreender Macros

Fazer ligações entre ramais e para números externos

/etc/asterisk/extensions.conf

SEÇÃO: [general]

static

writeprotect

extenpatternmatchnew

autofallthrough

clearglobalvars

Exemplo:

[general] [general]

static=yes static=yes

writeprotect=no writeprotect=no

/etc/asterisk/extensions.conf

SEÇÃO: [globals]

Onde são declaradas as variáveis globais, que também podem ser declaradas através da função GLOBAL.

Variáveis globais podem ser acessadas a partir de qualquer ponto do plano de discagem

Exemplo:

[globals] [globals] ENTRADA=DAHDI/g1 ENTRADA=DAHDI/g1 TELEFONISTA=SIP/4000 TELEFONISTA=SIP/4000

/etc/asterisk/extensions.conf

EXTENSÕES

São responsáveis por disparar um evento no Asterisk, determinando o fluxo das chamadas. No arquivo de configuração possuem basicamente o formato:

No arquivo de configuração possuem basicamente o formato: ➢ Podem ser: ➢ Numéricas: ➢ Expressões
No arquivo de configuração possuem basicamente o formato: ➢ Podem ser: ➢ Numéricas: ➢ Expressões

Podem ser:

Numéricas:

Expressões regulares

Conter símbolos

exten => 0800

exten => _0[38]XX. …

exten => 12#89*

/etc/asterisk/extensions.conf

EXTENSÕES ESPECIAIS

i (invalid): Quando um cliente pressiona uma tecla inválida dentro do comando background() ou waitExten() é direcionado para esta extensão

s (start): Usado quando o Asterisk não recebe o número de B

h (hangup): Executada quando a chamada é encerrada

t (timeout): Executada quando ocorre o timeout nas aplicações background() ou waitExten()

T (absolute timeout): Executada quando ocorre o timeout de uma chamada

/etc/asterisk/extensions.conf

VARIÁVEIS DE CANAL

Estão associadas a um canal e só podem ser acessadas a partir do mesmo

Para visualizar as variáveis associadas a um canal podemos utilizar a aplicação DumpChan()

Algumas aplicações preenchem variáveis de canais quando o seu processamento é encerrado, dentre elas podemos citar: queue()e dial()

/etc/asterisk/extensions.conf

VARIÁVEIS DE AMBIENTE

O Asterisk pode acessar variáveis de ambiente do sistema operacional

Para acessar uma variável utilizamos a função ENV()

Exemplo:

exten=> exten=> _4XXX,1,set(ENV(LANG)=en_US) _4XXX,1,set(ENV(LANG)=en_US)

/etc/asterisk/extensions.conf

EXPRESSÕES

São declaradas da seguinte maneira:

$[var1 oper var2]

Os operadores possíveis são:

Matemáticos: +, , *, / e % (modulo)

Lógicos: & (and), | (or), ! (negação)

Comparação: =, <, >, >=, <=, !=

Operação condicional: $[expr1? expr2: expr3]

(negação) ➢ Comparação: =, <, >, >=, <=, != ➢ Operação condicional: $[expr1? expr2: expr3] 115
(negação) ➢ Comparação: =, <, >, >=, <=, != ➢ Operação condicional: $[expr1? expr2: expr3] 115

/etc/asterisk/extensions.conf

MANIPULAÇÃO DE STRINGS

Retornar o comprimento de uma string:

${LEN(<string>)}

Operar uma substring:

${<String>[:index][:length]}

Exemplos:

var1=1234567890; var1=1234567890;

${var1:5} ${var1:5}

${var1:4:2} ${var1:4:2} => => retorna: retorna: 56 56

${var1: ${var1: 4} 4} => =>

=> => retorna: retorna: 67890 67890

retorna: retorna: 7890 7890

/etc/asterisk/extensions.conf

FUNÇÕES

Permitem um processamento mais sofisticado de variáveis Podem ser visualizadas através do comando:

*CLI> core show functions Exemplos:

exten exten => => 100,1,NoOp(${LEN(Fruta)}) 100,1,NoOp(${LEN(Fruta)})

exten exten => => s,1,Set(foo=${IFTIME(*|mon|8-15|nov?Bom:Ruim)}) s,1,Set(foo=${IFTIME(*|mon|8-15|nov?Bom:Ruim)})

/etc/asterisk/extensions.conf

APLICAÇÕES BÁSICAS

set(): Atribui um valor a uma variável

NoOp(): Imprime o valor do argumento na CLI do Asterisk

hangup(): Encerra a chamada

gotoIf(): goto condicional

disa(): Gera um segundo tom de discagem para o usuário

Dial(): Faz uma chamada

/etc/asterisk/extensions.conf

INCLUSÃO DE CONTEXTOS

São responsáveis pela organização e segurança do dialplan

Permitem separar partes diferentes do plano de discagem

Estão ligados diretamente aos canais

sip.conf

[2000]

context = ramais

[2001]

context = fixo

[2002]

context = celular

= ramais [2001] context = fixo [2002] context = celular extensions.conf [ramais] exten =>

extensions.conf [ramais] exten => 20XX,1,Dial(${EXTEN},60,tT)

[ramais] exten => 20XX,1,Dial(${EXTEN},60,tT) [fixo] exten => _[2-5]XXXXXXX,1,Dial(SIP/VONO),60,T)

[fixo] exten => _[2-5]XXXXXXX,1,Dial(SIP/VONO),60,T)

[fixo] exten => _[2-5]XXXXXXX,1,Dial(SIP/VONO),60,T) include => ramais [celular] exten =>

include => ramais

_[2-5]XXXXXXX,1,Dial(SIP/VONO),60,T) include => ramais [celular] exten => _[6-9]XXXXXXX,1,Dial(SIP/VONO),60,T)

[celular] exten => _[6-9]XXXXXXX,1,Dial(SIP/VONO),60,T) include => fixo

include => ramais [celular] exten => _[6-9]XXXXXXX,1,Dial(SIP/VONO),60,T) include => fixo 119

/etc/asterisk/extensions.conf

ROTEAMENTO BASEADO EM HORÁRIO

;

; horario horario comercial comercial [ENTRADA] [ENTRADA]

include include =>aberto|08:00-18:00|mon-fri|*|* =>aberto|08:00-18:00|mon-fri|*|*

;

; depois depois do do horario horario comercial comercial

include=>fechado|18:01-23:59|*|*|* include=>fechado|18:01-23:59|*|*|*

include=>fechado|00:00-07:59|*|*|* include=>fechado|00:00-07:59|*|*|*

include=>fechado|*|sat-sun|*|* include=>fechado|*|sat-sun|*|* [aberto] [aberto] exten=s,1,goto(ura,s,1) exten=s,1,goto(ura,s,1) [fechado] [fechado]

exten=s,1,Playback(afterhoursmessage) exten=s,1,Playback(afterhoursmessage)

exten=s,n,Dial(SIP/${SECURITY}) exten=s,n,Dial(SIP/${SECURITY})

exten=s,n,Voicemail(u${OPERATOR}) exten=s,n,Voicemail(u${OPERATOR})

Laboratório

Objetivos:

Testar aplicações e funções

Fazer chamadas para números externos

Criar condição de horário para chamadas de entrada

/etc/asterisk/extensions.conf

MACROS

Macros são declaradas dentro do plano de discagem, como

um contexto.

A declaração da macro deve ser feita da seguinte maneira:

[macro-NomeDaMacro]

Para disparar uma macro utilizamos a aplicação macro()

Podemos passar argumentos para a macro:

➢ Para disparar uma macro utilizamos a aplicação macro() ➢ Podemos passar argumentos para a macro:
➢ Para disparar uma macro utilizamos a aplicação macro() ➢ Podemos passar argumentos para a macro:

/etc/asterisk/extensions.conf

MACROS - VARIÁVEIS Podemos acessar as seguintes variáveis dentro de uma macro:

MACRO_CONTEXT

MACRO_EXTEN

MACRO_OFFSET

MACRO_PRIORITY

/etc/asterisk/extensions.conf

MACROS - EXEMPLO

[interno] [interno]

[ramais] [ramais]

exten=> exten=> _4XXX,1,macro(disca,SIP/${EXTEN},20,tT) _4XXX,1,macro(disca,SIP/${EXTEN},20,tT)

[macro-disca] [macro-disca]

exten=> exten=> s,1,dial(${ARG1},${ARG2},${ARG3}) s,1,dial(${ARG1},${ARG2},${ARG3})

exten=> exten=> s,n,goto(${DIALSTATUS}) s,n,goto(${DIALSTATUS}) exten=> exten=> s,n,hangup() s,n,hangup()

exten=> exten=> s,n(BUSY),voicemail(${MACRO_EXTEN},b) s,n(BUSY),voicemail(${MACRO_EXTEN},b)

AstDB

Base de dados padrão Berkley DB

Pode ser usado para armazenar dados temporários do Asterisk

Os dados são agrupados em famílias e identificados com uma chave

Família

Chave = Valor

Chave = Valor

AstDB

 

DB

Escreve e lê dados em uma determinada família/chave

FUNÇÕES

DB_DELETE

Apaga dados de uma determinada chave

DB_EXISTS

Verifica se existe um valor dentro de uma família/chave

APLICAÇÕES

DBdeltree

Remove uma família ou uma árvore inteira de chaves

 

database del

Apaga dados de uma determinada chave

database deltree

Remove uma família ou uma árvore inteira de chaves

COMANDOS DA *CLI>

database put

Adiciona ou atualiza uma entrada em uma família/chave

database show

Exibe todas as informações do AstDB e seus valores

database showkey

Exibe o valor de uma família/chave

Laboratório

Objetivos:

Criar uma macro para

Testar E/S chamadas utilizando a macro

10 - Recursos da classe V

10 - Recursos da classe V 128

Objetivos da Aula

Implementar uma URA para recepção de chamadas;

Implementar o voicemail

Implementar sigame

Implementar não perturbe

Implementar estacionamento

Implementar captura de chamadas

Implementar conferência de chamadas

APLICAÇÕES

answer()

URA

Atende o canal e sincroniza o audio entre servidor e cliente

Background(arquivo, opções)

Toca um áudio e aguarda por um entrada DTMF

waitExten(<sec>)

Aguarda <sec> segundos por uma entrada do usuário

Goto (contexto, extensão, prioridade) Desvia a chamada para um deterinado ponto no plano de discagem

EXEMPLO

URA

[entrada] exten => s,1,goto(menu,s,1) [menu] exten=> s,1,background(menu) exten=> s,n,waitExten(3) exten=> 1,1,goto(vendas,s,1) exten=> 2,1,goto(suporte,s,1) exten=> 3,1,goto(treinamento,s,1) exten=> i,1,playback(invalid) exten=> I,n,goto(s,1) exten=> t,1,dial(${TELEFONISTA},20) [vendas] exten=> s,1,dial(${VENDAS}) [suporte] exten=> s,1,dial(${SUPORTE}) [treinamento] exten=> s,1,dial(${TREINAMENTO})

Estacionamento

ONDE CONFIGURAR

/etc/asterisk/features.conf

parkext=>700

parkpos = >701 -720 context=>parkedcalls

parkingtime=>45

/etc/asterisk/extensions.conf

[ramais]

include=>parkedcalls

Transferências

DIRETA

Quando o usuário só transfere a ligação e não há interação. Por padrão o dígito # realiza esta transferência.

ONDE CONFIGURAR

/etc/asterisk/features.conf

blindxfer => #

ou

blindxfer => *1

Transferências

ASSISTIDA

Quando
há
interação
do
usuário
que
vai
receber
a
ligação.

ONDE CONFIGURAR

/etc/asterisk/features.conf

atxxfer => *2

Transferências

PLANO DE DISCAGEM

É

necessário

habilitar

a

transferência

nos

canais

de

comunicação, colocando as opções t e/ou T.

t - habilita a transferência para o lado destino da chamada.

T - habilita a transferência para o lado originador da chamada.

ONDE CONFIGURAR /etc/asterisk/extensions.conf

exten => 1000,1,Dial(SIP/${EXTEN},35,tT)

Voicemail

As configurações relativas ao voicemail são feitas no arquivo voicemail.conf

As aplicações relacionadas ao voicemail são:

voicemail(<mbox1>[@ctx1][&mbox2] [@<ctx2],opt)

voicemailMain(<mbox>[@ctx])

/etc/asterisk/voicemail.conf

[general]

format=wav49|gsm|wav

attach=yes

delete=no

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 [default]

9001 => 1234,Dexter Clem,root@localhost, delete=yes

9002 => 1234,Administrativo,root@localhost , delete=yes

/etc/asterisk/voicemail.conf

CAIXAS DE VOZ

Podemos associar um canal com uma caixa de voz com o parâmetro mailbox nos arquivos de canal

A sintaxe para a definição das caixas de voz é a seguinte:

mbox => pass,fname,email,pagermail,opt

Conferência

Permite que 3 ou mais ramais conversem simultaneamente Utiliza a aplicação MeetMe ONDE CONFIGURAR /etc/asterisk/meetme.conf

[general] audiobuffers =32 [rooms] conf => 5001 conf => 5002 ,123456

/etc/asterisk/extensions.conf

exten=>5001,1,MeetMe(5001)

Captura

Permite capturar uma chamada de um colega no mesmo grupo de chamadas.

ONDE CONFIGURAR /etc/asterisk/features.conf

pickupexten=>*8

/etc/asterisk/sip.conf

callgroup = xx pickupgroup = xx

/etc/asterisk/extensions.conf

exten => _33900X,1,Pickup(${EXTEN:2}@treinamento)

DND – Não perturbe

;------------

;ATIVAR o DND

;------------

exten => *41*,1,Set(DB(dnd/${CALLERID(num)})=${EXTEN:4})

exten => *41*,n,playback(dndEnabled) exten => *41*,n,Hangup()

;--------------

;CANCELAR o DND

;--------------

exten => *42*,1,DBdel(dnd/${CALLERID(num)}) exten => *42*,n,playback(dndDisabled) exten => *42*,n,Hangup()

Siga-me imediato

;----------------

;ATIVAR o SIGA-ME

;----------------

exten => _*21*XXXX,1,Set(DB(CFIM/${CALLERID(num)})=$

{EXTEN:4})

exten =>_*21*XXXX,n,playback(callForwardEnabled) exten => _*21*XXXX,n,saydigits(${EXTEN:4}) exten => _*21*XXXX,n,Hangup()

;------------------

;CANCELAR o SIGA-ME

;------------------

exten => *22*,1,DBdel(CFIM/${CALLERID(num)}) exten => *22*,n,playback(callForwardDisabled) exten => *22*,n,Hangup()

Siga-me se Ocupado

;----------------

;ATIVAR o SIGA-ME

;----------------

exten => _*31*XXXX,1,Set(DB(CFBS/${CALLERID(num)})=$

{EXTEN:4})

exten => _*31*XXXX,n,playback(callForwardBusyEnabled) exten => _*31*XXXX,n,saydigits(${EXTEN:4}) exten => _*31*XXXX,n,Hangup()

;------------------

;CANCELAR o SIGA-ME

;------------------

exten => *32*,1,DBdel(CFBS/${CALLERID(num)}) exten => *32*,n,playback(callForwardBusyDisabled) exten => *32*,n,Hangup()

Siga-me / DND - Implementando

[macro-stdexten] exten=> s,1,gotoIf(${DB_EXISTS(dnd/${ARG1})}?dnd) exten=> s,n,gotoIf(${DB_EXISTS(CFIM/${ARG1})}?cfim) exten=> s,n(dial),dial(SIP/${ARG1},20) exten=> s,n,goto(${DIALSTATUS}) exten=> s,n,hangup() exten=> s,n(BUSY),gotoIf(${DB_EXISTS(CFBS/$

{ARG1})}?cfbs:end)

exten=> s,n(cfbs),dial(SIP/${DB(CFBS/${ARG1})},20) exten=> s,n,hangup() exten=> s,n(cfim),dial(SIP/${DB(CFIM/${ARG1})},20) exten=> s,n,hangup() exten=> s,n(dnd),playback(doNotDisturb) exten=> s,n(end),hangup()

DAC

DAC 145

Objetivos da Aula

Entender os conceitos do DAC

Conhecer as estratégias de distribuição

Diferenciar agentes de ramais

Configurar uma fila de atendimento

Princípio de funcionamento

As chamadas de entrada são colocadas na fila

Uma estratégia de distribuição de chamadas é acionada

Membros da fila atendem

O usuário ouve uma música enquanto espera

São feitos anúncios para usuários e atendentes

DAC - Filas

São definidas no arquivo queues.conf

Os agentes fazem login na fila para poder receber as chamadas destinadas a mesma

A estratégia de distribuição é definida no parâmetro strategy

São úteis para:

Call Centers receptivos

Serviço de Atendimento ao Consumidor

Estatísticas de atendimento: TMA, TME, TMC

Evita que chamadas sejam perdidas

DAC - Estratégias de distribuição

Ringall - todos os telefones tocam ao mesmo tempo

Leastrecent – enviada para o agente que recebeu a chamada mais antiga

Fewestcalls – para o agente que recebeu menos chamadas

Random – de forma aleatória

Rrmemory – de forma igual para todos

Rrordered – idem ao rrmemory, respeitando no arquivo de

configuração

Linear – na ordem em está no arquivo de configuração, exceto quando os membros são dinâmicos – ordem e login

Wrandon – idem ao random, porém respeitando o penalty

DAC - Configurando

GRAVAÇÃO DE CHAMADAS Para realizar a gravação das chamadas é necessário configurar os parâmetros monitor-format, monitor-type AGENTES

Os agentes são definidos no arquivo agents.conf

A sintaxe é agent => id,pass[,name]

Agentes são um canal de proxy PENALTY

Da prioridade de atendimento a um certo grupo de membros.

No queue.conf : member=TEC[,penalty][,nome];

Exemplo: member=Agent/100,30,Pedrita

Aplicação queue()

Coloca a chamada dentro de uma fila Tem a seguinte sintaxe:

queue(qname[|opt[|url]][|override][|timeout][|AGI])

O parâmetro opt é uma string que recebe uma série de opções Se URL for definida, ela será enviada ao agente que receberá a chamada; override sobreescreve o anúncio default da fila timeout é o timeout da fila; AGI define um script AGI para ser executado quando a ligação for atendida por um agente Quando a aplicação termina é atribuída à $QUEUE um dos seguintes valores: TIMEOUT, FULL, JOINEMPTY, LEAVEEMPTY, JOINUNAVAIL e LEAVEUNAVAIL.

Agentes e Filas

LOGIN DO AGENTE

Aplicação: agentLogin()

Tem a seguinte sintaxe:

agentLogin([agentId][|opt])

ADICIONAR MEMBROS NA FILA

Adiciona uma interface (SIP, IAX2, DAHDI, etc) a uma fila;

Tem a seguinte sintaxe:

addQueueMember([qName]|[interface][|penalty]

REMOVER MEMBRO DA FILA

Remove uma interface (SIP, IAX2, DAHDI, etc) de uma fila

Tem a seguinte sintaxe removeQueueMember([qName]|[interface])

Segurança

Segurança 153

Objetivos da Aula

Conhecer as melhores práticas na configuração de um PABX-IP

Ajustar permissões de arquivos e diretórios

Implementando o Fail2ban

Processo do Asterisk

Padrão

Usuário : root

Grupo de Usuário: root

Melhor prática

Usuário : asterisk

Grupo de Usuário : asterisk

Permissões

Diretórios (755)

Dono:

Grupo:

Ler, escrever e executar (7)

Ler e executar (5)

Outros: Ler e executar (5)

Arquivos (644)

Dono:

Ler, escrever (6)

Grupo:

Ler (4)

Outros:

Ler (4)

Rejeitar autenticação

Padrão

O asterisk aceita chamadas vindas de qualquer peer

Melhor prática

/etc/asterisk/sip.conf

[general] 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 alwaysauthreject=yes

realm=sip.4linux.com.br

domain=sip.4linux.com.br

Fail2Ban

Monitora os logs de diversos serviços

Cria regras de controle sobre serviços

Diversas tentativas de acesso em um determinado serviço são bloqueadas de acordo com as regras criadas

Mantém uma black-list dos IP's que tentaram acessar serviços e não tiveram sucesso

Utiliza o iptables do linux como ferramenta para criar os bloqueios

Recomendações

Criptografia

SIP : siptls

RTP: srtp

Testes de invasão

http://blog.sipvicious.org

CONTATOS

Felipe Pasa

pasa.felipe@gmail.com

Skype: pasa.felipe

Flavio H Somensi

fsomensi@gmail.com

Skype: flaviosomensi