Nosso cenário
Apresento uma solução de VPN para conectar diversas filiais a matriz, utilizando openVPN com chaves estáticas, biblioteca lzo para compressão e utilização do MRTG para monitorar o tráfego de cada filial.Nesse cenário temos a matriz com IP fixo e as filiais com IPs dinâmicos. Mas nada impede de se utilizar IP dinâmico na matriz, você pode criar um DNS dinâmico.
Seguem as configurações utilizadas:
Distribuição usada: CentOS-5.5
Matriz:
- IP externo matriz= 200.200.200.200
- Rede interna matriz = 192.168.1.0/24
Filial1 (chamaremos de Espírito Santo):
- Rede interna = 192.168.2.0/24
Filial2 (chamaremos de Rio de Janeiro):
- Rede interna = 192.168.3.0/24
Filial3 (chamaremos de Minas Gerais):
- Rede interna = 192.168.4.0/24
Versão openVPN: 2.1.2
Versão lançada em 15/08/2010, o changelog você pode ver aqui: http://www.openvpn.net/index.php/open-source/documentation/change-log/71-21-change-log.html
Efetue o download em:
Versão lzo: 2.0.3
Efetue o download em:
Instalação
Após efetuar o download da biblioteca lzo e dos sources do openVPN, vamos compilar e instalar (esse procedimento será idêntico na matriz e em todas as filiais).Primeiro verifique se o pacote openSSL está instalado conforme o exemplo:
# rpm -q openssl
openssl-0.9.8e-12.el5_4.6
Se não estiver, execute o comando:
# yum install openssl
1. LZO
Entre no diretório onde você baixou os sources e descompacte o arquivo:
# tar zxvf lzo-2.03.tar.gz
Vamos compilar sem nenhuma configuração específica:
# ./configure
# make check (para testar a biblioteca de compressão)
# make
# make install
2. openVPN
Entre no diretório onde você baixou os sources e descompacte o arquivo:
# tar zxvf openvpn-2.1.2.tar.gz
Por padrão irá utilizar o diretório /usr/local com basedir, altere se houver necessidade.
# ./configure
# make
# make install
Vamos ver se o openVPN foi instalado:
# type openvpn
openvpn is /usr/local/sbin/openvpn
Feito isso, vamos efetuar as configurações.
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
## 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
## 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
## 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
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
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
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
Configuração FILIAIS
Nas filiais, após seguir os passos de instalação, vamos criar o diretório /etc/opevpn-filial que irá conter o arquivo para conexão com a matriz.# mkdir /etc/openvpn-filial
# chown openvpn.openvpn /etc/openvpn-filial
(se a instalação não criou esse usuário e grupo crie)
Vamos criar o diretório para os logs:
# mkdir /var/log/openvpn
# chown openvpn.openvpn /var/log/openvpn
Copie para este diretório de cada filial a sua respectiva chave:
- key-filial1 - Espírito Santo
- key-filial2 - Rio de Janeiro
- key-filial3 - Minas gerais
No diretório criado, vamos criar o arquivo matriz.conf.
Vamos ao exemplo com Espírito Santo (Filial1), está bem comentado para facilitar a criação das configurações das outras filiais:
## FABIO S. SCHMIDT - fabio@improve.inf.br
## INTERFACE VPN PARA CONEXAO DA FILIAL XXXX COM A MATRIZ
## REDE LOCAL MATRIZ: 192.168.1.
## REDE LOCAL ESPIRITO SANTO: 192.168.2.
#Endereço do servidor Matriz
#remote IP
remote 200.200.200.200
# Interface para a conexao
# Ex.: tun0, tun1, tun2
#Em cada filial so havera uma interface tun, pode setar todas como tun0
dev tun0
# Aqui é o inverso da MATRIZ
ifconfig 10.0.0.1 10.0.0.2
# Diretorio que contem as chaves e configuracoes
cd /etc/openvpn-filial
# Indica qual chave utilizar para esta conexao
secret key-filial1
#protocolo
proto udp
#Cada tunel deve utilizar uma porta diferente
#Coloque a porta conforme a configuracao de cada filial na matriz
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 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-filial/rotas-matriz.up
#Envia um ping para a outra ponta para mantera 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-matriz.log
#Nao vamos enviar as mensagens para o syslog
log-append /var/log/openvpn/matriz.log
## INTERFACE VPN PARA CONEXAO DA FILIAL XXXX COM A MATRIZ
## REDE LOCAL MATRIZ: 192.168.1.
## REDE LOCAL ESPIRITO SANTO: 192.168.2.
#Endereço do servidor Matriz
#remote IP
remote 200.200.200.200
# Interface para a conexao
# Ex.: tun0, tun1, tun2
#Em cada filial so havera uma interface tun, pode setar todas como tun0
dev tun0
# Aqui é o inverso da MATRIZ
ifconfig 10.0.0.1 10.0.0.2
# Diretorio que contem as chaves e configuracoes
cd /etc/openvpn-filial
# Indica qual chave utilizar para esta conexao
secret key-filial1
#protocolo
proto udp
#Cada tunel deve utilizar uma porta diferente
#Coloque a porta conforme a configuracao de cada filial na matriz
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 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-filial/rotas-matriz.up
#Envia um ping para a outra ponta para mantera 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-matriz.log
#Nao vamos enviar as mensagens para o syslog
log-append /var/log/openvpn/matriz.log
Como você pode ver, setamos o comando "/etc/openvpn-matriz/rotas-matriz.up" que irá levantar as rotas para a rede da matriz, como o exemplo:
(Filial1)
#!/bin/bash
route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.0.0.2
route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.0.0.2
Lembrando que 192.168.1.0/24 é a rede local na Matriz e 10.0.0.2 o IP da VPN setado para a matriz para a conexão da Filial1.
Este é o script para inicializar a VPN em cada filial:
openvpn --config /etc/openvpn-filial/matriz.conf --script-security 3 system -daemon &
Feito isso, nossa vpn está pronta para funcionar em cada filial, não vou entrar em detalhes de liberação de portas no firewall, pois pode ser encontrada muita documentação sobre isso aqui no VOL.
Já estou preparando um artigo para vocês monitorarem o tráfego na vpn de cada filial com MRTG.
Qualquer dúvida ou contribuição por favor deixe seu comentário, e visite meu blog: fonte:
http://www.vivaolinux.com.br/artigo/Criando-VPN-sitetosite-conectando-diversas-filiais-a-matriz-com-openVPN
Nenhum comentário:
Postar um comentário