Como você deve se lembrar do início do artigo, o OpenVPN foi feito para ser simples: coisas muito complicadas tendem a ser configuradas de maneira errônea, o que acaba causando falhas na segurança do sistema.
Sendo assim, não é errado imaginar que a configuração do sistema seja simples. Com algumas opções você já consegue deixar o servidor inteiro funcionando perfeitamente. No meu ambiente preferi fazer com que o OpenVPN funcionasse por uma bridge por alguns motivos:
Algumas aplicações que são muito utilizadas pelos vendedores e diretores da minha empresa (como o ERP e o CRM) utilizam broadcasts de rede (que são barrados por roteadores);
Precisava permitir acesso a compartilhamentos de arquivos do Windows. Isto não funciona quando se faz uma rede roteada.
Também escolhi utilizar autenticação através de certificados para evitar senhas passando por redes inseguras e também para evitar problemas com usuários esquecendo as senhas. Com os certificados, nenhuma senha é necessária e para evitar que um determinado certificado se conecte ao servidor, basta revogá-lo. Veremos todos os detalhes de certificados mais adiante.
Primeiro, vou explicar como configurar o OpenVPN e depois explicarei como fazer a bridge no Linux.
Configurando o OpenVPN
O OpenVPN é um pouco diferente: ele não cria nenhum diretório padrão, nem arquivos de configuração na instalação. Quando você vai criar uma nova VPN você começa um novo arquivo de configuração do zero.
Crie o diretório /etc/openvpn:
# mkdir /etc/openvpn
Para dentro deste diretório você deve copiar o diretório easy-rsa, que está dentro do diretório criado quando você descompactou o OpenVPN na sua máquina.
# cp -R openvpn-2.0.9/easy-rsa /etc/openvpn
O easy-rsa é um conjunto de scripts que facilitam o processo de criação de certificados digitais. Estes serão utilizados para autenticar os usuários e permitir que eles estabeleçam a conexão com o nosso servidor.
Depois, crie um diretório que irá guardar os arquivos de configuração da VPN que iremos criar. Você pode dar qualquer nome a este diretório. Aqui, vou chamá-lo de vol-vpn:
# mkdir /etc/openvpn/vol-vpn
Dentro dele, crie um arquivo texto com qualquer nome. Ele irá conter todos os parâmetros da configuração da VPN que estamos fazendo. Ele vai ficar mais ou menos assim:
# cat /etc/openvpn/vol-vpn.conf
# Define em qual endereço o servidor aceitará conexões # Coloque um endereço válido no seu arquivo
local 10.0.0.1
# Porta na qual o servidor aceitará conexões
port 1194
# Protocolo utilizado no túnel
proto udp
# Dispositivo utilizado pelo OpenVPN
dev tap0
# Indica que o servidor atuará como o # controlador no canal de comunicação # durante a conexão TLS
tls-server
# Permite que os clientes conectados ao # servidor troquem pacotes entre si
client-to-client
# Para não precisar especificar o caminho # completo nas opções ca, cert, key, dh e tls-auth # utilizamos esta opção
cd /etc/openvpn/keys
ca ca.crt
cert vpnsrv.crt
key vpnsrv.key
dh dh1024.pem
# Chave estática que atua como uma segunda # camada de proteção. Servidor só aceita conexões caso # este arquivo também exista no cliente. # gere com openvpn --genkey --secret ta.key
tls-auth /etc/openvpn/keys/ta.key 0
# Define que atuaremos como servidor
mode server
# Número máximo de clientes simultâneos conectados # ao servidor. Neste caso, em um dado momento apenas # 10 clientes conseguirão ficar conectados ao mesmo tempo. # Mude para o número que você desejar e seus recursos # permitirem
max-clients 10
# Permite que 2 clientes com o mesmo nome se conectem ao # servidor ao mesmo tempo. Sem esta opção, o cliente que tentar # se conectar derruba o cliente já conectado.
duplicate-cn
# Define o IP interno do servidor e a faixa de IP's que serão # atribuídos aos clientes quando se conectarem. Neste caso, o # OpenVPN pode atribuir qualquer um dos 20 IP's no range configurado.
server-bridge 192.168.0.1 255.255.255.0 192.168.0.10 192.168.0.30
# Configura o DNS no cliente
push "dhcp-option DNS 192.168.0.254"
# Configura o servidor WINS no cliente. Geralmente # este é o controlador de domínio da sua rede.
push "dhcp-option WINS 192.168.0.3"
# Define qual será o gateway utilizado pelos clientes # quando conectarem na VPN. É bom que este gateway seja # a interface interna do seu servidor OpenVPN.
push "default-gateway 192.168.0.1"
# Define quando a outra ponta está morta. A cada 10 segundos # um ping é enviado e se não for recebido em 120 segundos uma resposta, # definimos que a outra ponta está morta.
ping 10
ping-restart 120
# Configura as mesmas opções no cliente.
push "ping 10"
push "ping-restart 60"
# Define que os dados serão comprimidos antes # de serem enviados pelo canal de comunicação.
comp-lzo
# No arquivo status são gravados os dados dos clientes # que se conectam ao servidor. Bom para controle do servidor.
status /etc/openvpn/vol-vpn/openvpn-status.log 2
# Quantidade de informações que serão escritas nos logs # do OpenVPN. Quanto maior o número, mais informações.
verb 4
# Define quais serão os logs do sistema.
log /var/log/openvpn-vol-vpn.log
log-append /var/log/openvpn-vol-vpn.log
Bem simples, não? Obviamente este é um arquivo básico que tem como objetivo apenas fechar uma VPN que "faz o serviço", nada de avançado. Se você quiser uma explicação detalhada sobre estas e mais outras opções que podem te ajudar bastante, leia o FAQ do OpenVPN.
[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 ???