Você está na página 1de 11

Instalando o OpenVPN e criando uma VPN bsica

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:

# apt-get install openvpn


No final da instalao, ele exibir uma mensagem, perguntando se o OpenVPN deve ser desativado
antes de ser atualizado ("Would you like to stop openvpn before it gets upgraded?"). Responda que
sim.
No OpenSuSE, abra o Yast e, dentro da seo de gerenciamento de pacotes, faa uma busca pelo
pacote "openvpn". A busca resulta em dois resultados: "openvpn", que o pacote em que estamos
interessados e "openvpn-devel", que contm o cdigo fonte. Basta selecionar o pacote e concluir a
instalao.
No Fedora, a instalao pode ser feita usando o yum. Ele se encarregar de instalar tambm os
pacotes "openssl" e "lzo", que contm as bibliotecas usadas pelo OpenVPN para encriptar e
compactar o trfego da rede:

# yum install openvpn


No CentOS, necessrio adicionar o repositrio do RPMForge j que (at o CentOS 5.1), o pacote
OpenVPN no faz parte dos repositrios oficiais. Voc pode adicionar o repositrio seguindo as
instrues disponveis aqui: http://wiki.centos.org/Repositories/RPMForge.
O primeiro passo instalar a chave GPG do repositrio:

# rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt


Com a chave instalada, baixe o pacote RPM do repositrio. Este pacote instala o arquivo com a
configurao do repositrio dentro da pasta "/etc/yum/repos.d". Verifique o link do pacote para
a verso do CentOS que est utilizando na pgina com as instrues. No caso do CentOS 5.1, verso
32 bits, por exemplo, o pacote o "rpmforge-release-0.3.6-1.el5.rf.i386.rpm". Se voc est fazendo
a configurao via linha de comando, pode baixar o pacote usando o wget, como em:

#
wget
http://apt.sw.be/redhat/el5/en/i386/RPMS.dag/rpmforge-release-0.3.61.el5.rf.i386.rpm

-c

Em seguida, instale o pacote usando o comando "yum localinstall", como em:

# yum localinstall rpmforge-release-0.3.6-1.el5.rf.i386.rpm


A partir da, voc pode instalar o pacote do OpenVPN usando o yum, assim como no Fedora:

# yum install openvpn


No Mandriva, basta instalar o pacote "openvpn" usando urpmi. Assim como no Fedora, ele tambm
se encarrega de instalar as dependncias:

# 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:

# echo tun >> /etc/modules

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:

# openvpn --remote 192.168.1.1 --dev tun0 --ifconfig 10.0.0.1 10.0.0.2


Faa o mesmo no servidor, especificando agora o endereo do cliente:

# openvpn --remote 192.168.1.202 --dev tun0 --ifconfig 10.0.0.2 10.0.0.1


Rode o comando "ifconfig" no cliente e voc ver que foi criada uma interface de rede virtual, a
"tun0", com o endereo "10.0.0.1":

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.

Criando VPNs usando chaves estticas


A forma mais simples de configurar o OpenVPN utilizar chaves estticas, onde um arquivo
contendo um algoritmo de encriptao usado pelas duas partes para encriptar os dados
transmitidos atravs da VPN.
Nesse modo, voc gera uma arquivo de texto no servidor, contendo a chave de encriptao e precisa
apenas copi-la para o cliente e fazer uma configurao rpida para criar a VPN. Se voc quer
apenas criar uma VPN domstica, ou criar uma VPN temporria entre duas redes, esta a
configurao recomendada.
O grande problema em utilizar uma chave esttica que, como o nome sugere, a mesma chave
utilizada sesso aps sesso, sem nunca mudar. Com isso, existe uma pequena possibilidade de um
atacante obstinado conseguir quebrar a VPN usando um ataque de fora bruta. Como a chave um
arquivo de texto, que armazenado tanto no cliente quanto no servidor, existe tambm a
possibilidade de algum conseguir copi-lo, caso tenha acesso fsico a uma das mquinas. Outra
limitao que usando uma chave esttica o servidor suportar a conexo de um nico cliente por
VPN.
Para VPNs com vrios clientes, ou em redes empresariais, onde a segurana prioridade,
recomendvel utilizar uma estrutura baseada em certificados X509, como veremos no tpico
seguinte.
Vamos ento configurao de nossa primeira VPN. Para este exerccio inicial, recomendo que
utilize duas mquinas da rede local, que no tenham firewall ativo. Depois de entender melhor como
o sistema funciona, passaremos para uma configurao mais elaborada.

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

A primeira linha especifica o endereo IP do servidor. No exemplo, estou utilizando um endereo de


rede local, j que estamos apenas testando a VPN, mas, em um exemplo real de uso, voc utilizaria
o endereo IP de Internet do servidor ou (ao utilizar uma conexo com IP dinmico) um domnio
virtual utilizado por ele. Se voc ainda no tem um, acesse o no-ip.com ou o dyndns.org e faa o
registro.
Com os arquivos de configurao criados, inicializar a VPN incrivelmente simples. Voc precisa
apenas reiniciar o servio "openvpn" tanto no cliente quanto no servidor, usando o comando:

# /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:

# openvpn --config /etc/openvpn/client.conf


(onde o "client.conf" o arquivo de configurao que ser usado)
Este comando manual permite acompanhar as mensagens de inicializao e de conexo, o que ajuda
a descobrir o que est errado em casos em que a VPN no funciona, embora a configurao parea
estar correta.
Se a VPN usada pelos clientes apenas esporadicamente, voc pode criar um cone no desktop, ou
um pequeno script contendo o comando, para que o usurio possa se conectar VPN apenas quando
precisar. Outra opo instalar o kvpnc (http://home.gna.org/kvpnc/), um cliente grfico que pode
ser usado para se conectar a VPNs baseadas em diversos protocolos, incluindo o OpenVPN:

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

Configurao das portas no OpenVPN


Diferente de outras solues de VPN, o OpenVPN utiliza uma nica porta de entrada, mesmo que
sejam utilizadas vrias VPNs simultaneamente. Isso facilita bastante a configurao do firewall ou
do roteamento de portas no servidor.
No OpenVPN 2.x utilizada por padro a porta 1194 UDP, que deve estar aberta no firewall do
servidor (verses antigas, anteriores 2.0-beta16 utilizavam a porta 5000 UDP). Se o servidor
acessa atravs de uma conexo compartilhada, necessrio configurar o gateway da rede (ou o
modem ADSL) para encaminhar a porta para ele.
Como de praxe, possvel alterar a porta padro usada pelo OpenVPN, desde que voc especifique
a nova porta tanto na configurao do servidor quanto do cliente. Para isso, usamos a opo "proto
udp", seguida pela porta desejada, que deve ser includa tanto na configurao do servidor quanto
na do cliente, como em:

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.

Estabilizando e otimizando a conexo


Usando a configurao simplificada do exemplo anterior, voc notar que a VPN no ser muito
estvel, pois qualquer interrupo na comunicao entre as duas mquinas derrubar o link, at
que voc reinicie o servio do OpenVPN (no cliente), forando a reconexo, como em:

# /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

Roteando pacotes atravs da VPN


Originalmente, o cliente ter acesso apenas ao prprio servidor. Para que ele tenha acesso aos
demais hosts da rede, necessrio realizar alguns passos adicionais.
O primeiro ativar o roteamento de pacotes no servidor, de forma que ele passe a encaminhar os
pacotes recebidos do cliente para a interface de rede local. Mesmo que o servidor possua uma nica
placa de rede, a VPN vista pelo sistema como uma interface separada, de forma que, do ponto de
vista do sistema operacional, a VPN e a rede local so duas placas de rede separadas.
O roteamento feito usando dois comandos (executados no servidor):

# echo 1 > /proc/sys/net/ipv4/ip_forward


# iptables -t nat -s 10.0.0.2 -A POSTROUTING -o eth0 -j MASQUERADE
O primeiro ativa o roteamento de pacotes no Kernel e o segundo orienta o sistema a encaminhar os
pacotes recebidos a partir do endereo IP do cliente (10.0.0.2, no exemplo) para a interface de rede
local (eth0, no exemplo). Estes dois comandos precisam ser adicionados em algum dos scripts de
inicializao do sistema (como o "/etc/rc.local) para que sejam executados a cada boot.
O prximo passo executar o comando abaixo no cliente, de forma que ele passe a consultar o
servidor ao tentar acessar endereos dentro da faixa usada pela rede local:

# route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.0.0.1 dev tun0


Note que o comando especifica a faixa de endereos usada na rede local (192.168.1.0, no exemplo),
a mscara, o endereo IP do servidor do outro lado da VPN e a interface virtual usada pela VPN
(tun0).
A partir da, o cliente conseguir acessar outros micros da rede, montar compartilhamentos ou at
mesmo imprimir em impressoras compartilhadas. importante notar, entretanto, que se o cliente
tambm estiver conectado a uma rede local (acessando atravs de uma conexo compartilhada, por
exemplo), ela deve utilizar uma faixa diferente de endereos.

Configurao do OpenVPN no Windows


A configurao da verso Windows do OpenVPN bastante similar da verso Linux, com exceo
de alguns detalhes e algumas adaptaes feitas devido s diferenas entre os dois sistemas. Depois
de baixar o pacote no http://opnvpn.se e instalar o programa, acesse a opo "OpenVPN
configuration file directory", dentro da pasta "OpenVPN" que ser criada no iniciar:

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:

Isso abrir uma janela do prompt do MS-DOS mostrando o progresso da conexo:

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":

Confira a segunda parte em: http://www.hardware.com.br/tutoriais/openvpn_2/

Você também pode gostar