You are on page 1of 7

Cmo instalar y configurar OpenVPN

OpenVPN es una implementacion de VPN SSL la cual usa las extensiones OSI layer 2 3 para asegurar redes la cual usa
los protocolos SSL/TLS, soporta diferentes medios de autenticacion como certificados, smart cards, y/o
usuarios/contraseas, y permite politicas de control de acceso para usaurios o grupos usando reglas de firewall
aplicadas a las interfaces virtuales de la VPN. OpenVPN 2.0 permite multiples clientes conectar a un solo servidor
(proceso) OpenVPN sobre un simple puerto TCP o UDP.
Para seguir este documento se requieren conocimientos basicos de redes TCP/IP como , direcciones IP, DNS, netmasks,
subnets, IP routing, routers, interfaces de red, LANs, gateways, y reglas de firewall.
Formas de trabajo del OpenVPN
Aunque OpenVPN es muy sencillo de configurar e instalar, podemos dividir su forma de trabajo en 3 tipos:

1. Host a Host: Es el mtodo ms simple, nos permite encriptar la comunicacin entre dos PC las cuales debern
solamente tener conexin; es decir: ambas PC deben poderse enviar paquetes directamente ya sea porque estn
conectadas en la misma red local, o porque ambas estn conectadas a la internet y sean alcanzables entre s.

2. Road Warrior: Es una de las formas ms utilizadas y solicitadas por los estudiantes. Es el permitir que una mquina
de alguien que est fuera de nuestra red (de forma temporal o permanente) pueda comunicarse con el servidor
OpenVPN de nuestra red y una vez autenticado pueda entrar a ver y acceder los recursos de nuestra red local. En
verdad es un caso especial de la conexin Red a Red que a continuacin mencionamos:
3. Red a Red: Uno de los mtodos ms usados. Mediante sta forma dos redes separadas en el espacio pueden
comunicarse como si estuvieran unidas por un cable virtual (de ahi la V de VPN); la comunicacin entre ambas redes
viajar encriptada una vez salgan de los servidores de openvpn y hasta que lleguen a su otro extremo.
Ventajas del uso de OpenVPN
OpenVPN es un sistema de creacin y uso de vpn muy modesto y fcil de utilizar que nos permite implementar vpn que
de otras formas sera muy molesto o dificultoso de realizar.
Las implementaciones IPSec, aunque supuestamente mejor elaboradas y soportadas por el kernel de linux, son muy
difciles de implementar en mquinas con Windows. En el caso de OpenVPN existen clientes y servidores tanto para
linux como para windows y su implementacin para redes o sistemas multiplataformas es muy sencilla de llevar a cabo.
Instalacin del OpenVPN
Instalar OpenVPN en nuestro linux Ubuntu es realmente fcil. Solamente debemos emitir el comando:
apt-get install openvpn

Despus de unos minutos, tendremos listo el paquete de OpenVPN


Una vez instalado, podemos proceder a la creacin de las claves de encriptacin en el servidor y cliente.
Activando OpenVPN
Aunque todava no es el momento de activarlo, cuando hayamos configurado el openvpn podemos activarlo con:
/etc/init.d/openvpn start

Con este comando podemos arrancar el openvpn en ambos extremos.


Si necesitramos reiniciarlo (para que lea de nuevo la configuracin por ejemplo) podramos hacerlo con:
/etc/init.d/openvpn restart

1- Conexin Host a Host con OpenVPN


Generacin de clave de encriptacin.
En el caso de una conexin host a host, podemos sencillamente generar una clave compartida en el servidor, y copiarla
hacia el cliente. Con esta clave se encriptaran los datos sin mayor problema o inconveniente:
openvpn --genkey --secret secret.key

Este archivo "secret.key" tiene que ser copiado hacia el directorio /etc/openvpn del cliente y del servidor.
cp secret.key /etc/openvpn
scp secret.key IPDELSERVIDOR:/etc/openvpn/

Configuracin Host a Host


