Criando VPN site-to-site, conectando diversas filiais a matriz com openVPN

Olá ! Nesse artigo apresento uma solução de VPN para conectar diversas filiais a matriz, utilizando openVPN com chaves estáticas e biblioteca lzo para compressão.

[ Hits: 130.963 ]

Por: Fabio Soares Schmidt em 28/08/2010


Configuração MATRIZ



Vamos configurar a VPN na nossa matriz, que irá receber todas as filiais.

Crie o diretório openvpn-matriz em /etc para criar a configuração para cada filial :

# mkdir /etc/openvpn-matriz
# chown openvpn.openvpn /etc/openvpn-matriz

(se sua instalação não criou esse usuário e grupo crie)

Vamos criar o diretório que irá armazenar os logs:

# mkdir /var/log/openvpn
# chown openvpn.openvpn /var/log/openvpn

Começamos o primeiro arquivo com configuração para a filial1 (Espírito Santo):

# vi matriz-espiritosanto.conf

Esse é conteúdo da configuração para esta filial:

## FABIO S. SCHMIDT - fabio@improve.inf.br
## INTERFACE VPN PARA CONEXAO DA MATRIZ COM A FILIAL ESPIRITO SANTO

## REDE LOCAL MATRIZ: 192.168.1.
## REDE LOCAL ESPIRITO SANTO: 192.168.2.

# Interface para a conexao, identificar para cada filail
# Ex.: tun0, tun1, tun2

dev tun0

# 10.0.0.2 IP que sera estabelicido para a matriz na vpn
# 10.0.0.1 IP que sera estabelecido para a filial1 na vpn
ifconfig 10.0.0.2 10.0.0.1

# Diretorio que contem as chaves e configuracoes
cd /etc/openvpn-matriz

# Indica qual chave utilizar para esta conexao
secret key-filial1

#Cada tunel deve utilizar uma porta diferente
port 5001

# Usuario e grupo que executam o daemon Openvpn
user openvpn
group openvpn

#Utilizar a biblioteca de compressao de dados
comp-lzo

#256-bit AES
#Se nao for setado o openvpn usa por padrao Blowfish, 128 bits
cipher AES-256-CBC

#Ativar rotas automaticamente
up /etc/openvpn-matriz/rotas-espiritosanto.up

#Envia um ping para a outra ponta para manter a conexao em firewalls statefull
ping 15

#Nivel de log
verb 4

#Manter o tunel ativo e chave em caso de perda de conexao
persist-tun
persist-key

#Escreve um pequeno status sobre a conexao, reescrito a cada minuto
status /var/log/openvpn/status-filial1.log

#Vamos utilizar um arquivo para o log da conexao de cada filial
log-append /var/log/openvpn/filial1.log

Criaremos agora a configuração para a filial2 (Rio de Janeiro):

# vi matriz-riodejaneiro.conf

## FABIO S. SCHMIDT - fabio@improve.inf.br
## INTERFACE VPN PARA CONEXAO DA MATRIZ COM A FILIAL RIO DE JANEIRO

## REDE LOCAL MATRIZ: 192.168.1.
## REDE LOCAL RIO DE JANEIRO: 192.168.3.

# Interface para a conexao, identificar para cada filail
# Ex.: tun0, tun1, tun2

dev tun1

# 10.2.0.2 IP que sera estabelicido para a matriz na vpn
# 10.2.0.1 IP que sera estabelecido para a filial2 na vpn
ifconfig 10.1.0.2 10.1.0.1

# Diretorio que contem as chaves e configuracoes
cd /etc/openvpn-matriz

# Indica qual chave utilizar para esta conexao
secret key-filial2

#Cada tunel deve utilizar uma porta diferente
port 5002

# Usuario e grupo que executam o daemon Openvpn
user openvpn
group openvpn

#Utilizar a biblioteca de compressao de dados
comp-lzo

#256-bit version of AES (Advanced Encryption Standard)
#Se nao for setado o openvpn usa por padrao Blowfish, 128 bits
cipher AES-256-CBC

#Ativar rotas automaticamente
up /etc/openvpn-matriz/rotas-riodejaneiro.up

#Envia um ping para a outra ponta para manter a conexao em firewalls statefull
ping 15

#Nivel de log
verb 3

#Manter o tunel ativo e chave em caso de perda de conexao
persist-tun
persist-key

#Escreve um pequeno status sobre a conexao, reescrito a cada minuto
status /var/log/openvpn/status-filial2.log

#Vamos utilizar um arquivo para o log da conexao de cada filial
log-append /var/log/openvpn/filial2.log

Criaremos agora a configuração para a filial3 (Minas gerais):

# vi matriz-riodejaneiro.conf

## FABIO S. SCHMIDT - fabio@improve.inf.br
## INTERFACE VPN PARA CONEXAO DA MATRIZ COM A FILIAL MINAS GERAIS

