quarta-feira, 25 de janeiro de 2017

Asterisk - Configuração de Voip para uso de Smartphones, numa rede interna - Lan

Instalação e configuração do Asterisk, dentro de um container Docker.

O Asterisk é um poderoso software de PABX, open source, desenvolvido por Mark Spencer, fundador da Digium inc. Empresa que desenvolve o Asterisk sob a licença GPL e vende as placas (periféricos) para conectar o Asterisk a malha de telefonia convencional (FX0, FXS, E1/T1, ISDN).

Este tutorial, visa apenas o uso básico do Asterisk, vou apenas implementá-lo em minha rede WiFi, para o uso da comunicação de dispositivos móveis (smatphones), numa rede já existente. Não possuo nenhuma placa específica (Digion, Digivoice, Khomp), então o uso, limita-se apenas a rede interna.

Preferi instalá-lo, dentro de um container docker, uma maneira ágil para implantação, num ambiente de testes e aprendizados.

Para instalar o docker:

#apt-get update && apt-get upgrade

#apt-get install curl

#curl -sSL http://get.docker.com | sh

Para iniciar o Docker:

#/etc/init.d/docker start

Para ver se o docker está ativo:

#netstat -rn | grep docker

Agora vamos subir um container docker com algum SO (estou usando o debian:7.10)

#docker run -it -h Asterisk -p 5060:5060/udp -m 1024M --name server-asterisk \
-v /opt/asterisk:/etc/asterisk debian:7.10 /bin/bash

Este comando vai baixar a imagem do debian7.10, logo depois você estará dentro do container Asterisk, ai vamos ter que instalar todos os pacotes necessários.

#apt-get update && apt-get upgrade

Primeiramente mudar a senha de admin:

#passwd
#senha nova
#senha nova

Dar o comando date:
#date

Temos que arrumar a data e horário:
#rm /etc/localtime

#ln -s /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime

#date        #(agora deve estar com horário certo)

Necessário instalar um editor de texto, vim, nano ou outro qualquer:

#apt-get install nano -y

Necessário instalar pacotes de uso no dia a dia:

#apt-get install -y libnet-ifconfig-wrapper-perl dnsutils netstat-nat

Instalação do Asterisk:

#apt-get install asterisk asterisk-config asterisk-modules

Se preferir, você pode instalar através do código fonte e compilá-lo:

#cd /usr/src

#wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-11-current.tar.gz

#tar xzf  asterisk-11-current.tar.gz

#cd asterisk*

# ./configure && make menuselect && make && make install && make
config && make install-logrotate

#make samples

Antes de compilar o Asterisk, é preciso instalar suas dependências:

# apt-get install linux-headers-$(uname -r) build-essential libxml2-dev
libncurses5-dev libsqlite3-dev libssl-dev libsrtp0-dev unixodbc-dev subversion
libmysqlclient-dev

Depois de instalado, reinicie o serviço:

#/etc/init.d/asterisk restart

De um comando netstat -nudl para ver se a porta 5060 udp está ativa:

#netstat -nudl

Tudo certo, com o Asterisk instalado, precisamos configurá-lo:

#cd /etc/asterisk

#ls

Aqui estão os principais arquivos de configuração do Asterisk.












Vamos editar dois arquivos importantes, o sip.conf e o extensions.conf.

O SIP, é um protocolo de comunicação voip, ele por padão utiliza a porta udp 5060 para criar a chamada e depois de estabelecida a conexão, ele envia os pacotes através de portas udp altas (10000 a 20000).

O arquivo extensions.conf, é onde está toda a programação lógica do asterisk, o dial plan, o coração do asterisk.

Primeiramente faremos uma cópia desses dois arquivos:

#cp sip.conf /etc/asterisk/sip.conf_orig

#cp extensions.conf /etc/asterisk/extensions.conf_orig

Depois:

#> sip.conf

#>extensions.conf

Agora vamos editar os dois arquivos:

#nano sip.conf

Conteúdo:

[general]
transport=udp
dindaddr=192.168.1.10  ;(ip do servidor)
disallow=all
allow=ulaw
allow=gsm
nat=yes
localnet=192.168.1.0/24   ;(rede local)
language=pt_br

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

[template](!)
port=5060
host=dynamic
dtmfmode=rfc2833
pickupgroup=1
callgroup=1
musicclass=musica

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

[001](template)
callerid=nome de usuário
secret=123456   ;(senha de acesso)
host=192.168.1.2
type=friend
context=ramais   ;(contexto é importante usar o mesmo nome no extensions.conf)
disallow=all
allow=ulaw

[002](template)
callerid=nome de usuário
secret=123456
host=192.168.1.3
type=friend
context=ramais
disallow=all
allow=ulaw

[003](template)
callerid=nome de usuário
secret=123456
host=192.168.1.11
type=friend
context=ramais
disallow=all
allow=ulaw

