OpenVPN

Diagrama da rede

Rede usada pelo túnel: 10.8.0.0/24
Rede do lado servidor: 192.168.30.0/24
Rede do lado cliente: 172.16.90.0/24

Para montar uma VPN nós utilizaremos 3 programas:

OpenSSL – Criptografa os dados antes de serem transmitidos.
LZO – Comprimi os dados transmitidos antes de serem transmitidos.
OpenVPN – Cria um túnel entre duas ou mais redes.

CONFIGURAÇÃO NO LADO SERVIDOR

1 – Baixe o cÓdigo fonte do OpenSSL

cd /usr/local/src
wget http://www.openssl.org/source/openssl-0.9.8e.tar.gz

2 – Compile o OpenSSL

tar -xzvf openssl-0.9.8e.tar.gz
cd openssl-0.9.8e
./config
make
make test
make install

3 – Baixe o cÓdigo fonte do LZO

cd /usr/local/src
wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.02.tar.gz

4 – Compile o LZO

tar -xzvf lzo-2.02.tar.gz
cd lzo-2.02
./configure
make
make test
make install

5 – Baixe o codigo fonte do OpenVPN

cd /usr/local/src
wget http://openvpn.net/release/openvpn-2.0.9.tar.gz

6 – Compile o OpenVPN

tar -xzvf openvpn-2.0.9.tar.gz
cd openvpn-2.0.9
./configure
make
make install

7 – Testando a cirptografia

./openvpn --genkey --secret key
./openvpn --test-crypto --secret key

8 – Testando a negociação SSL (rode por 2 minutos)

– Execute o comando abaixo em uma janela…

./openvpn --config sample-config-files/loopback-client

– Execute o comando silmultaneamente com o primeiro em outra janela…

./openvpn --config sample-config-files/loopback-server

* Na segunda janela no inicio do teste deverá aparecer…

Wed 10:24:34 2007 [Test-Client] Peer Connection Initiated with 127.0.0.1:16001
Wed 10:24:35 2007 Initialization Sequence Completed

* Depois de dois minutos aparecerá a mensagem…

Wed 10:26:33 2007 Inactivity timeout (–inactive), exiting
Wed 10:26:33 2007 TCP/UDP: Closing socket
Wed 10:26:33 2007 Closing TUN/TAP interface
Wed 10:26:33 2007 SIGTERM[soft,inactive] received, process exiting

9 – Crie um ambiente para os arquivos de configuração do OpenVPN

mkdir /etc/openvpn

10 – Copie alguns arquivos para o diretório /etc/openvpn

cp -rf easy-rsa/ sample-config-files/server.conf /etc/openvpn

11 – Entre no diretório /etc/openvpn/easy-rsa

cd /etc/openvpn/easy-rsa

12 – Edite o arquivo vars e em seguida exporte suas variáveis

vi vars

export KEY_COUNTRY=BR
export KEY_PROVINCE=RJ
export KEY_CITY=RIO
export KEY_ORG="Wnet-Teleredes"
export KEY_EMAIL="nickollas@gmail.com"

. ./vars

13 – Crie o ambiente para a criação do certificado e chaves com o comando

./clean-all

14 – Gere o certificados de autoridade e a chave que vai interagir com o OpenSSL

./build-ca

IMPORTANTE: No campo “Common Name” coloque o nome da sua VPN

