# OpenVPN

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).

## Introdução

O OpenVPN permite autenticação ponto-a-ponto através de chaves secretas compartilhadas, certificados digitais ou autenticação com usuário e senha. Quando utilizado em modo multiclient-server ele permite que cada cliente utilize a autenticação pública com certificados digitais, fazendo isto através de assinaturas digitais e certificados de autoridade. Ele utiliza extensivamente a criptografia OpenSSL. Usa também os protocolos SSLv3/TLSv1. Esta disponível para Solaris, Linux, OpenBSD, FreeBSD, NetBSD, Mac OS X, e Windows 2000/XP/Vista/7/8. Ele contém muitos recursos de controle de segurança. Ele não é um cliente VPN baseado em web, não é compatível com IPsec ou qualquer outro tipo de pacote VPN. Todo pacote do OpenVPN consiste em apenas um binário tanto para conexões do lado do cliente quanto para conexões do lado do servidor, você vai encontrar mais alguns arquivos e chaves dependendo do tipo e método de autenticação utilizado. Eventualmente é utilizado por gamers como uma maneira de acessar jogos LAN fora da intranet pela internet.

## Criptografia

O OpenVPN utiliza a biblioteca OpenSSL para prover criptografia entre ambos os canais de controle de dados. Isto faz com que o OpenSSL faça funcionar toda a criptografia e autenticação, permitindo ao OpenVPN utilizar todas as cifras disponíveis no pacote do OpenSSL. Ele pode utilizar o pacote de autenticação HMAC para adicionar uma camada de segurança para a conexão. Ele pode também utilizar aceleração de hardware para obter uma melhor performance na criptografia.

## Autenticação

O OpenVPN te possibilita autenticar entre os pontos de várias maneiras. O OpenVPN oferece chaves secretas compartilhadas, autenticação baseada em certificados e autenticação baseada em usuário e senha. O método de autenticação com chaves secretas compartilhadas é o mais simples, e combinando com certificados ele se torna o mais robusto e rico recurso de autenticação. A autenticação com usuário e senha é um recurso novo (disponível apenas na versão 2.0) que possibilita o uso de certificados no cliente, mas não é obrigatório (o servidor precisa de certificado). O código fonte em formato tarball inclui um exemplo de script Perl que verifica usuário e senha através do PAM e um plug-in em C chamado auth-pam-plugin.

## Rede

O OpenVPN pode rodar sobre UDP (preferencial por padrão) ou TCP. Ele multiplexa toda a comunicação em cima de uma única porta TCP/UDP. Ele tem a habilidade de trabalhar com a maioria dos proxy servers (incluindo HTTP) e funciona muito bem trabalhando com NAT para passar por firewalls. As configurações do servidor tem a habilidade de fornecer certas configurações de rede para seus clientes, isto inclui endereços Ipv4, comandos de rotas e algumas poucas configurações de conexão. O OpenVPN oferece dois tipos de interfaces para rede via Universal TUN/TAP driver. Ele pode criar um túnel em layer-3 (TUN), ou pode criar um túnel em layer-2 baseado em ethernet TAP, o que pode carregar qualquer tipo de tráfego ethernet. O OpenVPN pode utilizar a biblioteca de compressão LZO para compactar o fluxo de dados. A porta 1194 é a numeração oficial IANA para o OpenVPN. As novas versões do OpenVPN já estão configuradas para utilizarem esta porta. Um novo recurso na versão 2.0 permite que um processo possa manipular e gerenciar vários túneis simultâneos como alternativa ao método original de um processo por túnel, o qual era uma restrição das versões 1.x.x.
O OpenVPN usa como seus protocolos comuns o TCP e UDP como uma alternativa ao IPsec em situações onde o ISP pode ter bloqueado os protocolos específicos para VPN na tentativa de forçar os clientes a assinarem serviços mais caros.

## Segurança

O OpenVPN oferece vários recursos de segurança internos. Ele roda em userspace, ao invés de necessitar de uma ip stack operation. O OpenVPN tem a habilidade de bloquear os privilégios de acesso root, ele usa o mlockall para prevenir que dados sensíveis sejam colocados em swap no disco, e, após sua inicialização, ele roda em ambiente chroot.
O OpenVPN oferece suporte a smart card através de criptografia baseada em token PKCS#11.

## Clientes GUI
### Microsoft Windows

* OpenVPN GUI for Windows

### Mac OS X

* Tunnelblick
* Viscosity
* Shimo

### GNU/Linux

* NetworkManager

## Comparações

* OpenSSH, que também implementa tunéis VPN nas camadas 2/3
* stunnel criptografia de qualquer conexão tcp em uma única porta via SSL
* NeoRouter e a Socialvpn, progrmas P2P VPN
* CloudVPN e tinc, redes VPN Mesh.

## Notas e Referências

* 1 2 «Interview with James Yonan, Creator of OpenVPN:». linuxsecurity.com (em inglês). Consultado em 13 de junho de 2014