## REDE LOCAL MATRIZ: 192.168.1.
## REDE LOCAL MINAS GERAIS: 192.168.3.

# Interface para a conexao, identificar para cada filail
# Ex.: tun0, tun1, tun2

dev tun2

# 10.1.0.2 IP que sera estabelicido para a matriz na vpn
# 10.1.0.1 IP que sera estabelecido para a filial2 na vpn
ifconfig 10.2.0.2 10.2.0.1

# Diretorio que contem as chaves e configuracoes
cd /etc/openvpn-matriz

# Indica qual chave utilizar para esta conexao
secret key-filial3

#Cada tunel deve utilizar uma porta diferente
port 5003

# Usuario e grupo que executam o daemon Openvpn
user openvpn
group openvpn

#Utilizar a biblioteca de compressao de dados
comp-lzo

#256-bit version of AES (Advanced Encryption Standard)
#Se nao for setado o openvpn usa por padrao Blowfish, 128 bits
cipher AES-256-CBC

#Ativar rotas automaticamente
up /etc/openvpn-matriz/rotas-minasgerais.up

#Envia um ping para a outra ponta para manter a conexao em firewalls statefull
ping 15

#Nivel de log
verb 4

#Manter o tunel ativo e chave em caso de perda de conexao
persist-tun
persist-key

#Escreve um pequeno status sobre a conexao, reescrito a cada minuto
status /var/log/openvpn/status-filial3.log

#Vamos utilizar um arquivo para o log da conexao de cada filial
log-append /var/log/openvpn/filial3.log

Vamos gerar as chaves de criptografia de cada filial:

# openvpn --genkey --secret /etc/openvpn-matriz/key-filial1
# openvpn --genkey --secret /etc/openvpn-matriz/key-filial2
# openvpn --genkey --secret /etc/openvpn-matriz/key-filial3


Sete o usuário e grupo openvpn como proprietário dos 3 aquivos das chaves, e sete a permissão para 400.

Você pode ter visto que adicionamos o comando "up /etc/openvpn-matriz/rotas-NOMEDAFILIAL.up" para criar as rotas para cada filial, segue o conteudo de cada um (obviamente o usuario openvpn deve ter permissão para execução):

# more rotas-espiritosanto.up

#!/bin/bash
route add -net 192.168.2.0 netmask 255.255.255.0 gw 10.0.0.1

# more rotas-riodejaneiro.up

#!/bin/bash
route add -net 192.168.3.0 netmask 255.255.255.0 gw 10.1.0.1

# more rotas-minasgerais.up

#!/bin/bash
route add -net 192.168.4.0 netmask 255.255.255.0 gw 10.2.0.1

Estes são os comandos para inicializar as conexões (você pode criar um script para inicializar):

# openvpn --config /etc/openvpn-matriz/matriz-espiritosanto.conf --script-security 3 system -daemon &
# openvpn --config /etc/openvpn-matriz/matriz-minasgerais.conf --script-security 3 system -daemon &
# openvpn --config /etc/openvpn-matriz/matriz-riodejaneiro.conf --script-security 3 system -daemon &


Assim que você inicializar, cada conexão irar gerar o seus arquivos de log e status no diretório que configuramos: /var/log/openvpn

Página anterior     Próxima página

Páginas do artigo
   1. Nosso cenário
   2. Instalação
   3. Configuração MATRIZ
   4. Configuração FILIAIS
Outros artigos deste autor

Implementação de NIDS com EasyIDS

SeamlessRDP - Executando aplicações Windows

Instalação do Oracle 10g R2 no SUSE Linux Enterprise Server 11

Controle de acesso à internet com Squid

Leitura recomendada

Instalando Apache 1.3.33 com suporte a PHP no Slackware

DHCP e BIND9 - Se entendendo via Dynamic DNS

tMSNc - MSN modo texto

Atualizando Flash Player no Firefox em Antergos (Arch Linux)

SFTP Server com SSH, Chroot e Rsyslog

  
Comentários
[1] Comentário enviado por ctavares em 29/08/2010 - 11:07h

Legal, estou no aguardo do material sobre monitoramento das redes com MRTG. Abraços.

[2] Comentário enviado por irado em 29/08/2010 - 20:36h

parabéns fs.schimidt. Frequentemente surgem colegas aqui no VOL com muitas perguntas sobre VPN e o seu artigo é bem claro. Até fiquei com vontade de pegar um projetinho dêsses para poder aplica-lo :)

[3] Comentário enviado por cruzeirense em 30/08/2010 - 13:25h

