Documente Academic
Documente Profesional
Documente Cultură
23 de novembro de 2006
Sumário
II Informações Básicas 5
III OpenVPN 10
1 O que é o OpenVPN 11
2 Plano de ensino 12
2.1 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2 Público Alvo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.3 Pré-requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.4 Descrição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.5 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.6 Cronograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.7 Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.8 Avaliação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.9 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3 Introdução 15
3.1 O que é VPN? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.2 Informações e situações de práticas de uso . . . . . . . . . . . . . . . . . . . . . . . 15
3.3 Características do OpenVPN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.4 OpenVPN x Outros pacotes VPN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4 Instalação 18
4.1 Download do OpenVPN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.2 Instalação no Debian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.3 Pacotes RPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.4 Instalação do Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5 Configuração 20
5.1 Configurando o driver TUN/TAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
5.2 Configurando certificados (CA) e chaves . . . . . . . . . . . . . . . . . . . . . . . . . 20
5.3 Configuração do OpenSSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.4 Gerando certificados e chaves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
5.5 Framework de teste do OpenSSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
5.6 Considerações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5.7 Criando arquivos de configuração para servidores e clientes . . . . . . . . . . . . . 31
6 Teste 34
6.1 Servidor x Cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
6.2 Testando o OpenVPN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
6.2.1 Iniciando o VPN e testando-o para conectividade inicial . . . . . . . . . . . . 43
2
Parte I
3
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Conteúdo
O conteúdo dessa apostila é fruto da compilação de diversos materiais livres publicados na in-
ternet, disponíveis em diversos sites ou originalmente produzido no CDTC em http://www.cdtc.org.br.
O formato original deste material bem como sua atualização está disponível dentro da licença
GNU Free Documentation License, cujo teor integral encontra-se aqui reproduzido na seção de
mesmo nome, tendo inclusive uma versão traduzida (não oficial).
A revisão e alteração vem sendo realizada pelo CDTC (suporte@cdtc.org.br), desde outubro
de 2006. Criticas e sugestões construtivas são bem-vindas a qualquer tempo.
Autores
A autoria deste conteúdo, atividades e avaliações é de responsabilidade de André Marra G.
Araujo (andremarra@cdtc.org.br) .
O texto original faz parte do projeto Centro de Difusão de Tecnolgia e Conhecimento, que vem
sendo realizado pelo ITI em conjunto com outros parceiros institucionais, atuando em conjunto
com as universidades federais brasileiras que tem produzido e utilizado Software Livre, apoiando
inclusive a comunidade Free Software junto a outras entidades no país.
Garantias
O material contido nesta apostila é isento de garantias e o seu uso é de inteira responsabi-
lidade do usuário/leitor. Os autores, bem como o ITI e seus parceiros, não se responsabilizam
direta ou indiretamente por qualquer prejuízo oriundo da utilização do material aqui contido.
Licença
Copyright ©2006,André Marra G. Araujo (andremarra@cdtc.org.br) .
Permission is granted to copy, distribute and/or modify this document under the terms
of the GNU Free Documentation License, Version 1.1 or any later version published by
the Free Software Foundation; with the Invariant Chapter being SOBRE ESSA APOS-
TILA. A copy of the license is included in the section entitled GNU Free Documentation
License.
4
Parte II
Informações Básicas
5
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Sobre o CDTC
Objetivo Geral
Objetivo Específico
Guia do aluno
Neste guia, você terá reunidas uma série de informações importantes para que você comece
seu curso. São elas:
• Primeiros passos
É muito importante que você entre em contato com TODAS estas informações, seguindo o
roteiro acima.
Licença
Copyright ©2006, André Marra G. Araujo (andremarra@cdtc.org.br) .
É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos
da Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior
6
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
públicada pela Free Software Foundation; com o Capitulo Invariante SOBRE ESSA
APOSTILA. Uma cópia da licença está inclusa na seção entitulada "Licença de Docu-
mentação Livre GNU".
• 5. Organização pessoal: planejar e organizar tudo é fundamental para facilitar a sua revisão
e a sua recuperação de materiais.
• 6. Vontade para realizar as atividades no tempo correto: anotar todas as suas obrigações e
realizá-las em tempo real.
• 10. Responsabilidade: ser responsável por seu próprio aprendizado. O ambiente virtual não
controla a sua dedicação, mas reflete os resultados do seu esforço e da sua colaboração.
A primeira é o uso dos fóruns de notícias e de dúvidas gerais que se distinguem pelo uso:
. O fórum de notícias tem por objetivo disponibilizar um meio de acesso rápido a informações
que sejam pertinentes ao curso (avisos, notícias). As mensagens postadas nele são enviadas a
todos participantes. Assim, se o monitor ou algum outro participante tiver uma informação que
interesse ao grupo, favor postá-la aqui.
Porém, se o que você deseja é resolver alguma dúvida ou discutir algum tópico específico do
curso. É recomendado que você faça uso do Forum de dúvidas gerais que lhe dá recursos mais
7
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
. O fórum de dúvidas gerais tem por objetivo disponibilizar um meio fácil, rápido e interativo
para solucionar suas dúvidas e trocar experiências. As mensagens postadas nele são enviadas
a todos participantes do curso. Assim, fica muito mais fácil obter respostas, já que todos podem
ajudar.
Se você receber uma mensagem com algum tópico que saiba responder, não se preocupe com a
formalização ou a gramática. Responda! E não se esqueça de que antes de abrir um novo tópico
é recomendável ver se a sua pergunta já foi feita por outro participante.
. Uma wiki é uma página web que pode ser editada colaborativamente, ou seja, qualquer par-
ticipante pode inserir, editar, apagar textos. As versões antigas vão sendo arquivadas e podem
ser recuperadas a qualquer momento que um dos participantes o desejar. Assim, ela oferece um
ótimo suporte a processos de aprendizagem colaborativa. A maior wiki na web é o site "Wikipé-
dia", uma experiência grandiosa de construção de uma enciclopédia de forma colaborativa, por
pessoas de todas as partes do mundo. Acesse-a em português pelos links:
Primeiros Passos
Para uma melhor aprendizagem é recomendável que você siga os seguintes passos:
• Ler a Ambientação do Moodle para aprender a navegar neste ambiente e se utilizar das
ferramentas básicas do mesmo;
Perfil do Tutor
Segue-se uma descrição do tutor ideal, baseada no feedback de alunos e de tutores.
• fornece explicações claras acerca do que ele espera, e do estilo de classificação que irá
utilizar;
8
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• identifica as nossas falhas, mas corrige-as amavelmente’, diz um estudante, ’e explica por-
que motivo a classificação foi ou não foi atribuída’;
• tece comentários completos e construtivos, mas de forma agradável (em contraste com um
reparo de um estudante: ’os comentários deixam-nos com uma sensação de crítica, de
ameaça e de nervossismo’)
9
Parte III
OpenVPN
10
Capítulo 1
O que é o OpenVPN
OpenVPN é uma solução completa de SSL VPN que pode acomodar uma larga escala de con-
figurações incluindo acesso remoto, site-to-site VPNs, segurança de WiFi, e soluções em escala
de empresa de acesso remoto com load balancing, failover, e controles de acesso refinados.
11
Capítulo 2
Plano de ensino
2.1 Objetivo
Qualificar técnicos e administradores de redesa fazer uso adequado do OpenVPN
2.3 Pré-requisitos
Os usuários deverão ser, necessariamente, funcionários públicos e ter conhecimentos básicos
para operar um computador e ter conhecimento básico acerca de administração de rede, confi-
guração do Linux e criptografia e chaves digitais.
2.4 Descrição
O curso será realizado na modalidade Educação a Distância e utilizará a Plataforma Moodle
como ferramenta de aprendizagem. O curso tem duração de uma semana e possui um conjunto
de atividades (lições, fóruns, glossários, questionários e outros) que deverão ser executadas de
acordo com as instruções fornecidas. O material didático está disponível on-line de acordo com
as datas pré-estabelecidas em cada tópico. A versão adotada do OpenVPN é a 2.0.6-1, caso
possua outra versão, podem ocorrer diferenças com relação a este material.
2.5 Metodologia
O curso está dividido da seguinte maneira:
2.6 Cronograma
• Introdução
12
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• Instalação
• Configuração
• Teste
• Administrando uma VPN
As lições contém o contéudo principal. Elas poderão ser acessadas quantas vezes forem neces-
sárias, desde que esteja dentro da semana programada. Ao final de uma lição, você receberá
uma nota de acordo com o seu desempenho. Responda com atenção às perguntas de cada lição,
pois elas serão consideradas na sua nota final. Caso sua nota numa determinada lição for menor
do que 6.0, sugerimos que você faça novamente esta lição.
Ao final do curso será disponibilizada a avaliação referente ao curso. Tanto as notas das lições
quanto a da avaliação serão consideradas para a nota final. Todos os módulos ficarão visíveis
para que possam ser consultados durante a avaliação final.
Aconselhamos a leitura da "Ambientação do Moodle"para que você conheça a plataforma de En-
sino a Distância, evitando dificuldades advindas do "desconhecimento"sobre a mesma.
Os instrutores estarão a sua disposição ao longo de todo curso. Qualquer dúvida deverá ser
enviada no fórum. Diariamente os monitores darão respostas e esclarecimentos.
2.7 Programa
O curso do OpenVPN oferecerá o seguinte conteúdo:
• Introdução
• Conceitos Básicos
• Conceitos Avançados
2.8 Avaliação
Toda a avaliação será feita on-line.
Aspectos a serem considerados na avaliação:
Instrumentos de avaliação:
• Participação ativa nas atividades programadas.
• Avaliação ao final do curso.
• O participante fará várias avaliações referente ao conteúdo do curso. Para a aprovação e
obtenção do certificado o participante deverá obter nota final maior ou igual a 6.0 de acordo
com a fórmula abaixo:
• Nota Final = ((ML x 7) + (AF x 3)) / 10 = Média aritmética das lições
• AF = Avaliações
13
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
2.9 Bibliografia
• Site oficial: http://openvpn.net
14
Capítulo 3
Introdução
Comece por aqui. Nesta lição, você verá informações importantes sobre o OpenVPN como: o
que é VPN, situações práticas de uso e etc.
15
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
ACESSO REMOTO VIA INTERNET O acesso remoto a redes corporativas através da Internet
pode ser viabilizado com a VPN através da ligação local a algum provedor de acesso (Inter-
net Service Provider - ISP). A estação remota disca para o provedor de acesso, conectando-
se à Internet e o software de VPN cria uma rede virtual privada entre o usuário remoto e o
servidor de VPN corporativo através da Internet.
CONEXÃO DE LANS VIA INTERNET Uma solução que substitui as conexões entre LANs atra-
vés de circuitos dedicados de longa distância é a utilização de circuitos dedicados locais
interligando-as à Internet. O software de VPN assegura esta interconexão formando a WAN
corporativa.
A depender das aplicações também, pode-se optar pela utilização de circuitos discados em
uma das pontas, devendo a LAN corporativa estar, preferencialmente, conectada à Inter-
net via circuito dedicado local ficando disponível 24 horas por dia para eventuais tráfegos
provenientes da VPN.
• construir um túnel em qualquer subrede ou adaptador ethernet virtual em cima de uma única
porta UDP ou TCP;
• usar qualquer cipher, chave, ou compilador HMAC suportado pela biblioteca OpenSSL;
16
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• construir um túnel em rede na qual o ponto final seja dinâmico como DHCP ou clientes
discados,
• A principal força do OpenVPN inclui a portabilidade através das muitas plataformas do co-
nhecido universo computacional, excelente estabilidade, suporta centenas ou milhares de
clientes, instalação relativamente fácil e suporte a IP dinâmico e NAT.
• OpenVPN oferece uma interface de administração que pode ser usada para controlar remo-
tamente ou administrar centralmente um processo OpenVPN. A interface de administração
pode ser usada, também, para desenvolver uma GUI ou uma aplicação na web para o
OpenVPN.
• No Windows, o OpenVPN pode ler certificados e chaves privadas de pequens cartões que
suportem o Windows Crypto API.
• OpenVPN tem sido construído com um forte design modular. Toda a encriptação é provida
pela biblioteca OpenSSL, e todas as funcionalidades de tunelamento de IP são providas
pelo driver de rede virtual TUN/TAP.
http://openvpn.net
17
Capítulo 4
Instalação
http://openvpn.net/download.html
Este é o site oficial do OpenVPN e você pode baixar a versão que quiser.
1. Abra o terminal
A versão que usaremos neste curso é a 2.0.6. Esse pacote está na versão testing do debian.
O processo de criação do arquivo RPM, irá gerar muitas linhas de saida. Se o processo for
bem sucedido, deverá existir uma linha próxima ao final da saida, iniciando com o nome do ar-
quivo RPM criado. Agora você pode instalar o arquivo RPM binario com o comando:
18
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Descompacte a distribuição:
Compile o OpenVPN:
cd openvpn-2.0.6
./configure
make
make install
./configure - -help
19
Capítulo 5
Configuração
locate if_tun.h
Se você está usando o kernel 2.2, você deve obter a Versão 1.1 do modulo TUN/TAP para o
kernel e seguir as instruções da instalação.
modprobe tun
20
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
usuários e scripts. Inicie o shell escrevendo openssl na linha de comando (em um terminal). Daí,
você pode escrever comandos no prompt OpenSSL>.
Você pode executar comando do OpenSSL em batch mode (conjunto de programas poces-
sados consecutivamente pelo sistema operacional de um microcomputador). Em batch mode,
cada comando do OpenSSL é executado separadamente. Shell scripts usualmente usam esta
característica; nós faremos o mesmo neste curso:
Dos muitos comandos que podem ser executados no shell do OpenSSL, este curso só vai co-
brir 5 (cinco):
# openssl.cnf
#
# OpenSSL example configuration file.
#
21
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
###########################################################
# This section will configure the ca (Certificate Authority)
# command. We will use the ca command to sign user
# certificates and periodically generate CRLs.
###########################################################
[ca]
default_ca = CA_default # The default ca section
[CA_def ault]
dir = /root/CA-DB # Top
crl_dir = $dir/crl # The crl location
database = $dir/index.txt # Database index file
new_certs_dir = $dir/newcerts # Location for new certs
certificate = $dir/cacert.pem # The CA certificate
serial = $dir/serial # The next serial number
crl = $dir/crl.pem # The current CRL
# Hashing function
default_md = md5
22
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
x509_extensions = user_extensions
policy = policy_any
[policy_any]
organizationName = match
organizationalUnitName = optional
commonName = supplied
###########################################################
# This section configures the req (certificate request)
# command.
###########################################################
[req]
# The default key length and the filename that will contain
# a private key. The public key will be contained in the
# certificate request.
default_bits = 1024
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
[req_distinguished_name]
organizationName = Organization Name (eg, company)
organizationName_default = Inyo Technical Services
x509_extensions = CA_extensions
23
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
###########################################################
# Extensions that will be added to certificates that are
# issued. The ’user_extensions’ sections contains
# definitions that will be included in certificates that are
# signed by this CA. The CA_extensions section contains
# extensions that will be included when we create a
# self-signed certificate using the req command.
###########################################################
[user_extensions]
# CA:FALSE will not permit this certificate to sign other
# certificates.
basicConstraints = CA:FALSE
[CA_extensions]
# CA:TRUE will allow this certificate to sign others.
basicConstraints = CA:TRUE
#Fim de arquivo
• Na seção [CA_def ault] modifique o parâmetro "dir"para um diretório que você tenha poder
de escrita.
• default_md = md5
24
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Note que nós inicializamos os arquivos serial e crlnumber com o primeiro serial number. Quando
autenticamos certificados, o número guardado nesses arquivos vão incrementando automatica-
mente sendo que cada certificado vai receber um serial number único. O arquivo index.txt vai
gravar todos os certificados autenticados.
Com a estrutura do diretório no lugar, nós podemos criar nosso root certificate com nossa
própria assinatura. Este certificado vai se sentar no topo da nossa hierarquia de confiança. Nós
vamos usá-lo para assinar todo o resto.
Para esclarescer alguma pontecial confusão, a opção -x509 vai pedir ao comando req para gerar
um certificado de assinatura própria em vez de um certificado de pedido. Nós só vamos usar esta
opção com o comando req uma vez criado nosso root certificate. Certificados dos usuários
Agora, nós vamos criar um certificado de pedido para o servidor OpenVPN instalado na nossa
network. Note que usamos o argumento -nodes. Ele previne que a chave privada gerada com o
pedido seja encriptada e protegida por senha. Nós vamos precisar guardar a chave com cuidado
por causa disto. Nós não vamos proteger essa chave com senha porque depois nós vamos iniciar
o servidor OpenVPN automaticamente no boot quando não há interação com usuário para prover
a senha.
25
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
-----
You are about to be asked to enter information that will
be incorporated into your certificate request.
What you are about to enter is what is called a
Distinguished Name or a DN. There are quite a few fields
but you can leave some blank For some fields there will
be a default value, If you enter ’.’, the field will be
left blank.
-----
Country Name (2 letter code) [AU ]:
State or Province Name (full name) [Some − State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [InternetW idgitsP tyLtd]:
Organizational Unit Name(eg, section) []:
Common Name (eg, YOUR name) []:vpn.curso.com
Email Address []:
[user@computadorCA − DB]$
Agora nós assinamos digitalmente o certificado do servidor usando o root certificate que nós
criamos inicialmente. O OpenSSL vai restaurar a localização do root certificate do arquivo de
configuração, que é o porque de não aparecer como argumento na linha de comando. Este co-
mando vai atualizar os arquivos serial e index.txt quando for completado.
26
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
01:C9:91:6B:99:53:E6:6E:D7:56:5D:26:95:22:32:05:E3:7A:BE:9C
X509v3 Authority Key Identifier:
keyid:87:AB:B8:52:AF:74:EB:69:55:A1:C2:17:7E:A7:64:11:77:25:88:E8
Depois de criado o certificado do servidor, nós podemos criar certificados para todos os clientes
para quem queremos dar acesso à VPN. O processo é o mesmo, exceto que nós não especifi-
camos a opção -nodes com o comando req. Isso vai encriptar a chave privada e o OpenSSL vai
pedir uma senha quando semeado o código.
Agora, em outro terminal, nós iniciamos o s_client do OpenSSL usando o argumento -cert para
fornecer um certificador para o servidor para autenticação. O argumento -key usa a chave privada
para encriptar as mensagens e o argumento -CAfile aponta para o root certificate.
27
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
28
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
4C99AC7AF68E5373820C460C85823A46
Key-Arg : None
Start Time: 1147813810
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
Agora você pode escrever mensagens! Tudo o que você escrever neste terminal vai aparecer
no outro e vice-versa. Para sair desta sessão, escreva Q e dê ENTER.
Agora nós sabemos que nossos certificados podem encriptar mensagens passadas entre as
duas aplicações OpenSSL. No entanto, nós não sabemos se podemos usar nossos certificados
com qualquer aplicação de certificado seguro X.509. Adicionando a opção -WWW ao comando
s_server irá efetivamente criar um web server seguro que pode servir qualquer arquivo local para
um navegador cliente conectando usando SSL/TLS. Vamos testar isso a seguir.
No mesmo diretório, crie um pequeno arquivo HTML contendo o seguinte texto:
<html>
<body>
<h1>Hello World!</h1>
</body>
</html>
Dê o nome ao arquivo como hello.html e inicie um servidor no mesmo diretório do arquivo usando
a opção -WWW.
Inicie qualquer browser moderno como o Mozilla Firefox. Entre com a URL na barra de ende-
reço. Note que o protocolo é https e não http:
https://localhost:4433/hello.html
O navegador vai alertá-lo do fato de não reconhecer o assunto no certificado oferecido pelo ser-
vidor. A maioria dos browsers vai deixar você aceitar a autenticidade do certificado do servidor
temporariamente para a sessão. Depois de clicar as mensagens de aviso, você deve ver uma
página aparecer no navegador.
O s_server é uma ferramenta muito útil. Estes testes do OpenSSL permitem ao administrador
isolar problemas mais facilmente para uma aplicação em network ou seu suporte a uma infra-
estrutura de certificado.
Um último passo é criar os parâmetros Diffie Hellman com o comando
29
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
....................................+.........++*++*++*
[user@computadorCA − DB]$
O OpenVPN tem 2 tipos de operação segura, uma baseada em SSL/TLS, usando certificados
e chaves RSA, e outro usando uma chave estática pré-compartilhada. Enquanto que as cha-
ves SSL/TLS + RSA são seguramente a opção mais segura, as chaves estaticas tem a vanta-
gem de serem muito mais simples. Se você deseja usar chaves RSA, leia a seguir. Se você
deseja usar chaves estáticas pré-compartilhadas, entre nesta página Gerando a chave estática
Pré-Compartilhada.
Os certificados RSA são chaves publicas que contém vários campos de segurança, como os
campos Common Name ou Email Address. O OpenVPN tem a habilidade de fazer alguns testes
para melhorar a segurança. Para mais informações, veja a opção –tls-verify na man page do
Openvpn. (em inglês)
Os arquivos de chaves privadas devem sempre serem mantidas seguras, já os arquivos de
chaves privadas, podem ser livremente publicadas e distribuidas.
5.6 Considerações
Modificações no arquivo de configuração do openssl:
• Considere aumentar o valor do parametro default_days ou sua VPN irá parar de funcionar
misteriosamente após exatamente um ano.
• Aponte as opções certificate e private_key para o seu certificado mestre da sua autoridade
certificadora e as chaves privadas que iremos gerar. Nos exemplos abaixo, nós iremos
assumir que certificado mestre da sua autoridade certificadora se chama cacert.pem e que
a chave privada se chama cakey.pem.
• Crie os arquivos index.txt e serial. Crie o arquivo index.txt em branco e serial para conter
um numero inicial serial, como 01.
• Se você for paranóico sobre o tamanho de suas chaves, aumente a opção default_bits para
2048. O OpenVPN não irá ter nenhum problema em trabalhar com uma chave RSA de 2048
bits se você compilou o OpenVPN com suporte a biblioteca pthread, para ativar o suporte
do processamento das chaves RSA em background. Você ainda pode usar chaves maiores
mesmo sem o suporte a biblioteca pthread, mas você irá ver alguma degradação de per-
formace no tunel durante as negociações das chaves SSL/TLS. Para um bom artigo sobre
escolher um tamanho de chave RSA, veja a Edição de Abril de 2002 da Bruce Schneier’s
Crypto-Gram Newsletter.
Aumente o numero de bits de 1024 para 2048 se você também o aumentou no arquivo openssl.cnf.
Para os paranoicos, considere omitir a opção -nodes nos comandos openssl acima. Isso irá
fazer com que cada chave privada seja criptografada com uma senha, fazendo com que suas
chaves fiquem seguras se alguem acessar seu servidor e roube suas chaves. O problema dessa
30
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
opção, é que você irá ter que digitar uma senha toda vez que você rodar o OpenVPN. Para mais
informações, veja a opção –askpass na man page do openvpn. (em inglês)
Se você achar o gerenciamento manual de chaves RSA, note que o OpenVPN irá traba-
lhar com qualquer certificado X509 ou serviço incluindo as Autoridades Certificadoras comerciais
como Thawte ou Verisign. Veja também o projeto OpenCA como um exemplo do que está sendo
feito no mundo do Código Aberto para mudar essa realidade.
O OpenVPN também tem um pequeno conjunto de scripts que podem ser usadados para
simplificar O gerenciamento de chaves e certificados RSA (em inglês). Nota importante sobre o
uso de Autoridades Certificadoras comerciais (CAs) com o OpenVPN
Você deve ter percebido que o modelo de seguraça do OpenVPN em modo SSL/TLS é orien-
tado para os usuarios que irão gerar seu proprio certificado raiz e virar seu próprio CA. No modo
SSL/TLS, o OpenVPN autentica a outra ponta checando se o certificado fornecido pela outra
ponta é assinado pelo certificado da Autoridade Certificadora, que é expecificado com a opção
–ca. Como no modelo de seguraça SSL da web, a segurança do OpenVPN em modo SSL/TLS
está baseada na dificuldade de se forjar um certificado raiz.
Esse tipo de autenticação funciona muito bem se você gerou seu próprio certificado raiz, mas
é um problema se você usa o certificado raiz de uma Autoridade Certificadora comercial como
a Thawte. Se você por exemplo, colocou o certificado raiz da Thawte na opção –ca, qualquer
certificado assinado pela Thawte será capaz de se autenticar com a sua ponta OpenVPN – uma
coisa que você certamente não quer.
Felizmente existe uma solução para este problema na opção –tls-verify. Essa opção irá per-
mitir a execução de um comando para checar o conteudo do certificado, para selecionar qual
certificado é permitido ou não. Veja o script verify-cn do diretorio sample-scripts para um exemplo
de como fazer isso. Também consulte a man page na opção –tls-verify.
• Menu Iniciar -> Todos os programas -> OpenVPN -> OpenVPN Sample Configuration Files
no Windows
Note que no Linux, BSD, ou unix-like OSes, os arquivos de configuração são nomeados como
server.conf e client.conf. No Windows eles são nomeados como server.ovpn e client.ovpn. Edi-
tando o arquivo de configuração do servidor
O arquivo de configuração do servidor é o ponto inicial para uma configuração de servidor do
OpenVPN. Ele vai criar uma VPN usando uma interface de network(para roteamento) TUN virtual,
vai escutar conexões de clientes na porta UDP 1194 (número de porta oficial do OpenVPN), e
distribuir endereços virtuais para clientes conectados da subrede 10.8.0.0/24.
Antes de usar esse arquivo de configuração, primeiro você deve editar os parâmetros ca, cert,
key, e dh para apontar para os arquivos que você gerou na seção PKI acima.
31
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Neste ponto, o arquivo de configuração do servidor é usável, no entanto, você pode customizá-
lo ainda mais:
• Se você está usando Ethernet bridging, você deve usar server-bridge, dev tapserver e dev
tun
• Se você quiser que o seu OpenVPN escute na porta TCP em vez da porta UDP, use proto
tcp em vez de proto udp (Se você quiser que o OpenVPN escute nas duas portas, TCP e
UDP, você deve rodar duas instâncias separadas do OpenVPN).
• Se você quiser usar um esquema de IP virtual diferente que o 10.8.0.0/24, você deve mo-
dificar a diretiva server. Lembre-se que esse esquema de IP virtual deve ser um esquema
privado que não é usado na sua network.
• Descomente a diretiva client-to-client se você quiser que clientes conectados possam al-
cançar outros através da sua VPN. Por padrão, os clientes só serão capazes de alcançar o
servidor.
• Se você está usando Linux, BSD, ou um OS Unix-like, você pode melhorar a segurança
descomentando as diretivas user nobody e group nobody.
Se você quer rodar múltiplas instâncias do OpenVPN na mesma máquina, cada uma usando
um arquivo de configuração diferente, só é possível se você:
• Usar um número de porta diferente para cada instância (os protocolos UDP and TCP usam
diferentes espaços de portas. Então, você pode rodar um daemon escutando a UDP-1194
e outro na TCP-1194).
• Se você estiver usando Windows, cada configuração do OpenVPN precisa ter sua própria
TAP-Win32 adapter. Você pode adicionar adaptadores indo em Menu Iniciar -> Todos os
programas -> OpenVPN -> Add a new TAP-Win32 virtual ethernet adapter.
• Se você está rodando múltiplas instâncias do OpenVPN no mesmo diretório, tenha certeza
de editar as diretivas que criam output files para que as múltiplas instâncias não sobres-
crevam cada output file da outra. Estas diretivas incluem log, log-append, status e ifconfig-
pool-persist.
• Como no arquivo de configuração do servidor, primeiro edite os parâmetros ca, cert, e key
para apontar para os arquivos que você gerou na seção PKI acima. Note que cada cliente
deve ter seu próprio par certificado/chave. Somente o arquivo ca é universal através do
servidor OpenVPN e todos os clientes.
32
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
33
Capítulo 6
Teste
#################################################
# Sample OpenVPN 2.0 config file for #
# multi-client server. #
# #
# This file is for the server side #
# of a many-clients <-> one-server #
# OpenVPN configuration. #
# #
# OpenVPN also supports #
# single-machine <-> single-machine #
# configurations (See the Examples page #
# on the web site for more info). #
# #
# This config should work on Windows #
# or Linux/BSD systems. Remember on #
# Windows to quote pathnames and use #
# double backslashes, e.g.: #
# "C:\Program Files\OpenVPN\config\foo.key" #
# #
# Comments are preceded with ’#’ or ’;’ #
#################################################
34
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
35
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
36
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
37
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
38
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
39
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
persist-key
persist-tun
Note que nós usamos a opção dh para especificar o arquivo contendo os parâmetros Diffie-
Hellman que nós criamos antes. A opção dh só precisa aparecer no arquivo de configuração do
servidor e não no arquivo do cliente. Agora, nós listamos os arquivos contendo os certificados que
iremos usar, começando com o root. Finalmente, nós indicamos que queremos que o OpenVPN
cheque nossa lista de pedidos de certificado antes de autorizar a conexão a um cliente na nossa
rede privada especificando a opção crl-verify e dizendo a lozalização de uma CRL. Nós iremos
demonstrar a verificação CRL depois.
O arquivo de configuração do cliente é um pouco mais simples. O único item de configuração
que não vimos antes é o pull, que complemente o comandopush "route ..."que nós incluímos no
arquivo de configuração do servidor.
# openvpn-client.conf
#
# Set tunnel mode
dev tun
40
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
O próximo passo é instalar o OpenVPN no cliente. Neste passo, só direi que a instalação do
OpenVPN é idêntica à instalação no servidor. Depois de instalado, complete o processo distri-
buindo os seguintes arquivos para o cliente:
• O certificado do cliente.
Antes de iniciar o servidor, nós temos um último passo a realizar. Nós precisamos inicializar a
CRL. A CRL vai ter uma lista de certificados que o nosso CA revogou. Embora nós não tenhamos
revogado nenhum certificado ainda, nossa configuração ainda pede ao servidor OpenVPN para
checar a CRL usando a opção crl-verify na configuração do servidor. Se a nossa VPN não achar
uma CRL, ela vai terminar de forma prematura.
Por enquanto, nós vamos iniciar uma CRL vazia. Depois, nós vamos revogar um certificado
de usuário e atualizar a CRL. Para iniciar a CRL simplesmente peça ao CA para gerar uma. (A
mensagem oculta começando com DEBUG[load_index] vem de um bug inofensivo nesse release
particular do OpenSSL; ignore-o.)
Agora nós estamos prontos para usar o comando a seguir para iniciar um servidor VPN na nossa
41
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
rede local. Depois que esse comando for executado, clientes poderão se conectar.
Depois que o servidor iniciar, tente conectá-lo de um cliente. A linha de comando no cliente é
bem similar, mas lembre-se de usar o nome apropriado para o arquivo de configuração.
Você deve imdediatamente ser capaz de comunicar através da VPN. Se ocorrer um problema,
é hora de descobrir defeitos. Neste caso, você será feliz porque testamos a infra-estrutura dos
certificados usando o s_server e s_client , assim, você pode isolar o que estiver errado. Verifi-
cando o acesso de cliente contra uma CRL
A tarefa final aqui é desligar de forma confiante o acesso à VPN de usuários quando nós não
queremos que eles conectem à nossa rede. Para fazer isso, nós vamos revogar certificados e atu-
alizar nossa CRL. Para descobrir qual certificado pertence a cada cliente, use o arquivo index.txt,
localizado no diretório árvore de certificado. Olhe no arquivo e procure o registro contendo o atri-
buto commonName assinado ao certificado a ser revogado (lembre-se que nós estabelecemos
uma política de assinar o ID único de cada usuário ao atributo commonName). Esse registro
também vai conter o serial number que o CA assinou para este certificado.
Tendo identificado o serial number, nós podemos localizar o certificado do cliente dentro de
newcerts no nosso diretório CA. Este diretório vai conter uma cópia de cada certificado emitido
pelo nosso CA. Os nomes dos arquivos contém os serial numbers assinados a estes certificados.
Neste exemplo, nós decidimos revogar o certificado do user3. Depois de ter olhado o index.txt,
nós achamos que o serial number assinado ao certificado com o atributo commonName que bate
com o user3 é 04. Nós agora sabemos que o certificado correto a revogar é newcerts/04.pem.
A partir de agora, o user3 não vai ter acesso à VPN, enquanto o OpenVPN checa a CRL. Lembre-
se, sempre que você for revogar um certificado, tenha certeza de gerar uma nova CRL.
O OpenSSL também inclui o comando verify, que aceita a opção -crl_check que vai permitir
que você tenha certeza que a sua lista de certificados revogados funciona. O comando verify
requer que o root certificate e a CRL estejam no mesmo arquivo. Antes de você fazer este co-
42
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
[admin@tamarackadmin]$ cat
> CA-DB/cacert.pem CA-DB/crl/crl.pem > tempcrl.pem
Use o comando verify com a opção -crl_check para esecificar a CRL a ser usada. Aqui está
como verificar a rejeição do certificado do user3.
A fim de tentar isso com sua própria instalação, revogue o certificado que você criou para o
cliente da sua VPN e gere uma nova CRL. Você vai ver que não é possível conectar ao servidor
OpenVPN daquele cliente.
• abrindo a porta UDP 1194 no firewall (ou qualquer porta TCP/UDP que você configurou),
ou
• setting up a port forward rule to forward UDP port 1194 from the firewall/gateway to the
machine running the OpenVPN server.
Depois, tenha certeza de que a interface TUN/TAP não está com o firewall sobre ela.
Para simplificar a resolução de problemas, é melhor iniciar o servidor OpenVPN na linha de
comando (ou clicar com o botão direito sobre o arquivo .ovpn no Windows), ao invés de iniciar
como um daemon ou serviço:
Um levantamento de um servidor deveria se parecer com isto(esta saída pode variar entre as
plataformas):
Sun Feb 6 20:46:38 2005 OpenVPN 2.0_rc12 i686-suse-linux [SSL][LZO][EP OLL] built on
Feb 5 2005
Sun Feb 6 20:46:38 2005 Diffie-Hellman initialized with 1024 bit key
Sun Feb 6 20:46:38 2005 TLS-Auth MTU parms [L : 1542D : 138EF : 38EB : 0ET : 0EL : 0]
Sun Feb 6 20:46:38 2005 TUN/TAP device tun1 opened
Sun Feb 6 20:46:38 2005 /sbin/ifconfig tun1 10.8.0.1 pointopoint 10.8.0.2 mtu 1500
Sun Feb 6 20:46:38 2005 /sbin/route add -net 10.8.0.0 netmask 255.255.255.0 gw 10.8.0.2
Sun Feb 6 20:46:38 2005 Data Channel MTU parms [L : 1542D : 1450EF : 42EB : 23ET :
43
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Iniciando um cliente
Assim como no servidor, é melhor iniciar o OpenVPN pela linha de comando(ou clicar com o
botão direito sobre o arquivo .ovpn no Windows), ao invés de iniciar como um daemon ou serviço:
openvpn "arquivo de configuração do cliente"
Agora, tente executar o comando ping pela VPN no cliente. Se você estiver usando roteamento
(dev tun no arquivo de configuração do servidor, por exemplo), tente:
ping 10.8.0.1
Se você estiver usando ponteamento (dev tap no arquivo de configuração do servidor, por exem-
plo), tentar executar o ping no endereço IP de uma máquina na subnet do servidor.
Se o ping obtiver sucesso, parabéns! Agora você tem uma VPN funcional.
44
Capítulo 7
A falta de padrões nesta área significa que a maioria dos sistemas operacionais tem uma ma-
neira diferente de configurar daemons/services para auto iniciar no boot. A melhor maneira de ter
isso funcionalmente configurado por padrão é instalar o OpenVPN como um pacote, como RPM
no Linux ou usando o instalador do Windows. Linux
Se você instalar o OpenVPN via pacote RPM no Linux, o instalador vai configurar um initscript.
Quando executado, o initscript irá escanear por arquivos de configuração .conf em /etc/openvpn,
e se encontrado, vai iniciar um daemon separado para cada arquivo .conf do OpenVPN.
Se você está usando Linux com iptables, edite o arquivo de configuração do firewall, firewall.sh,
fazendo as alterações apropriadas para seu sistema e o copie para o diretório /etc/openvpn.
sample-config-files/openvpn-startup.sh
#!/bin/bash
45
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
# Carrega o firewall
$dir/firewall.sh
sample-config-files/openvpn-shutdown.sh
#!/bin/bash
#!/bin/sh
46
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
#
# openvpn Este shell script cuida do inicio e finalização
# do openvpn no RedHat ou em outro sistema baseado
# no chkconfig.
#
# chkconfig: 345 80 30
#
# description: OpenVPN é um programa robusto e flexivel para tunelamento que
# usa toda as funcionalidades de encriptação, autenticação e certificação
# que a biblioteca OpenSSL fornece, para tunelar seguramente redes IP atraves
# de uma simples porta UDP.
#
# Para instalar:
# copie este arquivo para /etc/rc.d/init.d/openvpn
# shell> chkconfig –add openvpn
# shell> mkdir /etc/openvpn
# crie .conf ou .sh files em /etc/openvpn (veja abaixo)
# Para desinstalar:
# execute: chkconfig –del openvpn
# Notas do autor:
#
# Eu criei um init script em /etc/init.d e alterei o openvpn.spec para automaticamente
# registrar o script. Uma vez que o RPM está instalado você pode iniciar e parar
# o OpenVPN com "service openvpn start"e "service openvpn stop".
#
# Esse init script faz o seguinte:
#
# - Inicia um processo OpenVPN para cada arquivo .conf que ele encontra em /etc/openvpn
#
# - Se /etc/openvpn/xxx.sh existe para um arquivo xxx.conf então ele o executa
# antes de iniciar o OpenVPN (util para fazer openvpn –mktun...).
#
# - Alem de start/stop você também pode:
#
# service openvpn reload - SIGHUP
# service openvpn reopen - SIGUSR1
# service openvpn status - SIGUSR2
# Modificações 2003.05.02
# * Alterado ’==’ para ’=’ para compatibilidade com sh (Bishop Clark).
# * Se condrestart|reload|reopen|status, checa se já não está iniciado (James Yonan).
47
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
# Arquivo de trava
lock="/var/lock/subsys/openvpn"
# Diretorio de PID
piddir="/var/run/openvpn"
# Diretório de trabalho
work=/etc/openvpn
if [ ! -d $piddir ]; then
mkdir $piddir
fi
48
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
if [ -f $lock ]; then
# nós não fomos desligados corretamente
for pidf in /bin/ls $piddir/*.pid 2>/dev/null; do
if [ -s $pidf ]; then
kill at $pidf >/dev/null 2>&1
fi
rm -f $pidf
done
rm -f $lock
sleep 2
fi
rm -f $piddir/*.pid
cd $work
if [ $errors = 1 ]; then
failure; echo
else
success; echo
fi
if [ $successes = 1 ]; then
touch $lock
fi
;;
stop)
echo -n $"Shutting down openvpn: "
for pidf in /bin/ls $piddir/*.pid 2>/dev/null; do
if [ -s $pidf ]; then
kill at $pidf >/dev/null 2>&1
fi
49
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
rm -f $pidf
done
success; echo
rm -f $lock
;;
restart)
$0 stop
sleep 2
$0 start
;;
reload)
if [ -f $lock ]; then
for pidf in /bin/ls $piddir/*.pid 2>/dev/null; do
if [ -s $pidf ]; then
kill -HUP at $pidf >/dev/null 2>&1
fi
done
else
echo "openvpn: service not started"
exit 1
fi
;;
reopen)
if [ -f $lock ]; then
for pidf in /bin/ls $piddir/*.pid 2>/dev/null; do
if [ -s $pidf ]; then
kill -USR1 at $pidf >/dev/null 2>&1
fi
done
else
echo "openvpn: service not started"
exit 1
fi
;;
condrestart)
if [ -f $lock ]; then
$0 stop
# avoid race
sleep 2
$0 start
fi
;;
status)
if [ -f $lock ]; then
for pidf in /bin/ls $piddir/*.pid 2>/dev/null; do
if [ -s $pidf ]; then
kill -USR2 at $pidf >/dev/null 2>&1
fi
50
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
done
echo "Status written to /var/log/messages"
else
echo "openvpn: service not started"
exit 1
fi
;;
*)
echo "Usage: openvpn
start|stop|restart|condrestart|reload|reopen|status"
exit 1
esac
exit 0
51
Capítulo 8
Depois, você deve setar um roteamento na gateway da LAN para rotear a subrede do cliente
VPN (10.8.0.0/24) ao servidor OpenVPN (isto só é necessário se o servidor OpenVPN e o ga-
teway da LAN estão em máquinas diferentes). Incluindo múltiplas máquinas usando uma VPN
ponteada (dev tap)
Um dos benefícios de se usar ponteamento em ethernet é que você tenha isto de graça sem
precisar de configuração adicional. Incluindo múltiplas máquinas no cliente usando uma VPN
roteada (dev tun)
Num ambiente típico de acesso remoto, a máquina cliente conecta à VPN como uma única
máquina. Mas suponha que a máquinha cliente seja um gateway para uma LAN local, e que você
queira que cada máquina na LAN cliente seja capaz de rotear através da VPN.
Para este exemplo, nós iremos assumir que a LAN cliente esteja usando uma subrede 192.168.4.0/24,
e que o cliente VPN esteja usando um certificado com um common name de client2. Nosso ob-
jetivo é configurar a VPN para que qualquer máquinha na LAN cliente possa comunicar com
qualquer máquina na LAN do servidor através da VPN.
Antes de configurar, há alguns pré-requisitos básicos que devem ser seguidos:
• A subrede da LAN cliente (192.168.4.0/24 no nosso exemplo) deve ser exportada à VPN
pelo servidor ou qualquer outro cliente que esteja usando a mesma subrede. Toda subrede
que seja usada na VPN deve ser única.
52
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• O cliente deve ter um único Common Name em seu certificado (client2"no nosso exemplo),
e a flag duplicate-cn não deve ser usada no arquivo de onfiguração do servidor OpenVPN.
Depois, nós vamos lidar com mudanças necessárias na configuração do servidor. Se o ar-
quivo de configuração do servidor não referencia um diretório para clientes, adicione uma refe-
rência agora:
client-config-dir ccd
Na diretiva acima, ccd deve ser o nome para o diretório que tenha sido pré-criado no diretó-
rio padrão onde o daemon do servidor OpenVPN roda. No Linux esse diretório tende a ser
/etc/openvpn e no Windows é usualmente \Program Files\OpenVPN\config. Quando um novo cli-
ente se conecta ao servidor OpenVPN, o daemon vai checar este diretório por um arquivo que
associe o common name do cliente. Se este arquivo for achado, ele vai ser lido e processado
para configurações de diretivas de arquivo adicionais a serem aplicadas ao cliente nomeado.
O próximo passo é criar um arquivo chamado client2 no diretório ccd. Este arquivo deve con-
ter a linha:
Ela vai dizer ao servidor OpenVPN que a subrede 192.168.4.0/24 deve ser roteada para o cli-
ent2.
Depois, adicione a seguinte linha ao arquivo mestre de configuração do servidor (não o
ccd/client2):
Você deve se perguntar: Por que os estamentos redundantes de route e iroute? A razão é que
route controla o roteamento do kernel ao servidor OpenVPN (via interface TUN) enquanto o iroute
controla o roteamento do servidor OpenVPN a clientes remotos. Ambos são necessários.
Próximo, pergunte a você mesmo se você quer permitir tráfico de rede entre a subrede do
client2 (192.168.4.0/24) e outros clientes do servidor OpenVPN. Se sim, adicione a seguinte linha
ao arquivo de configuração do servidor.
client-to-client
push "route 192.168.4.0 255.255.255.0"
Isto vai fazer o servidor OpenVPN conectar a subrede do client2 a outros clientes conectados
à VPN.
O último passo, e um que é freqüentemente esquecido, é adicionar um roteador para o ga-
teway da LAN do servidor que direcione 192.168.4.0/24 à máquina do servidor OpenVPN (você
não precisa disto se a máquina do servidor OpenVPN é o gateway para a LAN do servidor). Su-
ponha que você se esqueceu deste passo e você tenha tentado pingar uma máquina (sem ser
o servidor OpenVPN) na LAN do servidor com endereço 192.168.4.8. O ping vai sair e prova-
velmente atingir a máquina, mas essa máquina não vai saber como rotear a resposta do ping,
porque ela não tem idéia de como atingir 192.168.4.0/24.
Similarmente, se a máquina do cliente rodando o OpenVPN não seja o gateway para a LAN
do cliente, então o gateway para a LAN do cliente deve ter um roteamento que direcione todas as
subredes que deveriam ser atingidas através da VPN para a máquina cliente OpenVPN.
53
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Incluindo múltiplas máquinas ao cliente usando uma VPN ponteada (dev tap)
Isto exige uma configuração mais complexa (talvez não tão complicada em prática, mas com-
plicada de ser explicada com detalhes).
54
Capítulo 9
Quando o OpenVPN recebe este sinal, ele irá fechar e re-abrir a conecxão de rede com a outra
ponta, usando o novo endereço IP designado pelo servidor DHCP.
Você também deve usar a opção –float se você está conectando a uma ponta que está suce-
tivel a mudanças de IP pelo servidor DHCP.
Também é possivel trabalhar com trocas de IP com o sinal SIGUSR1 que é como o sinal
SIGHUP exceto que ele oferece um controle melhor dos sub-sistemas do OpenVPN que ele re-
seta. O sinal SIGUSR1 também pode ser gerado internamente baseado nas opções - -ping e -
-ping-restart. A opção –persist-tun permite um reset sem fechar e abrir o device TUN (que permite
que conexões via vpn não se percam, mesmo durante uma troca de IP). A opção –persist-remote-
ip permite a preservação do endereço IP remoto, mesmo durante uma troca de IP. Isso permite
que ambas as pontas da VPN sejam clientes DHCP. A opção - -persist-key não re-lê as chaves
durante o restart (o que permite ao daemon OpenVPN ser reiniciado mesmo se seus privilégios
forem diminuidos com - -user ou - -group).
Para mais informações sobre como usar o OpenVPN em um endereço dinâmico, veja o FAQ.
55
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Por exemplo, suponha que você queira que clientes conectados usem um servidor DNS in-
terno em 10.66.0.4 ou 10.66.0.5 e um servidor WINS em 10.66.0.8. Adicione esta linha ao arquivo
de configuração do servidor OpenVPN:
Para testar isto no Windows, roda a seguinte linha de comando no prompt depois que a má-
quina esteja conectada a um servidor OpenVPN:
ipconfig /all
Este comando deve dar de saída as opções DHCP oferecidas pelo servidor.
56