En la configuracin host a host, lo que lograremos es que el intercambio de paquetes entre dos mquinas se realice de
forma encriptada.
Para esto, crearemos una interfaz virtual con una IP privada en cada extremo:
* 10.8.0.1 para el servidor
* 10.8.0.2 para el cliente
Y cualquier paquete que circule entre el cliente y el servidor va esas direcciones IP, viajar encriptado.
Configuracin del servidor
El archivo /etc/openvpn/server.conf lo podemos dejar de la siguiente forma:
# dispositivo de tunel
dev tun
# usamos: ifconfig ipdelserver ipdelcliente
ifconfig 10.8.0.1 10.8.0.2
# Clave del servidor
secret /etc/openvpn/server.key
#puerto
port 1194
#usuario bajo el cual ejecutaremos
user nobody
group nobody
# opciones, comprimir con lzo, ping cada 15 segs, verbose 1 (bajo)
comp-lzo
ping 15
verb 1

En este caso lo fundamental es que estamos indicndole al servidor que escuche en su puerto usuario (1194/udp) y que
la IP que tomar la interfaz de vpn (tun) ser 10.8.0.1 y le dar al cliente la 10.8.0.2
Configuracin del cliente
Antes de configurar el cliente, en este caso el cliente 1, debemos traer del servidor los archivos
/etc/openvpn/secret.key hacia el directorio /etc/openvpn del cliente. Sugiero traerlo con el comando scp:
scp IPDELSERVIDOR:/etc/openvpn/secret.key /etc/openvpn

El archivo /etc/openvpn/client1.conf quedara como sigue:


# IP publica del servidor, poner IP real de su servidor!
remote 200.100.50.25
# puerto
port 1194
# dispositivo tunel
dev tun
# usamos ifconfig ipdelcliente ipdelservidor
tun-mtu 1500
ifconfig 10.8.0.2 10.8.0.1
# clave privada, client1.key para ste ejemplo, recuerde cada usuario debe
#tener su propia .key generada. El ejemplo de win esta comentado.
#secret "c:\program files\company branded vpn\config\key.txt"
secret /etc/openvpn/secret.key
# enable LZO compression
comp-lzo
# ping cada 10 segs
ping 10
# compresin lzo
comp-lzo
# verbose moderado, callar mas de 10 mensajes iguales
verb 4
mute 10

Probando el enlace
Tanto en el cliente como en el servidor ponemos:
service openvpn start
chkconfig --level 2345 openvpn on

Podemos verificar en /var/log/messages que todo haya ido ok.


Una vez levantemos los demonios en ambos lados, podemos hacer ping hacia la interfaz tun (10.8.0.1 en el servidor
10.8.0.2 en el cliente):
desde el servidor:

ping 10.8.0.2
desde el cliente:

ping 10.8.0.1
Si el ping responde, todo est bien. Sino, sugerimos revisar en /var/log/messages para verificar qu fue mal.

2- Configuracin de RoadWarrior
Si usted ya configur y prob algn tipo de conexin openVPN anteriormente, por ejemplo la conexin host
a host, no olvide borrar los contenidos del directorio /etc/openvpn especialmente los archivos .key y .conf
puesto que nos pueden molestar o confundir para la siguiente configuracin.
Consideraciones preliminares
En el servidor openvpn necesitamos crear una serie de claves y certificados iniciales, para poder autenticar y encriptar
la informacin que transitar desde/hacia el servidor/clientes
Contamos con una serie de scripts en el directorio /usr/share/doc/openvpn-2*/easy-rsa los cuales nos ayudarn mucho
a ejecutar sta tarea inicial.
Como primer paso, sugerimos copiar ese directorio (easy-rsa) hacia /etc/openvpn y cambiarnos a ese directorio:
cp -a /usr/share/doc/openvpn-2*/easy-rsa /etc/openvpn
cd /etc/openvpn/easy-rsa

Creando el CA
Una vez dentro de ste directorio procedemos a ejecutar los siguientes pasos:
. vars
sh clean-all
sh build-ca

Con ellos lo que haremos es:


* Inicializar variables de ambiente para poder trabajar con los siguientes scripts de shell para generar las variables
* Inicializamos el directorio de las claves (borrando potenciales archivos viejos)
* build-ca: procedemos a generar el certificado CA
En ste ltimo paso se nos pedir una serie de informacin sobre nuestra red/empresa que debemos llenar lo ms
fielmente posible:
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) [KG]:EC
State or Province Name (full name) [NA]:Pichincha
Locality Name (eg, city) [BISHKEK]:Quito
Organization Name (eg, company) [OpenVPN-TEST]:EcuaLinux
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:ecualinux
Email Address [me@myhost.mydomain]:info@ecualinux.com

La variable que debemos explcitamente llenar (no dejar en blanco!) es: Common Name.
Generacin del certificado y de la clave de encriptacin para el servidor
Siguiente a la generacin del Certificado de autoridad, procedemos a crear el certificado del servidor y de su clave de
encriptacin:
sh build-key-server server
Generating a 1024 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) [KG]:EC
State or Province Name (full name) [NA]:Pichincha
Locality Name (eg, city) [BISHKEK]:Quito
Organization Name (eg, company) [OpenVPN-TEST]:EcuaLinux
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:server Email Address [me@myhost.mydomain]:info@ecualinux.com 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.cnf Check that the request matches the signature Signature
ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'EC' stateOrProvinceName :PRINTABLE:'Pichincha'
localityName :PRINTABLE:'Quito' organizationName :PRINTABLE:'EcuaLinux' organizationalUnitName:PRINTABLE:'IT' commonName
:PRINTABLE:'server' emailAddress :IA5STRING:'info@ecualinux.com' The stateOrProvinceName field needed to be the same in the
CA certificate
(Pichincha) and the request (Pichincha)

En ste paso, tambin se nos pedir nuevamente informacin sobre el certificado propio del servidor. En ste caso por
favor, escoger en Common Name un nombre diferente al anteriormente escogido. En mi caso escog: server
Este paso nos generar dos archivos en el directorio /etc/openvpn/easy-rsa/keys/ que se copiarn dentro del mismo
servidor hacia /etc/openvpn, ellos son:
* server.crt
* server.key
Generando certificados y claves privadas para los clientes
Cada cliente debe tener su propio certificado y clave de seguridad, para cara cliente que tengamos deberemos repetir el
siguiente paso. Los archivos obtenidos debemos copiarlos hacia el directorio /etc/openvpn/ de los clientes!
En el caso de que nuestros clientes sean en windows, debemos copiarlos hacia c:\program files\openvpn\
Para generar el certificado y claves privadas ejecutamos en nuestro servidor, dentro del directorio /etc/openvpn/easyrsa/
sh build-key client1
Generating a 1024 bit RSA private key
...............................................................................................++++++
......++++++
writing new private key to 'client1.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) [KG]:EC
State or Province Name (full name) [NA]:Pichincha
Locality Name (eg, city) [BISHKEK]:Quito
Organization Name (eg, company) [OpenVPN-TEST]:EcuaLinux
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:client1
Email Address [me@myhost.mydomain]:info@ecualinux.com
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.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'EC'
stateOrProvinceName :PRINTABLE:'Pichincha'
localityName :PRINTABLE:'Quito'
organizationName :PRINTABLE:'EcuaLinux'
organizationalUnitName:PRINTABLE:'IT'
commonName :PRINTABLE:'client1'
emailAddress :IA5STRING:'info@ecualinux.com'
Certificate is to be certified until Nov 24 05:25:40 2016 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

En el ejemplo anterior generamos la clave y el certificado para un cliente llamado client1.


Debemos hacer notar que al ejecutar el programa sh build-key, le pasamos como parmetro el nombre del
cliente (client1 en el ejemplo anterior) el cual debe ser diferente para cada cliente. En el common name
ponemos el nombre del cliente (client1 en ste ejemplo) tal y como le pasamos de parmetro.
Se pueden generar tantas claves como sean necesarias:
sh build-key client2
sh build-key client3

Esto nos generar dos claves y certificados ms, para client2 y client3, por favor, en common name debemos poner
client2 client3 para cada caso.
Generando parmetros de Diffie-Hellman

El parmetro de Diffie-Hellman debemos generarlo as:


sh build-dh
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
......................+...............................+...........

Archivos a copiar al servidor


Hacia el directorio /etc/openvpn del servidor copiamos los siguientes archivos:
* ca.crt
* ca.key
* server.key
* server.crt
* dh1024.pem
Estos archivos estn presentes en: /etc/openvpn/easy-rsa/keys
Archivos a copiar al cliente
Hacia el directorio /etc/openvpn de cada cliente copiamos los siguientes archivos:
* ca.crt
* clientX.crt
* clientX.key
Tenga en cuenta que X es un nmero que se corresponde con el cliente (para el cliente 2 sera: client2.crt y client2.key
por ejemplo).
Estos 3 archivos deben copiarse de forma segura hacia el cliente, quiz mediante scp o algn medio
magntico seguro. No deben enviarse por mail puesto que contienen la clave (.key) de encriptacin del
cliente!
Estos archivos estn presentes en: /etc/openvpn/easy-rsa/keys del servidor.
Para la configuracin en modo roadwarrior las configuraciones del cliente y el servidor varan un poco:
Configuracin del servidor:
El archivo /etc/openvpn/server.conf quedar as:
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
#Direcciones que se asignaran a los
#clientes, el server es .1
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
#Ruta para que los clientes alcancen la red local del server (56.0/24)
push "route 192.168.56.0 255.255.255.0"
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 4

Como podemos ver, hay nuevos parmetros, los ms importantes son:


* un push de la ruta hacia la red local interna del servidor. Esa ruta estdica permitir que el road warrior vea a las
mquinas de la red interna
* server: Indica el rango de direcciones que se asignar a los clientes que se conecten, deben ser direcciones no
similares a las de la red local.
Configuracin del cliente:
En el caso del cliente, as quedara el archivo de configuracin:
client
dev tun
proto udp
remote 201.219.41.38 1194
resolv-retry infinite

nobind
#Las dos siguientes opciones no van en windows
user nobody
group nobody
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
comp-lzo
verb 4

Las configuraciones ms interesantes son:


* Client: indica que algunas configuraciones las tomar del servidor.
* nobind: que no acte como servidor, que solamente vaya como cliente.
* Recordar que cert y key deben ser nicas para cada cliente
Si se fijan, el orden en que van los parmetros no importa mucho, he notado que el openvpn es muy noble en el cmo
pones los parmetros, le da igual (mayormente).

3- Configuracin de OpenVPN Red a Red


Lo mejor de la configuracin red-red es que es casi idntica a la de roadwarrior.
Esto es El Road Warrior est conectado a una red, pero l es un cliente slo, de sta forma:

LAN (192.168.1.0/24) --|LINUX|-- INTERNET ---- RoadWarrior (en cualquier lugar).


El road warrior, con la configuracin antes explicada puede perfectamente ver las mquinas de la LAN (192.168.1.0/24)
Pero qu tal que pusiramos una red detrs del roadwarrior?, quedara algo as:

LAN1 (192.168.1.0/24) --|LINUX1|-- INTERNET ----|Linux2|---- (LAN2:


192.168.2.0/24)
Oh, el Road warrior es en realidad otro linux.
Linux1: Est conectado a la red 192.168.1.0/24
Linux2: Est conectado a la red 192.168.2.0/24

Fjense, es IMPERIOSO que ambas redes tengan diferente numeracin, es decir, que sean dos redes IPs
diferentes, en ste caso lo son.
Mediante OpenVPN podemos hacer que ambas redes puedan verse. Es decir, por ejemplo, que podamos hacer ping
entre mquinas de la LAN1 y de la LAN2 (por ejemplo: 192.168.1.6 haciendo ping a 192.168.2.78 sin inconveniente
alguno).
Configuracin inicial:
Como bien indiqu anteriormente, es una configuracin muy parecida al roadwarrior. El RoadWarrior sera Linux2 y el
servidor sera Linux1.
Hay que configurar entonces linux1 para ser el servidor, con todas las de la ley anteriormente explicado
Hay que configurar linux2 para que acte como un cliente (road warrior) con todas las de la ley anteriormente
explicados.
Adiciones a la configuracin:
Asumamos que el ejemplo anterior aplica. Es decir, la subred del cliente (linux2) es la 192.168.2.0/24 el cliente le
llamaremos client2 (de acuerdo a los certificados y claves generados como road warrior).
Cambios en el servidor:
En el archivo /etc/openvpn/server.conf debemos agregar la siguiente directiva:

client-config-dir ccd

Esto permitir al servidor buscar dentro del directorio ccd configuraciones especiales segn el cliente (en este caso
client2).
Hay que crear el directorio ccd:

mkdir /etc/openvpn/ccd

Dentro de ste directorio creamos un archivo con el nombre del cliente (client2) que contiene la siguiente linea:

iroute 192.168.2.0 255.255.255.0

Aqu lo que le indicamos al servidor es que al conectarse client2 (este cliente remoto que es un linux con una red
detrs) que por favor cree una ruta hacia la red 192.168.2.0/24 que vaya hacia ese cliente remoto. Con eso logramos
que las mquinas de la red del servidor puedan ver a las del cliente.
Despus hay que agregar esta linea a /etc/openvpn/server.conf
route 192.168.2.0 255.255.255.0
client-to-client
push "route 192.168.2.0 255.255.255.0"

Por qu tantas veces? Sinceramente: no lo entiendo pero as es.


Tenga cuidado, en este segundo caso no la agregamos en ccd/client2 sino en el archivo de configuracin
del servidor (server.conf en mi caso)
Ya, con esto las mquinas de una red podrn ver a las de la otra red.

Si tuvieras varias redes remotas (client2 y client3 por ejemplo) entonces debes crear un archivo llamado client3 dentro
de ccd con la configuracin propia de esa red. Y agregar las lineas de las rutas (route y push "route...") en el server.conf
No te olvides de reiniciar los clientes.
Me funciona.. pero si notas algo que falta o que sobre, bienvenido el comentario.

4- OpenVPN y su relacin con iptables


Configurarlo es fcil, lo que me tom y lo juro una madrugada fue el hecho de relacionarlo con iptables.
Si tienes un iptables medio jodn, se te arma un lo. Mira que perd tiempo... la idea es que hay que habilitar el trfico
hacia las interfaces TUN/TAP pues sino no se conectan las mquinas.
El mejor sntoma es que hayas seguido todas mis indicaciones aqui y no te trabaje.. por supuesto te recomiendo
siempre mirar dentro de los logs: /var/log/messages de ambos extremos pues puede que el problema que tengas sea
otro (typos o errores al escribir).
Ahora, si ests seguro de que la openvpn est bien, te sugiero bajar el iptables (flush) en ambos extremos, para que
verifiques si funciona el openvpn sin el firewall.
Si te funcion con el iptables abajo, entonces debes agregar estas lneas en el servidor (quiz en el cliente tambin):
iptables
iptables
iptables
iptables
iptables

-A
-A
-A
-A
-A

INPUT -i tun+ -j ACCEPT


FORWARD -i tun+ -j ACCEPT
INPUT -i tap+ -j ACCEPT
FORWARD -i tap+ -j ACCEPT
INPUT -p udp --dport 1194 -j ACCEPT

Con ellas lo que logras es abrir el puerto 1194/UDP para que entre la conexin de los clientes. Y adems acceptar
conexiones tun/tap. Aunque realmente con las tun basta pues son las que usamos en estos ejemplos.

5- OpenVPN y windows
OpenVPN puede trabajar tanto como cliente cuanto como servidor en mquinas windows y linux. Es decir puede quedar
cualquier combinacin: windows windows, windows linux, linux windows o la mejor: linux-linux.
Te sugiero que comiences linux-linux pues tenemos ms herramientas para trabajar y verificar. Yo lo que hice fue, una
vez configurado bien un cliente en linux, mov los archivos de /etc/openvpn hacia la mquina de windows y listo me
trabaj.
En el caso de windows los archivos de configuracin deben ir en c:\program files\openvpn\config
Te sugiero que una vez muevas los archivos de configuracin de cliente linux al cliente windows, borres estos archivos
del cliente linux.
Recuerda que los archivos de configuracin y claves deben ser particulares para cada cliente, no debes
usarlos en dos clientes, por eso pido que los borres del cliente linux.
En el caso de windows hay dos parmetros de configuracin que no aplican y no se pueden poner en las configuraciones
son:
user y group
Ellos dos permiten degradar los privilegios a un usuario diferente del de administrador, pero en windows esto no se
puede hacer, openvpn corre como administrador.

You might also like