Queridos, em primeiro lugar, Feliz 2012! Que esse ano seja de muito sucesso para vocês!
Esse ano eu entrei brincando no openVPN, e a pedido do amigo Alan Teixeira, mostrarei como configurar uma VPN usando o openVPN no openSUSE.
De cara vou deixar algo bem claro: Não iremos compilar nada.





INSTALAÇÃO

zypper in openvpn

Por padrão, os arquivos são instalados no diretório /usr/share/openvpn/easy-rsa/2.0,mas, caso queira colocar-los no /etc/openvpn (que também foi criado), entre no diretório de instalação e faça o seguinte:
make install DESTDIR=/etc/openvpn

Isso fará com que o make install coloque os arquivos no diretório /etc/openvpn. Lembrando que o make install não compila, e sim aloca os arquivos nos seus devidos lugares.

CONFIGURAÇÃO

Antes de qualquer coisa, iremos mostrar o passo-a-passo como se você estivesse dentro do DESTDIR, no caso, /etc/openvpn, ok? ;)

Iremos executar 3 arquivos (vars, clean-all e build-ca), mas antes vamos setar alguns parâmetros. No arquivo vars, lá no final, ele tem as variáveis:
export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"

Mude de acordo com sua demanda. Por exemplo:
export KEY_COUNTRY="BR"
export KEY_PROVINCE="BA"
export KEY_CITY="Salvador"
export KEY_ORG="M. Bison Parafusos"
export KEY_EMAIL="bison@streetfighter.com.br"

Após isso, execute o vars, o clean-all e o build-ca. Esse último irá criar um certificado de Entidade Certificadora (CA ou Master Certified Autority):
. ./vars
./clean-all
./build-ca

O build-ca fará algumas perguntas, a maioria já estará respondida por causa das variáveis que você setou no arquivo vars. Apenas dê enter nessas perguntas.
A saída será algo mais ou menos assim:
ai:easy-rsa # ./build-ca
Generating a 1024 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) [BA]:
Locality Name (eg, city) [Salvador]:
Organization Name (eg, company) [M. Bison Parafusos]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:OpenVPN-CA
Email Address [bison@streetfighter.com.br]:

Um parâmetro que você deve observar e não deve ter nenhum igual ao outro, é o common name. O COMMON NAME DEVE SER ÚNICO!

Depois, execute o build-server. Para a criação do certificado do servidor os passos são parecidos com o do CA:
./build-key-server server

Quando for requisitada uma senha, deixe em branco. Geralmente não utilizo. Também será feita duas perguntas e você terá de responder Y ou N. Aperte o Y e confirme.


E continuando, vamos criar os certificados para os clientes:
./build-key ryu
./build-key ken
./build-key balrog

O script build-key cria dois arquivos:
.crt: O certificado
.key: A chave pessoal

E pra finalizar, vamos criar o dh1024.pem
./build-dh

Esses arquivos irão juntar-se a outros que encontram-se no diretório keys. Vejamos um exemplo do que temos por lá:

FilenameNecessária porPropósitoSecreto?
ca.crtservidor + todos os clientesRoot CA certificateNÃO
ca.keyChave única de assinaturaRoot CA keySIM
dh{n}.pemApenas servidorParâmetros Diffie HellmanNÃO
server.crtApenas servidorCertificado do servidorNÃO
server.keyApenas servidorChave do servidorSIM
ryu.crtApenas RyuCertifricado de RyuNÃO
ryu.keyApenas RyuChave de RyuSIM

Bom, hora da configuração do arquivo do servidor e do cliente. Comecemos pelo servidor.
Cara, se tem uma coisa que aprendi, é que o /usr/share/doc/packages é seu melhor amigo. Dentro do /usr/share/doc/packages/openvpn existe o diretório sample-config-files. Copie o server.conf e cole no seu /etc/openvpn. Depois mude os parâmetros de acordo com sua topologia. O meu, por exemplo, ficou assim:

port 1194
proto udp
dev tun
ca keys/ca.crt
cert keys/server.crt
key keys/server.key
dh keys/dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ippool.txt
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
log openvpn.log
log-append openvpn.log
verb 3
script-security 2

E no cliente, após você enviar para ele o certificado e a chave criado exclusivamente para ele, coloque dentro do seu /etc/openvpn os arquivos (ryu.crt e ryu.key) e copie o arquivo /usr/share/doc/packages/openvpn/sample-config-files/client.conf para o seu /etc/openvpn. Edite dessa maneira:

client
dev tun
proto udp
remote X.X.X.X
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert ryu.crt
key ryu.key
ns-cert-type server
comp-lzo
verb 3

Nos parâmetros remote, aponte o ip do servidor matriz do openVPN; Em cert coloque o certificado do cliente e em key adicione o local do arquivo .key do usuário. Cuidado com esse arquivo!!!

Agora inicie o serviço em ambas as pontas. Realize um teste de ping. Se responder em ambas as partes, é um ótimo sinal! Está ok!. Se não, confira nos logs e veja qual é o problema encontrado.
Outra dica para fazer essa verificação é vendo se tem alguma porta UDP aberta com o netstat -planu ou com o comando route - O comando route exibe a quais redes o seu computador está conectado.

Maiores informações:
/usr/share/doc/packages/openvpn
http://openvpn.net/index.php/open-source/documentation/howto.html
http://www.hardware.com.br/tutoriais/openvpn/