Agora que já temos tudo configurado, precisamos gerar os certificados do servidor para que ele consiga emitir e validar os certificados dos clientes.
Entre no diretório /etc/openvpn/easy-rsa. Aqui dentro você verá vários shell-scripts diferentes, todos relacionados com a criação de certificados SSL. Primeiro, edite o arquivo vars. Ele contém algumas variáveis que devem ser modificadas:
KEY_COUNTRY: coloque BR para Brasil;
KEY_PROVINCE: coloque a sigla do seu estado (SP, por exemplo);
KEY_CITY: coloque o nome ou sigla da sua cidade;
KEY_ORG: coloque o nome da sua empresa;
KEY_EMAIL: coloque o email do administrador do servidor.
Estas variáveis são utilizadas durante a criação de todos os certificados do sistema e devem sempre ser informadas corretamente. Salve o arquivo e faça o seguinte:
# . ./source vars
Ele irá executar o arquivo vars, definindo todas as variáveis de ambiente necessárias para os outros scripts que serão executados. Depois:
# ./clean-all
Este arquivo irá limpar o diretório /etc/openvpn/easy-rsa/keys (se você não tiver modificado o padrão do arquivo vars). Depois:
# ./build-ca
Este script demora um pouco para executar, geralmente você pode aceitar todos os padrões que ele oferece (que são lidos das variáveis definidas no vars). Ele cria uma autoridade certificadora que valida certificados e emite certificados com permissão de conectar no servidor. NUNCA apague o arquivo gerado pelo script. Se o fizer, todos os certificados já emitidos não terão permissão para conectar no servidor novamente e você vai precisar emitir todos novamente.
Agora já temos uma autoridade certificadora. Vamos gerar o certificado do servidor e dos clientes.
Para gerar o certificado do servidor:
# ./build-key-server servidor
Lembre-se de substituir "servidor" pelo nome do seu servidor. Aceite todos os padrões, mas em "Common name" coloque o nome do seu servidor. Logo após, ele oferece incluir uma senha no certificado. Pode deixar isso em branco. Dessa parte em diante, quando o script te fizer perguntas, sempre responda afirmativamente com "y".
Para gerar os certificados para os clientes execute o script build-key:
# ./build-key cliente01
Serão feitas todas as perguntas que foram feitas quando você executou o build-key-server. Responda todas adequadamente e lembre-se de responder com "y" as últimas duas perguntas ou o certificado não será adicionado ao BD de certificados válidos. Lembre-se de trocar "cliente01" pelo nome que você quer que o arquivo do certificado tenha.
Para revogar um certificado e fazer com que ele não consiga mais se conectar ao servidor faça o seguinte:
# cd /etc/openvpn/easy-rsa/
# . ./vars
# ./revoke-full cliente01
Para completar a operação, é necessário reiniciar o OpenVPN. Lembrando que isso só é necessário quando você quiser evitar que um determinado certificado consiga se conectar ao servidor.
Depois, gere a chave DH que permite que o cliente e servidor envolvidos na conexão troquem certificados de forma segura e cifrada, confirmando suas identidades:
# ./build-dh
Este script também demora um pouco, dependendo do equipamento onde você está executando. Todos os certificados são criados em /etc/openvpn/keys, se você não tiver modificado o padrão do script vars, editado anteriormente. Dentro deste diretório, pode ser que você encontre arquivos com a extensão .csr. Todos eles podem ser removidos pois são apenas requisições de certificados.
[1] Comentário enviado por paulorvojr em 26/01/2009 - 21:46h
Belo artigo!!,
ja usei muito o openvpn, alias foi a primeira solução de vpn que usei, o openvpn, muito bom recomendo.
o unico chato era que algumas pessoas (usuario chatos) nao queriam usar o cliente do openvpn em suas maquinas windows, ai tive que apelar pro PPTPD, ai o usuário so "disca" igual a uma vpn a la windows microsfot hehe.
recomendo a todos ae!! nao utilizei este artigo, mas pelo que li esta todo correto
[2] Comentário enviado por leandromoreirati em 27/01/2009 - 09:34h
Pogo,
Só nao entendi qual é a função da bridge nesse caso, pois tenhos alguns servidores com open e nao uso bridge nele axei interessante.
Outra coisa para deixa-la acessível na rede basta no script que carrega a bridge colocar um ip da valido na rede local, faço isso em alguns clientes e a maquina se torna uma bride mas com a acessibilide de um host linux da rede.
[3] Comentário enviado por pogo em 27/01/2009 - 10:43h
Moreira,
A bridge no caso é para que os protocolos que utilizem broadcast não dêem problemas e funcionem corretamente. Sem a bridge, a VPN é roteada e roteadores não fazem forward de broadcasts. Neste caso, o acesso a compartilhamentos com \\servidor\arquivos, por exemplo, não funcionariam (de acordo com o FAQ oficial do OpenVPN).
[4] Comentário enviado por elgio em 30/01/2009 - 10:21h
Parabéns pelo artigo. Gostei muito de sua linguagem, explicando cada passo, indo além do que sempre costumamos ver no VOL: mera receita de bolo.
Respondendo ao leo_jfa: uma VPN em modo bridge se comportará logicamente como se fosse um switch. Imagina que tem um server ligado na porta 1 do switch e o outro server na porta 24, mas que o switch na verdade são dois, separados por KMs uma parte do outro e como não tem um cabo quilométrico para ligar as duas partes, se usa a VPN em modo bridge. Tudo que entra na porta 1 do "switch" passa pela VPN para sair na porta 24, tal qual um switch.
EU NÃO RECOMENDO bridge a menos que você realmente precise dela. Em modo roteador é muito mais eficiente pois os broadcasts serão cortados. Nosso amigo aqui explicou bem porque precisava de bridge e porque usou ele. Certíssimo, com a ressalva que compartilhamento de Windows dá para ser feito inter-redes, se houver um servidor de Wins disponível.
No mais, use bridge com moderação! Na maioria dos casos de VPN, usar em modo roteador atende as necessidades.
[5] Comentário enviado por matheus.silva em 31/01/2009 - 15:04h
Fala Pedro blz????
Cara. show de bola o artigo.. com certeza será de grande utilidade pra mim que tenho muitos clientes com servidores windows e uma situação parecida com a sua.
[6] Comentário enviado por juniorarruda em 15/02/2009 - 10:34h
Parabens pelo artigo
Agora me tira uma dúvida, essa implantaçao seria caso eu quisesse colocar várias estações independentes se conectando diretamente ao servidor da matriz. Mas se em alguma filial eu tiver um servidor firewall, seria melhor eu fazer o firewall se conectar ao servidor VPN da matriz roteando o tráfego da sub-rede da filial para matriz ou fazer a conexão independente nas estação?
[7] Comentário enviado por pogo em 16/02/2009 - 08:46h
Bom dia Júnior,
Se você vai fazer uma VPN entre filiais, é melhor fazer uma VPN roteada entre 2 servidores. Assim, toda a sua rede interna sempre terá acesso à rede da outra filial sem necessidade de cada estação se conectar.
A VPN que descrevi no artigo só é interessante caso os usuários necessitem acessar a VPN quando estão fora de qualquer filial da empresa (como por exemplo em suas casas) e necessitam de algum recurso que só está disponível na rede interna.
Matheus,
Valeu pela força cara! Espero que o texto realmente te ajude =)
[8] Comentário enviado por doldan em 07/03/2009 - 07:49h
Muito bom artigo, para o fim a que se destina.
Tenho uma duvida que ainda não resovi, como posso configurar o openvpn apenas para conectar a uma vpn na matriz, não usamos certificados, no windows usamos o cisco vpnclient, colocamos os logins de acesso e pronto, quero passar essa conexão para o servidor linux debian, mas não consegui os parâmetros para configurar o openvpn.
[9] Comentário enviado por pogo em 07/03/2009 - 13:14h
doldan,
você pode usar as mesmas instruções que estão no texto, mas você não necessariamente vai precisar do openvpn gui. você pode inicializar o openvpn como um serviço no windows (instalando apenas o openvpn, não o openvpn gui).
[10] Comentário enviado por tomassoni em 26/03/2009 - 21:34h
Cara, estou com uma duvida para logar mais de um cliente é possível? tenho 9 filiais gostaria de conectar as 9 em um único ponto tem como com OpenVPN eu já dei um breve pesquisada e não encontrei muita coisa a respeito.
[12] Comentário enviado por eduardo em 30/09/2009 - 15:14h
Boa tarde,
Muito bom o seu artigo, mas gostaria de saber se você tem como me dar um complemento. Preciso ustilizar o openVPN GUI com autenticação também. Pode ser com certificados e senha ou apenas senha.
Que alteração preciso fazer para habilitar a autenticação?
[13] Comentário enviado por cabriocarico em 03/09/2010 - 10:36h
Bom dia,
Caro pogo, eu andei lendo seu artigo e achei muito interessante. Resolví entrar em contato para pedir ajuda na soluçÃO DE UM PROBLEMA.
Eu trabalho com o DEBIAN LENNY, e através de meu servidor, eu conseguime conectar com um VPN, onde o servidor MATRIZ fica em outro lugar.
NO meu servdior FILIAL, eu conectei sem muitos problemas. COnsigo pingar no IP da VPN.
Mas não estou conseguindo rotear para minha rede interna. Assim, ao ver o comentário [7], resolví solicitar sua ajuda.
As minhas estações da rede interna usam WINX XP, com endereços 192.168.0.XXX.
Quando dou tracert IP da VPN, nem se quer chega no meu servidor.
O que devo fazer para conseguir com que minha rede interna consiga pingar no IP da VPN?
OBS: SERVIDOR sem FIREWALL, sem PROXY, com DHCP e compartilhamento (INTERNET).
[14] Comentário enviado por pogo em 03/09/2010 - 11:00h
cabriocarico,
Você tem que verificar 2 detalhes:
* As redes que você está tentando interligar possuem o mesmo IP? Por exemplo, as duas redes são 192.168.0.X?
* Você tem regras no IPTables para permitir o roteamento entre as duas redes? O IP Forward no seu servidor gateway está habilitado?
[15] Comentário enviado por cabriocarico em 05/09/2010 - 15:27h
Eu recebí os certificados gerados para eu poder me conectar com uma VPN e assim compartilhar para minha rede interna.
O meu servidor consegue se conectar, autentica a conexão, eu consigo pingar do meu servidor no ip da VPN 10.X.X.X. Sem problemas.
Mas de qualquer PC da minha rede interna eu não consigo pingar no ip da VPN 10.X.X.X.
Segue abaixo minha configuracao:
eth0: 192.168.X.X (VELOX)
eth1 192.168.0.1 (rede interna).
pc da rede interna 192.168.0.5
[16] Comentário enviado por pogo em 05/09/2010 - 15:33h
cabriocarico,
O problema pode ser alguma outra regra no seu firewall que está impedindo a comunicação entre as redes. Reveja as regras e verifique por alguma que esteja negando pacotes de ou para a rede remota.
[18] Comentário enviado por lflavio_sp em 17/10/2011 - 23:32h
Naum conheço mto de linux mas ja refiz esses passos mas não consegui conectar da essa mensagem sempre e estou precisando implantar urgente na empresa o q pode estar acontencendo ...
eth0 .: 192.168.0.1 local
eth1 .: 10.1.1.2
Na bridge estou colocando eth0 com esse ip
no openvpn bridge 192.168.0.1 255.255.255.0 192.168.0.10 192.168.0.20
on Oct 17 23:26:17 2011 OpenVPN 2.0.9 Win32-MinGW [SSL] [LZO] built on Oct 1 2006
Mon Oct 17 23:26:17 2011 WARNING: No server certificate verification method has been enabled. See http://openvpn.net/howto.html#mitm for more info.
Mon Oct 17 23:26:17 2011 LZO compression initialized
Mon Oct 17 23:26:17 2011 UDPv4 link local (bound): [undef]:1194
Mon Oct 17 23:26:17 2011 UDPv4 link remote: 10.1.1.2:1194
log.:
tls error : Cannot Locate HMAC in incomming packet
Netstat mostra a porta 10.1.1.2:1194 mas qdo dou um nmap naum mostra, deveria mostrar ???