Mudanças entre as edições de "OpenSIPs e Asterisk"

De opensipsbrasil - wiki
Ir para navegação Ir para pesquisar
Linha 116: Linha 116:
  
 
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.
 
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.
 +
 +
 +
===Instalando o RTP Proxy===
 +
<pre>
 +
cd /usr/src/
 +
wget -c http://b2bua.org/chrome/site/rtpproxy-1.2.1.tar.gz
 +
tar -xzvf rtpproxy-1.2.1.tar.gz
 +
cd rtpproxy-1.2.1
 +
./configure
 +
make
 +
make install
 +
groupadd rtpproxy
 +
useradd -d /var/run/rtpproxy -s /bin/true -g rtpproxy rtpproxy
 +
mkdir /var/log/rtpproxy
 +
mkdir /var/run/rtpproxy
 +
chown -R rtpproxy.rtpproxy /var/log/rtpproxy
 +
chown -R rtpproxy.rtpproxy /var/run/rtpproxy
 +
</pre>
 +
 +
====Arquivo de inicialização===
 +
'''/etc/init.d/rtpproxy'''
 +
<pre>
 +
#!/bin/bash
 +
#
 +
# Este script e de autoria de Mike Tesliuk
 +
# qualquer falha no mesmo por favor informe
 +
# atraves do email mike (a) tesliuk.com
 +
#
 +
### BEGIN INIT INFO
 +
# Provides:          rtpproxy
 +
# Required-Start:    $syslog $network $local_fs $time
 +
# Required-Stop:    $syslog $network $local_fs
 +
# Default-Start:    2 3 4 5
 +
# Default-Stop:      0 1 6
 +
# Short-Description: Start the RTPPROXY server
 +
# Description:      Start the RTPPROXY server
 +
### END INIT INFO
 +
 +
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
 +
USELOG=1
 +
USER=rtpproxy
 +
# Altere o ip abaixo para o ip de seu sistema
 +
IPADDR="10.254.254.6"
 +
 +
. /lib/lsb/init-functions
 +
 +
 +
start(){
 +
        echo "Iniciando RTP PROXY "
 +
        if [ -z $(pidof rtpproxy) ]; then
 +
                if [ "${USELOG}" = "1" ]; then
 +
                        echo "Iniciando com LOG"
 +
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER -F -f d DBUG 2&> /var/log/rtpproxy/rtpproxy.log &
 +
                else
 +
                        echo "Iniciando sem LOG"
 +
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER  -F -f d DBUG 2&> /dev/null
 +
                fi
 +
 +
                if [ -n $(pidof rtpproxy) ]; then
 +
                        echo "START OK"
 +
                fi
 +
        else
 +
                echo "Processo ja em execucao"
 +
        fi
 +
}
 +
 +
 +
stop(){
 +
 +
        if [ -z $(pidof rtpproxy) ]; then
 +
                echo "Processo nao encontrado"
 +
        else
 +
                kill -9 $(pidof rtpproxy)
 +
                if [ -n $(pidof rtpproxy) ]; then
 +
                        echo "STOP OK"
 +
                else
 +
                        echo "Falha em realizar stop do servico"
 +
                fi
 +
 +
        fi
 +
}
 +
 +
case $1 in
 +
        start)
 +
                start
 +
        ;;
 +
        stop)
 +
                stop
 +
        ;;
 +
        restart)
 +
                stop
 +
                start
 +
 +
        ;;
 +
        *)
 +
                echo "Utilize: stop | start | restart"
 +
        ;;
 +
esac
 +
 +
</pre>
 +
 +
Vamos dar permissao e colocar na inicialização
 +
chmod +x /etc/init.d/rtpproxy
 +
update-rc.d rtpproxy defaults
 +
/etc/init.d/rtpproxy start
  
  
 
===Criando o arquivo opensips.cfg===
 
===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.
 
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.

Edição das 01h54min de 1 de agosto de 2013

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.


Instalando o RTP Proxy

cd /usr/src/
wget -c http://b2bua.org/chrome/site/rtpproxy-1.2.1.tar.gz
tar -xzvf rtpproxy-1.2.1.tar.gz
cd rtpproxy-1.2.1
./configure
make
make install
groupadd rtpproxy
useradd -d /var/run/rtpproxy -s /bin/true -g rtpproxy rtpproxy
mkdir /var/log/rtpproxy
mkdir /var/run/rtpproxy
chown -R rtpproxy.rtpproxy /var/log/rtpproxy
chown -R rtpproxy.rtpproxy /var/run/rtpproxy

=Arquivo de inicialização

/etc/init.d/rtpproxy

#!/bin/bash
#
# Este script e de autoria de Mike Tesliuk
# qualquer falha no mesmo por favor informe 
# atraves do email mike (a) tesliuk.com
#
### BEGIN INIT INFO
# Provides:          rtpproxy
# Required-Start:    $syslog $network $local_fs $time
# Required-Stop:     $syslog $network $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start the RTPPROXY server
# Description:       Start the RTPPROXY server
### END INIT INFO

PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
USELOG=1
USER=rtpproxy
# Altere o ip abaixo para o ip de seu sistema
IPADDR="10.254.254.6"

. /lib/lsb/init-functions


start(){
        echo "Iniciando RTP PROXY "
        if [ -z $(pidof rtpproxy) ]; then
                if [ "${USELOG}" = "1" ]; then
                        echo "Iniciando com LOG"
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER -F -f d DBUG 2&> /var/log/rtpproxy/rtpproxy.log &
                else
                        echo "Iniciando sem LOG"
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER  -F -f d DBUG 2&> /dev/null
                fi

                if [ -n $(pidof rtpproxy) ]; then
                        echo "START OK"
                fi
        else
                echo "Processo ja em execucao"
        fi
}


stop(){

        if [ -z $(pidof rtpproxy) ]; then
                echo "Processo nao encontrado"
        else
                kill -9 $(pidof rtpproxy)
                if [ -n $(pidof rtpproxy) ]; then
                        echo "STOP OK"
                else
                        echo "Falha em realizar stop do servico"
                fi

        fi
}

case $1 in
        start)
                start
        ;;
        stop)
                stop
        ;;
        restart)
                stop
                start

        ;;
        *)
                echo "Utilize: stop | start | restart"
        ;;
esac

Vamos dar permissao e colocar na inicialização

chmod +x /etc/init.d/rtpproxy 
update-rc.d rtpproxy defaults
/etc/init.d/rtpproxy start


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.