Escolar Documentos
Profissional Documentos
Cultura Documentos
Instalando o OpenVPN e Criando Uma VPN Básica
Instalando o OpenVPN e Criando Uma VPN Básica
O primeiro passo instalar o OpenVPN, tanto no cliente quanto no servidor. Nas distribuies
derivadas do Debian voc pode instal-lo rapidamente via apt-get:
#
wget
http://apt.sw.be/redhat/el5/en/i386/RPMS.dag/rpmforge-release-0.3.61.el5.rf.i386.rpm
-c
# urpmi openvpn
Se voc estiver utilizando uma distribuio que no inclua o pacote nos repositrios, ou se a verso
disponvel for muito antiga, voc pode tambm instalar a partir do pacote com o cdigo fonte,
disponvel no: http://openvpn.net/index.php/downloads.html
Depois de instalar o pacote, o prximo passo carregar o mdulo "tun" do Kernel, que utilizado
pelo OpenVPN para criar interfaces virtuais. Cada VPN criada se comporta como se fosse uma nova
interface de rede, conectada rede de destino. Imagine que a VPN se comporta como se existisse
um cabo de rede gigante ligando esta interface virtual rede do outro lado do tnel.
# modprobe tun
Adicione a linha "tun" no final do arquivo "/etc/modules" para que o mdulo passe a ser carregado
automaticamente durante o boot:
Estes trs passos, ou seja, a instalao do OpenVPN, o carregamento do mdulo e a adio da linha
no final do arquivo devem ser executados tanto no servidor quanto nos clientes.
Depois de concluda a instalao, voc pode criar um tnel simples, no encriptado, usando os
comandos abaixo. Este tnel no pode ser considerado uma "VPN" j que no seguro, mas serve
como um "hello word" dentro da configurao do OpenVPN.
Presumindo que as duas mquinas estejam ligadas em rede e que no exista nenhum firewall no
caminho, use o comando abaixo no cliente, especificando o endereo do servidor:
No exemplo, o servidor recebe o endereo "10.0.0.2". Voc pode testar a conectividade usando o
ping ou qualquer outra ferramenta:
Como comentei, o OpenVPN possui tambm uma verso Windows, que est disponvel
nohttp://openvpn.se.
Esta verso inclui um instalador grfico e funciona em todas as verses do Windows a partir do
Windows 2000. Ela inclui tambm o driver tun/tap, que instalado automaticamente, voc precisa
apenas prestar ateno nas mensagens de instalao. Em um certo ponto, ser exibida uma
mensagem avisando que o driver TAP/Win32 no passou pelo processo de certificao de
compatibilidade com o Windows. Responda "Continuar assim mesmo" para efetuar a instalao, do
contrrio o OpenVPN no funcionar.
O processo de certificao dos drivers para o Windows um processo caro e demorado, onde os
fabricantes de componentes submetem os drivers de dispositivo Microsoft para que eles sejam
certificados. Este um processo que no est ao alcance de projetos independentes, como o
OpenVPN, da a exibio da mensagem. De qualquer forma, isso no significa que o software seja
instvel ou inseguro, muito pelo contrrio. Se a certificao da Microsoft fosse um indicador de
qualidade, softwares como o IIS e o IE no teriam tantas falhas e brechas de segurana.
O primeiro passo gerar o arquivo com a chave, no servidor. O arquivo deve ser gerado dentro do
diretrio "/etc/openvpn" (o diretrio padro de configurao), de forma que acessamos o diretrio
antes de executar o comando que gera a chave:
# cd /etc/openvpn
# openvpn --genkey --secret static.key
Isso gerar o arquivo "static.key", que contm a chave de encriptao que ser usada para criar a
conexo. Ele um arquivo de texto simples, que contm uma chave de 2048 bits, como em:
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1----0600d007988a59c6f7895884d336d445
2679fd3d2c0b9e0b777b4da92ab97043
... (mais 13 linhas)
e871ed9077185a2a6904e67cd0869e15
-----END OpenVPN Static key V1----Este arquivo deve ser copiado para a pasta "/etc/openvpn" do cliente, usando (por exemplo) o SFTP.
Voc pode usar tambm um pendrive, ou outra mdia de uso local, mas no recomendvel envilo por meios no seguros (e-mail por exemplo), j que qualquer um que tenha acesso ao arquivo
poder se conectar sua VPN ou desencriptar todo o trfego transmitido atravs dela.
Para acessar o servidor (a partir do cliente) via SFTP, use o comando "sftp ip" para se conectar e,
em seguida, use os comandos "cd /etc/openvpn" e "get static.key" para fazer a cpia, como em:
#cd /etc/openvpn
# sftp root@192.168.1.101
Password:
sftp> cd /etc/openvpn
sftp> get static.key
Fetching /etc/openvpn/static.key to static.key
sftp> quit
Com o arquivo contendo a chave presente nas duas mquinas, falta criar os arquivos de configurao
que sero usados pelo OpenVPN. Neste exemplo, criarei o arquivo "/etc/openvpn/server.conf" no
servidor e o arquivo "/etc/openvpn/client.conf" no cliente. Os nomes podem ser diferentes, mas os
arquivos devem ser criados dentro da pasta "/etc/openvpn" e devem terminar com a extenso
".conf"
O arquivo "/etc/openvpn/server.conf", no servidor, fica com o seguinte contedo:
dev tun
ifconfig 10.0.0.1 10.0.0.2
secret static.key
A linha "ifconfig 10.0.0.1 10.0.0.2" inclui os endereos que sero usados pelas interfaces virtuais da
VPN, no servidor e no cliente. No exemplo, o servidor utilizar o endereo "10.0.0.1" e o cliente o
endereo "10.0.0.2". Voc pode utilizar outros endereos se preferir. O importante que os
endereos utilizados na VPN devem ser sempre diferentes dos endereos usados na rede local.
A linha "secret static.key" especifica o arquivo com a chave de encriptao, que criamos no passo
anterior. No esquea de alterar a linha caso o nome do arquivo seja diferente.
Em seguida, vem o arquivo "/etc/openvpn/client.conf", que deve ser criado no cliente:
remote 192.168.1.101
dev tun
ifconfig 10.0.0.2 10.0.0.1
secret static.key
# /etc/init.d/openvpn restart
Ao ser iniciado, o servio procura por arquivos ".conf" dentro do diretrio "/etc/openvpn" e inicia as
VPNs configuradas automaticamente (desde que o servio esteja configurado para subir durante o
boot, o que feito por padro na maioria das distribuies). Isso no apenas simplifica a
configurao, mas faz com que a VPN passe a ser automaticamente restabelecida a cada boot. Para
desativ-la, basta parar o servio:
# /etc/init.d/openvpn stop
Voc pode, tambm, ativar o OpenVPN manualmente, usando (como root) o comando:
Depois de estabelecida a VPN, o cliente passar a ter uma nova interface de rede, a "tun0", com o
endereo IP "10.0.0.2", que funciona como um link ponto-a-ponto com a interface "tun0" do
servidor, que recebe o endereo "10.0.0.1":
Teste a conexo usando o ping, ou acessando algum servio disponvel no servidor, como em:
# ssh 10.0.0.1
Depois do teste inicial, voc pode fazer um teste realizando a conexo via Internet (voc pode usar
uma conexo discada ou outra conexo temporria no cliente para fazer o teste). Para isso, voc
vai precisar apenas alterar a configurao no cliente, adicionando o endereo de internet do servidor,
como em:
remote guiadohardware.no-ip.org
dev tun
ifconfig 10.0.0.2 10.0.0.1
secret static.key
No se esquea de reiniciar o OpenVPN para que a alterao entre em vigor:
# /etc/init.d/openvpn restart
proto
port 22222
udp
possvel, tambm, usar uma porta TCP. Nesse caso, usamos a opo "proto tcp-server" na
configurao do servidor (/etc/openvpn/server.conf) e a opo "proto tcp-client" na configurao do
cliente (/etc/openvpn/client.conf), como em:
proto tcp-server
port 22222
e:
proto tcp-client
port 22222
O grande problema em utilizar o TCP no OpenVPN que o desempenho da VPN ser
perceptivelmente pior do que se utilizada uma porta UDP.
Isso ocorre porque no UDP os pacotes so transmitidos diretamente, sem nenhum overhead, o que
garante o melhor desempenho. No UDP no existe correo de erros nem retransmisso de pacotes
perdidos, mas isso no um problema no caso do OpenVPN, pois ele o responsvel apenas pela
criao do link de dados. Sobre ele, temos o protocolo TCP/IP e as diferentes camadas do sistema
operacional, que se encarregam dessa tarefa.
Ao utilizar uma porta TCP, o prprio OpenVPN obrigado a fazer a checagem e a retransmisso de
pacotes, respeitando o modo de funcionamento do protocolo. Isso aumenta bastante a latncia da
conexo e faz com que cada vez que um pacote perdido, o OpenVPN precise parar a transmisso
de todos os pacotes subsequentes at que a retransmisso seja feita. Quanto maior for o volume
de dados que trafegam pela VPN, mais desvantajoso o uso do TCP no caso do OpenVPN, de forma
que mais recomendvel utilizar uma porta UDP sempre que possvel.
# /etc/init.d/openvpn restart
Vamos ento a um conjunto de parmetros de configurao que permitem estabilizar a VPN, fazendo
com que o OpenVPN passe a monitorar a conexo e restabelec-la automaticamente sempre que
necessrio.
O primeiro, e mais importante, o parmetro "keepalive", que faz com que o servidor e o cliente
monitorem a conexo, enviando pings peridicos um para o outro, e reiniciem a VPN
automaticamente caso no recebam resposta dentro de um perodo determinado. Esta opo
especialmente importante em VPNs usadas atravs de links ADSL ou qualquer outro tipo de conexo
que no seja completamente estvel. Um exemplo de uso seria:
keepalive 10 120
O primeiro nmero especifica o intervalo dos pings e o segundo o timeout, depois do qual a VPN
reiniciada. Nesse caso, o ping enviado a cada 10 segundos sem atividade e a VPN reiniciada
depois de 120 segundos sem respostas. Caso o link seja interrompido, o cliente tenta restabelecer
a VPN periodicamente, at que tenha sucesso. Esta linha deve ser includa tanto na configurao do
servidor quanto na do cliente.
Opcionalmente, voc pode incluir a linha "inactive", para especificar um tempo mximo para as
tentativas de reconexo. Se quiser que o cliente desista depois de uma hora, por exemplo, inclua a
linha:
inactive 3600
O parmetro "comp-lzo" faz com que o OpenVPN passe a compactar os dados transmitidos atravs
do tnel ( necessrio que o pacote "lzo" esteja instalado). O algoritmo usado pelo OpenVPN
bastante leve, por isso o uso adicional de processamento, tanto no servidor quando nos clientes
pequeno. A compresso dos dados no faz milagres, mas uma boa forma de melhorar o
desempenho da VPN ao utilizar links lentos ou congestionados. Esta outra opo que deve ser
includa tanto no servidor quanto nos clientes para que seja usada:
comp-lzo
Outras duas opes, teis para tornar a VPN mais confivel e mais resistente a problemas de
conectividade, so a "persist-key" e a "persist-tun". Elas fazem com que o daemon mantenha a
interface tun aberta e as chaves carregadas quando reiniciado (quando a VPN restabelecida
depois de uma queda de conexo, por exemplo), o que torna mais rpida a restaurao do link e
evita problemas diversos:
Persist-key
persist-tun
Outra opo til ao utilizar conexes com IP dinmico a opo "float", que permite que o tnel
continue aberto mesmo que o endereo IP da outra mquina mude. Em situaes normais, a
mudana de IP faria com que a conexo fosse encerrada e o tnel fosse interrompido at que fosse
reiniciado (seja manualmente ou seja pelo uso da opo keepalive). A opo "float" torna o processo
mais transparente, j que o OpenVPN passa a monitorar as mudana de endereos, mantendo o
tnel aberto enquanto houver conexo entre as duas partes. Essa opo tambm deve ser includa
tanto na configurao do servidor quanto na do cliente:
float
Temos aqui um exemplo mais incrementado de configurao do servidor, onde a porta
especificada manualmente e so usados os parmetros que acabamos de ver:
dev tun
proto udp
port 22222
keepalive 10 120
comp-lzo
persistkey
persisttun
float
ifconfig 10.0.0.1 10.0.0.2
secret static.key
A configurao no cliente praticamente a mesma, com a adio da linha "remote", que
especifica o endereo do servidor e a mudana na linha "ifconfig", onde a ordem dos endereos
so trocados:
remote guiadohardware.no-ip.org
dev tun
proto udp
port 22222
keepalive 10 120
comp-lzo
persistkey
persisttun
float
ifconfig 10.0.0.2 10.0.0.1
secret static.key
O atalho leva pasta "config" dentro do diretrio de instalao do programa, onde iro a chave de
encriptao e o arquivo de configurao, de forma similar pasta "/etc/openvpn" que temos no
Linux.
Se voc pretende usar a mquina Windows como servidor, pode usar a opo "Generate a static
OpenVPN key", usando o atalho dentro do menu iniciar. Isso gerar um arquivo "key.txt" dentro do
diretrio de configurao, que precisa ento ser copiado para o cliente.
Se, por outro lado, voc quer usar a mquina Windows para se conectar a um servidor Linux, comece
copiando o arquivo "static.key" do servidor para dentro da pasta de configurao:
necessrio criar tambm um arquivo de configurao, com a extenso "ovpn" (usando o bloco de
notas), onde so especificadas as opes de configurao. O contedo do arquivo exatamente o
mesmo que usaramos em um cliente Linux:
Depois de copiar a chave e gerar o arquivo de configurao, clique com o boto direito sobre ele e
use a opo "Start OpenVPN on this config file" para ativar a VPN:
Assim como no Linux, a VPN aparece como uma nova interface de rede, que recebe o endereo IP
definido na configurao:
Depois de testar a conexo, possvel fazer com que ela seja inicializada automaticamente ativando
o servio do OpenVPN, que passa ento a monitorar o diretrio de configurao, carregando
automaticamente os arquivos de configurao colocados dentro dele, assim como no Linux.
Para isso, acesse o "Painel de Controle > Ferramentas Administrativas > Servios" e mude a
configurao do "OpenVPN Service" de "Manual" para "Automtico":