Professional Documents
Culture Documents
No final da instalação, 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 Fedora, a instalação pode ser feita usando o yum. Ele se encarregará de instalar
também os pacotes "openssl" e "lzo", que contém as bibliotecas usadas pelo OpenVPN
para encriptar e compactar o tráfego da rede:
Com a chave instalada, baixe o pacote RPM do repositório. Este pacote instala o
arquivo com a configuração do repositório dentro da pasta "/etc/yum/repos.d".
Verifique o link do pacote para a versão do CentOS que está utilizando na página com
as instruções. No caso do CentOS 5.1, versão 32 bits, por exemplo, o pacote é o
"rpmforge-release-0.3.6-1.el5.rf.i386.rpm". Se você está fazendo a configuração via
linha de comando, pode baixar o pacote usando o wget, como em:
# wget -c
http://apt.sw.be/redhat/el5/en/i386/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
No Mandriva, basta instalar o pacote "openvpn" usando urpmi. Assim como no Fedora,
ele também se encarrega de instalar as dependências:
# urpmi openvpn
Se você estiver utilizando uma distribuição que não inclua o pacote nos repositórios, ou
se a versão disponível for muito antiga, você pode também instalar a partir do pacote
com o código fonte, disponível no: http://openvpn.net/index.php/downloads.html
Depois de instalar o pacote, o próximo passo é carregar o módulo "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 túnel.
# modprobe tun
Adicione a linha "tun" no final do arquivo "/etc/modules" para que o módulo passe a ser
carregado automaticamente durante o boot:
Depois de concluída a instalação, você pode criar um túnel simples, não encriptado,
usando os comandos abaixo. Este túnel não pode ser considerado uma "VPN" já que
não é seguro, mas serve como um "hello word" dentro da configuração do OpenVPN.
Presumindo que as duas máquinas estejam ligadas em rede e que não exista nenhum
firewall no caminho, use o comando abaixo no cliente, especificando o endereço do
servidor:
Como comentei, o OpenVPN possui também uma versão Windows, que está disponível
no http://openvpn.se.
Nesse modo, você gera uma arquivo de texto no servidor, contendo a chave de
encriptação e precisa apenas copiá-la para o cliente e fazer uma configuração rápida
para criar a VPN. Se você quer apenas criar uma VPN doméstica, ou criar uma VPN
temporária entre duas redes, esta é a configuração recomendada.
O grande problema em utilizar uma chave estática é que, como o nome sugere, a mesma
chave é utilizada sessão após sessão, sem nunca mudar. Com isso, existe uma pequena
possibilidade de um atacante obstinado conseguir quebrar a VPN usando um ataque de
força bruta. Como a chave é um arquivo de texto, que é armazenado tanto no cliente
quanto no servidor, existe também a possibilidade de alguém conseguir copiá-lo, caso
tenha acesso físico a uma das máquinas. Outra limitação é que usando uma chave
estática o servidor suportará a conexão de um único cliente por VPN.
Vamos então à configuração de nossa primeira VPN. Para este exercício inicial,
recomendo que utilize duas máquinas da rede local, que não tenham firewall ativo.
Depois de entender melhor como o sistema funciona, passaremos para uma
configuração mais elaborada.
O primeiro passo é gerar o arquivo com a chave, no servidor. O arquivo deve ser gerado
dentro do diretório "/etc/openvpn" (o diretório padrão de configuração), de forma que
acessamos o diretório antes de executar o comando que gera a chave:
# cd /etc/openvpn
# openvpn --genkey --secret static.key
Isso gerará o arquivo "static.key", que contém a chave de encriptação que será usada
para criar a conexão. Ele é um arquivo de texto simples, que contém 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 também um pendrive, ou outra mídia de uso local,
mas não é recomendável enviá-lo por meios não seguros (e-mail por exemplo), já que
qualquer um que tenha acesso ao arquivo poderá se conectar à sua VPN ou desencriptar
todo o tráfego transmitido através 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 cópia, 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 máquinas, falta criar os arquivos de
configuração que serão 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 extensão ".conf"
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 endereços que serão usados pelas
interfaces virtuais da VPN, no servidor e no cliente. No exemplo, o servidor utilizará o
endereço "10.0.0.1" e o cliente o endereço "10.0.0.2". Você pode utilizar outros
endereços se preferir. O importante é que os endereços utilizados na VPN devem ser
sempre diferentes dos endereços usados na rede local.
A linha "secret static.key" especifica o arquivo com a chave de encriptação, que criamos
no passo anterior. Não esqueça de alterar a linha caso o nome do arquivo seja diferente.
remote 192.168.1.101
dev tun
ifconfig 10.0.0.2 10.0.0.1
secret static.key
# /etc/init.d/openvpn restart
# /etc/init.d/openvpn stop
Você pode, também, ativar o OpenVPN manualmente, usando (como root) o comando:
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 usuário possa se
conectar à VPN apenas quando precisar. Outra opção é instalar o kvpnc
(http://home.gna.org/kvpnc/), um cliente gráfico 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 endereço IP "10.0.0.2", que funciona como um link ponto-a-ponto com a
interface "tun0" do servidor, que recebe o endereço "10.0.0.1":
Depois do teste inicial, você pode fazer um teste realizando a conexão via Internet (você
pode usar uma conexão discada ou outra conexão temporária no cliente para fazer o
teste). Para isso, você vai precisar apenas alterar a configuração no cliente, adicionando
o endereço 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
# /etc/init.d/openvpn restart
No OpenVPN 2.x é utilizada por padrão a porta 1194 UDP, que deve estar aberta no
firewall do servidor (versões antigas, anteriores à 2.0-beta16 utilizavam a porta 5000
UDP). Se o servidor acessa através de uma conexão compartilhada, é necessário
configurar o gateway da rede (ou o modem ADSL) para encaminhar a porta para ele.
Como de praxe, é possível alterar a porta padrão usada pelo OpenVPN, desde que você
especifique a nova porta tanto na configuração do servidor quanto do cliente. Para isso,
usamos a opção "proto udp", seguida pela porta desejada, que deve ser incluída tanto na
configuração do servidor quanto na do cliente, como em:
proto udp
port 22222
É possível, também, usar uma porta TCP. Nesse caso, usamos a opção "proto tcp-
server" na configuração do servidor (/etc/openvpn/server.conf) e a opção "proto tcp-
client" na configuração do cliente (/etc/openvpn/client.conf), como em:
proto tcp-server
port 22222
e:
proto tcp-client
port 22222
Isso ocorre porque no UDP os pacotes são transmitidos diretamente, sem nenhum
overhead, o que garante o melhor desempenho. No UDP não existe correção de erros
nem retransmissão de pacotes perdidos, mas isso não é um problema no caso do
OpenVPN, pois ele é o responsável apenas pela criação do link de dados. Sobre ele,
temos o protocolo TCP/IP e as diferentes camadas do sistema operacional, que se
encarregam dessa tarefa.
# /etc/init.d/openvpn restart
O primeiro, e mais importante, é o parâmetro "keepalive", que faz com que o servidor e
o cliente monitorem a conexão, enviando pings periódicos um para o outro, e reiniciem
a VPN automaticamente caso não recebam resposta dentro de um período determinado.
Esta opção é especialmente importante em VPNs usadas através de links ADSL ou
qualquer outro tipo de conexão que não seja completamente estável. Um exemplo de
uso seria:
keepalive 10 120
inactive 3600
comp-lzo
Outras duas opções, úteis para tornar a VPN mais confiável e mais resistente a
problemas de conectividade, são a "persistkey" e a "persisttun". 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 conexão, por exemplo), o que
torna mais rápida a restauração do link e evita problemas diversos:
persistkey
persisttun
Outra opção útil ao utilizar conexões com IP dinâmico é a opção "float", que permite
que o túnel continue aberto mesmo que o endereço IP da outra máquina mude. Em
situações normais, a mudança de IP faria com que a conexão fosse encerrada e o túnel
fosse interrompido até que fosse reiniciado (seja manualmente ou seja pelo uso da
opção keepalive). A opção "float" torna o processo mais transparente, já que o
OpenVPN passa a monitorar as mudança de endereços, mantendo o túnel aberto
enquanto houver conexão entre as duas partes. Essa opção também deve ser incluída
tanto na configuração do servidor quanto na do cliente:
float
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
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
Note que o comando especifica a faixa de endereços usada na rede local (192.168.1.0,
no exemplo), a máscara, o endereço IP do servidor do outro lado da VPN e a interface
virtual usada pela VPN (tun0).
O atalho leva à pasta "config" dentro do diretório de instalação do programa, onde irão a
chave de encriptação e o arquivo de configuração, de forma similar à pasta
"/etc/openvpn" que temos no Linux.
Se você pretende usar a máquina Windows como servidor, pode usar a opção "Generate
a static OpenVPN key", usando o atalho dentro do menu iniciar. Isso gerará um arquivo
"key.txt" dentro do diretório de configuração, que precisa então ser copiado para o
cliente.
Se, por outro lado, você quer usar a máquina Windows para se conectar a um servidor
Linux, comece copiando o arquivo "static.key" do servidor para dentro da pasta de
configuração:
Depois de copiar a chave e gerar o arquivo de configuração, clique com o botão direito
sobre ele e use a opção "Start OpenVPN on this config file" para ativar a VPN:
Depois de testar a conexão, é possível fazer com que ela seja inicializada
automaticamente ativando o serviço do OpenVPN, que passa então a monitorar o
diretório de configuração, carregando automaticamente os arquivos de configuração
colocados dentro dele, assim como no Linux.
Para isso, acesse o "Painel de Controle > Ferramentas Administrativas > Serviços" e
mude a configuração do "OpenVPN Service" de "Manual" para "Automático":