RSS

segunda-feira, 9 de agosto de 2010

Asterisk - Instalação e Configuração.

O Asterisk é um software que disponibiliza uma central PBX digital, ou seja, uma central telefônica totalmente digital sobre IP. Além de recursos como URA, suporte a Call Center, salas de conferência, chamadas em espera e caixas postais e locais ou por e-mail, um servidor com o Asterisk é uma central telefônica digital completa. Integrando a telefonia convencional com a telefonia IP o Asterisk é o PBX de menor custo no mercado. O Asterisk pronto e funcional também pode ser conectado a rede VoIP com provedoresque terminam sistemas de telefonia no mundo inteiro.

 Instalação e Configuração do Asterisk PBX

- Baixe os pacotes asterisk, libpri e zaptel para o diretório /usr/src. Caso os pacotes esteja compactado (.tar.gz), descompacte-os com o comando

Comece pela Libpri:

# tar -zxvf libpri-1.2.2.tar.gz
# cd libpri-1.2.2
# make
# make install

Zaptel

# tar -zxvf zaptel-1.2.5.tar.gz
# cd zaptel-1.2.5
# make
# make install

Add-ons

# tar -zxvf asterisk-addons-1.2.2.tar.gz
# cd asterisk-addons-1.2.2
# make && make install

Sounds

# tar -zxvf asterisk-sounds-1.2.1.tar.gz
# cd asterisk-sounds-1.2.1
# make install

E finalmente, o ASTERISK.

# tar -zxvf asterisk-1.2.7.1.tar.gz
# cd asterisk-1.2.7.1
# make clean
# make
# make install
# make progdocs
# make samples

Configurações - extensions.conf

O arquivo extensions.conf é o responsável por criar as extensões ou ramais, nele criamos também caminhos genéricos como XXX para cada X um dígito, onde podemos usar a imaginação para solucionar as questões que precisamos.

[grupo1]
include => demo
exten => 100,1,Dial(SIP/numero1,25)
; SIP-É o tipo da conta / numero - O nome do usuário / 25-O tempo que vai chamar em segundos.
exten => 100,2,Hangup
exten => 200,1,Dial(SIP/ numero2,25)
exten => 200,2,Hangup
exten => 300,1,Dial(IAX2/ numero3,25)
exten => 300,2,Hangup

Configurações – sip.conf

O arquivo sip.conf armazena informações sobre contas de usuários de protocolo SIP as informações são simples como nome de usuário, bina, senha e qual grupo participam.

No exemplo abaixo estamos criando os usuários que receberam um número no extensions.conf.

[general] ; configurações básicas do protocolo
context=default ; Context padrão para recebimento de chamadas
bindport=5060 ; Porta UDP (A padrão é 5060)
bindaddr=0.0.0.0 ; Endereço IP para escutar (0.0.0.0 Escuta todos)
srvlookup=yes

[numero1]
type=friend ; tipo friend=faz e recebe chamadas, user=faz chamadas, peer=recebe chamadas.
callerid = \"numero1\" <100>
username=numero1 ;Nome do usuário para login
secret=123 ;Senha
host= dynamic ; se não tem ip fixo
nat=yes ; se está debaixo de nat
canreinvite=no ; no para não encaminhar chamadas
context=grupo1

[numero2]
type=friend
callerid = \"numero2\" <200>
username=numero2
secret=123
host= dynamic
nat=yes
canreinvite=no
context=grupo1

Configurações – iax.conf

O arquivo iax.conf armazena informações sobre contas de usuários de protocolo IAX2 as informações são simples como o arquivo de usuários SIP

No exemplo abaixo estamos criando os usuários que receberam um número no extensions.conf.

[general] ; configurações básicas do protocolo
bandwidth=low
jitterbuffer=no
forcejitterbuffer=no
tos=lowdelay

[numero3]
type=friend
context=grupo1
username=numero3
secret=123
qualify=yes ; verifica se o host está respondendo (está a menos de 20ms)


Para adicionar o serviço do Asterisk digite

# cd asterisk-1.2.7.1
# make config
# chkconfig –add asterisk

Para acessar o console, com o Asterisk rodando execute:

# asterisk -r

Utilize os comandos abaixo para recarregar as configurações novas:

asterisk*CLI> sip reload
asterisk*CLI> iax2 reload
asterisk*CLI> extensions reload
asterisk*CLI> quit

- Pronto. Agora é só configurar os arquivos de configuração do asterisk e montar o seu servidor VOIP. Para isso, acesse os sites:
www.asterisk.org
www.digium.com .

