Mudanças entre as edições de "OpenSIPs e Asterisk"
| 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 )
Índice
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.