;se tiver mais dispositivos, continue com a configuração

Agora o arquivo extensions.conf:

#nano extensions.conf:

Conteúdo:

[General]
AUTOFALLTHROUGH = NO

[Globals]
include => features.conf

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

;
;Configuração bem simples e básica.

Para acessar o console do asterisk:

#rasterisk -cvvvv
Agora de os comandos:

>sip reload

>dialplan reload

>dialplan show ramais

>sip show peers












Temos que configurar os smartfones para se comunicarem através da rede Wifi.

Instale o programa Zoiper (uso android), é so buscar na Play Store “zoiper”

Depois de instalado acesse o menu “config” :

-Accounts - +add account

Account name = 003 (pelas configurações pode ser de 001 a 009)

Host=192.168.1.10  (Ip do Servidor onde está instalado o asterisk)

Username=nome de usuário

Password=123456

Outbond proxy=(Ip do Servidor)


















Pronto, com essas configurações, já deve estar funcionando.

Na tela aparecerá 003 is ready.


















Agora teremos que configurar uma máquina Windows para testar:

Instale o programa X-Lite, procure pela versão 3.0

Estou usando este: goo.gl/EtytFv

Para configurar o x-lite:

Sip Account Settings>>Add

Display Name=seu nome

Username=001 (pela configuração é de 001 a 009)

Password=senha

Authorization user name=001

Domain=ip do servidor












Pronto, salvar e depois discar para o celular, no meu caso é 003. O celular vai tocar.




















No pronpt (CLI) no Servidor, aparecem todos os tramites executados.













Depois temos que salvar todas as configurações feitas até então no container Asterisk:

#docker ps

#docker commit server-asterisk debian7.10-asterisk

ou

 #docker commit (container id) debian7.10-asterisk (nome aleatório)

Temos que criar um script para inicializar o container Asterisk:

#cd /root/

#touch container_asterisk.sh

#chmod +x container_asterisk.sh

#nano container_asterisk.sh

Conteúdo:

#!/bin/sh

docker rm server-asterisk

docker run -d -it -h Asterisk -p 5060:5060/udp -m 1024M --name server-asterisk -v /opt/asterisk:/etc/asterisk debian7.10-asterisk /bin/bash

docker exec server-asterisk /etc/init.d/asterisk start

echo “Container Asterisk ativado”

Depois é só colocar no /etc/rc.local, caso queira que o container suba junto com o sistema na inicialização.

Basicamente é isso, uma configuração simples para o Asterisk. A grande vantagem de se usar o Asterisk é o custo da aplicação, esse exemplo, mostra como é possível usá-lo dentro de uma rede Wifi interna (lan), com equipamentos móveis, a custo de ligação, praticamente zero (custo da estrutura da rede), por exemplo, em muitos lugares, toda a comunicação interna é feita através do aplicativo WatsApp, um ônus desnecessário.

O Asterisk, como toda aplicação Voip, existente no mercado, é totalmente dependente da rede de dados (baseada no TCP/IP), se a rede não estiver bem estruturada, o voip não funcionará direito. Todo áudio é encapsulado em pacotes Ips que trafegam pela rede de dados. A rede deve priorizar o tráfego de pacotes voip (SIP, RPC, IAX), através de QoS, o ideal seria uma vlan exclusiva para o serviço de voip, no caso de rede wireless, usar bons Acess Points (padão 802.11ac).

Fazendo uma analogia, o áudio resultante de uma conexão voip, é proporcional a qualidade de toda rede estruturada (camada física e camada de enlace), é como um equipamento de áudio HiEnd, começa pelo cabeamento, qualidade dos componentes empregados, construção primorosa, bem projetado, resulta numa excelente qualidade sonora.

Outro ponto importante, é a segurança do Servidor, o protocolo SIP, é bem manjado, com certeza, sua porta 5060/udp será bastante explorada. Neste caso o protocolo IAX,IAX2 leva vantagem, oferece mais segurança, pois utiliza apenas a porta 4569/udp.

Regras de firewall para o Servidor Asterisk:

#iptables -I INPUT -i eth1 -p udp -m udp --dport 5060 -j DROP

-i eth1 (interface wan)
    
 #iptables -A INPUT -i eth0 -p udp -m udp --dport 5060 ! -s 192.168.1.0/24 -j DROP

- eth0 (interface lan)
 
Todo container docker habilitado, inclui regras de iptables no sistemas. O protocolo Sip, usa o RTP para enviar os pacotes com áudio encapsulados, e usa um range de portas altas udp (de 10000 a 20000), caso essas portas não funcionem teremos que adicionar essa regra no firewall, na chain docker, criada por ele no sistema:

iptables -A DOCKER -d 172.17.0.0/29 ! -i docker0 -o docker0 -p udp -m udp --dport 10000:20000 -j ACCEPT





Nenhum comentário:

Postar um comentário