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