O Asterisk já está rodando com os ramais configurados, agora o próximo passo é configurar os SoftPhones.

quinta-feira, 5 de agosto de 2010

OpenVPN - Redes Privadas Virtuais com Certificado.

Versão atual do artigo: openvpn-2.1.1.tar.gz

Versão atual do artigo: lzo-2.03.tar.gz

- Descompactar e Instalar:
tar zxvf openvpn-2.1.1.tar.gz
cd openvpn-2.1.1
./configure
make
make install

tar zxvf lzo-2.03.tar.gz
cd lzo-2.03
./configure
make
make install

- Configurando o openssl. Dentro dele procure por [ CA_defaults ]

vi /etc/ssl/openssl.conf

[ CA_default ]
dir                         = /etc/openvpn
certs                      = $dir/certs
crl_dir                   = $dir/crl
database               = $dir/index.txt
new_certs_dir       = $dir/newcerts
certificate             = $dir/certs/ca.crt
serial                    = $dir/serial
crlnumber            = $dir/crlnumber
crl                         = $dir/crl.pem
private_key          = $dir/certs/ca.key
RANDFILE          = $dir/private/.rand

Saia do arquivo e salve com o comando :wq.

Agora dentro do diretório /etc/openvpn, crie o diretório "certs" e ccd com o comando:
mkdir certs
mkdir ccd
mkdir newcerts

E digite:
touch index.txt
echo 01 > serial

Criar o certificado e a chave. No diretório /etc/openvpn/certs, digite:
openssl req -nodes -new -x509 -keyout ca.key -out ca.crt -days 3650
(Complete com os dados do servidor/empresa)
openssl dhparam -out dh.pem 1024

 - Gerar o certificado do servidor:
openssl req -nodes -new -keyout servidor.key -out servidor.csr
(Complete com os dados do servidor/empresa)

 - Assinar o certificado:
openssl ca -out servidor.crt -in servidor.csr
(Complete com os dados do servidor/empresa)


 - Criar o arquivo de configuração da VPN.

vi /etc/openvpn/servidor.conf

# Geral
port 1194
proto udp
dev tun0
ca /etc/openvpn/certs/ca.crt
cert /etc/openvpn/certs/servidor.crt
key /etc/openvpn/certs/servidor.key
dh /etc/openvpn/certs/dh1024.pem
keepalive 10 30
comp-lzo
max-clients 100
user nobody
group nobody
#persist-key
#persist-tun
verb 3
mute 10

# DHCP
server 10.10.0.0 255.255.255.0
#push "dhcp-option DNS 10.10.0.1"
#push "route-gateway 10.10.0.5"
push "dhcp-option DNS 10.1.1.54"

#route-up "route add 10.0.0.0 mask 255.0.0.0 10.10.0.5"
#route 10.0.0.0 255.0.0.0 10.10.0.5

push "route 10.1.1.0 255.255.255.0"
#Rede/Empresa2
route 10.2.1.0 255.255.255.0
#Rede/Empresa3
route 10.3.2.0 255.255.255.0
#Rede/Empresa4
route 10.4.1.0 255.255.255.0

# Cliente
client-to-client
client-config-dir /etc/openvpn/ccd/
ccd-exclusive
ifconfig-pool-persist /etc/openvpn/ipp.txt

# Log
status /var/log/openvpn-status.log
log /var/log/openvpn.log
log-append /var/log/openvpn-append.log

- Executar a VPN
 /usr/local/sbin/openvpn --config /etc/openvpn/servidor.conf --daemon
  

 Configuração do Cliente, WINDOWS:

openvpn.ovpn

client
dev tun
proto udp
remote IP 1194
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
ca ca.crt
cert certificado.crt
key certificado.key
comp-lzo
verb 3
mute 20

quarta-feira, 4 de agosto de 2010

MYSQL - Diferença entre MyISAM e InnoDB

InnoDB e MyISAM -  Qual tipo de tabela utilizar?

InnoDB funciona mais rápido que MyISAM quando há modificações constantes nos dados, uma vez que este tipo de armazenagem usa a proteção por registros (row locking) e não a proteção por tabelas (table locking) como o faz o MyISAM. Contudo, em várias situações, InnoDB é mais lento que MyISAM, devido ao fato de que InnoDB funciona com transações. A armazenagem padrão do MySQL é MyISAM

