VPN no Linux com OpenVPN
Antes de mais nada vamos vamos ver se o seu kernel está compilado com o driver TUN/TAP necessário para o funcionamento de nossa VPN.
[li] Network device support
ARCnet devices --->
< > Dummy net driver support
< > Bonding driver support
< > EQL (serial line load balancing) support
<*> Universal TUN/TAP device driver support
< > Ethertap network tap (OBSOLETE)
< > General Instruments Surfboard 1000
Ethernet (10 or 100Mbit) --->
Ethernet (1000 Mbit) --->
[ ] FDDI driver support
[ ] HIPPI driver support (EXPERIMENTAL)
<*> PPP (point-to-point protocol) support
< > SLIP (serial line) support
Wireless LAN (non-hamradio) --->
Token Ring devices --->
[ ] Fibre Channel driver support
< > Red Creek Hardware VPN (EXPERIMENTAL)
< > Traffic Shaper (EXPERIMENTAL)
Wan interfaces --->
Não irei falar sobre a compilação de um kernel aqui porque não está dentro do nosso conteudo.
Caso o driver esteja como modulo no kernel habilite ele com o seguinte comando:
# modprobe tun
Agora nos resta baixar os pacotes para a instalação.
http://openvpn.net/download.html (http://openvpn.net/download.html) - baixe aqui o seu OpenVPN
http://www.oberhumer.com/opensource/lzo/ (http://www.oberhumer.com/opensource/lzo/) - uma biblioteca para a compressão de dados em tempo real.
instale os pacotes como os seguintes comandos...
$ tar -vzxf lzo-1.08.tar.gz
$ cd lzo-1.08
$ ./configure
$ make
$ su
# make install
$ tar -vzxf openvpn-1.5.0.tar.gz
$ cd openvpn-1.5.0
$ ./configure
$ make
$ su
# make install
Caso você utilize gentoo você pode instalar esses pacotes com o portage (emerge) ;-)
Agora que ja temos o OpenVPN instalado no nosso sistema com a suporte a bibliote de compressão de dados vamos as configurações.
O openVPN suporta três tipos de criptografias. Criptografia com chaves estáticas e no modo TLS do qual as chaves são trocadas periodicamente. Criptografia com chaves estáticas, e por último Criptografia nenhuma, apenas o túnel . Nesse nosso exemplo vamos usar a criptografia de chaves estáticas.
Configuração do servidor:
1- vamos criar o diretório do openvpn onde ficarão todos os arquivos de configuração, isso é caso o diretório não exista.
# mkdir /etc/openvpn
2- VAmos criar uma chave de criptografia com o nome 'chave' (pode ser qualquer nome)
# openvpn --genkey --secret /etc/openvpn/chave
Você pode visualizar o conteudo da chave com o comando 'cat'
3- Vamos criar o arquivo de configuração do servidor. Utilize seu editor de texto de sua preferência.
# mcedit /etc/openvpn/server.conf
# Usar como interface o driver TUN
dev tun
# 10.0.0.1 ip que será assumido no servidor
# 10.0.0.2 ip remoto, ou seja, esse será o ip do cliente
ifconfig 10.0.0.1 10.0.0.2
# Entra no diretório onde se encontram os arquivos de configuração
cd /etc/openvpn
# Indica que esse túnel possui uma chave de criptografia
secret chave
# OpenVPN usa a porta 5000/UDP por padrão.
# Cada túnel do OpenVPN deve usar
# uma porta diferente.
# O padrão é a porta 5000
port 5000
# Usuário que rodará o daemon do OpenVPN
user root
# Grupo que rodará o daemon do OpenVPN
group root
Usa a biblioteca lzo
comp-lzo
# Envia um ping via UDP para a parte
# remota a cada 15 segundos para manter
# a conexão de pé caso você esteja utilizando
# um firewall statefull.
ping 15
# Nível de log
verb 3
4- Agora vamos iniciar o daemon no servidor.
# openvpn --config /etc/openvpn/server.conf --daemon
Verifique se a conexão foi aberta.
# ifconfig
tun0 Link encap:Point-to-Point Protocol
inet addr:10.0.0.1 P-t-P:10.0.0.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1255 Metric:1
RX packets:1383257 errors:0 dropped:0 overruns:0 frame:0
TX packets:1144968 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:10
RX bytes:82865921 (79.0 Mb) TX bytes:383951667 (366.1 Mb)
Se aparecer algo parecido na saida do ifconfig como o exemplo acima significa que o server está ok, faltando a configuração da conexão do cliente.
Configuração do cliente:
1- Crie o diretório openvpn caso não exista.
# mkdir/etc/openvpn
2- Copie a chave gerada no server de algum modo seguro para o computador client. exemplo
# scp /etc/openvpn/chave ip_client:/etc/openvpn
3- Crie o arquivo de configuração do cliente chamado de client.conf
# mcedit /etc/openvpn/client.conf
# Usar como interface o driver TUN
dev tun
# 10.0.0.1 ip que será assumido no servidor
# 10.0.0.2 ip remoto, ou seja, esse será o ip no cliente
ifconfig 10.0.0.2 10.0.0.1
# Indica onde está o ip do servidor (essa é a única linha que acrescentamos
# no arquivo de configuração do cliente), o resto é tudo igual.
remote 200.200.200.200
# Entra no diretório onde se encontram os arquivos de configuração
cd /etc/openvpn
# Indica que esse túnel possui uma chave de criptografia
secret chave
# OpenVPN usa a porta 5000/UDP por padrão.
# Cada túnel do OpenVPN deve usar
# uma porta diferente.
# O padrão é a porta 5000
port 5000
# Usuário que rodará o daemon do OpenVPN
user root
# Grupo que rodará o daemon do OpenVPN
group root
# Usa a biblioteca lzo
comp-lzo
# Envia um ping via UDP para a parte
# remota a cada 15 segundos para manter
# a conexão de pé em firewall statefull
# Muito recomendado, mesmo se você não usa
# um firewall baseado em statefull.
ping 15
# Nível de log
verb 3
Agora é só iniciar a conexão com o seguinte comando
# openvpn --config /etc/openvpn/client.conf --daemon
# ifconfig
tun0 Link encap:Point-to-Point Protocol
inet addr:10.0.0.2 P-t-P:10.0.0.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1255 Metric:1
RX packets:1383257 errors:0 dropped:0 overruns:0 frame:0
TX packets:1144968 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:10
RX bytes:82865921 (79.0 Mb) TX bytes:383951667 (366.1 Mb)
Agora fassa um teste pingando de um host para o outro:
# ping -c 4 10.0.0.1
64 bytes from 10.0.0.1: icmp_seq=1 ttl=63 time=11.9 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=63 time=6.09 ms
64 bytes from 10.0.0.1: icmp_seq=3 ttl=63 time=5.93 ms
64 bytes from 10.0.0.1: icmp_seq=4 ttl=63 time=8.15 ms
Se o ping for respondido e aparecer algo como aqui em cima é sinal que sua VPN já está em funcionamento faltando só adicionarmos as rotas para as redes internas se enxergarem (isso é caso você tenha uma rede em cada ponta)
Adicionando rotas:
NOTA: Antes de adicionarmos as rotas, é necessário ativar o roteamento no kernel em ambas as pontas (Server e Client). Execute os seguintes comandos no server e no client:
# echo 1 > /proc/sys/net/ipv4/ip_forward
Para adicionar a rota com destino a rede do server, execute o seguinte comando dentro do client:
# route add -net 192.168.2.0/24 gw 10.0.0.2
Para adicionar a rota com destino a rede da Client, execute o seguinte comando dentro do server:
# route add -net 192.168.1.0/24 gw 10.0.0.1
Bem agora é só testar. tente píngar de dentro de uma máquina da LAN do server com destino a LAN do client.
Pronto agora se divirta!!!
qualquer dúvida é só postar e um abraço pra todos!!!
Autor:Ale-Spy
Muito bom drako, parabens

ate mais