OpenSIPs e Asterisk

De opensipsbrasil - wiki
Ir para navegação Ir para pesquisar

Este tutorial é estritamente baseado num tutorial similar porém utilizando Kamailio, se quiser verificar o tutorial original acesse http://kb.asipto.com/freeswitch:kamailio-3.1.x-freeswitch-1.0.6d-sbc.

Para esta implementação utilizamos Debian 7.0 amd64 , OpenSIPS 1.9 e FreeSwitch XXXx ( coloco a versão logo mais )

Funcionalidades

Este tutorial tem por objetivo atingir as seguintes funcionalidades.

  • Autenticação de usuário
  • Registro de usuário
  • Localização de usuário (encaminhamento de chamadas)
  • Roteamento de chamadas
  • Mensagens instantânea e presença (PRESENCE)

Através do FreeSwitch estenderemos estas funcionalidades agregando.

  • Correio de voz (Voicemail)
  • Conferencia
  • SBC ( Pode ser utilizado para transcoding, esconder topologia, play de mensagens e tarifação )
  • Outros serviços de media (Anuncios, Ura's e coisas do tipo)

Definições

Para um melhor entendimento da solução vamos expor aqui algumas definições de nosso sistema.

  • Usuários locais terão ramais com 3 digitos (ex: 101, 102, 103)
  • Identidade do correio de voz será o mesmo do ramal
  • Serviços de media (acesso a voicemail e outros) receberão rotas de 4 digitos
  • Opensips e Freeswitch utilizarão o mesmo servidor (Neste caso IP: 10.254.254.6)
  • Os serviços rodarão nas portas 5060 (opensips) , 5090 (Freeswitch (perfil interno)) e 5092 (Freeswitch (Perfil externo))

Funcionamento

A autenticação do usuário será realizada pelo OpenSIPs, quando uma chamada é autenticada então ela serguirá:

  • Se o usuário de destino não está online a chamada será enviada para o FreeSwitch para função de correio de voz
  • Se o usuário está online a chamada será encaminhada para o Freeswitch, dest forma é possivel acionar funcionalidades como anuncios, definição de tempo de chamada, forçar codecs e outras funcionalidades.
  • FreeSwitch envia a chamada novamente para o OpenSIPs que verificará no location e entregará a chamada para o usuário.
  • Se a chamada não for atendida o Freeswitch enviará a chamada para o correio de voz.

OpenSIPs

Vamos iniciar o processo de instalação com o OpenSIPs, siga os procedimentos abaixo para evitar qualquer dificuldade.

Dependencias

Execute o comando abaixo para instalar todas as dependencias necessárias

apt-get install gcc make libncurses5-dev libnewt-dev libxml2-dev unixodbc \ 
unixodbc-dev libmysqlclient15-dev libxmlrpc-c3-dev libexpat1-dev zlib1g-dev \ 
m4 bison flex libpcre3-dev mysql-server vim apache2-mpm-prefork libapache2-mod-php5 \
 php5-mysql php5-xmlrpc php-pear  ngrep


Durante a instalação o sistema irá lhe perguntar a senha de root para o servidor MySQL é importante que você se lembre da mesma posteriormente pois utilizaremos a mesma.

Compilando o OpenSIPs

Para manter um padrão onde os dados estao vamos utilizar o diretório /usr/src/ para o download de código fonte.

cd /usr/src/
wget -c http://opensips.org/pub/opensips/1.9.1/src/opensips-1.9.1_src.tar.gz
tar -xzvf opensips-1.9.1_src.tar.gz
cd opensips-1.9.1-tls/
make menuconfig

Neste ponto o sistema irá abrir uma tela com algumas opções para selecionar, Acesse a primeira opção do menu, no submenu acesse a segunda opção ( Configure excluded modules ), selecione os módulos db_mysql , dialplan , mi_xmlrpc , presence e presence_xml

Agora volte ao submenu, e selecione a opção Save Changes, volte para o menu principal e selecione Compile and Install OpenSips , deixe que o sistema execute suas funções.


Ao finalizar a compilação você retornará ao menu, va na opção Exit and Save all changes

Preparando a Configuração

Antes de darmos inicio ao arquivo de configuração, vamos ajustar algumas questões, o opensips instala os arquivos (se voce nao alterar o parametro) em /usr, consequentemente as configurações ficam em /usr/etc , eu por padrão faço um link para o diretório /etc, assim acesso as configurações em /etc/opensips

ln -s /usr/etc/opensips /etc/

No caso do debian o script de inicialização utiliza um arquivo extra de configuração

cp packaging/debian/opensips.default /etc/default/opensips

Para o script de inicialização execute o comando abaixo

cp packaging/debian/opensips.init /etc/init.d/opensips
chmod +x /etc/init.d/opensips
update-rc.d opensips defaults

Edite o arquivo /etc/default/opensips , a altere o parametro RUN_OPENSIPS para yes

Você pode notar que no arquivo é mensionado o usuário de execução do opensips como opensips, então vamos ter de criar este usuário ( e grupo )

groupadd opensips
mkdir /var/run/opensips
useradd -d /var/run/opensips/ -s /bin/false -g opensips opensips
chown -R opensips.opensips /var/run/opensips


Configurando o opensipsctl

O opensipsctl (e opensipsdbctl) utilizam o arquivo de configuração /etc/opensips/opensipsctlrc, abaixo segue o conteúdo do arquivo. (Sugiro que você faça um backup dos arquivos originais para ter uma copia, existem parametros que você pode estudar depois).

DBENGINE=MYSQL
DBHOST=localhost
DBNAME=opensips
DBRWUSER=opensips
DBRWPW="opensipsrw"

DBROOTUSER="root"
INSTALL_EXTRA_TABLES=ask
ALIASES_TYPE="DB"
MI_CONNECTOR=FIFO:/tmp/opensips_fifo
# VERIFY_ACL=1
# ACL_GROUPS="local ld int voicemail free-pstn"
# VERBOSE=1
# STORE_PLAINTEXT_PW=0
# NOHLPRINT=1
PID_FILE=/var/run/opensips/opensips.pid

Criando o banco de dados

Agora que temos nosso arquivo configurado vamos fazer a criação do banco de dados, execute o comando abaixo.

opensipsdbctl create opensips

O sistema irá lhe perguntar algumas coisas, responda Y (sim) para todas para que ele instale todas as tabelas, não usaremos todas elas, mas desta forma você fica com praticamente tudo criado para o caso de uma expansão dos recursos.


Criando o arquivo opensips.cfg

O arquivo opensips.cfg é a onde a coisa toda acontece para o opensips, claro que ele dependerá de informações que estarão no banco de dados, mas é onde criamos todas as nossas rotas e validações.