Outro ponto interessante são as restrições de chaves estrangeiras (foreign key constraints) e transações. Estes recursos estão disponíveis apenas no InnoDB.

MyISAM é apropriado para tabelas cujos dados não mudam com frequencia. Um exemplo disso é uma tabela de cidades e estados. Como geralmente este tipo de tabela é usado apenas como consultas, não há a necessidade do uso de InnoDB.

MyIsam tem a vantagem de ser arquivos simples se comparado com o innodb, mesmo na opção para criar dentro do contexto, o arquivo fica instavel em volumes grandes, o mito sobre configurar o mysql em innodb está errado, VOCÊ SEMPRE DEVE CONFIGURAR O MYSQL, perfomace de cache é sempre importante.

Considerar também o uso de MYSQL 3, que é super mais leve, mas em contra-partida não tem suporte a subselect, nunca deixe de usar subselect, inner join, e counters. Repitir dados também não é um erro, exemplo melhor: BIGTABLE do google, quando você tem counters, vc tem counters mesmo, não queira varrer a tabela de pedidos toda hora para ver quantos produtos sairam e entraram, você pode fazer isso em uma rotina de backup, ou cada 10 min para ter certeza que está ok, mas não para todo pedido de produto corrente. (isso vale para qualquer modo)

O Banco de dados também tem um limite se você deseja fazer um site estilo americanas, ou mesmo o novo google, que dá quantos XX de item tipo foi encontrado, o melhor a se fazer é usar um sistema de indexação pronto para isso, exemplos clássicos são Lucene (Usado no Hibernate e na maioria dos EJB), Solr, HBase (esse ultimo é mais usado com Hadoop, no esquema MAP/REDUCE), como assim, não usar o banco?  é claro que você vai ter um banco de dados, mas a cada X minutos descarrega para o indice corrente, eles são feitos para criar facet search

Fora ainda CouchDB e outros bancos não relacionais, tudo possivel, se usar junto de um outro banco master. Também não esqueçamos do MYSQL-PROXY, sendo possivel mapear query dinamicamente para o nó X, ex: tenho um indice de InnoDB especializado para Geo-Search, um outro para Full-Text, um outro para Cruzamentos de categorias com outra regra de négocio importante, ex: volume, podendo ainda ser o mesmo servidor só que em diferentes portas, assim você escala as pesquisas, sem necessariamente precisar de mais hardware.

Gosto de pensar que o mysql é uma ferramente poderosa, que chega ao seu limite, quando desejamos fazer mais que isso, ex: ter job`s, usar algum middleware direto ao banco, ou até mesmo ter algum suporte mais interessante para usar sobre fibra ótica e storage, pq, bem funciona, ele vai funcionar, só que vai ser sempre na base da pesquisa, já outros sistemas são feitos para isso, e quando precisamos disso, quando falamos em BILHÕES de registro, não é uma micro-empresa, mas uma média para cima que costuma precisar, e a maioria dos sites também não, na verdade dificilmente você vai precisar fazer metade dessas técnicas, e NEM DEVE, pois isso é útil quando se tem volume, antes disso, fique no básico, o legal é saber que existe.

MyISAM

- Foi implementado a partir do código da tabela ISAM., introduzindo diversas melhorias como:
- Os arquivos de tabela são transportáveis entre diferentes sistemas operacionais;
- Campos BLOB  e TEXT  podem ser indexados;
- Os Arquivos índices e de dados podem ser armazenados em dispositivos diferentes (aumento de performance);
- Algoritmos de distribuição de dados e gerenciamento de índices melhorados;

InnoDB

- Rodam sob um engine, desenvolvido pelo Innobase( www.innodb.com), que acrescenta ao MySQL o suporte a TRANSAÇÕES e a CONSTRAINTS de chave estrangeira.
- Para obter o máximo de performance com tabelas InnoDB é necessário configurar o arquivo my.conf(ou my.ini no Windows) de acordo com as características de hardware do servidor onde o MySQL está rodando. Os Detalhes dessa configuração podem ser obtidos no manual do InnoDB.

Instalação do MYSQL utilizando MyISAM e InnoDB

1)- Baixar o fonte (Mysql 5.1.4 - Versão atual do artigo) em:
http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.49.tar.gz/from/http://gd.tuwien.ac.at/db/mysql/

2)- Extraindo:
tar zxvf mysql-5.1.49.tar.gz
cd  mysql-5.1.49

3)-Compilando e Instalando:
./configure --with-plugins=innobase,myisam
make
make install

4)- Permissão
GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY 'senha';