Country Name (2 letter code) [BR]:
State or Province Name (full name) [RJ]:
Locality Name (eg, city) [RIO]:
Organization Name (eg, company) [Wnet-Teleredes]:
Organizational Unit Name (eg, section) []:cpd
Common Name (eg, your name or your server's hostname) []:Wnet-Teleredes
Email Address [nickollas@gmail.com]:

15 – Gere o certificados de autoridade e a chave para o servidor

ATENÇÃO: Deixe o campo de senha em branco (sem senha), aperte . Responda “y” para as duas perguntas feitas no final.

./build-key-server server

ATENÇÃO: Ao preencher a diretiva “Common Name ” informe o mesmo nome da chave que está sendo gerada.

Country Name (2 letter code) [BR]:
State or Province Name (full name) [RJ]:
Locality Name (eg, city) [RIO]:
Organization Name (eg, company) [Wnet-Teleredes]:
Organizational Unit Name (eg, section) []:cpd
Common Name (eg, your name or your server's hostname) []:server
Email Address [nickollas@gmail.com]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Certificate is to be certified until Jun 17 14:22:29 2017 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

16 – Gere o certificados de autoridade e a chave para o cliente

./build-key client1

Responda as perguntas conforme acima
ATENÇÃO: Ao preencher a diretiva “Common Name ” informe o mesmo nome da chave que está sendo gerada

Organizational Unit Name (eg, section) []:cpd
Common Name (eg, your name or your server's hostname) []:client1

ATENÇÃO: Para incluir novos clientes repita esta etapa modificando apenas o nome da chave. ex: client2

17 – Gere o certificado de parametros Diffie Hellman

./build-dh

– Tabela de chaves e certificados gerados:

ARQUIVO        USADO POR           PROPÓSITO             SECRETO

ca.crt         servidor,cliente    root ca*              no
ca.key         servidor            root ca key           yes
dh1024.pem     servidor            diffie hellman        no
server.crt     servidor            server certificate    no
server.key     servidor            server key            yes
client1.crt    cliente             client1 certificate   no
client1.key    cliente             client1 key           yes

*ca - Certificado de Autoridade

18 – Edite o arquivo de configuração do OpenVPN no servidor

vi /etc/openvpn/server.conf

port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/server.crt
key /etc/openvpn/easy-rsa/keys/server.key
dh /etc/openvpn/easy-rsa/keys/dh1024.pem
server 10.8.0.0 255.255.255.0  # Bloco de rede usado pelo túnel
ifconfig-pool-persist ipp.txt
push "route 192.168.30.0 255.255.255.0"  # End de rede do lado servidor
client-config-dir ccd
route 172.16.90.0 255.255.255.0  # End de rede do lado cliente
keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log-append  /var/log/openvpn.log
verb 3

ATENÇÃO: Para cada cliente adicione uma nova linha:

route 172.16.90.0 255.255.255.0	# Rede do lado cliente

19 – Crie o diretório /etc/openvpn/ccd

mkdir /etc/openvpn/ccd

20 – Crie um arquivo com mesmo nome da chave cliente contendo o endereço de ip e a mascara de rede

vi /etc/openvpn/ccd/client1

iroute 172.16.30.0 255.255.255.0

ATENÇÃO: Crie um arquivo como este para cada cliente modificando o nome do arquivo de acordo com o nome da chave e endereço IP.

21 – Inicie o OpenVPN no servidor

openvpn /etc/openvpn/server.conf

DICA: Você pode ver o log do OpenVPN em /var/log/openvpn.log

– CONFIGURAÇÃO NO LADO CLIENTE

22 – Compilação e instalação do OpenSSL

cd /usr/local/src
wget http://www.openssl.org/source/openssl-0.9.8e.tar.gz
tar -xzvf openssl-0.9.8e.tar.gz
cd openssl-0.9
./config
make
make install

23 – Compilação e instalação do LZO

cd /usr/local/src
wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.02.tar.gz
tar -xzvf lzo-2.02.tar.gz
cd lzo-2.02
./configure
make
make install

24 – Compilação e instalação do OpenVPN

cd /usr/local/src
wget http://openvpn.net/release/openvpn-2.0.9.tar.gz
tar -xzvf openvpn-2.0.9.tar.gz
cd openvpn-2.0.9
./configure
make
make install
mkdir -p /etc/openvpn/easy-rsa/keys
cp sample-config-files/client.conf /etc/openvpn

25 – Transfira do servidor para a a maquina cliente os aquivos abaixo colocando-os no diretório /etc/openvpn/easy-rsa/keys/

* ca.crt
* client1.crt
* client1.key

26 – Edite o arquivo de configuração do OpenVPN

vi /etc/openvpn/client.conf

client
dev tun
proto udp
remote 200.76.150.8 1194  # IP roteável do servidor
resolv-retry infinite
user nobody
group nogroup
persist-key
persist-tun
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/client1.crt
key /etc/openvpn/easy-rsa/keys/client1.key
ns-cert-type server
comp-lzo
verb 3

27 – Inicie o OpenVPN no cliente

openvpn /etc/openvpn/client.conf

– TESTANDO A VPN

28 – Dê um ifconfig em ambas as pontas para ver se foi levantada a interface tun0

ifconfig 

29 – Do servidor tente pingar o cliente

ping 10.8.0.6
ping 172.16.90.1

30 – Do cliente tente pingar o servidor

ping 10.8.0.1
ping 192.168.30.1

DICA: Para incluir novos clientes na VPN repita as etapas 16,18,20 e 24

31 – Crie os scripts de inicialização para o OpenVPN

vi /etc/init.d/openvpn-start

#!/bin/bash
openvpn --config /etc/openvpn/server.conf --daemon # Somente no servidor
openvpn --config /etc/openvpn/client.conf --daemon # Somente no cliente

vi /etc/init.d/openvpn-stop

#!/bin/sh
killall -9 openvpn &> /dev/null
chmod u+x /etc/init.d/openvpn-st*

Para executar…

/etc/init.d/openvpn-start
/etc/init.d/openvpn-stop

– PROBLEMAS CONHECIDOS

PROBLEMA: O cliente consegue pingar a rede atrás do servidor mas o servidor não consegue pingar a rede atrás do cliente

R: Quando a chave do cliente foi gerada o campo “Common Name” foi preenchido com um nome diferente do nome da chave. Você deve gerar a chave do cliente e preencher o campo “Common Name” com o mesmo nome da chave que está sendo gerada

O Mesmo problema vai ocorrer se dentro do diretório “ccd” não tiver um arquivo com o nome da chave contendo IP e Mascara de rede

Advertisements

2 thoughts on “OpenVPN

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s