Configurando VPN site-to-site com OpenVPN

Configurando VPN site-to-site com OpenVPN

22/02/2016 Daniel Magevski 7 min de leitura

Irei mostrar uma configuração básica de uma VPN Site-to-Site com o OpenVPN

Iremos seguir esse esquema de rede que fiz no GNS3

screenshot

Estou utilizando um SVP - Servidor Virtual Privado (VPS - Virtual Private Server) para demonstrar a instalação e configuração, meu ambiente de instalação é um Debian 8.2.

Distributor ID: Debian Description: Debian GNU/Linux 8.2 (jessie) Release: 8.2 Codename: jessie

Resumo

O OpenVPN é um software livre e open-source para criar redes privadas virtuais do tipo ponto-a-ponto ou server-to-multiclient através de túneis criptografados entre computadores. Ele é capaz de estabelecer conexões diretas entre computadores mesmo que estes estejam atrás de Nat Firewalls sem necessidade de reconfiguração da sua rede. Ele foi escrito por James Yonan e publicado sob licença GNU General Pulic Licence (GPL)

Instale o OpenVPN e também o easy-rsa

apt-get install openvpn easy-rsa

Agora entramos no diretório do OpenVPN, utilizamos o comando make-cadir (disponibilizado pelo pacote easy-rsa) para criar um diretório chamado easy-rsa que conterá vários scripts úteis. Entramos no diretório easy-rsa e editamos o arquivos chamado vars.

[email protected]:~# cd /etc/openvpn/ [email protected]:/etc/openvpn# make-cadir easy-rsa [email protected]:/etc/openvpn# cd easy-rsa/ [email protected]:/etc/openvpn/easy-rsa# nano vars

Agora vá ate o final e edite os seguintes valores

# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
export KEY_COUNTRY="BR"
export KEY_PROVINCE="Espirito-Santo"
export KEY_CITY="Vila-Velha"
export KEY_ORG="Butecopensource"
export KEY_EMAIL="[email protected]"
export KEY_OU="butecopensource.org"

Após editar o arquivo use:

source vars

e depois

./clean-all

Criando os certificados

Durante esse processo você será perguntado dos valores para alguns campos, os quais definimos no arquivo vars que ficarao entre colchetes, quando for o Common Name utilize o nome da máquina.

Gerando o certificado da sua unidade certificadora

[email protected]:/etc/openvpn/easy-rsa# ./build-ca

Generating a 2048 bit RSA private key
.+++
...+++
writing new private key to 'ca.key'
-----
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) [BR]:
State or Province Name (full name) [Espirito-Santo]:
Locality Name (eg, city) [Vila-Velha]:
Organization Name (eg, company) [Butecopensource]:
Organizational Unit Name (eg, section) [butecopensource.org]:
Common Name (eg, your name or your server's hostname) [Butecopensource CA]:
Name [EasyRSA]:
Email Address [[email protected]]:
[email protected]:/etc/openvpn/easy-rsa#

Gerando chave para o Servidor

Gerando a chave para o servidor. Utilize o comando build-key-server seguido do nome do servidor (hostname).

[email protected]:/etc/openvpn/easy-rsa# ./build-key-server server

Generating a 2048 bit RSA private key
..................................+++
................................................................+++
writing new private key to 'server.key'
-----
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) [BR]:
State or Province Name (full name) [Espirito-Santo]:
Locality Name (eg, city) [Vila-Velha]:
Organization Name (eg, company) [Butecopensource]:
Organizational Unit Name (eg, section) [butecopensource.org]:
Common Name (eg, your name or your server's hostname) [server]:
Name [EasyRSA]:
Email Address [[email protected]]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'BR'
stateOrProvinceName :PRINTABLE:'Espirito-Santo'
localityName :PRINTABLE:'Vila-Velha'
organizationName :PRINTABLE:'Butecopensource'
organizationalUnitName:PRINTABLE:'butecopensource.org'
commonName :PRINTABLE:'server'
name :PRINTABLE:'EasyRSA'
emailAddress :IA5STRING:'[email protected]'
Certificate is to be certified until Jan 2 22:29:18 2026 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
[email protected]:/etc/openvpn/easy-rsa#

Agora vamos gerar uma chave Diffie-Hellman e que será utilizada pelo cliente e servidor durante a troca de chave, pode demorar um certo tempo. Obs: Não gere chave com valor igual o menor que 1024 bits, por padrão esse script gera em 2048 bits

[email protected]:/etc/openvpn/easy-rsa# ./build-dh

Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
............................+++

Gerando chave para o cliente

Nesse tutorial iremos gerar somente uma chave, para a filial, porém dependendo de como você irá implementar sua VPN você pode criar mais.

[email protected]:/etc/openvpn/easy-rsa# ./build-key filial

Generating a 2048 bit RSA private key
..............................................................................................................+++
......................+++
writing new private key to 'filial.key'
-----
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows/code>
countryName :PRINTABLE:'BR'
stateOrProvinceName :PRINTABLE:'Espirito-Santo'
localityName :PRINTABLE:'Vila-Velha'
organizationName :PRINTABLE:'Butecopensource'
organizationalUnitName:PRINTABLE:'butecopensource.org'
commonName :PRINTABLE:'filial'
name :PRINTABLE:'EasyRSA'
emailAddress :IA5STRING:'[email protected]'
Certificate is to be certified until Jan 2 23:13:45 2026 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
[email protected]:/etc/openvpn/easy-rsa#

Excluar os arquivos desnecessários

rm keys/*.csr

Pronto, agora precisamos pegar os arquivos no servidor e passar cliente,

[email protected]:/etc/openvpn/easy-rsa# cd keys [email protected]:/etc/openvpn/easy-rsa/keys# ls

01.pem ca.key filial.key index.txt.attr.old serial.old
02.pem dh2048.pem index.txt index.txt.old server.crt
ca.crt filial.crt index.txt.attr serial server.key

Iremos precisar dos arquivos, filial.crt,  filial.key, dh2048.pem

Vocẽ pode copiar esses arquivos com softwares como FileZilla (Linux e Windows) ou WinSCP (Windows).

Configuração do OpenVPN para o servidor

 Crie o arquivo /etc/openvpn/server.conf 

Caso você cria o nome do servidor direrente de “server”, lembre de mudar o nome do “crt” e “key”

Veja o arquivo de configuração.

Agora vamos adicionar a rota, criando um arquivo dentro do diretório /etc/init.d: echo "route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.8.0.1 dev tun0" > /etc/init.d/rota && chmod +x rota && update-rc.d rota defaults

Após criada a rota, será iniciado o serviço: service openvpn start

Precisamos compartilhar a internet do servidor, execute: sysctl -w net.ipv4.ip_forward=1

iptables -t nat -s 10.8.0.0/24 -A POSTROUTING -o eth0 -j MASQUERADE

10.8.0.0/24 é a rede da VPN e eth0 é a interface do servidor que está conectada com a internet.

Configuração no cliente

Crie o arquivo client.ovpn e lembre de substituir e $Cliente nos parâmentos cert e key, $Servidor no remote

Veja o arquivo de configuração.

Qualquer dúvida escreva nos comentários.