Excelente artigo!!!
Utilizo vpn quando tenho que dar manutenção num cliente e tanto eu quanto ele não temos um IP valido.
Deixei um servidor que tem um ip válido fixo (poderia ser dinamico também) como servidor para a vpn e assim posso acessar qualquer máquina da vpn via 3g no netbook.
Eu utilizo o neorouter, que apesar de não ser open source ele tem uma licença free "para sempre" para até 256 máquinas (o que na maioria dos casos é mais do que o suficiente).
O melhor do neorouter é que a configuração é praticamente zero.
Basta você informar o nome de usuário, senha e o endereço do servidor que você já recebe um ip válido na vpn.
Outro ponto positivo é que o neorouter funciona em windows, linux, mac, android e tem algumas versões para você instalar no seu roteador de internet.
quem quiser conhecer o produto:
www.neorouter.com

Abraços,

Renato

[4] Comentário enviado por _Dener_ em 09/09/2010 - 08:57h

Ótimo Post, contribuiu muito aqui no VOL e também sanou algumas duvidas minha.

Caso você não possua um IP fixo, você também pode usar o Serviço da Winco que trabalha com VPN, eles tem o serviço DDNS (Dynamic Domain Name System) que resolve muitos problemas de endereços IP dinamicos e o serviço é grátis.
http://www.winco.com.br/ddns

Deixo ai a minha dica, Abraços.

Dener

[5] Comentário enviado por diegoo em 09/09/2010 - 17:03h

Andei pesquisando sobre o neorouter, mas não encontrei muito material, porque no meu caso tenho a matriz e filias (pequenas 2 a 3 pcs) e queria tipo de controle da rede dessas pequenas filias sem montar servidor e tal, o netrouter faz isso??

[6] Comentário enviado por cruzeirense em 13/09/2010 - 16:56h

prezado diegoo,

O neorouter precisa de um servidor para funcionar.
Você pode utilizar qualquer máquina que tenha um ip válido na internet, mesmo que seja ip dinâmico.
você pode utilizar um serviço de dns dinamico conforme sugerido acima caso não tenha o ip fixo.

Para o neorouter funcionar você deve designar uma máquina para ser servidor, mas é importante lembrar que a máquina não precisa ser dedicada para isso.
Qualquer maquininha fraca pode ser um servidor para o neorouter.

O bom do neorouter é que tem versões para diversos sistemas operacionais, e inclusive em alguns roteadores pode ser instalado o neorouter.

Estou usando já ha algum tempo e tenho me surpreendido com ele.

No meu caso tenho um servidor slackware que uso para compartilhar a internet e aproveitei para colocar o servidor do neorouter.
Configurei todos os meus clientes para conectarem automaticamente na vpn e assim já tenho um ip valido para conectar diretamente nas máquinas para utilizar, vnc, terminal server, compartilhamento de arquivos e impressoras, e qualquer serviço que se possa utilizar em uma rede.

Abraços,

Renato

[7] Comentário enviado por andrefreire em 18/11/2010 - 15:11h

Bom tarde !

Fiz uns testes seguindo seu artigo e tudo funcionou muito bem. Logo em seguida me surgiu uma dúvida. Será que existe, nesta configuração, como as filiais se comunicarem entre si ? Como seria então as rotas no firewall ?

[8] Comentário enviado por fs.schmidt em 29/11/2010 - 14:50h

Olá André ! Desculpe a demora em responder.

Esta configuração não abrange a comunicação entre as filiais, para isto você deve procurar sobre a configuração do Openvpn em modo Bridge.

Obrigado, espero em breve publicar um novo artigo abrangendo a sua necessidade.

[9] Comentário enviado por egohernan em 22/10/2012 - 17:22h

Fábio, boa tarde!

Perfeito seu material. Tinha algumas dúvidas quanto ao funcionamento da VPN com mais de uma filial e através desse material consegui entender onde estava errando. Agora uma dúvida, tem acontecido da conexão cair e voltar somente quando reinicio os equipamentos (matriz e filiais). Como poderia resolver isso?

Agradeço.


Abraços,

Diego

[10] Comentário enviado por eduardotb em 18/12/2013 - 12:25h

Boa tarde Fabio,

Como deve ficar a configuração do modem para a conexão da vpn entre a matriz e filial? Deve ficar em modo bridge?

Obrigado. Abs!

[11] Comentário enviado por maucosta80 em 08/09/2015 - 16:49h

Boa tarde, sei que o post é antigo mas estava precisando de ajuda com a vpn.
Eu não entendi como configuro o IP publico de origem, IP publico de destino, rede interna de origem e rede interna remota.

Grato.

[12] Comentário enviado por rjdiniz em 26/12/2017 - 16:20h

Olá... você tem algo mais atualizado?

OpenVPN 2.3.4 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Jun 26 2017
library versions: OpenSSL 1.0.1t 3 May 2016, LZO 2.08

Obrigado!
Raul Júnior


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts