Professional Documents
Culture Documents
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
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/
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
Probando el enlace
Tanto en el cliente como en el servidor ponemos:
service openvpn start
chkconfig --level 2345 openvpn on
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
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
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
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
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
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:
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"
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.
-A
-A
-A
-A
-A
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.