Anda di halaman 1dari 75

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Creacin de Redes Privadas Virtuales en GNU/Linux con OpenVPN


Jorge Armando Medina
Computacin Grca de Mxico. Documentacin Tcnica

<jmedina@e-compugraf.com>

Alejandro Gabriel Snchez Martnez


Computacin Grca de Mxico. Documentacin Tcnica

<asanchezm@e-compugraf.com>

Copyright 2009, 2010, 2011 Jorge Armando Medina, Alejandro Snchez Martnez Se otorga permiso para copiar, distribuir y/o modicar ste documento bajo los trminos de la Licencia de Documentacin Libre GNU GFDL, Versin 1.2 o cualquier otra posterior publicada por la Fundacin de Software Libre; sin secciones invariantes, sin textos en portada y contraportada. Una copia de la licencia en ingles la puede encontrar en los apendices al nal del ibro, tambien una traduccin libre no ocial al espaol de la licencia GFDL y referencias de como utilizarla en sus proyectos, si por alguna razn se tuviera que utilizar por cuestiones legales la licencia GFDL la unica valida es la versin en inlges de ella. 2011/06/25 Resumen Este documento describe los procedimientos para la creacin de Redes Privadas Virtuales basadas en SSL/TLS usando software y tecnologas libres, la conguraciones sern hechas en Ubuntu Server como sistema operativo para el Servidor VPN con clientes GNU/Linux y MS Windows, el software para la creacin de tuneles VPN es OpenVPN el cual es software libre liberado bajo la licenca GNU GPL versin 2, es bastante robusto y exible, se vern los procedimientos para la creacin de tuneles VPN en modo Punto a Punto o host-to-host, creacin de tuneles VPN para conectar multiples sitios remotos, tambin conocida como VPN site-to-site, conguracines para clientes mviles RoadWarriors, veremos diferentes mtodos para la autenticacin de la VPN, tanto mecanismos de autenticacin basados en Llaves secretas pre compartidas y autenticacin por certicados x.509, tambin conocidos como certicados SSL usando una Infraestructura de Llave Pblica PKI, procedimientos para incrementar la seguridad de la VPN, y por ltimo se incluyen procedimientos de administracin y operacin del las VPN. Tabla de contenidos Prefacio Convenciones del Documento Convenciones Tipogrcas Convenciones del documento Notas y Advertencias Necesitamos sus comentarios! 1. Introduccin a Tecnologas VPN 2. Esquemas de comunicacin de las redes VPN 3. Introduccin a OpenVPN Caracteristicas de OpenVPN Los mtodos de autenticacin de OpenVPN Autenticacin basada en llaves estticas pre compartidas Autenticacin basada en certicados X.509 Historial de cambios signicativos en OpenVPN OpenVPN 2.1 versin estable liberada Recursos adicionales Sitios web 4. Preparando los requerimientos de instalacin Informacion previa del servidor OpenVPN GNU/Linux Informacin previa de los clientes OpenVPN Informacin sobre la la conectividad del servidor OpenVPN Requerimientos de Firewall Esquemas de enrutamiento para conexiones VPN Escenario 1: OpenVPN en el mismo Firewall/Gateway Escenario 2: OpenVPN en un equipo distinto al Firewall/Gateway 5. Conguracin de una Autoridad Certicadora con OpenSSL para la administracin de llaves RSA Generando la llave privada y certicado raz para la Autoridad Certicadora Generando la llave privada y certicado para el servidor OpenVPN Generando las llaves privadas y certicados para los clientes VPN Recursos adicionales Sitios web Paginas de manual 6. Instalacin de OpenVPN en el servidor GNU/Linux Objetivos Requisitos de sistema Instalacin de OpenVPN en el servidor GNU/Linux

1 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Controlando la ejecucin de OpenVPN Recursos adicionales Sitios web Paginas de manual 7. Instalacin del Cliente OpenVPN Requisitos de sistema Instalacin de OpenVPN en el cliente GNU/Linux Requisitos de sistema Instalacin de OpenVPN en el cliente GNU/Linux Controlando la ejecucin de OpenVPN Instalacin del cliente OpenVPN en Windows Requisitos de sistema para clientes MS Windows Instalando el cliente OpenVPN GUI en Windows XP Instalando el cliente OpenVPN GUI en Windows Vista y Windows 7 El directorio de conguracin del cliente OpenVPN GUI en Windows Ejecucin de OpenVPN GUI en Windows Resolucin de problemas para Clientes OpenVPN en Windows La conexin a la VPN no es establecida, en el log de OpenVPN aparece el mensaje "All TAP-Win32 adapters on this system are currently in use" Recursos Adicionales Sitios web Paginas de manual 8. Creando conexiones VPN punto a punto con OpenVPN Informacin previa y requerimientos Conexiones VPN punto a punto usando el modo de autenticacin basada en llaves estticas Congurando el servidor OpenVPN de una conexin punto a punto Congurando el cliente OpenVPN de una conexin punto a punto Ejecutando scripts con OpenVPN para agregar rutas Conexiones VPN punto a punto usando el modo de autenticacin basada en certicados SSL/TLS Congurando el servidor OpenVPN de una conexin punto a punto Congurando el cliente OpenVPN de una conexin punto a punto Resolucin de problemas en conexiones VPN punto a punto con OpenVPN Recursos adicionales Sitios web Paginas de manual 9. Creando conexiones VPN sitio a sitio con OpenVPN Objetivos Informacin previa sobre el entorno de red Congurando el servidor OpenVPN para la VPN sitio a sitio en la ocina Matriz Congurando el cliente OpenVPN para la VPN sitio a sitio en la ocina remota 1 Pruebas de conectividad entre VPN sitio a sitio Congurando el cliente OpenVPN para la VPN sitio a sitio en la ocina remota 2 Permitiendo comunicacion entre redes LAN remotas Recursos adicionales Sitios web Paginas de manual 10. Conguraciones para clientes OpenVPN RoadWarriors Congurando el cliente OpenVPN en sistemas MS Windows Congurando el cliente OpenVPN en sistemas GNU/Linux Estableciendo la conexin con el servidor OpenVPN Asignando direcciones IP estticas para los clientes OpenVPN Enviando opciones DHCP a los clientes OpenVPN Actualizando automtica de los parmetros DNS en clientes GNU/Linux Recursos adicionales Sitios web Paginas de manual 11. Reforzando la seguridad de OpenVPN Introduccin Usando TLS-auth para autenticacin TLS Uso del protocolo UDP como medida de prevencin de ataques Usando llaves RSA y de cifrado simtrico ms grandes Revocando Certicados para clientes VPN Previniendo ataques de tipo Man In The Middle Recursos adicionales Sitios web Paginas de manual 12. La Consola de Administracin OpenVPN 13. Administracin avanzada de clientes y certicados Autenticacin basada en Usuario y Contrasea Llaves privadas protegidas por contrasea Estableciendo contraea en Llave Privada sin proteccin Estableciendo contrasea en Llave Privada en GNU/Linux con OpenSSL Estableciendo contraea en Llave Privada en Windows Creando llaves privadas con contrasea Cambiando la contrasea de una Llave privada protegida Cambiando la contrasea de una Llave Privada protegida en GNU/Linux con OpenSSL Cambiando la contrasea de una Llave Privada protegida en Windows 14. Resolucin de Problemas 15. Apendices El archivo de conguracin /etc/openvpn/servidor.conf (Servidor OpenVPN)

2 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

El archivo de conguracin /etc/openvpn/cliente.conf Usando el servicio DNS Dinamico de DynDNS con el cliente Dinamico ddclient A. Historial de Revisiones B. Licencia de Documentacin Libre de GNU PREMBULO APLICABILIDAD Y DEFINICIONES COPIA LITERAL COPIADO EN CANTIDAD MODIFICACIONES COMBINACIN DE DOCUMENTOS COLECCIONES DE DOCUMENTOS AGREGACIN CON TRABAJOS INDEPENDIENTES TRADUCCIN TERMINACIN REVISIONES FUTURAS DE ESTA LICENCIA ADENDA: Cmo usar esta Licencia en sus documentos C. GNU Free Documentation License Lista de guras 9.1. Dos Redes Remotas Lista de tablas 5.1. 5.2. 5.3. 5.4. 9.1. 9.2. Archivos de inicializacin de la CA Archivos de certicados de la CA Archivos de certicados Archivos de certicados Tabla de certicados y llaves privadas requeridos para servidor OpenVPN en Matriz Tabla de certicados y llaves privadas requeridos para servidor OpenVPN en Matriz

Prefacio
Tabla de contenidos Convenciones del Documento Convenciones Tipogrcas Convenciones del documento Notas y Advertencias Necesitamos sus comentarios!

Convenciones del Documento


Este manual utiliza varias convenciones para resaltar algunas palabras y frases y llamar la atencin sobre ciertas partes especcas de informacin.

Convenciones Tipogrcas
Se utilizan cuatro convenciones tipogrcas para llamar la atencin sobre palabras o frases especcas. Dichas convenciones y las circunstancias en que se aplican son las siguientes: Negrita monoespaciado Utilizada para resaltar la entrada del sistema, incluyendo comandos de shell, nombres de archivo y rutas. Tambin se utiliza para resaltar teclas claves y combinaciones de teclas. Para ver el contenido del archivo my_next_bestselling_novel en su directorio actual de trabajo, escriba el comando cat my_next_bestselling_novel en el intrprete de comandos de shell y pulse Enter para ejecutar el comando. Lo anterior incluye un nombre de archivo, un comando de shell y una tecla clave, todo en negrita-monoespaciado y distinguible gracias al contexto. Las combinaciones de teclas se pueden distinguir de las teclas claves mediante el guin que conecta cada parte de una combinacin de tecla. Por ejemplo: Pulse Enter para ejecutar el comando. Pulse Control+Alt+F1 para cambiar a la primera terminal virtual. Pulse Control+Alt+F7 para volver a su sesin de Ventanas-X. La primera oracin resalta la tecla clave determinada que se debe pulsar. La segunda resalta dos conjuntos de tres teclas claves, cada conjunto presionado simultneamente. Si el cdigo fuente es discutido, nombres de clase, mtodos, funciones, nombres de variables, y valores de retorno mencionados dentro de un prrafo sern presentados como lo anterior, en Negrita-monoespaciado. Por ejemplo: Las clases de archivo relacionadas incluyen su propio conjunto asociado de permisos. Proportional Bold Esta denota palabras o frases encontradas en un sistema, incluyendo nombres de aplicacin; texto de cuadro de dilogo, botones etiquetados, etiquetas de cajilla de vericacin y botn de radio; ttulos de men y ttulos del sub-men. Por ejemplo:
filename

para sistema de archivos,

file

para archivos y

dir

para directorios. Cada clase tiene

3 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Seleccionar Sistema > Preferencias > Ratn desde la barra del men principal para lanzar Preferencias de Ratn. En la pestaa de Botones, haga clic en la cajilla ratn de mano izquierda y luego haga clic en Cerrar para cambiar el botn principal del ratn de la izquierda a la derecha (adecuando el ratn para la mano izquierda). Para insertar un caracter especial en un archivo gedit, seleccione desde la barra del men principal Aplicaciones > Accesorios > Mapa de caracteres. Luego, desde la barra del men elija Bsqueda > Hallar mapa de caracteres, teclee el nombre del caracter en el campo de Bsqueda y haga clic en Siguiente. El caracter buscado se resaltar en la Tabla de caracteres. Haga doble clic en este caracter resaltado para colocarlo en el campo de Texto para copiar y luego haga clic en el botn de Copiar. Ahora regrese a su documento y elija Editar > Pegar desde la barra de men de gedit. El texto anterior incluye nombres de aplicacin; nombres de men de todo el sistema y elementos; nombres de men de aplicaciones especcas y botones y texto hallados dentro de una interfaz GUI, todos presentados en negrita proporcional y distinguibles por contexto. Observe la > abreviatura utilizada para indicar recorrido a travs de un men y sus sub-menes. Esto es para evitar la dicultad de seguir el mtodo 'Seleccionar Ratn desde el sub-men Preferencias en el men de Sistema de la barra de men principal'.
Itlicas-negrita monoespaciado

Itlicas-negrita proporcional

Negrita monoespaciado o Negrita proporcional, la adicin de itlicas indica texto reemplazable o variable. Las itlicas denotan texto que usted no escribe literalmente o texto mostrado que cambia dependiendo de la circunstancia. Por ejemplo: Para conectar a una mquina remota utilizando ssh, teclee ssh nombredeusuario@dominio.nombre en un intrprete de comandos de shell. Si la mquina remota es example.com y su nombre de usuario en esa mquina es john, teclee ssh john@example.com. El comando mount -o remount file-system remonta el sistema de archivo llamado. Por ejemplo, para volver a montar el sistema de archivo /home, el comando es mount -o remount /home. Para ver la versin de un paquete actualmente instalado, utilice el comando rpm -q
paquete-versin-lanzamiento. paquete.

ste entregar el resultado siguiente:

Observe las palabras en itlicas- negrita sobre nombre de usuario, domain.name, sistema de archivo, paquete, versin y lanzamiento. Cada palabra es un marcador de posicin, tanto para el texto que usted escriba al ejecutar un comando como para el texto mostrado por el sistema. Aparte del uso estndar para presentar el ttulo de un trabajo, las itlicas denotan el primer uso de un trmino nuevo e importante. Por ejemplo: cuando el servidor Apache HTTP acepta solicitudes, enva procesos hijos o hilos para manejarlos. Este grupo de procesos hijos o hilos se conoce como un server-pool. Bajo el servidor HTTP de Apache 2.0, la responsabilidad para crear o mantener estos server-pool se resume en un grupo de mdulos llamado Mdulos de multi-procesamiento (MPMs). A diferencia de otros mdulos, slo un mdulo del grupo MPM puede ser cargado por el servidor HTTP de Apache.

Convenciones del documento


Dos, usualmente de varias lneas, los tipos de datos se distinguen visualmente del texto circundante. Salida enviada a una terminal est establecida en tipo
books books_tests Desktop Desktop1 documentation downloads drafts images mss notes
romano monoespaciado

y presentada as:

photos scripts

stuff svgs

svn

Los listados de cdigo fuente tambin se establecen en


package org.jboss.book.jca.ex1; import javax.naming.InitialContext;

romano monoespaciado,

pero se presentan y resaltan de la siguiente manera:

public class ExClient { public static void main(String args[]) throws Exception { InitialContext iniCtx = new InitialContext(); Object ref = iniCtx.lookup("EchoBean"); EchoHome home = (EchoHome) ref; Echo echo = home.create(); System.out.println("Created Echo"); System.out.println("Echo.echo('Hello') = " + echo.echo("Hello")); } }

Notas y Advertencias
Finalmente, utilizamos tres estilos visuales para llamar la atencin sobre la informacin que de otro modo se podra pasar por alto. Nota Una nota es una sugerencia, atajo o enfoque alternativo que se tiene a mano para la tarea. Ignorar una nota no debera tener consecuencias negativas, pero podra perderse de algunos trucos que pueden facilitarle las cosas. Importante Los cuadros de importante dan detalles de cosas que se pueden pasar por alto fcilmente: cambios de conguracin nicamente aplicables a la sesin actual, o servicios que necesitan reiniciarse antes de que se aplique una actualizacin. Ignorar estos

4 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

cuadros de importante no ocasionar prdida de datos, pero puede causar enfado y frustracin. Advertencia Las advertencias no deben ignorarse. Ignorarlas muy probablemente ocasionar prdida de datos.

Necesitamos sus comentarios!


Si encuentra errores tipogrcos en este manual, o si ha pensando en alguna manera de mejorarlo, nos gustara escuchar lo. Por favor enve cualquier comentario o correccin a la direccin de correo: <documentacion@e-compugraf.com>. Cuando envie reportes de mejoras o errores acerca de este manual, asegurese de mencionar el nombre del manual: Creacion_de_Redes_Privadas_Virtuales_en_GNU_Linux_con_OpenVPN. Si tiene sugerencias para mejorar la documentacin, trata de ser tan especico como sea posible cuando las describa. Si ha encontrado un error, por favor incluya el nmero de seccin y algn otro texto cercano de tal manera que podamos localizarlo facilmente.

Captulo 1. Introduccin a Tecnologas VPN


TODO: Usar informacin de la presentacin.

Captulo 2. Esquemas de comunicacin de las redes VPN


En este capitulo veremos diferentes esquemas de comunicacin con las redes VPN, en los siguientes capitulos veremos como crear VPNs como las que se describen aqui usando sistemas GNU/Linux y OpenVPN.

Captulo 3. Introduccin a OpenVPN


Tabla de contenidos Caracteristicas de OpenVPN Los mtodos de autenticacin de OpenVPN Autenticacin basada en llaves estticas pre compartidas Autenticacin basada en certicados X.509 Historial de cambios signicativos en OpenVPN OpenVPN 2.1 versin estable liberada Recursos adicionales Sitios web OpenVPN es una solucin libre para la implementacin de Redes Privadas Virtuales basadas en SSL, esta liberado bajo la Licenca Pblica General GPL versin 2, incluye caracteristicas que permiten conguraciones simples para tuneles Punto a Punto, Acceso Remoto, VPNs sitioa-sitio, seguridad para redes Inalmbricas Wi-Fi, adems incluye funcionalidades de nivel empresarial para proveer balanceo de cargas, failover, y controles de acceso renados. Iniciando con la premisa fundamental de que la complejidad es enemiga de la seguridad, OpenVPN ofrece una alternativa ligera y economica a otras tecnologias VPN. OpenVPN combina la seguridad con la facilidad de uso, el diseo ligero de OpenVPN se deshace de muchas de las complejidades que caracterizan otras implementaciones VPN. El modelo de seguridad de OpenVPN es basado en SSL, el estandar de la industria para comunicaciones seguras va el Internet. OpenVPN implementa las extensiones 2 o 3 del modelo OSI usando los protocolos SSL/TLS, soporta metodos exibles de autenticacin para los clientes basados en certicados, smart cards, y autenticacin de doble factor, y permite politicas de control de acceso para usuarios o grupos en especico usando reglas de rewall aplicadas a la interfaz virtual VPN. OpenVPN no es un proxy de aplicacines web y no opera a travs de un navegador web. Para una mayor introduccin a OpenVPN, ve las notas de la platica de James Yonan's en el Linux Fest Northwest 2004 -- Understanding the User-Space VPN: History, Conceptual Foundations, and Practical Usage. Vea la siguiente seccin para un lista de las caracteristicas de OpenVPN.

Caracteristicas de OpenVPN
OpenVPN es un software para la creacin de VPNs basadas en SSL, la cual le permitir conectar sus ocinas remotas de forma segura, adems podr otorgar acceso remoto seguro a usuarios moviles a los servicios en su red privada LAN. Basada en estandares abiertos SSL/TLS y en software libre OpenVPN ofrece las siguientes caracteristicas: Solucin VPN de clase empresarial basada en Software libre y GNU/Linux Creacin de tuneles VPN para conexiones Punto a Punto, Sitio a Sitio y usuarios mviles (Road Warriors) Utiliza como medio de transporte los protocolos TCP UDP Permite multiples conexiones a a una misma instancia sobre un unico puerto TCP UDP Los tuneles VPN funcionan sobre conexines NAT (Network Address Translation) y direcciones IP dinamicas Basada en los estandares de la industria SSL/TLS para comunicacines seguras y autenticacin, usa todas las caracteristicas de OpenSSL para el cifrado, autenticacin y certicacin para proteger el trco privado de su red mientras transita por el Internet Usa cualquier cifrado, tamao de llave, o digest HMAC (para el chequeo de la integridad de los datagramas) soportados por la biblioteca OpenSSL. Cifrado exible permitiendo elejir entre:

5 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...


Cifrado convencional basado en llaves estticas pre compartidas

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Cifrado asimetrico usando llaves pblicas basada en certicados x509 Permite usar llaves estaticas, pre compartidas o llaves dinamicas basadas en TLS para el intercambio de llaves Permite usar compresin del enlace en tiempo real y trac-shapping para administrar el uso de ancho de banda Permite el uso de plugins para extender los mecanismos de autenticacin, actualmente incluye un plugin para PAM y LDAP El servidor DHCP integrado en OpenVPN puede entregar la siguiente informacin de red a los clientes VPN: Direccin IP Virtual dinamica esttica Direccin de servidores DNS Sujo DNS Direccin de ruta del gateway predeterminado Servidor WINS Integracin con Firewall (netlter/iptables) para ltrar trco de VPN->LAN Soporte nativo de cliente para los siguientes sistemas operativos: GNU/Linux Solaris OpenBSD NetBSD FreeBSD MS Windows XP Vista y 7 , Mac OSX En este documento veremos la implementacin de la mayora de las caracteristicas arriba descritas. Para ms informacin acerca de OpenVPN ver pgina Community Software Overview en el sitio ocial de OpenVPN. El modelo de seguridad de OpenVPN esta descrito en el documento Security Overview.

Los mtodos de autenticacin de OpenVPN


OpenVPN soporta diferentes metodos de autenticacin desde cifrado convencional usando llaves secretas pre-compartidas (Static Key mode) o metodos de autenticacin basada en llaves publicas (SSL/TLS mode) usando certicados X.509 para el servidor y clientes VPN.

Autenticacin basada en llaves estticas pre compartidas


OpenVPN soporta cifrado convencional usando llaves secretas pre-compartidas usando el modo Static Key, las llaves estaticas son usadas tanto para la autenticacin y la autorizacin. El uso de llaves estaticas para la autenticacin tiene sus ventajas y desventajas las cuales se listan a continuacin: Ventajas Fcil conguracin de los dos puntos de la VPN No hay certicados,autoridades certicadoras o protocolos y negociaciones seguras complicadas. El nico requerimiento es que se pueda crear un canal seguro previamente establecido para el intercambio de la llave estatica entre los dos puntos (peers) de la VPN, puede ser scp o correo con PGP . Desventajas Solo se puede crear un tunel punto-a-punto con el uso de llaves estaticas, sin embargo, Si quiere crear ms tuneles, debe de ejecutar una nueva instanca de OpenVPN con otro archivo de conguracin y use un puerto de escucha (opcin port) diferente e independiente. Nota Nada lo detiene para que utilice la misma llave esttica para los nuevos tuneles, sin embargo, no se recomienda desde el punto de vista de la seguridad, ya que otros usuarios podran conectarse a otras VPN, claro, a menos que exista algn otro tipo de ltrado a nivel rewall. Debe de existir un canal seguro previamente establecido para intercambiar la llave, esto no es un problema con una PKI ya que el usuario puede generar su propa llave privada y generar una solicitud de certicado o CSR (Certicate Signing Request por sus siglas en Ings) y el secreto de su llave privada nunca ser transmitida por la red, solo el CSR. La llave estatica nunca puede cambiar a menos que se genere una nueva, lo que implica que debe de ser transferida al otro punto de la VPN. Si un atacante logra robar tu llave, todo lo que haya sido cifrado y que puede ser cifrado con esa llave estar comprometido.

6 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Dependiendo del modo del tunel de la VPN es el metodo de autenticacin que va a usar, normalmente para conexiones punto a punto host to host el uso de llaves pre compartidas es usado. Recursos adicionales: Static Key Mini-HOWTO: http://openvpn.net/index.php/open-source/documentation/miscellaneous/78-static-key-mini-howto.html

Autenticacin basada en certicados X.509


En la autenticacin basada en certicados SSL, OpenVPN El certicado raz es usado para validar la autenticidad del certicado del servidor OpenVPN y de los clientes VPN, es decir, se realiza una autenticacin mutua, el cliente valida la autenticidad del certicado con el que se identica el servidor y el servidor valida la autenticidad del certicado con el que se identica el cliente. El cliente OpenVPN usa un certicado para autenticarse con el servidor OpenVPN y adems para realizar el cifrado de paquetes que a traviesan el tunel VPN, Del man: TLS mode is the most powerful crypto mode of OpenVPN in both security and exibility. TLS mode works by establishing control and data channels which are multiplexed over a single TCP/UDP port. OpenVPN initiates a TLS session over the control channel and uses it to exchange cipher and HMAC keys to protect the data channel. TLS mode uses a robust reliability layer over the UDP connection for all control channel communication, while the data channel, over which encrypted tunnel data passes, is forwarded without any mediation. The result is the best of both worlds: a fast data channel that forwards over UDP with only the overhead of encrypt, decrypt, and HMAC functions, and a control channel that provides all of the security features of TLS, including certicate-based authentication and Die Hellman forward secrecy. To use TLS mode, each peer that runs OpenVPN should have its own local certicate/key pair ( --cert and --key ), signed by the root certicate which is specied in --ca. When two OpenVPN peers connect, each presents its local certicate to the other. Each peer will then check that its partner peer presented a certicate which was signed by the master root certicate as specied in --ca. If that check on both peers succeeds, then the TLS negotiation will succeed, both OpenVPN peers will exchange temporary session keys, and the tunnel will begin passing data. The OpenVPN distribution contains a set of scripts for managing RSA certicates & keys, located in the easy-rsa subdirectory. The easy-rsa package is also rendered in web form here: http://openvpn.net/easyrsa.html

Historial de cambios signicativos en OpenVPN


En esta seccin se resean los cambios ms signicativos en la evolucin del desarrollo de OpenVPN. El Roadmap ocial se pblica en el siguiente URL: https://community.openvpn.net/openvpn/wiki/RoadMap.

OpenVPN 2.1 versin estable liberada


El da de hoy James Yonan anunci en la lista de correos openvpn-users la liberacin de la versin estable 2.1 de OpenVPN, basicamente es un release 2.1_rc22 + algunos arreglos algo triviales y correcciones en la documentacin y codigos de ejemplos para los plugins. Aqu les dejo una lista con los cambios ms signicantes: La GUI est empaquetada en el instalador de Windows. Extensiones para la Interfaz de Administracin para permitir un control ms programtico de clientes y servidores OpenVPN. Opcin topology subnet, la cual permite crear subredes ms intuitivas para VPNs basadas en TUN, de esta forma los clientes solo tienen una direccin IP . Soporte para DHCP proxy para clientes windows usando la opcin route-gateway dhcp El adaptador TAP-Win32 ahora puede ser abierto desde el modo non-administrator. Funcionalidades PKCS #11 para usar tokens criptogrcos (smart cards) Opcin multihome para permitir soporte multihoming para UDP cuando el servidor tiene ms de una interfaz o multiples enlaces a Internet Opcin port-share la cual permite a OpenVPN y servidores HTTPS compartir el puerto TCP 443 Los usuarios que actualizan desde versiones 2.x notaran que la nueva opcin script-security debe ser activada para permitir la ejecucin de scripts. Para conocer ms a detalle todos los cambios que ha habido en esta versin les recomiendo revisar el ChangeLog.

Recursos adicionales
Si desea obtener ms informacin sobre los programas y pginas de manual relacionadas se aconseja que acceda a los siguientes recursos adicionales.

Sitios web

7 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

En las paginas listadas a continuacin encontrar mayor informacin sobre los programas utilizados en este capitulo. http://openvpn.net/index.php/open-source/333-what-is-openvpn.html - What is OpenVPN? http://openvpn.net/index.php/open-source/335-why-openvpn.html - Why OpenVPN? http://openvpn.net/index.php/open-source/337-why-openvpn-uses-tls.html - Why OpenVPN uses TLS? http://openvpn.net/index.php/open-source/documentation/security-overview.html - Security Overview http://openvpn.net/index.php/open-source/faq - FAQ Community Software - Categories http://openvpn.net/papers/BLUG-talk/index.html - The User-Space VPN and OpenVPN - Understanding the User-Space VPN- History, Conceptual Fundations, and Practical Usage - By James Yonan http://www.sans.org/reading_room/whitepapers/vpns/openvpn-ssl-vpn-revolution_1459 - SANS Institute - OpenVPN and the SSL Revolution. https://community.openvpn.net/openvpn/wiki/RoadMap - OpenVPN Roadmap https://community.openvpn.net/openvpn/wiki - OpenVPN Community Wiki and Tracker

Captulo 4. Preparando los requerimientos de instalacin


Tabla de contenidos Informacion previa del servidor OpenVPN GNU/Linux Informacin previa de los clientes OpenVPN Informacin sobre la la conectividad del servidor OpenVPN Requerimientos de Firewall Esquemas de enrutamiento para conexiones VPN Escenario 1: OpenVPN en el mismo Firewall/Gateway Escenario 2: OpenVPN en un equipo distinto al Firewall/Gateway En este capitulo veremos los requerimientos de sistema y comunicacines que debemos de tener antes de congurar la VPN en los sistemas.

Informacion previa del servidor OpenVPN GNU/Linux


Los procedimientos descritos en este documento fueron realizandos usando la distribucin GNU/Linux Ubuntu Server 8.04 LTS en su versin amd64. Las conguraciones realizadas en los sistemas GNU/Linux son para versiones de OpenVPN 2.0 o superior, sin embargo, se instalo la versin 2.1 en el servidor ya que corrije incluye nuevas y mejores funcionalidades. El servidor esta conectado a Internet a travs de un enlace dedicado E1 de 2Mbps, se tiene una direccin IP ja a travs de la cual se van a conectar los clientes VPN remotos, sean VPN Gateways de ocinas remotas o usuarios mviles. Para ms informacin del los requisitos de sisema del servidor OpenVPN vea el cpitulo Instalacin de OpenVPN en sistemas GNU/Linux.

Informacin previa de los clientes OpenVPN


Los procedimientos de instalacin y conguracin del cliente OpenVPN en sistemas GNU/Linux se realizaron en la distribucin Ubuntu 8.04 TLS tanto en la versin Escritorio como Servidor, tanto en versiones de 32 y 64-bit. Las tareas descritas se realizan con el usuario root ya que se requieren privilegios de administrador para controlar la interfaz de red virtual y modicar la tabla de rutas, si el usuario no tiene permisos de root se tendra que dar acceso va sudo. Los procedimientos de instalacin del cliente OpenVPN en sistemas MS Windows se realizo en Windows XP Professional, tambin se incluye informacin para clientes Windows Vista y Windows 7 en su versin Professional, todas en versiones de 32-bit. Para que un usuario pueda ejecutar el cliente GUI de OpenVPN se requieren de privilegios de Administrador o que el usuario pertenezca al grupo Operadores de conguracin de red para poder controlar la interfaz de red virtual y modicar la tabla de rutas. Para ms informacin de los requisitos de sisema par los clienes OpenVPN vea el cpitulo Instalacin del Cliente OpenVPN.

Informacin sobre la la conectividad del servidor OpenVPN


Antes de establecer el tnel VPN con OpenVPN, el cliente debe alcanzar al servidor en un solo puerto TCP/UDP en especico, el servidor no requiere alcanzar al cliente, esto es una ventaja ya que solo se requiere abrir un solo puerto TCP/UDP en el servidor, y el cliente debe ser capaz de conectarse a dicho puerto, esto facilita la administracin de rewall. Los tipos de tneles VPN descritos en los siguientes capitulos se realizan congurando OpenVPN en modo Routing. En este documento se muestran los procedimientos descritos en una red donde en un sistema que hace de gateway prederminado para una red privada, en el mismo sistema tiene un rewall congurado con IPTables/Netlter para controlar el acceso desde Internet y adems realizan funciones de NAT para dar salida a Internet a los clientes de la red interna. En el siguiente diagrama se muestra... TODO: Meter diagrama.

Requerimientos de Firewall
El Servidor OpenVPN por default utiliza el puerto UDP/1194 ocialmente aprovado por IANA. Por lo que es aconsejable abrir el puerto UDP 1194 en el rewall o usarlo en su regla de NAT en el caso que el servidor OpenVPN no este instalado en el mismo rewall o gateway. En Linux, podemos utilizar la siguiente regla de IPTables para permitir conexiones al puerto UDP 1194 desde cualquier origen.

8 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Nota En este ejemplo se utiliza -i ppp0 ya que ppp0 es la interfaz WAN de nuestro enlace ADSL, si usted esta conectado directamente an router por Ethernet, entonces querra utilizar un nombre de interfaz eth0.
# iptables -A INPUT -i ppp0 -p upd -s 0.0.0.0/0 --dport 1194 -j ACCEPT

Para ltrar el trco entre la red local y el tnel VPN se debe hacer sobre la interfaz TUN.

Esquemas de enrutamiento para conexiones VPN


En esta seccin veremos dos esquemas de enrutamient para las conexiones VPN, en especico nos referimos al enrutado de traco entre los clientes VPN y los equipos a tras del servidor VPN.

Escenario 1: OpenVPN en el mismo Firewall/Gateway


En este el servidor OpenVPN se ejecuta en el mismo servidor que hace de Firewall/Router para la red interna, y que adems es su gateway predeterminado. En este esquema no se requieren cambios en el enrutado, ni en el servidor ni en los clientes.

Escenario 2: OpenVPN en un equipo distinto al Firewall/Gateway


TODO: En este caso se tiene un router o rewall independiente el que da la salida a Internet, se tiene que hacer NAT de tipo Port Forwarding hacia el servidor OpenVPN. Caso 1: El servidor OpenVPN esta conectado a la red LAN, tiene acceso a los sistemas de la red interna. Caso 2: El servidor OpenVPN esta conectado a la red DMZ.

Captulo 5. Conguracin de una Autoridad Certicadora con OpenSSL para la administracin de llaves RSA
Tabla de contenidos Generando la llave privada y certicado raz para la Autoridad Certicadora Generando la llave privada y certicado para el servidor OpenVPN Generando las llaves privadas y certicados para los clientes VPN Recursos adicionales Sitios web Paginas de manual En este capitulo veremos como crear una Autoridad Certicadora (Certicate Authority) privada para la administracin de las llaves RSA, en especico usaremos la CA para emitir certicados X.509 o mejor conocidos como certicados SSL. El propsito nal es crear y administrar una Infraestructura de Llave Pblica (Public Key Infrastructure) o PKI, los certicados emitidos por la CA privada sern usados principalmente para autenticar las conexiones VPN, en especico para tareas de autenticacin y autorizacin entre clientes y servidores OpenVPN. En las siguientes secciones usaremos los scripts Easy-RSA los cuales se encuentra incluidos en las distribuciones de OpenVPN, estos scripts (escritos en bash) nos ayudarn a realizar las tareas de administracin de los certicados, tales como emisin de certicados, revocacin y generacin de listas de revocacin. Los scripts easy-rsa hacen uso del comando openssl para realizar dichas tareas, los certicados generados se almacenan en el formato PEM. Los certicados por la CA privada tambin pueden ser usados para asegurar las conexiones de servidores Web como Apache o IIS, servidores de correo como Sendmail, Postrix, Courier IMAP Dovecot, servidores de directorio LDAP como OpenLDAP y otros servicios de red que soporten , conexiones SSL/TLS.

Generando la llave privada y certicado raz para la Autoridad Certicadora


En esta seccin crearemos los certicados y llaves privadas para la CA (tambin conocido como certicado raz), el servidor OpenVPN y los clientes OpenVPN. Para la creacin y administracin de nuestra CA usaremos los scripts Easy RSA v2.0, los cuales vienen incluidos con el paquete openvpn. Estos scripts de la versin 2.0 estan en el directorio /usr/share/doc/openvpn/examples/easy-rsa/2.0. Realizaremos una copia de los scripts a un directorio de dentro de la conguracin de OpenVPN, por ejemplo:
root@vpn-matriz:~# cp -va /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/ExampleCA
/etc/openvpn/ExampleCA.

Nota De ahora en adelante tendr que cambiarse a ese directorio para realizar todas las tareas relacionadas con la emisin de certicados. Nos cambiaremos al directorio para inicializar la CA y generar los certicados principales.

/etc/openvpn/ExampleCA

root@vpn-matriz:~# cd /etc/openvpn/ExampleCA

Los parmetros globales para la generacin y administracin de la CA usando easy-rsa estan en el archivo denir los parmetros predeterminados para la creacin de la CA privada:
root@vpn-matriz:/etc/openvpn/ExampleCA# vim vars

vars,

editaremos este archivo para

El primer parmetro que conguraremos ser el parmetro

KEY_DIR,

el cual apunta al directorio en donde residen todos los archivos de los

9 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

certicados. Es en este directorio donde se almacenaran las llaves privadas ( .key), los archivos de solicitud de certicado (.csr), los certicados (.crt) y otros archivos e como el serial y el index.txt. Por default KEY_DIR apunta a /etc/openvpn/ExampleCA/keys.
export KEY_DIR="$EASY_RSA/keys"

Nota
EASY_RSA

es una variable que apunta al directorio actual, es por eso que es importante cambiarse al directorio para que los scripts localicen el directorio de las llaves.

Los certicados al ser emitidos se les asigna una fecha de emisin y una fecha de expiracin, dena la variable CA_EXPIRE para denir el tiempo de expiracin para el certicado raz de la CA, por default esta congurado para que el certicado dure 10 aos, si desea denir otra fecha, por ejemplo 20 aos puede congurar:
export CA_EXPIRE=7300

El tiempo de expiracin para los certicados de servidores y clientes se denen en la variable KEY_EXPIRE, por default los certicados generados para clientes tendrn un tiempo de expiracin de 10 aos, quizs usted quiera generar certicados para clientes validos por un ao ya que usted quiere estar teniendo mayor control y aprovechar las capacidades de la lista de certicados revocados (CRL).
export KEY_EXPIRE=365

Nota En secciones adelante se ver como expirar y renovar certicados. Ahora deniremos los parmetros con la informacin general de nuestra CA
export export export export export KEY_COUNTRY="MX" KEY_PROVINCE="Distrito Federal" KEY_CITY="Ciudad de Mexico" KEY_ORG="Example Inc." KEY_EMAIL="caadmin@example.com"
vars,

Los scripts de easy-rsa usan los parmetros de conguracin denidos en las variables del archivo usando el siguiente comando:
root@vpn-matriz:/etc/openvpn/ExampleCA# source vars NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/ExampleCA/keys

exporte las variables al entorno del shell

Antes de inicializar la CA ejecute el script clean-all, el cual se asegura que iniciemos con un entorno limpio, adems crea el archivo keys/index.txt en el cual se registra un ndice de archivos creados y su estado, tambin crea el archivo key/serial el cual se almacena el nmero de serie del ltimo certicado creado.
root@vpn-matriz:/etc/openvpn/ExampleCA# ./clean-all

Importante Una vez que ha creado los certicados para la CA, servidores y clientes no vuelva a ejecutar clean-all ya que borrara todos los archivos de los certicados. En la siguiente tabla se describe el propsito de los archivos y directorios creados por el script Tabla 5.1. Archivos de inicializacin de la CA Nombre de archivo keys index.txt serial Descripcin Directorio donde se almacenan las llaves y certicados. Archivo de ndice de certicados, en el se muestra informacin de validez entre otras cosas. Archivo con el nmero de serie de certicados.
clean-all:

Ahora inicialice la CA usando el script pkitool con la opcin una llave de paso (passphrase).

--initca.

Tambin usamos la opcin

--pass,

la cual proteger la llave privada raz con

root@vpn-matriz:/etc/openvpn/ExampleCA# ./pkitool --initca --pass Using CA Common Name: Example Inc. CA Generating a 1024 bit RSA private key ...++++++ ......................++++++ writing new private key to 'ca.key' Enter PEM pass phrase:SuperPASSPHRASE!!! Verifying - Enter PEM pass phrase:SuperPASSPHRASE!!! -----

Nota Asegurese de usar una llave de paso lo bastante compleja para que no pueda ser adivinada. El script anterior crea dos archivos en el directorio
/etc/openvpn/ExampleCA/keys,

los archivos y su descripcin se muestran en la tabla de abajo:

10 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...


Tabla 5.2. Archivos de certicados de la CA Nombre de archivo ca.key ca.crt Descripcin Archivo de Llave Privada Raz Archivo de certicado (llave pblica raz)

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

El archivo keys/ca.crt es el archivo del Certicado Raz de la CA, este archivo si es de carcter pblico y debe ser distribuido a todos los miembros de la VPN, este certicado ser usado por los clientes y servidores VPN para validar la autenticidad de las conexiones. El archivo
keys/ca.key

es el archivo de la llave privada y la cual esta protegida por el passphrase.

Nota Este archivo debe de permanecer en un lugar privado ya que si llegar a ser hurtado podra comprometer la seguridad de la VPN y la PKI en general. Use el comando openssl para ver el contenido del certicado raz, por ejemplo:
root@vpn-matriz:/etc/openvpn/ExampleCA# openssl x509 -in keys/ca.crt -noout -text Certificate: Data: Version: 3 (0x2) Serial Number: 86:42:77:0e:f8:7c:c7:e8 Signature Algorithm: sha1WithRSAEncryption Issuer: C=MX, ST=Distrito Federal, L=Ciudad de Mexico, O=Example Inc., CN=Example Inc. CA/emailAddress=caadmin@example.com Validity Not Before: Oct 25 02:29:06 2010 GMT Not After : Oct 22 02:29:06 2020 GMT Subject: C=MX, ST=Distrito Federal, L=Ciudad de Mexico, O=Example Inc., CN=Example Inc. CA/emailAddress=caadmin@example.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:95:a3:88:e9:32:d0:c9:6a:56:c8:ed:7c:5f:13: 76:90:46:94:64:8e:f9:6f:7e:ea:41:fe:b0:31:7c: 2f:d7:c3:26:a4:2c:44:45:94:63:f8:ae:c1:24:a3: 9e:04:d2:2c:c4:59:f9:1f:fb:33:57:a7:b8:cd:97: 52:db:1d:79:d2:47:1e:3f:4d:d7:3b:08:fc:7e:12: 92:c5:24:a6:2b:33:ee:cd:91:37:7b:37:46:7a:00: 17:4e:6b:0d:e9:6c:2c:84:26:26:25:4b:3a:2e:18: da:a7:d3:bc:6e:aa:6b:21:b4:2e:c8:7d:58:88:4d: 3e:04:8f:a1:4c:5c:9f:25:5b Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: A5:52:CC:48:FE:F7:D5:9C:76:8E:6C:A7:EF:73:8A:C1:EC:56:C7:BA X509v3 Authority Key Identifier: keyid:A5:52:CC:48:FE:F7:D5:9C:76:8E:6C:A7:EF:73:8A:C1:EC:56:C7:BA DirName:/C=MX/ST=Distrito Federal/L=Ciudad de Mexico/O=Example Inc./CN=Example Inc. CA/emailAddress=caadmin@example.com serial:86:42:77:0E:F8:7C:C7:E8 X509v3 Basic Constraints: CA:TRUE Signature Algorithm: sha1WithRSAEncryption 91:03:ef:8e:18:90:88:7e:d2:aa:f4:b2:56:17:ac:70:01:97: 96:45:50:df:c1:13:4d:d3:1d:25:60:1b:6d:c9:d0:8a:69:7c: d3:3d:67:67:69:9a:2d:75:c2:6a:06:64:8b:15:a9:de:a4:fa: 8a:48:ee:50:e4:26:f6:a5:a9:32:4e:2f:5c:eb:ec:04:12:da: b4:9a:f3:9d:ea:f2:05:91:c7:16:99:45:63:6e:0d:9f:7f:84: 08:f2:31:72:5e:90:0b:02:68:2f:ba:de:be:66:56:7f:a3:3b: 64:71:49:eb:f9:a8:47:47:4e:05:bc:be:c0:a4:90:4d:2c:3c: 0f:b4

Nota Vea las fechas de emisin del certicado raz, son los 10 aos. El archivo del certicado raz debe ser copiado tanto al servidor como a los clientes OpenVPN. En las siguientes secciones veremos como generar los certicados para el servidor y clientes VPN, recuerde mantener seguro el archivo de la llave privada raz y recuerde su passphrase porque sera requerido cuando genere o revoque certicados de clientes y servidores.

Generando la llave privada y certicado para el servidor OpenVPN


Ahora usaremos el script pkitool para generar los certicados para el servidor OpenVPN, usaremos pkitool en modo interactivo (--interact) y emitiremos el certicado con el atributo especial para servidores (--server).
root@vpn-matriz:/etc/openvpn/ExampleCA# ./pkitool --interact --server fwproxy.example.com Generating a 1024 bit RSA private key ...................++++++ ...................++++++ writing new private key to 'fwproxy.example.com.key' -----

11 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

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) [MX]:<ENTER> State or Province Name (full name) [Distrito Federal]:<ENTER> Locality Name (eg, city) [Ciudad de Mexico]:<ENTER> Organization Name (eg, company) [Example Inc.]:<ENTER> Organizational Unit Name (eg, section) []:Seguridad TI Common Name (eg, your name or your server's hostname) [fwproxy.example.com]:<ENTER> Email Address [caadmin@example.com]:<ENTER> 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/ExampleCA/openssl.cnf Enter pass phrase for /etc/openvpn/ExampleCA/keys/ca.key:SuperPASSPHRASE!!! Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'MX' stateOrProvinceName :PRINTABLE:'Distrito Federal' localityName :PRINTABLE:'Ciudad de Mexico' organizationName :PRINTABLE:'Example Inc.' organizationalUnitName:PRINTABLE:'Seguridad TI' commonName :PRINTABLE:'fwproxy.example.com' emailAddress :IA5STRING:'caadmin@example.com' Certificate is to be certified until Oct 25 02:52:09 2011 GMT (365 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

Como pudimos ver, todos los valores fueron tomados de el archivo Que en nuestro caso fue: fwproxy.example.com.

vars

y dene el commonName con el argumento que le dimos al script pkitool.

Podemos ver la informacin del certicado del servidor OpenVPN con el siguiente comando:
root@vpn-matriz:/etc/openvpn/ExampleCA# openssl x509 -noout -text -in keys/fwproxy.example.com.crt Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: C=MX, ST=Distrito Federal, L=Ciudad de Mexico, O=Example Inc., CN=Example Inc. CA/emailAddress=caadmin@example.com Validity Not Before: Oct 25 02:52:09 2010 GMT Not After : Oct 25 02:52:09 2011 GMT Subject: C=MX, ST=Distrito Federal, L=Ciudad de Mexico, O=Example Inc., OU=Seguridad TI, CN=fwproxy.example.com/emailAddress=caadmin@example.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:b9:18:84:c7:b6:43:4f:0f:03:05:c6:93:74:71: 4d:ac:30:74:d7:a1:e6:32:0a:1d:46:e3:73:ed:46: 75:5c:a9:53:7e:52:44:1d:45:49:98:11:9e:d6:0d: 32:a0:17:7e:d6:39:5f:ef:5f:10:dd:19:cd:d3:30: 4a:9f:9c:d1:4b:bc:0c:66:4b:fc:3b:5d:c8:d7:ae: ad:83:75:77:f9:3e:2a:59:2f:83:b2:f1:b0:ad:60: d9:2f:91:44:d8:8b:de:e3:de:b3:a1:df:3b:cb:40: eb:b3:8f:49:93:a9:64:0f:6b:f7:72:e3:2b:78:f8: 74:93:51:e2:71:41:eb:ac:b5 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Cert Type: SSL Server Netscape Comment: Easy-RSA Generated Server Certificate X509v3 Subject Key Identifier: 0D:EA:F3:17:33:6B:D6:B7:D3:3A:44:2A:1B:FE:E5:A3:DC:B6:80:A4 X509v3 Authority Key Identifier: keyid:A5:52:CC:48:FE:F7:D5:9C:76:8E:6C:A7:EF:73:8A:C1:EC:56:C7:BA DirName:/C=MX/ST=Distrito Federal/L=Ciudad de Mexico/O=Example Inc./CN=Example Inc. CA/emailAddress=caadmin@example.com serial:86:42:77:0E:F8:7C:C7:E8 X509v3 Extended Key Usage: TLS Web Server Authentication X509v3 Key Usage: Digital Signature, Key Encipherment Signature Algorithm: sha1WithRSAEncryption 21:f5:53:84:dd:84:9f:a5:02:b6:de:96:01:5f:e0:91:34:31: b3:b6:ce:06:19:a8:c2:41:35:74:17:2e:77:3f:10:bb:48:4c: 9e:e3:ab:59:f3:a0:20:8c:16:eb:84:42:6c:e1:44:09:e4:4a: fd:97:d1:44:c6:b1:2f:ef:fe:62:ac:87:0a:c7:61:09:2a:78:

12 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...


af:a6:b4:27:2e:95:17:f5:94:cc:05:0f:fa:e6:fb:8c:0c:bd: 6f:13:da:a0:14:d3:c6:bb:72:cf:a6:b5:79:07:9f:b5:46:0c: b8:e5:82:e9:85:e6:62:cf:25:2c:22:b9:cf:ce:23:a1:ee:ed: f2:e1

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Nota Vea que hay un atributo especial en este certicado Netscape Cert Type: SSL Server, este atributo se usar para reforzar la seguridad de la VPN. El servidor OpenVPN tambin requiere de un archivo con la llave Die-Hellman, El archivo con los parmetros Die-Hellman permite que el cliente y el servidor intercambien un secreto (key) de forma segura, sin requerir que ambos sistemas tengan una secreto pre compartido. Use el script build-dh para generar el archivo con los parmetros Die Hellman:

root@vpn-matriz:/etc/openvpn/ExampleCA# ./build-dh Generating DH parameters, 1024 bit long safe prime, generator 2 This is going to take a long time .....................................+.................................................................+.................................................+......

El comando anterior crear el archivo Importante

keys/dh1024.pem,

este archivo debe ser copiado de forma segura al servidor OpenVPN.

El archivo de los parmetros Die Hellman solo es usado por el servidor OpenVPN y nunca debe ser copiado a los clientes. Copie el archivo del certicado raz keys/ca.crt, el archivo y llave pblica del servidor keys/fwproxy.example.com.crt, keys/fwproxy.example.com.key y el archivo de los parmetros Die-Hellman keys/dh1024.pem al directorio /etc/openvpn del servidor OpenVPN:, por ejemplo:
root@vpn-matriz:/etc/openvpn/ExampleCA# cp keys/ca.crt keys/fwproxy.example.com.{crt,key} keys/dh1024.pem /etc/openvpn/

Importante Asegurese que el archivo de la llave privada no tenga permisos de acceso para otros, se recomienda permisos 600. Considere que el certicado para el servidor tiene una validez de un ao, tome lo en consideracin para que prevenga la renovacin del certicado y sea instalado antes de que el certicado expire, de lo contrario los clientes no podrn conectarse al servidor.

Generando las llaves privadas y certicados para los clientes VPN


Una de las ventajas que tiene el mtodo de autenticacin basada en certicados SSL/TLS es que podemos aplicar conguraciones personalizadas por clientes en base al commonName asignado al certicado con el que se autentica, por ejemplo, es posible asignar una direccin IP esttica a un cliente en especico en base al nombre del certicado, tambin se le pueden asignar las rutas a ciertas redes privadas, aplicar reglas de acceso a nivel rewall entre muchas cosas. Al momento de crear los certicados para el cliente VPN se recomienda que tenga la informacin de la persona para la que emitir los certicados, como mnimo debe tener la siguiente informacin: Nombre Persona o Host: Juan Perez Departamento o nombre de empresa externa: IT E-mail: jperez@example.com Nombre Certicado (Common Name): jperez.example.com Nota En el ejemplo de arriba se usa el common name en base a la direccin de correo electrnico, esto facilita la administracin de conguraciones personalizadas. Adems va a requerir el passphrase de la llave privada del certicado raz de la CA. Use el script pkitool de forma interactiva para crear los certicados de el cliente jperez.example.com, por ejemplo:
root@vpn-matriz:/etc/openvpn/ExampleCA# ./pkitool --interact jperez.example.com Generating a 1024 bit RSA private key ..........................++++++ .............................++++++ writing new private key to 'jperez.example.com.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) [MX]:<ENTER> State or Province Name (full name) [Distrito Federal]:<ENTER> Locality Name (eg, city) [Ciudad de Mexico]:<ENTER> Organization Name (eg, company) [Example Inc.]:<ENTER>

13 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Organizational Unit Name (eg, section) []:IT Common Name (eg, your name or your server's hostname) [jperez.example.com]:<ENTER> Email Address [caadmin@example.com]:jperez@example.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:<ENTER> An optional company name []:<ENTER> Using configuration from /etc/openvpn/ExampleCA/openssl.cnf Enter pass phrase for /etc/openvpn/ExampleCA/keys/ca.key:SuperPASSPHRASE!!! Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'MX' stateOrProvinceName :PRINTABLE:'Distrito Federal' localityName :PRINTABLE:'Ciudad de Mexico' organizationName :PRINTABLE:'Example Inc.' organizationalUnitName:PRINTABLE:'IT' commonName :PRINTABLE:'jperez.example.com' emailAddress :IA5STRING:'jperez@example.com' Certificate is to be certified until Oct 25 03:05:16 2011 GMT (365 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

El script anterior crea tres archivos en el directorio Tabla 5.3. Archivos de certicados Nombre de archivo jperez.example.com.key Archivo de Llave Privada

/etc/openvpn/ExampleCA/keys,

los archivos y su descripcin se muestran en la tabla de abajo:

Descripcin

jperez.example.com.csr Archivo de la peticin de certicado (Certicate Signing Request) jperez.example.com.crt Archivo de certicado (llave pblica)

De estos tres archivos solo el archivo de la llave privada y la llave pblica sern utilizados por el cliente VPN adems del archivo del certicado raz de la CA, transera de forma segura los archivos al cliente. En el siguiente ejemplo crearemos un certicado que ser utilizado por un Gateway VPN de la ocina remota en la ciudad de Guadalajara, el certicado para el gateway VPN remoto tendr la siguiente informacin: Nombre Persona o Host: guadalajara.example.com Departamento o nombre de empresa externa: Sucursal Guadalajara E-mail: guadalajara@example.com Nombre Certicado: guadalajara.example.com Para crear el certicado para el gateway VPN remoto guadalajara.example.com usaremos el script pkitool de forma interactiva de la siguiente manera:
root@vpn-matriz:/etc/openvpn/ExampleCA# ./pkitool --interact guadalajara.example.com Generating a 1024 bit RSA private key ...........++++++ ...................++++++ writing new private key to 'guadalajara.example.com.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) [MX]:<ENTER> State or Province Name (full name) [Distrito Federal]:Jalisco Locality Name (eg, city) [Ciudad de Mexico]:Guadalajara Organization Name (eg, company) [Example Inc.]:<ENTER> Organizational Unit Name (eg, section) []:Guadalajara Common Name (eg, your name or your server's hostname) [guadalajara.example.com]:<ENTER> Email Address [caadmin@example.com]:guadalajara@example.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:<ENTER> An optional company name []:<ENTER> Using configuration from /etc/openvpn/ExampleCA/openssl.cnf Enter pass phrase for /etc/openvpn/ExampleCA/keys/ca.key:SuperPASSPHRASE!!! Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'MX' stateOrProvinceName :PRINTABLE:'Distrito Federal' localityName :PRINTABLE:'Ciudad de Mexico'

14 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...


organizationName :PRINTABLE:'Example Inc.' organizationalUnitName:PRINTABLE:'Guadalajara' commonName :PRINTABLE:'guadalajara.example.com' emailAddress :IA5STRING:'guadalajara@example.com' Certificate is to be certified until Oct 25 03:09:44 2011 GMT (365 days) Sign the certificate? [y/n]:y

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated

El script anterior crea tres archivos en el directorio Tabla 5.4. Archivos de certicados Nombre de archivo

/etc/openvpn/ExampleCA/keys,

los archivos y su descripcin se muestran en la tabla de abajo:

Descripcin

guadalajara.example.com.csr Archivo de la peticin de certicado (Certicate Signing Request) guadalajara.example.com.key Archivo de Llave Privada guadalajara.example.com.crt Archivo de certicado (llave pblica)

Copie los archivos Guadalajara.

keys/guadalajara.example.com.crt, keys/guadalajara.example.key,

keys/ca.crt a un directorio en el servidor VPN de la sucursal de

Recursos adicionales
Si desea obtener ms informacin sobre los programas y pginas de manual relacionadas se aconseja que acceda a los siguientes recursos adicionales.

Sitios web
En las paginas listadas a continuacin encontrar mayor informacin sobre los programas utilizados en este capitulo. http://en.wikipedia.org/wiki/RSA - RSA http://en.wikipedia.org/wiki/X.509 - X.509 http://en.wikipedia.org/wiki/Public_key_infrastructure - Public Key Infrastructure http://openvpn.net/index.php/open-source/documentation/howto.html#pki - OpenVPN HOWTO - Setting up your own Certicate Authority (CA) and generating certicates and keys for an OpenVPN server and multiple clients http://openvpn.net/index.php/open-source/documentation/miscellaneous/77-rsa-key-management.html - RSA Key Management http://www.packtpub.com/article/setting-up-openvpn-with-x509-certicates - Setting Up OpenVPN with X509 Certicates http://tldp.org/HOWTO/SSL-Certicates-HOWTO/ - SSL Certicates HOWTO http://www.rsa.com/rsalabs/node.asp?id=2248 - 3.6.1 What is Die-Hellman?

Paginas de manual
Para conocer ms sobre el uso y conguracin de los programas utilizados en el capitulo, se recomienda leer los manuales relacionados. openssl (1ssl) - OpenSSL command line tool

Captulo 6. Instalacin de OpenVPN en el servidor GNU/Linux


Tabla de contenidos Objetivos Requisitos de sistema Instalacin de OpenVPN en el servidor GNU/Linux Controlando la ejecucin de OpenVPN Recursos adicionales Sitios web Paginas de manual En esta seccin veremos la instalacin del sofware requerido para nuestro entorno de VPN, en esta seccin en especico se ve la instalacin para el servidor OpenVPN en sistemas GNU/Linux, aunque el documento esta enfocado a Sistemas Debian/Ubuntu, las notas tambin pueden aplicar a otras distribuciones como Redhat/CentOS y en caso de ser necesario se har notar la diferenca.

Objetivos
En este capituo veremos como realizar las tareas relacionadas a la instalacin de OpenVPN en sistemas GNU/Linux como Debian/Ubuntu, los objetivos son: Las tareas que realizaremos nos permitirn lograr los siguientes objetivos: Conocer los requisitos de sistema para instalar y ejecutar OpenVPN en GNU/Linux.

15 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...


Instalar openvpn en Debian/Ubuntu con apt. Controlar la ejecucin de forma manual y automtica de OpenVPN.

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Las tareas a realizar requieren que se tenga privilegios de administrador en el sistema, puede ser como usuario root o usando sudo, tambin se requieren conocimientos para ejecutar programas en la lnea de comandos y editar archivos de conguracin en modo texto.

Requisitos de sistema
Para poder ejecutar OpenVPN en un sistema GNU/Linux se deben de cumplir varios requerimientos de sistema, tanto a nivel del kernel como de bibliotecas de sistema. Adems se requieren de ciertas herramientas adicionales para la conguracn de interfaces de red virtuales y asignar las direcciones IP del tnel. Los requisitos son los siguientes: Privilegios de root - Para ejecutar OpenVPN es necesario tener privilegios de root ya que al ejecutarse el proceso se abre un puerto UDP/TCP tamben se requieren privielgios de root para cargar el soporte TUN , Driver Universal TUN/TAP - OpenVPN debe usar una interfaz de red virtual, en un sistema GNU/Linux se requiere que el controlador (driver) para dispositivos TUN/TAP este compilado en el sistema, ya sea como modulo cargable o como parte del nucleo. OpenSSL - OpenVPN requiere la bilioteca OpenSSL para realizar las funciones de cifrado. LZO - La biblioteca LZO es usada para comprimir los paquetes y as ecientar las comunicaciones, es bastante eciente con tuenles basados en UDP y en enlaces lentos. PAM - Cuando usa OpenVPN con mecanismos de autenticacin adicionales, como autenticacin por usuario y contrasea probablemente requiere usar PAM, en Debian/Ubuntu el soporte de PAM esta incluido por default, basicamente a travs de los paquetes: libpam0g, libpam-modules y libpam-runtime. En Redhat/CentOS no hay un paquete ocial de LZO (use de dag) y para PAM el paquete es: pam. Las tareas de instalacin y conguracin del servidor OpenVPN la realizaremos con el usuario root. Es necesario que el soporte para crear interfaces virtuales TUN/TAP este disponible en el sistema ante de poder establecer los tneles con OpenVPN, si el soporte TUN se incluye como mdulo del kernel entonces tendr que cargarlo antes de ejecutar OpenVPN, si el soporte est como esttico entonces no hay que cargar nada. En Ubuntu 8.04 Hardy el mdulo TUN esta incluido como mdulo cargable del kernel, vea el archivo de conguracin del kernel para ver como se compilo:
# grep -i "CONFIG_TUN=" /boot/config-2.6.24-23-server CONFIG_TUN=m

Puede ver la informacin del mdulo con el comando modinfo, por ejemplo:
# modinfo tun filename: alias: license: author: description: srcversion: depends: vermagic: /lib/modules/2.6.24-21-xen/kernel/drivers/net/tun.ko char-major-10-200 GPL (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com> Universal TUN/TAP device driver 08388FE146550F7E73EBDE9 2.6.24-21-xen SMP mod_unload

En distribuciones Ubuntu 10.04 Lucid el mdulo TUN esta incluido como esttico, por lo que no hay que preocuparse que el mdulo se cargue antes de iniciar el proceso de OpenVPN, por ejemplo:
$ grep -i "CONFIG_TUN=" /boot/config-2.6.32-31-generic CONFIG_TUN=y

Las interfaces virtuales TUN se establecen a travs del archivo de dispositivo en el sistema archivos /dev/net/tun*, es necesario que exista un archivo /dev/net/tun* para cada interfaz virtual, por ejemplo, para la interfaz TUN predeterminada se asigna el archivo /dev/net/tun:
$ ls -l /dev/net/tun crw-rw---- 1 root root 10, 200 2011-06-12 22:22 /dev/net/tun

Si no existe el archivo del dispositivo TUN puede crearlo manualmente con los siguientes comandos:
# mkdir -m 755 /dev/net # mknod /dev/net/tun c 10 200 # chmod 600 /dev/net/tun

Nota En algunas distribuciones como CentOS y Debian/Ubuntu el archivo es creado como parte del proceso de post instalacin del paquete. Cargue el mdulo del kernel con el comando modprobe, por ejemplo:
# modprobe tun # lsmod | grep tun tun

14336

En distribuciones Debian/Ubuntu el paquete que provee las bibliotecas OpenSSL se llama libssl, el soporte LZP lo provee el paquete liblzo2, ambos paquetes son dependencias requeridas para instalar el paquete OpenVPN.

16 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Es importante que el servidor OpenVPN abrira un socket UDP en el puerto 1194 por lo que si hay algn rewall de por medio abran dicho puerto para permitir las comunicacines entre el cliente y el servidor.

Instalacin de OpenVPN en el servidor GNU/Linux


En esta seccin veremos como instalar el paquete OpenVPN en distribuciones Debian/Linux usando la herramienta apt para descargar las dependencias de libssl, libzlo y otras de forma automtica:
# apt-get update # apt-get install openvpn .... .... ... Setting up openvpn-blacklist (0.1-0ubuntu0.8.04.1) ... Setting up openvpn (2.1~rc7-1ubuntu3.3) ... * Starting virtual private network daemon.

[ OK ]

La instalacin del paquete OpenVPN crea el directorio /etc/openvpn en donde se recomienda se almacenen los archivos de conguracin y otros archivos relacionados a la conguracin de OpenVPN, tambin se creo el script de inicializacin /etc/init.d/openvpn el cual se usa para controlar la ejecucin de las instancias de OpenVPN que se conguren en el directorio /etc/openvpn, los archivos de conguracin de las instancias de OpenVPN deben terminar con .conf. Este script esta congurado para inicializar OpenVPN las instancias de OpenVPN de forma automtica al inicio del sistema y apagarlas al apagar el sistema. En las siguientes capitulos y secciones veremos como y donde crear los archivos de conguracin de las instancias de OpenVPN y como controlar la ejecucin de forma manul y automtica.

Controlando la ejecucin de OpenVPN


En la mayora de casos se requiere ejecutar OpenVPN de forma automtica, tanto en el cliente como servidor, para ejecuar OpenVPN de forma automtica al inicio del sistema de forma automtica use el script de control de ejecucin /etc/init.d/openvpn.
El script

requiere que exista un archivo de conguracin de OpenVPN en el directorio /etc/openvpn con terminacin .conf, por ejemplo use el comando:

/etc/openvpn

/hosta.conf.

Para ejecutar la instalancia de OpenVPN en los archivos de conguracin en


# /etc/init.d/openvpn start

/etc/openvpn/*.conf

Como vemos en la salida del comando anterior, nos conrma que el servidor fue iniciado con exito. Nota El script ejecuta el programa openvpn con el parametro --daemon por cada archivo de conguracin en el directorio con terminacin .conf, el proceso openvpn se ejecuta en segundo plano. Para detener una instancia de OpenVPN que se inicio con el script de control init use el comando:
# /etc/init.d/openvpn stop
/etc/openvpn/

Si realizo cambios signicantes en la conguracin del servidor o cliente OpenVPN, como cambio de direccin IP protocolo, puertos o directorios , de conguraciones, se aconseja reiniciar por completo el servicio OpenVPN el comando:
# /etc/init.d/openvpn restart

Si deseamos que el servicio OpenVPN sea iniciado al arranque del sistema, usaremos el comando:
# update-rc.d openvpn defaults

Nota Cuando se instala el paquete openvpn, se agre el servicio openvpn para que sea iniciado automaticamente al arranque del sistema, por lo que es posible que reciba un mensaje como el siguiente:
# update-rc.d openvpn defaults System startup links for /etc/init.d/openvpn already exist.

Si no deseamos que el servidor openvpn NO sea iniciado al arranque del sistema usaremos el comando:
# update-rc.d -f openvpn remove

Si esta realizando pruebas en las conguraciones o conexiones VPN se recomienda que ejecute el programa openvpn en primer plano para que as pueda localizar mensajes importantes o de error con mayor rapidez, por ejemplo:
# openvpn /etc/openvpn/hosta-debug.conf

Importante Para ver los mensajes de log en la salida estandar comente la o las directivas Si ejecuto openvpn en primer plano, presion Ctrl+C para cancelar su ejecucin.
log

log-append

en el archivo de conguracion.

17 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Con el comando anterior, ninguna instanca de OpenVPN ser iniciado al arranque del sistema, para controlarlo se tendr que hacer con alguno de los metodos antes mencionados o la Consola de Aministracin de OpenVPN.

Recursos adicionales
Si desea obtener ms informacin sobre los programas y pginas de manual relacionadas se aconseja que acceda a los siguientes recursos adicionales.

Sitios web
En las paginas listadas a continuacin encontrar mayor informacin sobre los programas utilizados en este capitulo. http://openvpn.net/index.php/open-source/documentation/install.html - Installation Notes

Paginas de manual
Para conocer ms sobre el uso y conguracin de los programas utilizados en el capitulo, se recomienda leer los manuales relacionados. modprobe (8) - program to add and remove modules from the Linux Kernel modinfo (8) - program to show information about a Linux Kernel module lsmod (8) - program to show the status of modules in the Linux Kernel apt-get (8) - APT package handling utility - - command-line interface update-rc.d (8) - install and remove System-V style init script links openvpn (8) - secure IP tunnel daemon.

Captulo 7. Instalacin del Cliente OpenVPN


Tabla de contenidos Requisitos de sistema Instalacin de OpenVPN en el cliente GNU/Linux Requisitos de sistema Instalacin de OpenVPN en el cliente GNU/Linux Controlando la ejecucin de OpenVPN Instalacin del cliente OpenVPN en Windows Requisitos de sistema para clientes MS Windows Instalando el cliente OpenVPN GUI en Windows XP Instalando el cliente OpenVPN GUI en Windows Vista y Windows 7 El directorio de conguracin del cliente OpenVPN GUI en Windows Ejecucin de OpenVPN GUI en Windows Resolucin de problemas para Clientes OpenVPN en Windows La conexin a la VPN no es establecida, en el log de OpenVPN aparece el mensaje "All TAP-Win32 adapters on this system are currently in use" Recursos Adicionales Sitios web Paginas de manual En este capitulo se vern los requisitos de sistema para instalar el OpenVPN en modo cliente para diferentes sistemas operativos, en especial GNU/Linux y MS Windwos, adems de algunos tips de resolucin de problemas comunes.

Requisitos de sistema
Los requisitos de sistema varian dependiendo del sistema operativo en el que se instale OpenVPN, siga las siguientes secciones para ver los requisitos especicos para GNU/Linux tanto para arquitecturas x86 como amd64 y MS Windows XP Professional, Windows Vista y Windows7 tanto para arquitecturas de 32 y 64bits.

Instalacin de OpenVPN en el cliente GNU/Linux


En esta seccin se vern los requerimientos de software y permisos de ejecucin para usar el cliente de OpenVPN en sistemas operativos GNU/LInux, en especial para Debian/Ubuntu. Si usted usa alguna distribucin basada en RHEL, como CentOS, distribuciones que no cuentan con un paquete ocial de OpenVPN, usted deber compilar el paquete de OpenVPN para su distribucin. Nota El archivo tar de las fuentes de OpenVPN se encuentra el archivo .spec el cual puede ser usado para construir su propio paquete RPM binario. Para otras distribuciones consulte su sistema de paquetes ya que probablemente puede estar incluido en los repositorios ociales, y como ltimo recurso compile OpenVPN desde las fuentes.

Requisitos de sistema
Para poder ejecutar OpenVPN en un sistema GNU/Linux se deben de cumplir varios requerimientos de sistema, tanto a nivel del kernel como de bibliotecas de sistema. Adems se requieren de ciertas herramientas adicionales para la conguracn de interfaces de red virtuales y asignar las

18 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...


direcciones IP del tnel. Los requisitos son los siguientes:

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Privilegios de root - Para ejecutar OpenVPN es necesario tener privilegios de root ya que al ejecutarse el proceso se abre un puerto UDP/TCP tamben se requieren privielgios de root para cargar el soporte TUN , Driver Universal TUN/TAP - OpenVPN debe usar una interfaz de red virtual, en un sistema GNU/Linux se requiere que el controlador (driver) para dispositivos TUN/TAP este compilado en el sistema, ya sea como modulo cargable o como parte del nucleo. OpenSSL - OpenVPN requiere la bilioteca OpenSSL para realizar las funciones de cifrado. LZO - La biblioteca LZO es usada para comprimir los paquetes y as ecientar las comunicaciones, es bastante eciente con tuenles basados en UDP y en enlaces lentos. PAM - Cuando usa OpenVPN con mecanismos de autenticacin adicionales, como autenticacin por usuario y contrasea probablemente requiere usar PAM, en Debian/Ubuntu el soporte de PAM esta incluido por default, basicamente a travs de los paquetes: libpam0g, libpam-modules y libpam-runtime. En Redhat/CentOS no hay un paquete ocial de LZO (use de dag) y para PAM el paquete es: pam. Las tareas de instalacin y conguracin del servidor OpenVPN la realizaremos con el usuario root. Es necesario que el soporte para crear interfaces virtuales TUN/TAP este disponible en el sistema ante de poder establecer los tneles con OpenVPN, si el soporte TUN se incluye como mdulo del kernel entonces tendr que cargarlo antes de ejecutar OpenVPN, si el soporte est como esttico entonces no hay que cargar nada. En Ubuntu 8.04 Hardy el mdulo TUN esta incluido como mdulo cargable del kernel, vea el archivo de conguracin del kernel para ver como se compilo:
# grep -i "CONFIG_TUN=" /boot/config-2.6.24-23-server CONFIG_TUN=m

Puede ver la informacin del mdulo con el comando modinfo, por ejemplo:
# modinfo tun filename: alias: license: author: description: srcversion: depends: vermagic: /lib/modules/2.6.24-21-xen/kernel/drivers/net/tun.ko char-major-10-200 GPL (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com> Universal TUN/TAP device driver 08388FE146550F7E73EBDE9 2.6.24-21-xen SMP mod_unload

En distribuciones Ubuntu 10.04 Lucid el mdulo TUN esta incluido como esttico, por lo que no hay que preocuparse que el mdulo se cargue antes de iniciar el proceso de OpenVPN, por ejemplo:
$ grep -i "CONFIG_TUN=" /boot/config-2.6.32-31-generic CONFIG_TUN=y

Las interfaces virtuales TUN se establecen a travs del archivo de dispositivo en el sistema archivos /dev/net/tun*, es necesario que exista un archivo /dev/net/tun* para cada interfaz virtual, por ejemplo, para la interfaz TUN predeterminada se asigna el archivo /dev/net/tun:
$ ls -l /dev/net/tun crw-rw---- 1 root root 10, 200 2011-06-12 22:22 /dev/net/tun

Si no existe el archivo del dispositivo TUN puede crearlo manualmente con los siguientes comandos:
# mkdir -m 755 /dev/net # mknod /dev/net/tun c 10 200 # chmod 600 /dev/net/tun

Nota En algunas distribuciones como CentOS y Debian/Ubuntu el archivo es creado como parte del proceso de post instalacin del paquete. Cargue el mdulo del kernel con el comando modprobe, por ejemplo:
# modprobe tun # lsmod | grep tun tun

14336

En distribuciones Debian/Ubuntu el paquete que provee las bibliotecas OpenSSL se llama libssl, el soporte LZP lo provee el paquete liblzo2, ambos paquetes son dependencias requeridas para instalar el paquete OpenVPN. Es importante que el cliente OpenVPN se pueda conectar al servidor OpenVPN a travs del puerto UDP/1194, por lo que si hay algn rewall de por medio abran dicho puerto para permitir las comunicacines entre el cliente y el servidor.

Instalacin de OpenVPN en el cliente GNU/Linux


En esta seccin veremos como instalar el paquete OpenVPN en distribuciones Debian/Linux usando la herramienta apt para descargar las dependencias de libssl, libzlo y otras de forma automtica:
# apt-get update # apt-get install openvpn ....

19 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...


.... ... Setting up openvpn-blacklist (0.1-0ubuntu0.8.04.1) ... Setting up openvpn (2.1~rc7-1ubuntu3.3) ... * Starting virtual private network daemon.

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

[ OK ]

La instalacin del paquete OpenVPN crea el directorio /etc/openvpn en donde se recomienda se almacenen los archivos de conguracin y otros archivos relacionados a la conguracin de OpenVPN, tambin se creo el script de inicializacin /etc/init.d/openvpn el cual se usa para controlar la ejecucin de las instancias de OpenVPN que se conguren en el directorio /etc/openvpn, los archivos de conguracin de las instancias de OpenVPN deben terminar con .conf. Este script esta congurado para inicializar OpenVPN las instancias de OpenVPN de forma automtica al inicio del sistema y apagarlas al apagar el sistema. En las siguientes capitulos y secciones veremos como y donde crear los archivos de conguracin de las instancias de OpenVPN y como controlar la ejecucin de forma manul y automtica.

Controlando la ejecucin de OpenVPN


En la mayora de casos se requiere ejecutar OpenVPN de forma automtica, tanto en el cliente como servidor, para ejecuar OpenVPN de forma automtica al inicio del sistema de forma automtica use el script de control de ejecucin /etc/init.d/openvpn.
El script

requiere que exista un archivo de conguracin de OpenVPN en el directorio /etc/openvpn con terminacin .conf, por ejemplo use el comando:

/etc/openvpn

/hosta.conf.

Para ejecutar la instalancia de OpenVPN en los archivos de conguracin en


# /etc/init.d/openvpn start

/etc/openvpn/*.conf

Como vemos en la salida del comando anterior, nos conrma que el servidor fue iniciado con exito. Nota El script ejecuta el programa openvpn con el parametro --daemon por cada archivo de conguracin en el directorio con terminacin .conf, el proceso openvpn se ejecuta en segundo plano. Para detener una instancia de OpenVPN que se inicio con el script de control init use el comando:
# /etc/init.d/openvpn stop
/etc/openvpn/

Si realizo cambios signicantes en la conguracin del servidor o cliente OpenVPN, como cambio de direccin IP protocolo, puertos o directorios , de conguraciones, se aconseja reiniciar por completo el servicio OpenVPN el comando:
# /etc/init.d/openvpn restart

Si deseamos que el servicio OpenVPN sea iniciado al arranque del sistema, usaremos el comando:
# update-rc.d openvpn defaults

Nota Cuando se instala el paquete openvpn, se agre el servicio openvpn para que sea iniciado automaticamente al arranque del sistema, por lo que es posible que reciba un mensaje como el siguiente:
# update-rc.d openvpn defaults System startup links for /etc/init.d/openvpn already exist.

Si no deseamos que el servidor openvpn NO sea iniciado al arranque del sistema usaremos el comando:
# update-rc.d -f openvpn remove

Si esta realizando pruebas en las conguraciones o conexiones VPN se recomienda que ejecute el programa openvpn en primer plano para que as pueda localizar mensajes importantes o de error con mayor rapidez, por ejemplo:
# openvpn /etc/openvpn/hosta-debug.conf

Si ejecuto openvpn en primer plano, presion Ctrl+C para cancelar su ejecucin. Con el comando anterior, ninguna instanca de OpenVPN ser iniciado al arranque del sistema, para controlarlo se tendr que hacer con alguno de los metodos antes mencionados o la Consola de Aministracin de OpenVPN.

Instalacin del cliente OpenVPN en Windows


En esta seccin veremos los requerimientos de software y permisos para instalar el cliente de OpenVPN en sistemas operativos MS Windows, en esta ocasin se ver la instalacin en un Windows XP Profesional, para Windows Vista y Windows 7 es similar.

Requisitos de sistema para clientes MS Windows


Para poder instalar el programa cliente de OpenVPN se requieren privilegios de administrador, si no los tiene consulte a su administrador. Los requerimientos para poder ejecutar el cliente OpenVPN es que el usuario que vaya a usar la VPN sea administrador o miembro del grupo Operadores de conguracin de red.

20 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Adicionalmente, si el servidor OpenVPN enva informacin de red al cliente VPN, como la direccin IP del servidor DNS para usar en la VPN deber de asegurarse que los servicios Cliente DNS y Cliente DHCP estn habilitados y en ejecucin.

Instalando el cliente OpenVPN GUI en Windows XP


Siga el siguiente procedimiento para instalar el cliente OpenVPN para Windows: 1. Descargar la ltima versin de OpenVPN para Windows, ir a la seccin de descargas del sitio ocial de OpenVPN, y descargar la ltima versin de la serie 2.1.x, a la fecha la ltima versin es 2.1.1. Descargue el paquete del instalador para Windows openvpn-2.1.1-install.exe. Vaya al la ruta en donde descargo el instalador, y haga doble clic sobre el programa.

2. Debers de ver el asistente de instalacin, haz clic en Next > para proceder.

3. Ahora ver el acuerdo de licencia, si esta de acuerdo con los trminos de la licencia de clic en I Agree para continuar.

4. Ahora el asistente nos ofrece la oportunidad de seleccionar los componentes a instalar, instale todos los componentes (default) y haga clic en Next >.

21 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

5. Ahora elija la ruta de instalacin, la ruta predeterminada es: clic en Install para continuar.

C:\Archivos de programa\OpenVPN para sistemas en Espaol o C:\Program Files\OpenVPN,

haga

Nota Recuerde esta ruta ya que es en ella en donde se instalan los archivos de conguracin y certicados. 6. El proceso de instalacin inicia y el asistente de instalacin copiar los archivos al sistema a la ruta:
C:\Archivos de programa\OpenVPN.

7. El driver de la interfaz de red virtual TAP-Win32 Adapter V9 ser instalado durante el proceso de instalacin. Ya que el driver no esta rmado por Microsoft, un mensaje de alerta ser mostrado, podemos ignorar el mensaje y dar clic en Continuar.

22 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

8. Si la instalacin de los archivos de programa y el driver fue exitosa, entonces el asistente terminara el proceso de instalacin, demos clic en Next >.

9. Por ltimo nos ofrece leer el archivo README, haga clic en Finish para terminar.

Instalando el cliente OpenVPN GUI en Windows Vista y Windows 7


Siga el siguiente procedimiento para instalar el cliente OpenVPN para Windows, se recomienda que use la versin 2.1.1 ya que corrigue varios problemas de privilegios con Windows Vista y Windows 7: 1. Descargar la ltima versin de OpenVPN para Windows, ir a la seccin de descargas del sitio ocial de OpenVPN, y descargar la ltima versin de la serie 2.1.x, a la fecha la ltima versin es 2.1.1. Descargue el paquete del instalador para Windows openvpn-2.1.1-install.exe. Vaya al la ruta en donde descargo el instalador, y haga doble clic sobre el programa.

23 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

2. Debers de ver el asistente de instalacin, haz clic en Next > para proceder.

3. Ahora ver el acuerdo de licencia, si esta de acuerdo con los trminos de la licencia de clic en I Agree para continuar.

4. Ahora el asistente nos ofrece la oportunidad de seleccionar los componentes a instalar, instale todos los componentes (default) y haga clic en Next >.

24 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...


5. Ahora elija la ruta de instalacin, la ruta predeterminada es: clic en Install para continuar.

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...
haga

C:\Archivos de programa\OpenVPN para sistemas en Espaol o C:\Program Files\OpenVPN,

Nota Recuerde esta ruta ya que es en ella en donde se instalan los archivos de conguracin y certicados. 6. El proceso de instalacin inicia y el asistente de instalacin copiar los archivos al sistema a la ruta: C:\Archivos de programa\OpenVPN. adems que solicita la instalacin del driver de la interfaz de red virtual TAP-Win32 Adapter V9. Haga clic sobre el botn Instalar para congurar la instalacin del controlador.

7. Si la instalacin de los archivos de programa y el driver fue exitosa, entonces el asistente terminara el proceso de instalacin, demos clic en Next >.

8. Por ltimo nos ofrece leer el archivo README en donde se le hace enfasis en que en las versiones de Windows Vista y Windows 7 debe ejecutar el cliente OpenVPN GUI como administrador, haga clic en Finish para terminar.

25 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

El directorio de conguracin del cliente OpenVPN GUI en Windows


Ahora que el cliente de OpenVPN esta instalado copie los archivos de conguracin y certicados a la ruta: continuacin se listan los archivos que requiere copiar al directorio de archivos de conguracin: MiVPN.ovpn ca.crt mi.common.name.crt mi.common.name.key Puede tener varios archivos de conguracin con terminacin .ovpn para ejecutar diferentes instancias de OpenVPN, solo recuerde que los archivos de conguracin como llaves y certicados sean diferentes para cada conguracin. Vea la siguiente seccin para ejecutar el cliente OpenVPN GUI.
C:\Archivos de programa\OpenVPN\cong\,

Ejecucin de OpenVPN GUI en Windows


Cuando instala el programa OpenVPN GUI el instalador crea un acceso directo en el escritorio, para ejecutar el cliente OpenVPN GUI haga doble clic sobre el icono, recuerde que debe ser usuario administrador o miembro del grupo Operadores de conguracin de red para poder iniciar la interfaz de red virtual TAP y crear las rutas de sistema para alcanzar a los hosts en las redes remotas. En sistemas con Windows XP solo haga doble clic sobre el icono para ejecutar el cliente OpenVPN GUI:

En sistemas con Windows Vista Windows 7, debido a las restricciones del sistema User Account Control (UAC), el sistema requiere que el usuario autorice la ejecucin del cliente OpenVPN con niveles elevados aun cuando el usuario sea administrador local, para darle la vuelta a este problema se puede realizar los siguientes pasos: En el icono de OpenVPN GUI que se agrega en el Escritorio, hacer clic con el botn derecho y seleccionar la opcin Ejecutar como administrador, por ejemplo:

Cuando el sistema UAC solicite autorizacin para que OpenVPN GUI realice cambios en el equipo haga cli en el botn Si, de esta forma se evitarn problemas para abrir la interfaz de red virtual TUN/TAP congurar parametros de red en la interfaz virtual y agregar rutas a las redes , remotas.

26 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Para predenir la ejecucin de OpenVPN como administrador de forma permanente haga clic con el botn derecho sobre el programa C:\Arhivos de Programa\OpenVPN\bin\openvpn-gui.1.0.3.exe sobre el icono del acceso directo de OpenVPN GUI del escritorio y seleccione la opcin Propiedades. Despus vaya a la pestaa Compatibilidad y vaya al bloque de Nivel de privilegio, seleccione la casilla para Ejecutar este programa como administrador.

El programa OpenVPN GUI es ejecutado y se mueve la bandeja del sistema, el icono nos muestra el estado de la conexin, cuando esta en color amarillo indica que se esta Conectando, cuando esta en verde indica un estado de Conectado, y cuando esta de color rojo indica que esta Desconectado. Haga clic con el botn derecho sobre el icon de OpenVPN GUI en la bandeja de sistema y seleccione la opcin connect para conectarse a la VPN. Hga clic con el botn derecho sobre el icono de OpenVPN GUI en la bandeja de sistema para desplegar el men contextual del cliente OpenVPN GUI, en el menu podemos ver el log de conexin (til en caso de problemas de conexin), asignar o cambiar la contrasea de la llave privada, o incluso editar el archivo de conguracin.

Resolucin de problemas para Clientes OpenVPN en Windows


En esta seccin veremos la resolucin de los problemas ms comunes en las implementaciones de OpenVPN GUI en MS WIndows. La conexin a la VPN no es establecida, en el log de OpenVPN aparece el mensaje "All TAP-Win32 adapters on this system are

27 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...


currently in use"

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Si no se puede conectar a la VPN y al nal del log de OpenVPN GUI aparece el mensaje All TAP-Win32 adapters on this system are currently in use puede signicar que: Ya hay un proceso de openvpn usando el adaptador de red TAP-WIN32 El adaptador esta marcado como desactivado, vaya al panel de control y active el dispositivo El usuario no tiene privilegios de administrador para poder usar el dispositivo (NOTA: En windows vista aunque el usuario que lo ejecute sea administrador no va a poder abrir el adaptador, tiene que ir al icono de OpenVPN GUI y dar clic con el boton derecho y seleccionar "ejecutar como administrador". En la mayora del los casos el adaptador de red TAP-Win32 fue desactivado, activelo e intente conectarse. En Windows Vista y Windows 7, el estado del adaptador de red TAP-Win32 se puede ver en el Panel de Control => Redes e Internet => Conexiones de red:

Si en el estado se ve el mensaje de Cable de red desconectado signica que la VPN no esta en uso, sin embargo, el adaptador si esta habilitado. Si la interfaz esta deshabilitada, el estado del adaptador se vera as:

Para habilitar el adaptador haga clic derecho sobre el adaptador y haga clic sobre la opcin Activar.

Recursos Adicionales
Si desea obtener ms informacin sobre los programas y pginas de manual relacionadas se aconseja que acceda a los siguientes recursos adicionales.

Sitios web
En las paginas listadas a continuacin encontrar mayor informacin sobre los programas utilizados en este capitulo. http://openvpn.net/index.php/open-source/documentation/install.html - Installation Notes (Linux) http://openvpn.net/index.php/open-source/documentation/install.html?start=1 - Installation Notes - Installation (Win32)

Paginas de manual
Para conocer ms sobre el uso y conguracin de los programas utilizados en el capitulo, se recomienda leer los manuales relacionados. modprobe (8) - program to add and remove modules from the Linux Kernel modinfo (8) - program to show information about a Linux Kernel module lsmod (8) - program to show the status of modules in the Linux Kernel apt-get (8) - APT package handling utility - - command-line interface update-rc.d (8) - install and remove System-V style init script links openvpn (8) - secure IP tunnel daemon.

Captulo 8. Creando conexiones VPN punto a punto con OpenVPN


Tabla de contenidos Informacin previa y requerimientos Conexiones VPN punto a punto usando el modo de autenticacin basada en llaves estticas

28 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Congurando el servidor OpenVPN de una conexin punto a punto Congurando el cliente OpenVPN de una conexin punto a punto Ejecutando scripts con OpenVPN para agregar rutas Conexiones VPN punto a punto usando el modo de autenticacin basada en certicados SSL/TLS Congurando el servidor OpenVPN de una conexin punto a punto Congurando el cliente OpenVPN de una conexin punto a punto Resolucin de problemas en conexiones VPN punto a punto con OpenVPN Recursos adicionales Sitios web Paginas de manual En este capitulo veremos como crear conexiones VPN punto a punto (host to host) con OpenVPN en sistemas GNU/Linux, este tipo de conexin es til para asegurar conexiones ya sean por internet o en redes locales. Los ejemplos de conexin que veremos las realizaremos con dos sistemas GNU/Linux, estos equipos se conectan a travs de Internet, uno tiene un elace dedicado con direccin IP ja y el otro tiene un elace ADSL con IP dinamica. Ambos sistemas usan la distribucin Linux Ubuntu Hardy 8.04 de 64-bit (aunque tambin son soportadas las arquitectuas de 32-bit). Veremos dos tipos de conguraciones para establecer los tneles VPN, una usando autenticacin con llaves estticas (pre shared key) y la otra usando autenticacin asimtrica con certicados x.509 TLS/SSL.

Informacin previa y requerimientos


En las siguientes secciones realizaremos un tnel VPN entre dos sistemas que se describen a continuacin: Se conectarn dos hosts: HostA y HostB. La conexin es a travs de Internet usando las direcciones IP pblicas resueltas por DNS dinamicos. El equipo HostA actuar como servidor, ya que usa una direccin IP dinamica, se usar el nombre servidorvpnp2p-hosta.dyndns.org. El servidor HostA escucha peticiones por SSH en el puerto TCP/22. el cual ser usado para administrar el servidor, instalar OpenVPN, transferir archivos con los clientes de la VPN. El servidor HostA recibir peticiones en el puerto UDP/1194, dicho puerto debe de estar abierto en el rewall. El cliente HostB actuar como cliente, tambin se le conguro una cuenta en dyndns con el nombre de host clientevpnp2p-hostb.dyndns.org (aunque no es requerido). El cliente HostB escucha peticiones por SSH en el puerto TCP/22. el cual ser usado para administrar el servidor, instalar OpenVPN, transferir archivos con los clientes de la VPN. El usuario (host) debe de ser capaz de conectarse al servidor OpenVPN mediante el puerto UDP/1194, si no esta abierto consulta a tu administrador de rewall. Los sistemas GNU/Linux que se usarn ya cumplen con todos los requerimientos de software por lo que no veremos ms los procedimientos de instalacin de OpenVPN. Asegurese de que los puntos que se listan atras sean tomandos en consideracin cuando realizce una conexin ya sea en laboratorios o en produccin, lo ayudara a facilitar las cosas cuando se presenten problemas relacionados a la conexin.

Conexiones VPN punto a punto usando el modo de autenticacin basada en llaves estticas
En esta seccin veremos las tareas requeridas para realizar una conexin VPN punto a punto usando el mtodo de autenticacin de llaves pre compartidas (pre shared key). Este tipo de conexiones punto a punto es la ms fcil de realizar ya que es la que menos operaciones requiere tanto del lado del cliente como del servidor. La llave pre compartida es de tipo HMAC de 2048 bits.

Congurando el servidor OpenVPN de una conexin punto a punto


En esta seccin se veremos como crear un archivo de conguracin para el servidor OpenVPN para una conexin de tipo Punto a Punto, la autenticacin entre el cliente y el servidor se realiza a travs de una llave pre compartida que ser transferia desde el servidor al cliente. En el hosta crearemos el archivo /etc/openvpn/hosta-server-p2p-static.ovpn en donde mantendremos los parmetros de conguracin para el servidor en la conexin punto a punto.
root@HostA:/etc/openvpn# vim etc/openvpn/hosta-server-p2p-static.ovpn

Con el siguiente contenido:


; ; Archivo de configuracin de servidor OpenVPN tunnel p2p: ; mode p2p dev tun proto udp port 1194 ifconfig 10.5.0.1 10.5.0.2

29 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...


secret /etc/openvpn/static.key cipher BF-CBC comp-lzo ping 10 ping-restart 180 ping-timer-rem persist-tun persist-key script-security 2 log-append /var/log/openvpn.log verb 3 status /var/log/openvpn-status.log mute 50

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

El modo p2p (predeterminado) usa una topologa punto-a-punto en donde la direccin IP virtual del peer remoto de la interfaz tun del cliente (10.5.0.1) siempre apunta a la direccin IP virtual local de la interfaz tun del servidor. Este modo asigna una direccin IP virtual individual a los clientes, solo use este modo para clientes NO Windows, ya que hay una limitante en el driver TAP de Windows. En el archivo de conguracin se usan los siguientes parmetros: mode p2p dev tun proto udp port 1194 # OpenVPN 2.0 uses UDP port 1194 by default # (ocial port assignment by iana.org 11/04). # OpenVPN 1.x uses UDP port 5000 by default. # Each OpenVPN tunnel must use # a dierent port number. # lport or rport can be used # to denote dierent ports # for local and remote. ifcong 10.5.0.1 10.5.0.2 secret /etc/openvpn/static.key cipher BF-CBC ;cipher BF-CBC # Blowsh (default) ;cipher AES-128-CBC # AES ;cipher DES-EDE3-CBC # Triple-DES comp-lzo ping 10 Envar un Ping al host remoto sobre el canal de control TCP/UDP si no se ha enviado ningun paquete en los ultimos 10 segundos por el peer (debe de especicar ping en los dos puntos de la VPN, ya que los pings de openvpn no se les regresa el echo como en ping IP Cuando se usa . ping en los modos de seguridad --secret, --tls-server o --tls-client, los paquetes ping son enviados criptogrcamente seguros. ping-restart La opcin ping-restart es usada para mandar una seal SIGUSR1 al proceso openvpn si no se ha recibido un paquete ping o cualquier otro tipo de paquete desde el otro punto de la VPN Esta opcin es util en casos donde los peer remotos tienen direccin IP dinamica y un TTL DNS demasiado bajo, por ejemplo usando el servicio de http://dyndns.org/ ms el cliente DNS Dinamico ddclient. Para la instalacin y conguracin del cliente DNS dinamico ddclient ver el apendice Usando el servicio DNS Dinamico de DynDNS con el cliente Dinamico ddclient. ping-timer-rem Ejecuta ping-restart solo si tenemos una direccin remota, solo usar esta opcin cuando se usa en modo listen, y no se esta usando una opcin explicita de remote, esta opcin es util si no desea iniciar los conteos de timeout si no hasta que los clientes se contan. Los parametros persiste- nos ayudarn para evitar que se re-abrir o re-leer la interfaz tun y la llave estatica despues de un reinicio. persist-tun No cerrar o re-abrir el dispositivo La seal persist-key No re-leer el archivo de la llave cuando se reciba una seal SIGUSR1 o haya sucedido un
ping-restart. SIGUSR1 TUN/TAP,

tampoco ejecutar los scripts


SIGHUP,

up

down

al recibir una seal SIGUSR1 o haya sucedido un

ping-restart.

es una seal de reinicio similar a

pero ofrece un control granular sobre las opciones de reset.

30 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Esta opcin puede ser combinada con la opcin user nobody para permitir reinicios cuando se recibe la seal SIGUSR1, normalmente si se tiran los privilegios de root en OpenVPN, el demonio no puede ser reiniciado ya que no ser capaz de re-leer los archivos de llave protegidos. script-security 2 log-append /var/log/openvpn.log Cuando se ejecuta OpenVPN como demonio en el background, dene la ruta al archivo de log para almacenar los eventos. verb 3 Nivel de severidad con la que se almacenan los logs. # 0 -- quiet except for fatal errors. # 1 -- mostly quiet, but display non-fatal network errors. # 3 -- medium output, good for normal operation. # 9 -- verbose, good for troubleshooting status /var/log/openvpn-status.log Registro de eventos para el estado de conexiones. En el log de estado se registra informacin Conexiones activas. truncadas. Informacin del cliente: IP pblica origen, certicado, IP virtual. bytes enviados y bytes recibidos por el cliente. Este archivo de estado es actualizado cada minuto. mute 50 Si se registran 50 mensajes consecutivos de la misma categoria de log sern omitidos. Ahora crearemos la llave esttica con la que el servidor OpenVPN se autenticar con su peer, esta llave ser compartida con el hostb.
root@hosta:~# cd /etc/openvpn/

Genere el archivo de la llave esttica con el comando openvpn y la opcin


root@hosta:/etc/openvpn# openvpn --genkey --secret static.key

--genkey:

Vea el contenido del archivo

/etc/openvpn/static.key

para ver la llav:

root@hosta:/etc/openvpn# cat static.key # # 2048 bit OpenVPN static key # -----BEGIN OpenVPN Static key V1----fd44e3c22e40176a8a81cea0c7248d94 791eda0773cfa625fe6c7752fa5d682e 5954df038b5ccf9d04d865e9d0a9d562 30e6ca4e656d930f179e2f0adc55ed40 ed71699940323f3685c3b1a0942dff0e f94c8eca75e86fd46e956e4452d1f82c f5a31667cf7e526ea93ad416a4fe0ffc 0a0c941a90f96142eab1f1672bbc2415 4b132da4c96ad0a769945e9983753d55 03b1cf67ef06ba1973df98e5687bf1e6 544431cefc7e684d618ac1c17318b95a 8ccda9e96638368b060d1c6ab2259187 c332d0675db525fd777c0ec5b32d6b08 97fc48d60fe24fac5635c6d49bd2a59a 56f4e24d9e3ff84ac7256881e8b336f7 3e2f50a9d8adbc6b4405d9e2c279ec12 -----END OpenVPN Static key V1-----

Nota Desde OpenVPN 1.5 se crean llaves estaticas HMAC de 2048 bits para la autenticacin, en versiones anteriores las llaves eran de 1024 bits. Importante El comando openvpn crea el archivo de la llave con permisos 600, se recomienda se mantengan los permisos 600 con los propietarios root:root para mantener seguro el archivo de la llave. Nota Se recomienda que transifera una copia del archivo de la llave al cliente por un medio seguro como SSH.

31 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...


Ahora incie la instancia del servidor OpenVPN en el hosta:
root@hosta# openvpn Mon Jun 13 01:13:14 Mon Jun 13 01:13:14 Mon Jun 13 01:13:14 Mon Jun 13 01:13:14 Mon Jun 13 01:13:14 Mon Jun 13 01:13:14 Mon Jun 13 01:13:14 Mon Jun 13 01:13:14 Mon Jun 13 01:13:14 Mon Jun 13 01:13:14 Mon Jun 13 01:13:14 Mon Jun 13 01:13:14 Mon Jun 13 01:13:14 Mon Jun 13 01:13:14 Mon Jun 13 01:13:14 Mon Jun 13 01:13:14

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

etc/openvpn/hosta-server-p2p-static.ovpn 2011 OpenVPN 2.1.0 x86_64-pc-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] [MH] [PF_INET6] [eurephia] built on Jul 20 2010 2011 NOTE: OpenVPN 2.1 requires '--script-security 2' or higher to call user-defined scripts or executables 2011 /usr/sbin/openvpn-vulnkey -q static.key 2011 Static Encrypt: Cipher 'BF-CBC' initialized with 128 bit key 2011 Static Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication 2011 Static Decrypt: Cipher 'BF-CBC' initialized with 128 bit key 2011 Static Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication 2011 TUN/TAP device tun0 opened 2011 TUN/TAP TX queue length set to 100 2011 /sbin/ifconfig tun0 10.5.0.1 pointopoint 10.5.0.2 mtu 1500 2011 Data Channel MTU parms [ L:1544 D:1450 EF:44 EB:4 ET:0 EL:0 ] 2011 Local Options hash (VER=V4): '642547a8' 2011 Expected Remote Options hash (VER=V4): '3f417e8d' 2011 Socket Buffers: R=[124928->131072] S=[124928->131072] 2011 UDPv4 link local (bound): [undef] 2011 UDPv4 link remote: [undef]

En otra consola use el comando ifcong para vericar que se creo la interfaz virtual TUN:
root@hosta:~# ifconfig tun0 tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.5.0.1 P-t-P:10.5.0.2 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

Nota La interfaz tun0 es de tipo Peer-To-Peer. La instancia de OpenVPN crea una ruta a la direccin del peer 10.5.0.2, use el comando route para vericarlo:
root@hosta:~# route -n | grep tun 10.5.0.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0

El proceso openvpn abre un socket UDP local en el puerto UDP 1194, podemos verlo con netstat:
root@hosta:~# netstat -plun | grep openvpn udp 0 0 0.0.0.0:1194 0.0.0.0:* 7198/openvpn

Si no se presentaron problemas con la ejecucin de OpenVPN cancele el proceso y renombre el archivo de conguracin con terminacin .conf para controlar la instancia usando el script /etc/init.d/openvpn:
root@hosta:~# mv etc/openvpn/hosta-server-p2p-static.ovpn etc/openvpn/hosta-server-p2p-static.conf

Ahora inicie la instancia manualmente:


# /etc/init.d/openvpn start * Starting virtual private network daemon(s)... * Autostarting VPN 'hosta-server-p2p-static'

[ OK ]

En la siguiente seccin veremos como congurar el el cliente OpenVPN en el sistema hostb.

Congurando el cliente OpenVPN de una conexin punto a punto


En esta seccin se veremos como crear un archivo de conguracin para el cliente OpenVPN para una conexin de tipo Punto a Punto, la autenticacin entre el cliente y el servidor se realiza a travs de una llave pre compartida que ser transferia desde el servidor al cliente. En el hostb crearemos el archivo en la conexin punto a punto.
/etc/openvpn/hostb-cliente-p2p-static.ovpn

en donde mantendremos los parmetros de conguracin para el cliente

root@hostb:/etc/openvpn# vim /etc/openvpn/hostb-cliente-p2p-static.ovpn

Con el siguiente contenido:


; ; Archivo de configuracin de cliente OpenVPN punto a punto: ; mode p2p dev tun proto udp port 1194 remote 69.60.121.173 nobind ifconfig 10.5.0.2 10.5.0.1 secret /etc/openvpn/static.key

32 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

cipher BF-CBC comp-lzo ping 10 ping-restart 180 ping-timer-rem persist-tun persist-key script-security 2 log-append /var/log/openvpn.log verb 3 status /var/log/openvpn-status.log mute 50

En el archivo de conguracin se usan los siguientes parmetros: mode p2p dev tun proto udp port 1194 # OpenVPN 2.0 uses UDP port 1194 by default # (ocial port assignment by iana.org 11/04). # OpenVPN 1.x uses UDP port 5000 by default. # Each OpenVPN tunnel must use # a dierent port number. # lport or rport can be used # to denote dierent ports # for local and remote. ifcong 10.5.0.1 10.5.0.2 secret /etc/openvpn/static.key cipher BF-CBC ;cipher BF-CBC # Blowsh (default) ;cipher AES-128-CBC # AES ;cipher DES-EDE3-CBC # Triple-DES comp-lzo ping 10 Envar un Ping al host remoto sobre el canal de control TCP/UDP si no se ha enviado ningun paquete en los ultimos 10 segundos por el peer (debe de especicar ping en los dos puntos de la VPN, ya que los pings de openvpn no se les regresa el echo como en ping IP Cuando se usa . ping en los modos de seguridad --secret, --tls-server o --tls-client, los paquetes ping son enviados criptogrcamente seguros. ping-restart La opcin ping-restart es usada para mandar una seal SIGUSR1 al proceso openvpn si no se ha recibido un paquete ping o cualquier otro tipo de paquete desde el otro punto de la VPN Esta opcin es util en casos donde los peer remotos tienen direccin IP dinamica y un TTL DNS demasiado bajo, por ejemplo usando el servicio de http://dyndns.org/ ms el cliente DNS Dinamico ddclient. Para la instalacin y conguracin del cliente DNS dinamico ddclient ver el apendice Usando el servicio DNS Dinamico de DynDNS con el cliente Dinamico ddclient. ping-timer-rem Ejecuta ping-restart solo si tenemos una direccin remota, solo usar esta opcin cuando se usa en modo listen, y no se esta usando una opcin explicita de remote, esta opcin es util si no desea iniciar los conteos de timeout si no hasta que los clientes se contan. Los parametros persiste- nos ayudarn para evitar que se re-abrir o re-leer la interfaz tun y la llave estatica despues de un reinicio. persist-tun No cerrar o re-abrir el dispositivo La seal persist-key No re-leer el archivo de la llave cuando se reciba una seal SIGUSR1 o haya sucedido un
ping-restart. SIGUSR1 TUN/TAP,

tampoco ejecutar los scripts


SIGHUP,

up

down

al recibir una seal SIGUSR1 o haya sucedido un

ping-restart.

es una seal de reinicio similar a

pero ofrece un control granular sobre las opciones de reset.

Esta opcin puede ser combinada con la opcin user nobody para permitir reinicios cuando se recibe la seal SIGUSR1, normalmente si se tiran los privilegios de root en OpenVPN, el demonio no puede ser reiniciado ya que no ser capaz de re-leer los archivos de llave protegidos. script-security 2

33 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...


log-append /var/log/openvpn.log

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Cuando se ejecuta OpenVPN como demonio en el background, dene la ruta al archivo de log para almacenar los eventos. verb 3 Nivel de severidad con la que se almacenan los logs. # 0 -- quiet except for fatal errors. # 1 -- mostly quiet, but display non-fatal network errors. # 3 -- medium output, good for normal operation. # 9 -- verbose, good for troubleshooting status /var/log/openvpn-status.log Registro de eventos para el estado de conexiones. En el log de estado se registra informacin Conexiones activas. truncadas. Informacin del cliente: IP pblica origen, certicado, IP virtual. bytes enviados y bytes recibidos por el cliente. Este archivo de estado es actualizado cada minuto. Copie la llave esttica desde el servidor usando scp:
root@hostb:~# cd /etc/openvpn/ root@hostb:/etc/openvpn# scp root@hosta:/etc/openvpn/static.key .

Ahora incie la instancia del cliente OpenVPN en el hostb:


root@hostb:/etc/openvpn# Mon Jun 13 02:06:06 2011 Mon Jun 13 02:06:06 2011 Mon Jun 13 02:06:06 2011 Mon Jun 13 02:06:07 2011 Mon Jun 13 02:06:07 2011 Mon Jun 13 02:06:07 2011 Mon Jun 13 02:06:07 2011 Mon Jun 13 02:06:07 2011 Mon Jun 13 02:06:07 2011 Mon Jun 13 02:06:07 2011 Mon Jun 13 02:06:07 2011 Mon Jun 13 02:06:07 2011 Mon Jun 13 02:06:07 2011 Mon Jun 13 02:06:07 2011 Mon Jun 13 02:06:07 2011 Mon Jun 13 02:06:07 2011 Mon Jun 13 02:06:07 2011 Mon Jun 13 02:06:07 2011 Mon Jun 13 02:06:07 2011 Mon Jun 13 02:06:07 2011 Mon Jun 13 02:06:08 2011 openvpn /etc/openvpn/hostb-cliente-p2p-static.ovpn OpenVPN 2.1.3 x86_64-pc-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] [MH] [PF_INET6] [eurephia] built on Mar 11 2011 NOTE: the current --script-security setting may allow this configuration to call user-defined scripts /usr/sbin/openvpn-vulnkey -q static.key Static Encrypt: Cipher 'BF-CBC' initialized with 128 bit key Static Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Static Decrypt: Cipher 'BF-CBC' initialized with 128 bit key Static Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication LZO compression initialized Socket Buffers: R=[126976->131072] S=[126976->131072] TUN/TAP device tun0 opened TUN/TAP TX queue length set to 100 /sbin/ifconfig tun0 10.5.0.2 pointopoint 10.5.0.1 mtu 1500 Data Channel MTU parms [ L:1545 D:1450 EF:45 EB:135 ET:0 EL:0 AF:3/1 ] Local Options hash (VER=V4): 'eb2f9638' Expected Remote Options hash (VER=V4): 'c88c2514' GID set to nogroup UID set to nobody UDPv4 link local: [undef] UDPv4 link remote: [AF_INET]69.60.121.173:1194 Peer Connection Initiated with [AF_INET]69.60.121.173:1194 Initialization Sequence Completed

En el servidor OpenVPN ver el siguiente mensaje en los logs:


Mon Jun 13 02:09:06 2011 Peer Connection Initiated with [AF_INET]189.142.104.15:57394 Mon Jun 13 02:09:06 2011 Initialization Sequence Completed

En hostb el proceso openvpn crea una interfaz tun0, use el comando ifcong para ver la informacin:
root@hostb:~# ifconfig tun0 tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.5.0.2 P-t-P:10.5.0.1 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:10 errors:0 dropped:0 overruns:0 frame:0 TX packets:13 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:840 (840.0 B) TX bytes:1092 (1.0 KB)

Se crea la ruta al la direccin del servidor:


root@hostb:~# route -n | grep tun0 10.5.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 tun0

Use el comando ping para probar la conectividad entre el cliente y el servidor OpenVPN usando la direccin IP privada del tnel:
root@hostb:~# PING 10.5.0.1 64 bytes from 64 bytes from 64 bytes from ping -c 3 10.5.0.1 (10.5.0.1) 56(84) bytes of data. 10.5.0.1: icmp_req=1 ttl=64 time=81.9 ms 10.5.0.1: icmp_req=2 ttl=64 time=79.9 ms 10.5.0.1: icmp_req=3 ttl=64 time=80.3 ms

34 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...


--- 10.5.0.1 ping statistics --3 packets transmitted, 3 received, 0% packet loss, time 2002ms rtt min/avg/max/mdev = 79.937/80.738/81.945/0.868 ms

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Pruebe la conectivdad con el servidor haca el cliente usando la direccin IP del tnel VPN:
root@hosta:~# PING 10.5.0.2 64 bytes from 64 bytes from 64 bytes from ping -c 3 10.5.0.2 (10.5.0.2) 56(84) bytes of data. 10.5.0.2: icmp_seq=1 ttl=64 time=79.9 ms 10.5.0.2: icmp_seq=2 ttl=64 time=79.3 ms 10.5.0.2: icmp_seq=3 ttl=64 time=79.4 ms

--- 10.5.0.2 ping statistics --3 packets transmitted, 3 received, 0% packet loss, time 2002ms rtt min/avg/max/mdev = 79.314/79.581/79.960/0.426 ms

Si no se presentaron problemas con la ejecucin de OpenVPN cancele el proceso y renombre el archivo de conguracin con terminacin .conf para controlar la instancia usando el script /etc/init.d/openvpn:
root@hostb:~# mv /etc/openvpn/hostb-cliente-p2p-static.ovpn /etc/openvpn/hostb-cliente-p2p-static.conf

Ahora inicie la instancia manualmente:


# /etc/init.d/openvpn start * Starting virtual private network daemon(s)... * Autostarting VPN 'hostb-cliente-p2p-static'

[ OK ]

Se recomienda que pruebe nuevamente la conectividad.

Ejecutando scripts con OpenVPN para agregar rutas


Para ejecutar un script cuando se ejecuta OpenVPN use el parmetro up, por ejemplo:
# Our up script will establish routes # once the VPN is alive. up ./office.up

El script contiene:
$ cat office.up #!/bin/sh route add -net 10.0.1.0 netmask 255.255.255.0 gw $5

Recuerde que el archivo del script debe tener permisos de ejecucin. Y en el cliente:
# Our up script will establish routes # once the VPN is alive. up ./home.up

El script:
$ cat home.up #!/bin/sh route add -net 10.0.0.0 netmask 255.255.255.0 gw $5

Conexiones VPN punto a punto usando el modo de autenticacin basada en certicados SSL/TLS
En esta seccin veremos las tareas requeridas para realizar una conexin VPN punto a punto usando el mtodo de certicados x.509 (TLS/SSL). Una de las ventajas de usar autenticacin basada en certicados SSL es que pueden ser usados para tneles punto a punto y tambin para VPNs con mltiples clientes. Para informacin de la creacin de los certicados de el servidor y clientes OpenVPN ver el cpitulo Conguracin de una Autoridad Certicadora con OpenSSL.

Congurando el servidor OpenVPN de una conexin punto a punto


En esta seccin se veremos como crear un archivo de conguracin para el servidor OpenVPN para una conexin de tipo Punto a Punto, la autenticacin entre el cliente y el servidor se realiza a travs de certicados SSL/TLS. Los certicados son generados en el servidor con los scripts easy-rsa. En el hosta crearemos el archivo la conexin punto a punto.
/etc/openvpn/hosta-server-p2p-tls.ovpn

en donde mantendremos los parmetros de conguracin para el servidor en

root@hosta:/etc/openvpn# vim hosta-server-p2p-tls.ovpn

Con el siguiente contenido:


; ; Archivo de configuracin de servidor OpenVPN tunnel p2p: ;

35 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...


tls-server dev tun proto udp port 1194 ifconfig 10.5.0.1 10.5.0.2 ca ca.crt cert fwproxy.example.com.crt key fwproxy.example.com.key dh dh1024.pem cipher BF-CBC comp-lzo ping 10 ping-restart 180 ping-timer-rem persist-tun persist-key ;script-security 2 log-append /var/log/openvpn.log verb 3 status /var/log/openvpn-status.log mute 50

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Ell modo p2p (predeterminado) usa una topologa punto-a-punto en donde la direccin IP virtual del peer remoto de la interfaz tun del cliente (10.5.0.1) siempre apunta a la direccin IP virtual local de la interfaz tun del servidor. Este modo asigna una direccin IP virtual individual a los clientes, solo use este modo para clientes NO Windows, ya que hay una limitante en el driver TAP de Windows. En el archivo de conguracin se usan los siguientes parmetros: mode p2p dev tun proto udp port 1194 # OpenVPN 2.0 uses UDP port 1194 by default # (ocial port assignment by iana.org 11/04). # OpenVPN 1.x uses UDP port 5000 by default. # Each OpenVPN tunnel must use # a dierent port number. # lport or rport can be used # to denote dierent ports # for local and remote. ifcong 10.5.0.1 10.5.0.2 secret /etc/openvpn/static.key cipher BF-CBC ;cipher BF-CBC # Blowsh (default) ;cipher AES-128-CBC # AES ;cipher DES-EDE3-CBC # Triple-DES comp-lzo ping 10 Envar un Ping al host remoto sobre el canal de control TCP/UDP si no se ha enviado ningun paquete en los ultimos 10 segundos por el peer (debe de especicar ping en los dos puntos de la VPN, ya que los pings de openvpn no se les regresa el echo como en ping IP Cuando se usa . ping en los modos de seguridad --secret, --tls-server o --tls-client, los paquetes ping son enviados criptogrcamente seguros. ping-restart La opcin ping-restart es usada para mandar una seal SIGUSR1 al proceso openvpn si no se ha recibido un paquete ping o cualquier otro tipo de paquete desde el otro punto de la VPN Esta opcin es util en casos donde los peer remotos tienen direccin IP dinamica y un TTL DNS demasiado bajo, por ejemplo usando el servicio de http://dyndns.org/ ms el cliente DNS Dinamico ddclient. Para la instalacin y conguracin del cliente DNS dinamico ddclient ver el apendice Usando el servicio DNS Dinamico de DynDNS con el cliente Dinamico ddclient. ping-timer-rem Ejecuta ping-restart solo si tenemos una direccin remota, solo usar esta opcin cuando se usa en modo listen, y no se esta usando una opcin explicita de remote, esta opcin es util si no desea iniciar los conteos de timeout si no hasta que los clientes se contan.

36 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Los parametros persiste- nos ayudarn para evitar que se re-abrir o re-leer la interfaz tun y la llave estatica despues de un reinicio. persist-tun No cerrar o re-abrir el dispositivo La seal persist-key No re-leer el archivo de la llave cuando se reciba una seal SIGUSR1 o haya sucedido un
ping-restart. SIGUSR1 TUN/TAP,

tampoco ejecutar los scripts


SIGHUP,

up

down

al recibir una seal SIGUSR1 o haya sucedido un

ping-restart.

es una seal de reinicio similar a

pero ofrece un control granular sobre las opciones de reset.

Esta opcin puede ser combinada con la opcin user nobody para permitir reinicios cuando se recibe la seal SIGUSR1, normalmente si se tiran los privilegios de root en OpenVPN, el demonio no puede ser reiniciado ya que no ser capaz de re-leer los archivos de llave protegidos. script-security 2 log-append /var/log/openvpn.log Cuando se ejecuta OpenVPN como demonio en el background, dene la ruta al archivo de log para almacenar los eventos. verb 3 Nivel de severidad con la que se almacenan los logs. # 0 -- quiet except for fatal errors. # 1 -- mostly quiet, but display non-fatal network errors. # 3 -- medium output, good for normal operation. # 9 -- verbose, good for troubleshooting status /var/log/openvpn-status.log Registro de eventos para el estado de conexiones. En el log de estado se registra informacin Conexiones activas. truncadas. Informacin del cliente: IP pblica origen, certicado, IP virtual. bytes enviados y bytes recibidos por el cliente. Este archivo de estado es actualizado cada minuto. mute 50 Si se registran 50 mensajes consecutivos de la misma categoria de log sern omitidos. Ahora incie la instancia del servidor OpenVPN en el hosta:
root@hosta# openvpn Thu Jun 16 00:31:47 Thu Jun 16 00:31:47 Thu Jun 16 00:31:47 Thu Jun 16 00:31:47 Thu Jun 16 00:31:47 Thu Jun 16 00:31:47 Thu Jun 16 00:31:47 Thu Jun 16 00:31:47 Thu Jun 16 00:31:47 Thu Jun 16 00:31:47 Thu Jun 16 00:31:47 Thu Jun 16 00:31:47 Thu Jun 16 00:31:47 Thu Jun 16 00:31:47 /etc/openvpn/hosta-pserver-2p-tls.ovpn 2011 OpenVPN 2.1_rc7 x86_64-pc-linux-gnu [SSL] [LZO2] [EPOLL] built on Dec 15 2010 2011 Diffie-Hellman initialized with 1024 bit key 2011 /usr/bin/openssl-vulnkey -q -b 1024 -m <modulus omitted> 2011 LZO compression initialized 2011 Control Channel MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ] 2011 TUN/TAP device tun0 opened 2011 TUN/TAP TX queue length set to 100 2011 ifconfig tun0 10.5.0.1 pointopoint 10.5.0.2 mtu 1500 2011 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ] 2011 Local Options hash (VER=V4): '917749b8' 2011 Expected Remote Options hash (VER=V4): '84c0f112' 2011 Socket Buffers: R=[124928->131072] S=[124928->131072] 2011 UDPv4 link local (bound): [undef]:1191 2011 UDPv4 link remote: [undef]

En otra consola use el comando ifcong para vericar que se creo la interfaz virtual TUN:
root@hosta:~# ifconfig tun0 tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.5.0.1 P-t-P:10.5.0.2 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

Nota La interfaz tun0 es de tipo Peer-To-Peer. La instancia de OpenVPN crea una ruta a la direccin del peer 10.5.0.2, use el comando route para vericarlo:
root@hosta:~# route -n | grep tun 10.5.0.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0

37 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

El proceso openvpn abre un socket UDP local en el puerto UDP 1194, podemos verlo con netstat:
root@hosta:~# netstat -plun | grep openvpn udp 0 0 0.0.0.0:1194 0.0.0.0:* 7198/openvpn

Si no se presentaron problemas con la ejecucin de OpenVPN cancele el proceso y renombre el archivo de conguracin con terminacin .conf para controlar la instancia usando el script /etc/init.d/openvpn:
root@hosta:~# mv etc/openvpn/hosta-server-p2p-tls.ovpn etc/openvpn/hosta-server-p2p-tls.conf

Ahora inicie la instancia manualmente:


# /etc/init.d/openvpn start * Starting virtual private network daemon(s)... * Autostarting VPN 'hosta-server-p2p-tls'

[ OK ]

En la siguiente seccin veremos como congurar el el cliente OpenVPN en el sistema hostb.

Congurando el cliente OpenVPN de una conexin punto a punto


En esta seccin se veremos como crear un archivo de conguracin para el cliente OpenVPN para una conexin de tipo Punto a Punto, la autenticacin entre el cliente y el servidor se realiza a travs de certicados SSL/TLS. Los certicados son generados en el servidor con los scripts easy-rsa. En el hostb crearemos el archivo la conexin punto a punto.
/etc/openvpn/hostb-cliente-p2p-tls.ovpn

en donde mantendremos los parmetros de conguracin para el cliente en

root@hostb:/etc/openvpn# vim hostb-cliente-p2p-tls.ovpn

Con el siguiente contenido:


; ; Archivo de configuracin de cliente OpenVPN punto a punto: ; tls-client dev tun proto udp port 1194 remote 69.60.121.173 nobind ifconfig 10.5.0.2 10.5.0.1 ca ca.crt cert guadalajara.example.com.crt key guadalajara.example.com.key cipher BF-CBC comp-lzo ping 10 ping-restart 180 ping-timer-rem persist-tun persist-key ;script-security 2 log-append /var/log/openvpn.log verb 3 status /var/log/openvpn-status.log mute 50

En el archivo de conguracin se usan los siguientes parmetros: mode p2p dev tun proto udp port 1194 # OpenVPN 2.0 uses UDP port 1194 by default # (ocial port assignment by iana.org 11/04). # OpenVPN 1.x uses UDP port 5000 by default. # Each OpenVPN tunnel must use # a dierent port number. # lport or rport can be used

38 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...


# to denote dierent ports # for local and remote. ifcong 10.5.0.1 10.5.0.2 secret /etc/openvpn/static.key cipher BF-CBC

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

;cipher BF-CBC # Blowsh (default) ;cipher AES-128-CBC # AES ;cipher DES-EDE3-CBC # Triple-DES comp-lzo ping 10 Envar un Ping al host remoto sobre el canal de control TCP/UDP si no se ha enviado ningun paquete en los ultimos 10 segundos por el peer (debe de especicar ping en los dos puntos de la VPN, ya que los pings de openvpn no se les regresa el echo como en ping IP Cuando se usa . ping en los modos de seguridad --secret, --tls-server o --tls-client, los paquetes ping son enviados criptogrcamente seguros. ping-restart La opcin ping-restart es usada para mandar una seal SIGUSR1 al proceso openvpn si no se ha recibido un paquete ping o cualquier otro tipo de paquete desde el otro punto de la VPN Esta opcin es util en casos donde los peer remotos tienen direccin IP dinamica y un TTL DNS demasiado bajo, por ejemplo usando el servicio de http://dyndns.org/ ms el cliente DNS Dinamico ddclient. Para la instalacin y conguracin del cliente DNS dinamico ddclient ver el apendice Usando el servicio DNS Dinamico de DynDNS con el cliente Dinamico ddclient. ping-timer-rem Ejecuta ping-restart solo si tenemos una direccin remota, solo usar esta opcin cuando se usa en modo listen, y no se esta usando una opcin explicita de remote, esta opcin es util si no desea iniciar los conteos de timeout si no hasta que los clientes se contan. Los parametros persiste- nos ayudarn para evitar que se re-abrir o re-leer la interfaz tun y la llave estatica despues de un reinicio. persist-tun No cerrar o re-abrir el dispositivo La seal persist-key No re-leer el archivo de la llave cuando se reciba una seal SIGUSR1 o haya sucedido un
ping-restart. SIGUSR1 TUN/TAP,

tampoco ejecutar los scripts


SIGHUP,

up

down

al recibir una seal SIGUSR1 o haya sucedido un

ping-restart.

es una seal de reinicio similar a

pero ofrece un control granular sobre las opciones de reset.

Esta opcin puede ser combinada con la opcin user nobody para permitir reinicios cuando se recibe la seal SIGUSR1, normalmente si se tiran los privilegios de root en OpenVPN, el demonio no puede ser reiniciado ya que no ser capaz de re-leer los archivos de llave protegidos. script-security 2 log-append /var/log/openvpn.log Cuando se ejecuta OpenVPN como demonio en el background, dene la ruta al archivo de log para almacenar los eventos. verb 3 Nivel de severidad con la que se almacenan los logs. # 0 -- quiet except for fatal errors. # 1 -- mostly quiet, but display non-fatal network errors. # 3 -- medium output, good for normal operation. # 9 -- verbose, good for troubleshooting status /var/log/openvpn-status.log Registro de eventos para el estado de conexiones. En el log de estado se registra informacin Conexiones activas. truncadas. Informacin del cliente: IP pblica origen, certicado, IP virtual. bytes enviados y bytes recibidos por el cliente. Este archivo de estado es actualizado cada minuto. Ahora incie la instancia del cliente OpenVPN en el hostb:
root@hostb:/etc/openvpn# Thu Jun 16 00:34:15 2011 Thu Jun 16 00:34:15 2011 Thu Jun 16 00:34:15 2011 Thu Jun 16 00:34:15 2011 openvpn hostb-cliente-p2p-tls.conf OpenVPN 2.1.0 x86_64-pc-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] [MH] [PF_INET6] [eurephia] built on Jul 20 2010 WARNING: No server certificate verification method has been enabled. See http://openvpn.net/howto.html#mitm for more info. NOTE: the current --script-security setting may allow this configuration to call user-defined scripts /usr/bin/openssl-vulnkey -q -b 1024 -m <modulus omitted>

39 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...


Thu Thu Thu Thu Thu Thu Thu Thu Thu Thu Thu Thu Thu Thu Thu Thu Thu Thu Thu Thu Thu Thu Thu Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 00:34:15 00:34:15 00:34:15 00:34:15 00:34:15 00:34:15 00:34:15 00:34:15 00:34:15 00:34:15 00:34:15 00:34:15 00:34:15 00:34:15 00:34:15 00:34:15 00:34:17 00:34:17 00:34:17 00:34:17 00:34:17 00:34:17 00:34:18 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

LZO compression initialized Control Channel MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ] ROUTE default_gateway=69.60.120.1 TUN/TAP device tun0 opened TUN/TAP TX queue length set to 100 /sbin/ifconfig tun0 10.5.0.2 pointopoint 10.5.0.1 mtu 1500 /sbin/route add -net 192.168.221.0 netmask 255.255.255.0 gw 10.5.0.1 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ] Local Options hash (VER=V4): '84c0f112' Expected Remote Options hash (VER=V4): '917749b8' Socket Buffers: R=[124928->131072] S=[124928->131072] UDPv4 link local: [undef] UDPv4 link remote: [AF_INET]187.159.147.126:1191 TLS: Initial packet from [AF_INET]187.159.147.126:1191, sid=b05aa560 efa14244 VERIFY OK: depth=1, /C=US/ST=CA/L=SanFrancisco/O=Fort-Funston/CN=Fort-Funston_CA/emailAddress=me@myhost.mydomain VERIFY OK: depth=0, /C=MX/ST=Mexico_City/L=X/O=Fort-Funston/OU=redes/CN=vpngw1.example.com/emailAddress=me@myhost.mydomain Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA [vpngw1.example.com] Peer Connection Initiated with [AF_INET]187.159.147.126:1191 Initialization Sequence Completed

En el servidor OpenVPN ver el siguiente mensaje en los logs:


Thu Thu Thu Thu Thu Thu Thu Thu Thu Thu Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun 16 16 16 16 16 16 16 16 16 16 00:34:15 00:34:16 00:34:16 00:34:17 00:34:17 00:34:17 00:34:17 00:34:17 00:34:17 00:34:18 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011

TLS: Initial packet from 69.60.121.173:56554, sid=202cc0c6 2722aad7 VERIFY OK: depth=1, /C=US/ST=CA/L=SanFrancisco/O=Fort-Funston/CN=Fort-Funston_CA/emailAddress=me@myhost.mydomain VERIFY OK: depth=0, /C=MX/ST=Jalisco/L=Guadalajara/O=Sucuresal_Guadalajara/OU=x/CN=guadalajara.example.com/emailAddress=me@myhost.mydom Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA [guadalajara.example.com] Peer Connection Initiated with 69.60.121.173:56554 Initialization Sequence Completed

En hostb el proceso openvpn crea una interfaz tun0, use el comando ifcong para ver la informacin:
root@hostb:~# ifconfig tun0 tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.5.0.2 P-t-P:10.5.0.1 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:10 errors:0 dropped:0 overruns:0 frame:0 TX packets:13 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:840 (840.0 B) TX bytes:1092 (1.0 KB)

Se crea la ruta al la direccin del servidor:


root@hostb:~# route -n | grep tun0 10.5.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 tun0

Use el comando ping para probar la conectividad entre el cliente y el servidor OpenVPN usando la direccin IP privada del tnel:
root@hostb:~# PING 10.5.0.1 64 bytes from 64 bytes from 64 bytes from ping -c 3 10.5.0.1 (10.5.0.1) 56(84) bytes of data. 10.5.0.1: icmp_req=1 ttl=64 time=81.9 ms 10.5.0.1: icmp_req=2 ttl=64 time=79.9 ms 10.5.0.1: icmp_req=3 ttl=64 time=80.3 ms

--- 10.5.0.1 ping statistics --3 packets transmitted, 3 received, 0% packet loss, time 2002ms rtt min/avg/max/mdev = 79.937/80.738/81.945/0.868 ms

Pruebe la conectivdad con el servidor haca el cliente usando la direccin IP del tnel VPN:
root@hosta:~# PING 10.5.0.2 64 bytes from 64 bytes from 64 bytes from ping -c 3 10.5.0.2 (10.5.0.2) 56(84) bytes of data. 10.5.0.2: icmp_seq=1 ttl=64 time=79.9 ms 10.5.0.2: icmp_seq=2 ttl=64 time=79.3 ms 10.5.0.2: icmp_seq=3 ttl=64 time=79.4 ms

--- 10.5.0.2 ping statistics --3 packets transmitted, 3 received, 0% packet loss, time 2002ms rtt min/avg/max/mdev = 79.314/79.581/79.960/0.426 ms

Si no se presentaron problemas con la ejecucin de OpenVPN cancele el proceso y renombre el archivo de conguracin con terminacin .conf para controlar la instancia usando el script /etc/init.d/openvpn:
root@hostb:~# mv /etc/openvpn/hostb-cliente-p2p-tls.ovpn /etc/openvpn/hostb-cliente-p2p-tls.conf

Ahora inicie la instancia manualmente:


# /etc/init.d/openvpn start * Starting virtual private network daemon(s)... * Autostarting VPN 'hostb-cliente-p2p-tls'

[ OK ]

Se recomienda que pruebe nuevamente la conectividad.

40 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Resolucin de problemas en conexiones VPN punto a punto con OpenVPN


Si en su equipo OpenVPN tanto cliente o servidor tiene una politica predeterminada de ltrado de traco entrante de DROP o REJECT, se recomienda que permita explicitamente las conexiones deseadas, por ejemplo: Permitiendo todas las conexiones del peer hostb en la interfaz tun0:
root@hosta:~# /sbin/iptables -t filter -A INPUT -p all -i tun0 -s 10.5.0.2 -j ACCEPT

Recursos adicionales
Si desea obtener ms informacin sobre los programas y pginas de manual relacionadas se aconseja que acceda a los siguientes recursos adicionales.

Sitios web
En las paginas listadas a continuacin encontrar mayor informacin sobre los programas utilizados en este capitulo. http://openvpn.net/index.php/open-source/documentation/miscellaneous/78-static-key-mini-howto.html - Static Key Mini-HOWTO http://openvpn.net/index.php/open-source/documentation/howto.html#pki - OpenVPN HOWTO - Setting up your own Certicate Authority (CA) and generating certicates and keys for an OpenVPN server and multiple clients

Paginas de manual
Para conocer ms sobre el uso y conguracin de los programas utilizados en el capitulo, se recomienda leer los manuales relacionados. ifcong (8) - congure a network interface route (8) - show / manipulate the IP routing table netstat (8) - Print network connections, routing tables, interface statistics, masquerade con... openvpn (8) - secure IP tunnel daemon. openvpn-vulnkey (1) - check blacklist of compromised keys

Captulo 9. Creando conexiones VPN sitio a sitio con OpenVPN


Tabla de contenidos Objetivos Informacin previa sobre el entorno de red Congurando el servidor OpenVPN para la VPN sitio a sitio en la ocina Matriz Congurando el cliente OpenVPN para la VPN sitio a sitio en la ocina remota 1 Pruebas de conectividad entre VPN sitio a sitio Congurando el cliente OpenVPN para la VPN sitio a sitio en la ocina remota 2 Permitiendo comunicacion entre redes LAN remotas Recursos adicionales Sitios web Paginas de manual En este cpitulo veremos las conguraciones requeridas para crear una VPN de sitio a sitio para unir de forma segura dos ocinas remotas. La autenticacin de los puntos de la VPN se realizar usando certicados TLS/SSL, esta conguracin permite la conexin de mltiples clientes, por lo tanto podremos conectar mltiples ocinas remotas y mltiples clientes independientes.

Objetivos
Los objetivos que se buscan son: Conectar a travs de un tnel VPN dos ocinas remotas. Congurar el servidor OpenVPN en modo server (TLS) en la red de Matriz. Congurar el cliente OpenVPN en modo client (TLS) en la red de Monterrey para establecer el tnel VPN con matriz. Permitir que los clientes en la red LAN de la ocina de monterrey 192.168.200.0/24 puedan alcanzar los servidores de archivos en la red de Matriz 192.168.99.12. Permitir que los clientes en la red LAN de la ocina Matriz 192.168.99.0/24 puedan alcanzar los servidores de archivos en la red de Monterrey 192.168.200.2. Congurar el servidor OpenVPN para permitir conexiones entre clientes OpenVPN y las redes remotas.

Informacin previa sobre el entorno de red


Las conguraciones de red de las redes que conectaremos son similares, con la siguiente lista y el diagrama se tendr un mejor panorama para entener forma como estn conectadas las redes. En la ocina Matriz se tiene un enlace dedicado a Internet de 2Mbps con direccines IP jas.

41 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

En la ocina de Monterrey se tiene un enlace ADSL de 2Mbps con direccin IP dinmica. En cada ocina se tiene un servidor GNU/Linux con dos tarjetas de red una WAN y otra LAN, estos servidores realizan funciones de Firewall y Router de Internet, son el gateway predeterminado de los equipos en las redes privadas. La red LAN de cada ocina remota usa un segmento de red IP nico, en la LAN Matriz es la subred 192.168.99.0/24 y 192.168.200.0/24 en la LAN de Monterrey. En el siguiente diagrama se describe la forma en que estan conectadas a Internet las redes de las dos ocinas: Figura 9.1. Dos Redes Remotas

En las siguientes secciones veremos como congurar el servidor OpenVPN en el servidor gateway de la ocina Matriz, y el cliente en el servidor gateway de la ocina de Monterrey.

Congurando el servidor OpenVPN para la VPN sitio a sitio en la ocina Matriz


En esta seccin se ver la conguracin del servidor OpenVPN para una conexin VPN de tipo sitio a sitio (site-to-site) usando autenticacin basada en certicados X.509 emitidos por la Autoridad Certicadora local creada con los scripts easy-rsa. La conguracin del servidor OpenVPN para conexines de sitio a sitio la realizaremos congurando OpenVPN en modo server (tls-server), este modo permite la conexin de ms de un cliente TLS de forma simultanea, esto quiere decir que, con una sola instancia de OpenVPN en modo server podremos conectar ms de una ocina remota, si no que tambin podremos conectar usuarios mviles (Road Warriors) para dar acceso seguro a los recursos internos de la empresa, el modo server es una versin de el modo tls-server pero cambia el esquema en el que asigna las direcciones IP virtuales a los clientes. La autenticacin de clientes y servidores se realizar usando el mtodo de autenticacin basada en certicados X.509. Para congurar el servidor OpenVPN en modo server vamos a requerir el certicado y la llave pblica del servidor fwproxy.example.com. A continuacin se muestra una lista de los certicados y llaves privadas requeridas: Tabla 9.1. Tabla de certicados y llaves privadas requeridos para servidor OpenVPN en Matriz Nombre de Archivo /etc/openvpn/ca.crt /etc/openvpn/dh1024.pem /etc/openvpn/fwproxy.example.key Proposito Certicado CA Raz Parametros Die Hellman Secreto NO NO NO

/etc/opevpn/fwproxy.example.com.crt Certicado para fwproxy.example.com

Llave Privada para fwproxy.example.com SI

Copie los archivos del directorio keys de easy-rsa a la ruta que se muestra e la tabla de arriba. Si los certicados fueron creados en otro equipo, entonces transera los certicados por un medio seguro haca el servidor, por ejemplo SSH/SCP o Corre electrnico seguro usando PGP (GNUPG). Creamos el archivo de conguracin para el servidor OpenVPN:
root@hosta:/etc/openvpn# vim hosta-server-s2s-tls.ovpn

Con el siguiente contenido:


; ; Archivo de configuracin del servidor OpenVPN modo TLS multi-client: ; ; Modo servidor multi-client: server 10.8.0.0 255.255.255.0 ; Opciones de conexion del tunel: dev tun

42 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...


proto udp port 1194 ; Archivos de certificados y llaves: ca ca.crt cert fwproxy.example.com.crt key fwproxy.example.com.key dh dh1024.pem ifconfig-pool-persist ipp.txt client-config-dir ccd ; Cifrado: cipher BF-CBC ; Compresion: comp-lzo ; Mantener conexiones activas via ping: keepalive 10 60 persist-tun persist-key ; Opciones de logs: log-append /var/log/openvpn.log verb 3 status /var/log/openvpn-status.log mute 50 ; Rutas hacia redes remotas: route 192.168.200.0 255.255.255.0

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

El modo server (basado en tls-server) usa una subred de clase C para asignar una direccin IP a cada cliente VPN, puede asignar las direcciones IP virtuales de forma dinamica o estatica en base al nombre comn del certicado del cliente, para cada cliente que se conecta usa una subred /30 (4 IPs por conexin). En este modo se pueden conectar mltiples clientes, tanto GNU/Linux, Windows y otros sistemas operativos con autenticacin basada en certicados TLS/SSL. En el archivo de conguracin se usan los siguientes parmetros: server 10.8.0.0 255.255.255.0 A helper directive designed to simplify the conguration of OpenVPN's server mode. This directive will set up an OpenVPN server which will allocate addresses to clients out of the given network/netmask. The server itself will take the ".1" address of the given network for use as the server-side endpoint of the local TUN/TAP interface. For example, --server 10.8.0.0 255.255.255.0 expands as follows:
mode server tls-server push "topology [topology]" if dev tun AND (topology == net30 OR topology == p2p): ifconfig 10.8.0.1 10.8.0.2 if !nopool: ifconfig-pool 10.8.0.4 10.8.0.251 route 10.8.0.0 255.255.255.0 if client-to-client: push "route 10.8.0.0 255.255.255.0" else if topology == net30: push "route 10.8.0.1" if dev tap OR (dev tun AND topology == subnet): ifconfig 10.8.0.1 255.255.255.0 if !nopool: ifconfig-pool 10.8.0.2 10.8.0.254 255.255.255.0 push "route-gateway 10.8.0.1"

Don't use --server if you are ethernet bridging. Use --server-bridge instead. --push option Push a cong le option back to the client for remote execution. Note that option must be enclosed in double quotes (""). The client must specify --pull in its cong le. The set of options which can be pushed is limited by both fea sibility and security. Some options such as those which would execute scripts are banned, since they would eectively allow a compromised server to execute arbitrary code on the client. Other options such as TLS or MTU parameters cannot be pushed because the client needs to know them before the connection to the server can be initiated. This is a partial list of options which can currently be pushed: --route, --route-gateway, --route-delay, --redirect-gate way, --ip-win32, --dhcpoption, --inactive, --ping, --ping-exit, --ping-restart, --setenv, --persist-key, --persist-tun, --echo, --comp-lzo, --socket-ags, --sndbuf, --rcvbuf --ifcong-pool start-IP end-IP [netmask] Set aside a pool of subnets to be dynamically allocated to connecting clients, similar to a DHCP server. For tun-style tunnels, each client will be given a /30 subnet (for interoperability with Windows clients). For tap-style tunnels, indi vidual addresses will be allocated, and the optional netmask parameter will also be pushed to clients. dev tun El tipo de dispositivos tun es usado para VPN de tipo routed.

43 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...


proto udp Usa el protocol UDP como transporte. port 1194 # OpenVPN 2.0 uses UDP port 1194 by default # (ocial port assignment by iana.org 11/04). # OpenVPN 1.x uses UDP port 5000 by default. # Each OpenVPN tunnel must use # a dierent port number. # lport or rport can be used # to denote dierent ports # for local and remote. ca ca.crt cert fwproxy.example.com.crt key fwproxy.example.com.key dh dh1024.pem ifcong-pool-persist ipp.txt

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Persist/unpersist ifcong-pool data to le, at seconds intervals (default=600), as well as on program startup and shut down. The goal of this option is to provide a long-term association between clients (denoted by their common name) and the vir tual IP address assigned to them from the ifcong-pool. Maintaining a long-term association is good for clients because it allows them to eectively use the --persist-tun option. le is a comma-delimited ASCII le, formatted as <Common-Name>,<IP-address>. If seconds = 0, le will be treated as read-only. This is useful if you would like to treat le as a conguration le. Note that the entries in this le are treated by OpenVPN as suggestions only, based on past associations between a common name and IP address. They do not guarantee that the given common name will always receive the given IP address. If you want guaranteed assignment, use --ifcong-push client-cog-dir ccd Indica la ruta del Directorio de Conguraciones de Clientes (Client Cong Directory), en este caso usaremos el directorio ccd localizado en la misma ruta que el archivo de conguracin, es decir, en el /etc/openvpn/ccd/ almacenaremos las conguraciones para los clientes. Specify a directory dir for custom client cong les. After a connecting client has been authenticated, OpenVPN will look in this directory for a le having the same name as the client's X509 common name. If a matching le exists, it will be opened and parsed for client-specic conguration options. If no matching le is found, OpenVPN will instead try to open and parse a default le called "DEFAULT", which may be provided but is not required. This le can specify a xed IP address for a given client using --ifcong-push, as well as xed subnets owned by the client using --iroute. One of the useful properties of this option is that it allows client conguration les to be conveniently created, edited, or removed while the server is live, without needing to restart the server. The following options are legal in a client-specic context: --push, --push-reset, --iroute, --ifcong-push, and --con g. cipher BF-CBC ;cipher BF-CBC # Blowsh (default) ;cipher AES-128-CBC # AES ;cipher DES-EDE3-CBC # Triple-DES comp-lzo keepalive 10 60 La directiva keepalive establece las directivas --ping y --ping-restart en el servidor y tambin las enva va push al cliente. Esto causa que se envien mensajes tipo ping desde ambos lados del tnel de manera que cada lado sepa cuando el otro lado este caido. Se envian Pings cada 10 segundos, si no se recibe ningun paquete desde el peer remoto durante un periodo de 120 segundos el cliente es considerado caido. Keepalive es una macro que se expande, por ejemplo si usa keepalive 10 60, equivale a:
if mode server: ping 10 ping-restart 120 push "ping 10" push "ping-restart 60" else ping 10 ping-restart 60

44 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Nota Con esta opcin en el servidor no es necesario denir --ping y --ping-restart en el archivo de conguracin del cliente a menos que desee usar parmetros diferentes. ping-restart La opcin ping-restart es usada para mandar una seal SIGUSR1 al proceso openvpn si no se ha recibido un paquete ping o cualquier otro tipo de paquete desde el otro punto de la VPN Esta opcin es util en casos donde los peer remotos tienen direccin IP dinamica y un TTL DNS demasiado bajo, por ejemplo usando el servicio de http://dyndns.org/ ms el cliente DNS Dinamico ddclient. Para la instalacin y conguracin del cliente DNS dinamico ddclient ver el apendice Usando el servicio DNS Dinamico de DynDNS con el cliente Dinamico ddclient. Los siguientes parmetros nos ayudarn a evitar tener que re crear la interfaz virtual tun0 y re leer la llave privada en caso de un restart por timeout. persist-tun No cerrar o re-abrir el dispositivo La seal persist-key No re-leer el archivo de la llave cuando se reciba una seal SIGUSR1 o haya sucedido un
ping-restart. SIGUSR1 TUN/TAP,

tampoco ejecutar los scripts


SIGHUP,

up

down

al recibir una seal SIGUSR1 o haya sucedido un

ping-restart.

es una seal de reinicio similar a

pero ofrece un control granular sobre las opciones de reset.

Esta opcin puede ser combinada con la opcin user nobody para permitir reinicios cuando se recibe la seal SIGUSR1, normalmente si se tiran los privilegios de root en OpenVPN, el demonio no puede ser reiniciado ya que no ser capaz de re-leer los archivos de llave protegidos. script-security 2 log-append /var/log/openvpn.log Cuando se ejecuta OpenVPN como demonio en el background, dene la ruta al archivo de log para almacenar los eventos. verb 3 Nivel de severidad con la que se almacenan los logs. # 0 -- quiet except for fatal errors. # 1 -- mostly quiet, but display non-fatal network errors. # 3 -- medium output, good for normal operation. # 9 -- verbose, good for troubleshooting status /var/log/openvpn-status.log Registro de eventos para el estado de conexiones. En el log de estado se registra informacin Conexiones activas. truncadas. Informacin del cliente: IP pblica origen, certicado, IP virtual. bytes enviados y bytes recibidos por el cliente. Este archivo de estado es actualizado cada minuto. mute 50 Si se registran 50 mensajes consecutivos de la misma categoria de log sern omitidos. route 192.168.200.0 255.255.255.0 Agrega ruta local haca la red remota. Creee el directorio ccd para conguraciones por cliente:
root@hosta:/etc/openvpn# mkdir -m 700 ccd

Inicie el servidor OpenVPN en hosta:


root@hosta:/etc/openvpn# Thu Jun 16 22:03:47 2011 Thu Jun 16 22:03:47 2011 Thu Jun 16 22:03:47 2011 Thu Jun 16 22:03:47 2011 Thu Jun 16 22:03:47 2011 Thu Jun 16 22:03:47 2011 Thu Jun 16 22:03:47 2011 Thu Jun 16 22:03:47 2011 Thu Jun 16 22:03:47 2011 Thu Jun 16 22:03:47 2011 Thu Jun 16 22:03:47 2011 openvpn hosta-server-s2s-tls.ovpn OpenVPN 2.1_rc7 x86_64-pc-linux-gnu [SSL] [LZO2] [EPOLL] built on Dec 15 2010 Diffie-Hellman initialized with 1024 bit key /usr/bin/openssl-vulnkey -q -b 1024 -m <modulus omitted> TLS-Auth MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ] TUN/TAP device tun0 opened TUN/TAP TX queue length set to 100 ifconfig tun0 10.8.0.1 pointopoint 10.8.0.2 mtu 1500 route add -net 192.168.200.0 netmask 255.255.255.0 gw 10.8.0.2 route add -net 10.8.0.0 netmask 255.255.255.0 gw 10.8.0.2 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ] Socket Buffers: R=[124928->131072] S=[124928->131072]

45 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...


Thu Thu Thu Thu Thu Thu Jun Jun Jun Jun Jun Jun 16 16 16 16 16 16 22:03:47 22:03:47 22:03:47 22:03:47 22:03:47 22:03:47 2011 2011 2011 2011 2011 2011 UDPv4 link local (bound): [undef]:1191 UDPv4 link remote: [undef] MULTI: multi_init called, r=256 v=256 IFCONFIG POOL: base=10.8.0.4 size=62 IFCONFIG POOL LIST Initialization Sequence Completed

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

En este momento se crea el proceso del servidor OpenVPN y se genera lo siguiente: Nueva interfaz de red virtual TUN
root@hosta:/etc/openvpn# ifconfig tun0 tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.8.0.1 P-t-P:10.8.0.2 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:6 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 B) TX bytes:723 (723.0 B)

Se crean las siguientes rutas:


root@hosta:/etc/openvpn# route -n | grep tun0 10.8.0.2 0.0.0.0 255.255.255.255 UH 10.8.0.0 10.8.0.2 255.255.255.0 UG 192.168.221.0 10.8.0.2 255.255.255.0 UG 0 0 0 0 0 0 0 tun0 0 tun0 0 tun0

La ruta al host 10.8.0.2 es una ruta interna La ruta a la subred 10.8.0.0/255.255.255.0 se llega mediante 10.8.0.2 por la interfaz tun0. La ruta a la subred remota 192.168.200.0/255.255.255.0 se llega mediante 10.8.0.2 por la interfaz tun0. El proceso openvpn abre un socket UDP local en el puerto UDP/1194, podemos verlo con netstat:
root@hosta:/etc/openvpn# netstat -plun | grep openvpn udp 0 0 0.0.0.0:1194 0.0.0.0:* 9245/openvpn

Si no se presentaron problemas con la ejecucin de OpenVPN cancele el proceso y renombre el archivo de conguracin con terminacin .conf para controlar la instancia usando el script /etc/init.d/openvpn:
root@hosta:~# mv etc/openvpn/hosta-server-s2s-tls.ovpn etc/openvpn/hosta-server-s2s-tls.conf

Ahora inicie la instancia manualmente:


# /etc/init.d/openvpn start * Starting virtual private network daemon(s)... * Autostarting VPN 'hosta-server-s2s-tls'

[ OK ]

En la siguiente seccin conguraremos el cliente OpenVPN en el servidor gateway de la ocina remota de Monterrey, o ocina remota 1.

Congurando el cliente OpenVPN para la VPN sitio a sitio en la ocina remota 1


Para congurar el cliente OpenVPN en modo client vamos a requerir el certicado y la llave pblica del servidor monterrey.example.com. A continuacin se muestra una lista de los certicados y llaves privadas requeridas: Tabla 9.2. Tabla de certicados y llaves privadas requeridos para servidor OpenVPN en Matriz Nombre de Archivo /etc/openvpn/ca.crt Proposito Certicado CA Raz Secreto NO NO

/etc/opevpn/monterrey.example.com.crt Certicado para monterrey.example.com

/etc/openvpn/monterrey.example.com.key Llave Privada para monterrey.example.com SI

Copie los archivos del directorio keys de easy-rsa a la ruta que se muestra e la tabla de arriba en el servidor de la ocina remota 1. Transera los certicados por un medio seguro como por ejemplo SSH/SCP o corre electrnico seguro usando PGP (GNUPG). En el servidor gateway de la ocina remota 1 cree el archivo de conguracin
root@hostb:/etc/openvpn# vim hostb-cliente-s2s-tls.opvn
/etc/openvpn/hostb-cliente-s2s-tls.opvn:

Con el siguiente contenido:


; ; Archivo de configuracin del cliente OpenVPN modo TLS: ; ; Modo cliente TLS: client ; Opciones de conexion del tunel: dev tun proto udp port 1194

46 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...


nobind resolv-retry infinite ; Servidor remoto: remote hosta.dyndns.org ; Archivos de certificados y llaves: ca ca.crt cert monterrey.example.com.crt key monterrey.example.com.key ; Cifrado: cipher BF-CBC ; Compresion: comp-lzo ; Mantener conexiones activas via ping: persist-tun persist-key ; Opciones de logs: ;log-append /var/log/openvpn.log verb 3 status /var/log/openvpn-status.log mute 50

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

En el servidor OpenVPN de la ocina Matriz, dentro del directorio ccd cree un archivo de conguracin especico para el cliente con el certicado monterrey.example.com, en este archivo deniremos la direccin IP virtual que le asignaremos al VPN gatway de monterrey, agregaremos rutas internas hacia la red remota y exportaremos las rutas de las redes locales hacia el cliente. Cree el archivo /etc/openvpn/ccd/monterrey.example.com:
root@hosta:/etc/openvpn# vim ccd/monterrey.example.com

Importante El nombre del archivo se debe de llamar exactamente igual a como escribio el commonName del certicado. Con el siguiente contenido:
; ; Archivo de configuracin de cliente: monterrey.example.com ; # Direccin IP fija ifconfig-push 10.8.0.9 10.8.0.10 # Ruta interna para OpenVPN haca la subred 192.168.200.0/24 iroute 192.168.200.0 255.255.255.0 # No heredar la lista push global push-reset # Exportamos la subred LAN de Matriz 192.168.99.0/24 push "route 192.168.99.0 255.255.255.0"

Aviso Asegurese que las opciones push esten entre comillas como se muestra en el ejemplo. En el siguiente listado se describen los parmetros usados en el archivo de conguracin del cliente monterrey.example.com: ifcong-push 10.8.0.9 10.8.0.10 Push virtual IP endpoints for client tunnel, overriding the --ifcong-pool dynamic allocation. The parameters local and remote-netmask are set according to the --ifcong directive which you want to execute on the client machine to congure the remote end of the tunnel. Note that the parameters local and remote-netmask are from the perspective of the client, not the server. They may be DNS names rather than IP addresses, in which case they will be resolved on the server at the time of client connection. This option must be associated with a specic client instance, which means that it must be specied either in a client instance cong le using --client-cong-dir or dynamically generated using a --client-connect script. Remember also to include a --route directive in the main OpenVPN cong le which encloses local, so that the kernel will know to route it to the server's TUN/TAP interface. OpenVPN's internal client IP address selection algorithm works as follows: 1 -- Use --client-connect script generated le for static IP (rst choice). 2 -- Use --client-cong-dir le for static IP (next choice). 3 -- Use --ifcong-pool allocation for dynamic IP (last choice). iroute 192.168.200.0 255.255.255.0

47 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...


Crea una ruta interna en OpenVPN hacia la red de la ocina remota.

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

iroute siempre debe de ir acompaado de un route correspondiente en el archivo de conguracin del servidor, por ejemplo: route 192.168.200.0 255.255.255.0. Generate an internal route to a specic client. The netmask parameter, if omitted, defaults to 255.255.255.255. This directive can be used to route a xed subnet from the server to a particular client, regardless of where the client is connecting from. Remember that you must also add the route to the system routing table as well (such as by using the --route directive). The reason why two routes are needed is that the --route directive routes the packet from the kernel to OpenVPN. Once in OpenVPN, the --iroute directive routes to the specic client. This option must be specied either in a client instance cong le using --client-cong-dir or dynamically generated using a --client-connect script. The --iroute directive also has an important interaction with --push "route ...". --iroute essentially denes a subnet which is owned by a particular client (we will call this client A). If you would like other clients to be able to reach A's subnet, you can use --push "route ..." together with --client-to-client to eect this. In order for all clients to see A's subnet, OpenVPN must push this route to all clients EXCEPT for A, since the subnet is already owned by A. OpenVPN accomplishes this by not not pushing a route to a client if it matches one of the client's iroutes. push-reset Don't inherit the global push list for a specic client instance. Specify this option in a client-specic context such as with a --client-cong-dir conguration le. This option will ignore --push options at the global cong le level. push "route 192.168.99.0 255.255.255.0" Push a cong le option back to the client for remote execution. Note that option must be enclosed in double quotes (""). The client must specify --pull in its cong le. The set of options which can be pushed is limited by both fea sibility and security. Some options such as those which would execute scripts are banned, since they would eectively allow a compromised server to execute arbitrary code on the client. Other options such as TLS or MTU parameters cannot be pushed because the client needs to know them before the connection to the server can be initiated. This is a partial list of options which can currently be pushed: --route, --route-gateway, --route-delay, --redirect-gate way, --ip-win32, --dhcpoption, --inactive, --ping, --ping-exit, --ping-restart, --setenv, --persist-key, --persist-tun, --echo, --comp-lzo, --socket-ags, --sndbuf, --rcvbuf Ejecute el cliente OpenVPN:
root@hostb:/etc/openvpn# Thu Jun 16 23:01:14 2011 Thu Jun 16 23:01:14 2011 Thu Jun 16 23:01:14 2011 Thu Jun 16 23:01:14 2011 Thu Jun 16 23:01:14 2011 Thu Jun 16 23:01:14 2011 Thu Jun 16 23:01:14 2011 Thu Jun 16 23:01:14 2011 Thu Jun 16 23:01:14 2011 Thu Jun 16 23:01:14 2011 Thu Jun 16 23:01:14 2011 Thu Jun 16 23:01:14 2011 Thu Jun 16 23:01:14 2011 Thu Jun 16 23:01:14 2011 Thu Jun 16 23:01:14 2011 Thu Jun 16 23:01:14 2011 Thu Jun 16 23:01:14 2011 Thu Jun 16 23:01:14 2011 Thu Jun 16 23:01:14 2011 Thu Jun 16 23:01:14 2011 Thu Jun 16 23:01:14 2011 Thu Jun 16 23:01:15 2011 Thu Jun 16 23:01:15 2011 Thu Jun 16 23:01:15 2011 Thu Jun 16 23:01:15 2011 Thu Jun 16 23:01:15 2011 Thu Jun 16 23:01:15 2011 Thu Jun 16 23:01:15 2011 Thu Jun 16 23:01:15 2011 Thu Jun 16 23:01:15 2011 Thu Jun 16 23:01:15 2011 Thu Jun 16 23:01:15 2011

openvpn hostb-cliente-s2s-tls.opvn OpenVPN 2.1_rc7 x86_64-pc-linux-gnu [SSL] [LZO2] [EPOLL] built on Dec 15 2010 IMPORTANT: OpenVPN's default port number is now 1194, based on an official port number assignment by IANA. OpenVPN 2.0-beta16 and earl WARNING: No server certificate verification method has been enabled. See http://openvpn.net/howto.html#mitm for more info. /usr/bin/openssl-vulnkey -q -b 1024 -m <modulus omitted> LZO compression initialized Control Channel MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ] Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ] Local Options hash (VER=V4): '41690919' Expected Remote Options hash (VER=V4): '530fdded' Socket Buffers: R=[124928->131072] S=[124928->131072] UDPv4 link local (bound): [undef]:1194 UDPv4 link remote: 192.168.1.220:1194 TLS: Initial packet from 192.168.1.220:1194, sid=9a091651 22457b14 VERIFY OK: depth=1, /C=MX/ST=DF/L=Mexico/O=Example_Inc./CN=Example_Inc._CA/emailAddress=jmedina@example.com VERIFY OK: depth=0, /C=MX/ST=DF/L=Mexico/O=Example_Inc./OU=IT/CN=vpngw0.example.com/emailAddress=jmedina@example.com Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA [vpngw0.example.com] Peer Connection Initiated with 192.168.1.220:1194 SENT CONTROL [vpngw0.example.com]: 'PUSH_REQUEST' (status=1) PUSH: Received control message: 'PUSH_REPLY,route 10.8.0.1,topology net30,ping 10,ping-restart 60,route 192.168.220.0 255.255.255.0,ifc OPTIONS IMPORT: timers and/or timeouts modified OPTIONS IMPORT: --ifconfig/up options modified OPTIONS IMPORT: route options modified TUN/TAP device tun0 opened TUN/TAP TX queue length set to 100 ifconfig tun0 10.8.0.9 pointopoint 10.8.0.10 mtu 1500 route add -net 10.8.0.1 netmask 255.255.255.255 gw 10.8.0.10 route add -net 192.168.99.0 netmask 255.255.255.0 gw 10.8.0.10 Initialization Sequence Completed

En servidor vpn-monterrey el proceso openvpn crea una interfaz tun0, podemos verla con ifcong:
root@hostb:/etc/openvpn# ifconfig tun0 tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.8.0.9 P-t-P:10.8.0.10 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

Nota Si se asigno la direccin IP 10.8.0.9 denida en el archivo


/etc/openvpn/ccd/monterrey.midominio.com

en el servidor OpenVPN de Matriz.

48 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...


Tambin se crean unas rutas al peer y a la subred en Matriz.
root@hostb:/etc/openvpn# route -n | grep tun0 10.8.0.1 10.8.0.10 255.255.255.255 UGH 10.8.0.10 0.0.0.0 255.255.255.255 UH 192.168.99.0 10.8.0.10 255.255.255.0 UG 0 0 0 0 0 0 0 tun0 0 tun0 0 tun0

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Haga un ping a la direccin IP virtual del servidor OpenVPN:


root@hostb:/etc/openvpn# ping 10.8.0.1 PING 10.8.0.1 (10.8.0.1) 56(84) bytes of data. 64 bytes from 10.8.0.1: icmp_seq=1 ttl=64 time=0.000 ms 64 bytes from 10.8.0.1: icmp_seq=2 ttl=64 time=0.000 ms 64 bytes from 10.8.0.1: icmp_seq=3 ttl=64 time=0.000 ms --- 10.8.0.1 ping statistics --3 packets transmitted, 3 received, 0% packet loss, time 1999ms rtt min/avg/max/mdev = 0.000/0.000/0.000/0.000 ms

Nota Se hace ping a 10.8.0.1 y no a la direccin del peer remoto asignada a la interfaz tun0. Si no se presentaron problemas con la ejecucin de OpenVPN cancele el proceso y renombre el archivo de conguracin con terminacin para controlar la instancia usando el script /etc/init.d/openvpn:
root@hosta:~# mv etc/openvpn/hostb-cliente-s2s-tls.opvn /etc/openvpn/hostb-cliente-s2s-tls.conf

.conf

Ahora inicie la instancia manualmente:


# /etc/init.d/openvpn start * Starting virtual private network daemon(s)... * Autostarting VPN 'hostb-cliente-s2s-tls'

[ OK ]

En la siguiente seccin realizaremos varias pruebas para vericar la conectividad entre las dos redes remotas.

Pruebas de conectividad entre VPN sitio a sitio


TODO

Congurando el cliente OpenVPN para la VPN sitio a sitio en la ocina remota 2


Genere el par de llaves para el cliente tijuana.example.com y transeralas al servidor de tijuana en el directorio Edite el archivo de conguracin del servidor OpenVPN y agregue al ruta a la red remota:
root@hosta:~# vim /etc/openvpn/hosta-server-s2s-tls.ovpn
/etc/openvpn.

Por ejemplo:
route 192.168.100.0 255.255.255.0

Importante SIempre debe de haber un iroute correspondiente en el archivo CCD del cliente. hora cree el archivo de conguracin para el servidor OpenVPN en Tijuana
root@hostc:/etc/openvpn# vim hostc-cliente-s2s-tls.ovpn

Con el siguiente contenido:


; ; Archivo de configuracin del cliente OpenVPN modo TLS: ; ; Modo cliente TLS: client ; Opciones de conexion del tunel: dev tun proto udp port 1194 nobind resolv-retry infinite ; Servidor remoto: remote hosta.dyndns.org ; Archivos de certificados y llaves: ca ca.crt cert tijuana.example.com.crt key tijuana.example.com.key

49 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

; Cifrado: cipher BF-CBC : Compresion: comp-lzo ; Mantener conexiones activas via ping: persist-tun persist-key ; Opciones de logs: ;log-append /var/log/openvpn.log verb 3 status /var/log/openvpn-status.log mute 50

En el servidor OpenVPN de la ocina Matriz, dentro del directorio ccd cree un archivo de conguracin especico para el cliente con el certicado tijuana.example.com, en este archivo deniremos la direccin IP virtual que le asignaremos al VPN gatway de Tijuana, agregaremos rutas internas hacia la red remota y exportaremos las rutas de las redes locales hacia el cliente. Crear archivo de conguracin para tijuana.midominio.com en servidor Matriz:
root@hosta:~# vim /etc/openvpn/ccd/tijuana.example.com

Con el siguiente contenido:


; ; Archivo de configuracin de cliente: tijuana.example.com ; # Direccin IP fija ifconfig-push 10.8.0.13 10.8.0.14 # Ruta interna para OpenVPN haca la subred 192.168.200.0/24 iroute 192.168.100.0 255.255.255.0 # No heredar la lista push global push-reset # Exportamos la subred LAN de Matriz 192.168.99.0/24 push "route 192.168.99.0 255.255.255.0"

Ejecute el cliente OpenVPN:

Haga un ping a la direccin IP virtual del servidor OpenVPN:


root@hostc:/etc/openvpn# ping 10.8.0.1 PING 10.8.0.1 (10.8.0.1) 56(84) bytes of data. 64 bytes from 10.8.0.1: icmp_seq=1 ttl=64 time=0.000 ms 64 bytes from 10.8.0.1: icmp_seq=2 ttl=64 time=0.000 ms 64 bytes from 10.8.0.1: icmp_seq=3 ttl=64 time=0.000 ms --- 10.8.0.1 ping statistics --3 packets transmitted, 3 received, 0% packet loss, time 1999ms rtt min/avg/max/mdev = 0.000/0.000/0.000/0.000 ms

Nota Se hace ping a 10.8.0.1 y no a la direccin del peer remoto asignada a la interfaz tun0. Si no se presentaron problemas con la ejecucin de OpenVPN cancele el proceso y renombre el archivo de conguracin con terminacin para controlar la instancia usando el script /etc/init.d/openvpn:
root@hostc:~# mv etc/openvpn/hostc-cliente-s2s-tls.opvn /etc/openvpn/hostc-cliente-s2s-tls.conf

.conf

Ahora inicie la instancia manualmente:


root@hostc:~# /etc/init.d/openvpn start * Starting virtual private network daemon(s)... * Autostarting VPN 'hostc-cliente-s2s-tls'

[ OK ]

Realice la conexin y haga las pruebas de conectividad requeridas.

Permitiendo comunicacion entre redes LAN remotas


Para permitir que los clientes de la VPN puedan "ver" a los otros clientes que estan conectados a la VPN, en el archivo de conguracin del servidor OpenVPN agregue la directiva --client-to-client, por ejemplo:
root@hosta:~# vim /etc/openvpn/hosta-server-s2s-tls.ovpn

Y agregue la lnea.
; Permitir conexiones de cliente a cliente client-to-client

50 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Cuando OpenVPN esta congurado en modo server maneja mltiples clientes a travs de una sola interfaz TUN, se convierte en en un router. La directiva --client-to-client le dice a OpenVPN que enrute el traco de clientes a clientes en lugar de que mande todo el traco originado por el cliente a la interfaz TUN/TAP . Reinicie el servidor OpenVPN y reconecte los clientes para probar:
root@hosta:~# /etc/init.d/openvpn restart

Cuando esta opcion es usada, cada cliente "vera" los otros clientes que estan actualmente conectados, de otra forma no se veran. No use esta opcin si quiere ltrar con un rewall el trco del tnel de forma personalizada. Cuando el cliente se conecte a un servidor OpenVPN con la directiva client-to-client se le crearn las siguientes rutas: 10.8.0.6 Ruta de host haca el peer remoto del tnel VPN, es directa a travs de la interfaz tunX. 10.8.0.0 Ruta hacia la red virtual del tunel VPN, la conexin es a travs de la direccin del peer remoto por la interfaz tunX. 192.168.225.0 Ruta hacia la red privada LAN atras del servidor OpenVPN, la conexin es a travs de la direccin del peer remoto por la interfaz tunX. las siguientes rutas a travs de la interfaz tun0:
root@hostb:~# route -n | grep tun0 10.8.0.6 0.0.0.0 255.255.255.255 UH 10.8.0.0 10.8.0.6 255.255.255.0 UG 192.168.221.0 10.8.0.6 255.255.255.0 UG 0 0 0 0 0 0 0 tun0 0 tun0 0 tun0

Como podemos ver nos agrega la ruta a toda la red 10.8.0.0 a travs del peer 10.8.0.6.

Recursos adicionales
Si desea obtener ms informacin sobre los programas y pginas de manual relacionadas se aconseja que acceda a los siguientes recursos adicionales.

Sitios web
En las paginas listadas a continuacin encontrar mayor informacin sobre los programas utilizados en este capitulo. http://openvpn.net/index.php/open-source/documentation/howto.html#scope - Expanding the scope of the VPN to include additional machines on either the client or server subnet. http://openvpn.net/index.php/open-source/documentation/howto.html#pki - OpenVPN HOWTO - Setting up your own Certicate Authority (CA) and generating certicates and keys for an OpenVPN server and multiple clients

Paginas de manual
Para conocer ms sobre el uso y conguracin de los programas utilizados en el capitulo, se recomienda leer los manuales relacionados. ifcong (8) - congure a network interface route (8) - show / manipulate the IP routing table netstat (8) - Print network connections, routing tables, interface statistics, masquerade con... traceroute (1) - print the route packets trace to network host openvpn (8) - secure IP tunnel daemon. openvpn-vulnkey (1) - check blacklist of compromised keys

Captulo 10. Conguraciones para clientes OpenVPN RoadWarriors


Tabla de contenidos Congurando el cliente OpenVPN en sistemas MS Windows Congurando el cliente OpenVPN en sistemas GNU/Linux Estableciendo la conexin con el servidor OpenVPN Asignando direcciones IP estticas para los clientes OpenVPN Enviando opciones DHCP a los clientes OpenVPN Actualizando automtica de los parmetros DNS en clientes GNU/Linux Recursos adicionales Sitios web Paginas de manual En este capitulo veremos como congurar los cilentes OpenVPN para realizar conexiones al servidor OpenVPN y obtener acceso remoto seguro a los sistemas atras del servidor VPN. Veremos las conguraciones para clientes MS Windows y GNU/Linux.

Congurando el cliente OpenVPN en sistemas MS Windows

51 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

En clientes MS Windows que usan el cliente OpenVPN GUI deben de almacenar los archivos de conguracin en el directorio C:\Program Files\OpenVPN\\config. La extensin del archivo debe ser .ovpn para que el cliente OpenVPN GUI detecte la conguracin y pueda lanzar las conexiones desde el icono en la bandeja de sistema. El siguiente es un ejemplo de un archivo de conguracin para el cliente OpenVPN:
; ; Archivo de configuracin de cliente OpenVPN modo TLS: ; client dev tun proto udp port 1194 remote hosta.dyndns.org 1194 nobind resolv-retry infinite ca ca.crt cert jperez.example.com.crt key jperez.example.com.key cipher BF-CBC comp-lzo persist-tun persist-key ;log-append /var/log/openvpn.log verb 3 ;status /var/log/openvpn-status.log mute 50

Si el archivo de conguracin .ovpn y los archivos de los certicados y la llave privada se encuentran en el mismo directorio puede escribir las rutas a los archivos usando la ruta relativa, por ejemplo:
ca ca.crt cert jperez.example.com.crt key jperez.example.com.key

Nota En este caso se asume que el directorio predeterminado para almacenar las conguraciones y certicados es: C:\\Program Files\\OpenVPN\\cong Si los archivos de los certicados y la llave privada se encuentran en rutas diferentes a la del archivo de conguracin escriba la ruta completa, por ejemplo:
ca "C:\\Program Files\\OpenVPN\\config\\ca.crt" cert "C:\\Program Files\\OpenVPN\\config\\jperez.example.com.crt" key "C:\\Program Files\\OpenVPN\\config\\jperez.example.com.key"

.ovpn

se recomienda que

Nota La ruta se debe escribir entre comillas dobles y usar doble diagonal invertida para separar los directorios. Es comn que tenga ms de un juego de archivo de conguracin y certicados en un mismo sistema, en dado caso se recomienda almacenar los archivos .ovpn en el directorio predeterminado C:\Program Files\OpenVPN\\config y almacene los archivos de los certicados y la llave privada en directorios separados, por ejemplo: Para la conexin a la red de Example usamos el archivo
C:\Program Files\OpenVPN\\config\Example.ovpn usa las siguientes rutas:

ca "C:\\Program Files\\OpenVPN\\config\\Example\\ca.crt" cert "C:\\Program Files\\OpenVPN\\config\\Example\\jperez.example.com.crt" key "C:\\Program Files\\OpenVPN\\config\\Example\\jperez.example.com.key"

Y para la conexin a la red de ClienteX usamos el archivo

C:\Program Files\OpenVPN\\config\ClienteX.ovpn usa las siguientes rutas:

ca "C:\\Program Files\\OpenVPN\\config\\ClienteX\\ca.crt" cert "C:\\Program Files\\OpenVPN\\config\\ClienteX\\jperez.example.com.crt" key "C:\\Program Files\\OpenVPN\\config\\ClienteX\\jperez.example.com.key"

Esto le da el benecio de poder conectarse a mltiples VPNs desde el cliente OpenVPN GUI.

Congurando el cliente OpenVPN en sistemas GNU/Linux


Crearemos un archivo de conguracin par los clientes OpenVPN:
root@hostc:/etc/openvpn# vim hostc-client-s2s-tls.ovpn

Con el siguiente contenido:

52 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

; ; Archivo de configuracin de servidor OpenVPN client mode (TLS): ; client dev tun proto udp port 1194 remote hosta.dyndns.org 1194 nobind resolv-retry infinite ca ca.crt cert tijuana.example.com.crt key tijuana.example.com.key cipher BF-CBC comp-lzo persist-tun persist-key ;log-append /var/log/openvpn.log verb 3 status /var/log/openvpn-status.log mute 50

Las opciones usadas en el archivo de conguracin del cliente OpenVPN son las siguientes: client A helper directive designed to simplify the conguration of OpenVPN's client mode. This directive is equivalent to:
pull tls-client

pull This option must be used on a client which is connecting to a multi-client server. It indicates to OpenVPN that it should accept options pushed by the server, provided they are part of the legal set of pushable options (note that the --pull option is implied by --client ). In particular, --pull allows the server to push routes to the client, so you should not use --pull or --client in situa tions where you don't trust the server to have control over the client's routing table. tls-client Enable TLS and assume client role during TLS handshake.

Estableciendo la conexin con el servidor OpenVPN


Ejecute el cliente:
root@cliente:/home/sydmin/cliente1vpn # openvpn cliente1vpn.midominio.com.conf Sun Feb 15 23:59:47 2009 OpenVPN 2.0.9 i486-pc-linux-gnu [SSL] [LZO] [EPOLL] built on Jun 11 2008 Sun Feb 15 23:59:47 2009 IMPORTANT: OpenVPN's default port number is now 1194, based on an official port number assignment by IANA. OpenVPN 2.0-beta16 and earlier used 5000 as the default port. Sun Feb 15 23:59:47 2009 /usr/bin/openssl-vulnkey -q -b 1024 -m <modulus omitted> Sun Feb 15 23:59:48 2009 LZO compression initialized Sun Feb 15 23:59:48 2009 Control Channel MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ] Sun Feb 15 23:59:48 2009 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ] Sun Feb 15 23:59:48 2009 Local Options hash (VER=V4): '41690919' Sun Feb 15 23:59:48 2009 Expected Remote Options hash (VER=V4): '530fdded' Sun Feb 15 23:59:48 2009 UDPv4 link local: [undef] Sun Feb 15 23:59:48 2009 UDPv4 link remote: 189.142.216.138:1194 Sun Feb 15 23:59:48 2009 TLS: Initial packet from 189.142.216.138:1194, sid=a2621fba ad2cabf2 Sun Feb 15 23:59:48 2009 VERIFY OK: depth=1, /C=MX/ST=Distrito_Federal/L=Mexico/O=Mi_Empresa_S.A./CN=Mi_Empresa_S.A._CA/emailAddress=caadmin@miempresa.com Sun Feb 15 23:59:48 2009 VERIFY OK: nsCertType=SERVER Sun Feb 15 23:59:48 2009 VERIFY OK: depth=0, /C=MX/ST=Distrito_Federal/L=Mexico/O=Mi_Empresa_S.A./OU=Redes/CN=vpnserver.midominio.com/emailAddress=vpnadmin@miempresa.com Sun Feb 15 23:59:48 2009 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key Sun Feb 15 23:59:48 2009 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Sun Feb 15 23:59:48 2009 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key Sun Feb 15 23:59:48 2009 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Sun Feb 15 23:59:48 2009 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA Sun Feb 15 23:59:48 2009 [vpnserver.midominio.com] Peer Connection Initiated with 189.142.216.138:1194 Sun Feb 15 23:59:50 2009 SENT CONTROL [vpnserver.midominio.com]: 'PUSH_REQUEST' (status=1) Sun Feb 15 23:59:50 2009 PUSH: Received control message: 'PUSH_REPLY,route 10.8.0.1,topology net30,ping 10,ping-restart 120,route 10.0.99.0 255.255.255.0,ifconfig 10.8.0.10 10.8.0.9' Sun Feb 15 23:59:50 2009 Options error: Unrecognized option or missing parameter(s) in [PUSH-OPTIONS]:2: topology (2.0.9) Sun Feb 15 23:59:50 2009 OPTIONS IMPORT: timers and/or timeouts modified Sun Feb 15 23:59:50 2009 OPTIONS IMPORT: --ifconfig/up options modified Sun Feb 15 23:59:50 2009 OPTIONS IMPORT: route options modified Sun Feb 15 23:59:50 2009 TUN/TAP device tun0 opened Sun Feb 15 23:59:50 2009 ifconfig tun0 10.8.0.10 pointopoint 10.8.0.9 mtu 1500 Sun Feb 15 23:59:50 2009 route add -net 10.8.0.1 netmask 255.255.255.255 gw 10.8.0.9

53 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Sun Feb 15 23:59:50 2009 route add -net 10.0.99.0 netmask 255.255.255.0 gw 10.8.0.9 Sun Feb 15 23:59:50 2009 Initialization Sequence Completed

Al establecerse la conexin sergura VPN haca la ocina vemos que se crea una interfaz de red virtual:
root@cliente:~ # ifconfig tun0 tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.8.0.10 P-t-P:10.8.0.9 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

Veamos que tambin se crea una ruta a la Red A


root@cliente:~ # route -n Kernel IP routing table Destination Gateway 10.8.0.1 10.8.0.9 10.8.0.9 0.0.0.0 10.0.99.0 10.8.0.9

Genmask 255.255.255.255 255.255.255.255 255.255.255.0

Flags UGH UH UG

Metric 0 0 0

Ref 0 0 0

Use 0 0 0

Iface tun0 tun0 tun0

Vericando la conectividad
root@cliente:~ # ping 10.0.99.200 PING 10.0.99.200 (10.0.99.200) 56(84) 64 bytes from 10.0.99.200: icmp_seq=1 64 bytes from 10.0.99.200: icmp_seq=2 64 bytes from 10.0.99.200: icmp_seq=3 bytes of data. ttl=63 time=52.4 ms ttl=63 time=35.7 ms ttl=63 time=37.7 ms

--- 10.0.99.200 ping statistics --3 packets transmitted, 3 received, 0% packet loss, time 2000ms rtt min/avg/max/mdev = 35.749/41.972/52.415/7.429 ms

Use el comando traceroute para trazar la ruta hasta un host en una red remota.

Asignando direcciones IP estticas para los clientes OpenVPN


Cuando se congura el servidor OpenVPN en modo server (multiclient) se asigna un pool de direcciones IP para asignar de forma dinamica a los clientes OpenVPN. En las conguraciones descritas arriba se usa la topologa net30 en la cual se asigna una subred /30 para cada cliente, en este tipo de topologia se usan 4 direcciones IP por cada cliente. Importante OpenVPN asigna una subred /30 para proveer compatibilidad con cientes Windows debido a una limitacin en el modo emulacin TUN del driver TAP-Win32. Usando el pool 10.8.0.0 255.255.255.0 el servidor usa la primer subred /30 de la siguiente forma: 10.8.0.0/30 - Direccin de subred virtual. 10.8.0.1/30 - Direccin IP Virtual en el servidor OpenVPN (PEER). 10.8.0.2/30 - Direccin IP virtual asignada al cliente (no se asigna realmente a un cliente). 10.8.0.3/30 - Direccin IP de Broadcast. El primer client en contectarse usara la siguiente subred /30: 10.8.0.4/30 - Direccin de subred virtual. 10.8.0.5/30 - Direccin IP Virtual del cliente. 10.8.0.6/30 - Direccin IP virtual del peer (no se asigna realmente a un sistema). 10.8.0.7/30 - Direccin IP de Broadcast. Las direcciones IP que puede asignar usando la topologa /30 son:
[ 1, 2] [ 21, 22] [ 41, 42] [ 61, 62] [ 81, 82] [101,102] [121,122] [141,142] [161,162] [181,182] [201,202] [221,222] [241,242] [ 5, 6] [ 25, 26] [ 45, 46] [ 65, 66] [ 85, 86] [105,106] [125,126] [145,146] [165,166] [185,186] [205,206] [225,226] [245,246] [ 9, 10] [ 29, 30] [ 49, 50] [ 69, 70] [ 89, 90] [109,110] [129,130] [149,150] [169,170] [189,190] [209,210] [229,230] [249,250] [ 13, 14] [ 33, 34] [ 53, 54] [ 73, 74] [ 93, 94] [113,114] [133,134] [153,154] [173,174] [193,194] [213,214] [233,234] [253,254] [ 17, 18] [ 37, 38] [ 57, 58] [ 77, 78] [ 97, 98] [117,118] [137,138] [157,158] [177,178] [197,198] [217,218] [237,238]

La asignacin de direcciones IP estticas dentro de un pool se realiza desde el servidor OpenVPN, el servidor OpenVPN debe usar la directiva --client-config-dirpara permitir conguraciones personalizadas por cliente, por lo tanto se requieren que cada cliente tenga un certicado con un

54 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...


commonName nico.

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Si desea asignar una direccin IP esttica alcliente con el commonName emartinez.example.com cree el siguiente archivo de conguracin ccd: /etc/openvpn/ccd/emartinez.example.com con el siguiente contenido:
; ; Archivo de configuracin de cliente: emartinez.example.com ; Direccin IP esttica ifconfig-push 10.8.0.13 10.8.0.14

Enviando opciones DHCP a los clientes OpenVPN


Como se menciono antes, cuando el servidor OpenVPN funciona en modo server, OpenVPN puede asignar informacin de red a los clientes va un servidor DHCP incorporado. A travs del uso de la directiva --dhcp-option en el cliente OpenVPN es posible congurar los parmetros DNS en el sistema operativo cliente. La directiva --dhcp-option puede denirse de dos formas, una en el archivo de conguracin del cliente y la otra (recomendada) es que sean enviadas desde el servidor usando la directiva --push. En el siguiente ejemplo hacemos push de las opciones DOMAIN y DNS de forma global, deniendo las siguientes directivas en el archivo de conguracin del servidor OpenVPN
push "dhcp-option DOMAIN example.com" push "dhcp-option DNS 10.8.0.1"

Nota Los clientes MS Windows automticamente conguran los parmetros DNS recibidos siempre y cuando la interfaz TUN/TAP tenga habilitado el soporte DHCP . Nota Si las opciones dhcp son enviadas va --push a clientes no-cwindows, las opciones sern guardadas en las variables de ambiente del cliente antes de que el script up sea llamado, las opciones se almacenan bajo el nombre "foreign_option_{n}" Tambin puede enviar informacin va push de servidores WINS y el tipo de nodo Netbios, por ejemplo:
push "dhcp-option DNS 10.8.0.1" push "dhcp-option NBT 8"

La informacin la enva a travs de la directiva incluye la directiva --pull. Importante

--push,

por lo que el cliente OpenVPN debe estar congurado en modo client ya que esta a su vez

Es posible usar la directiva push de forma global o por archivo de conguracin de cliente usando client-cong-dir. Para ms informacin del uso de las opciones DHCP ver la descripcin de la directiva en el manual de openvpn(8).

--dhcp-option

Actualizando automtica de los parmetros DNS en clientes GNU/Linux


Los parmetros de el o los servidores DNS y opcionalmente el sujo DNS que son enviados por el servidor OpenVPN va las opciones DHCP no son actualizados de forma automatica en los sistemas cliente GNU/Linux. Esto es debido a que por default, OpenVPN no puede modicar el archivo resolv.conf(5). Sin embargo es posible usar la directiva --up para ejecutar un script que se encargue de actualizarlos cada vez que se establezca una conexin con el servidor VPN. y tambin usaremos la directiva --plugin para usar el plugin openvpn-down-root.so para restaurar los parmetros de los DNS que se tenian en resolv.conf(5) antes de establecer la conexin VPN. Edite el archivo de conguracin del cliente OpenVPN:
# vim /etc/openvpn/cliente.ovpn

Y al nal del archivo agregue las siguientes lneas:


; Actualizar resolv.conf(5) usando script UP up /etc/openvpn/update_dns_client.up,sh ; Actualizar resolv.conf(5) usando script DOWN en privilegios bajos plugin /usr/lib/openvpn/openvpn-down-root.so /etc/openvpn/update_dns_client.down.sh

Cree el script resolv.conf :

/etc/openvpn/update_dns_client.up,sh,

este es un script simple que obtiene el servidor DNS desde la opcin 1 y crea un nuevo archivo

# vim /etc/openvpn/update_dns_client.up.sh

Con el siguiente contenido:


#!/bin/sh # # script: update_dns_client.up.sh

55 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...


# # Variables de ambiente via $foreign_options DNS_SERVER=`echo $foreign_option_1 |cut -b 17-` # Respalda resolv.conf original cp /etc/resolv.conf /etc/resolv.conf.orig # Crea un nuevo resolv.conf con el DNS de la VPN echo "nameserver $DNS_SERVER" > /etc/resolv.conf

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Cree el script

/etc/openvpn/update_dns_client.down,sh

para restaurar el archivo resolv.conf que respaldo el script UP:

# vim /etc/openvpn/update_dns_client.down.sh

Con el siguiente contenido:


#!/bin/sh # # script: update_dns_client.down.sh # # Restaura el resolv.conf orginal mv /etc/resolv.conf.orig /etc/resolv.conf

En las fuentes de OpenVPN se incluyen los scripts pull-resolv.conf en el directorio contrib, estos scripts se encargan de actualizar los parmetros de los servidores DNS en el archivo resolv.conf(5) en sistemas GNU/Linux de forma automtica cuando se conecte al servidor OpenVPN. Descargue e instale los scripts en el directorio
# # # # # # # mkdir -p /usr/src/openvpn cd /usr/src/openvpn apt-get source openvpn cd openvpn-2.1~rc7/contrib/pull-resolv-conf cp client.up /etc/openvpn/dns_client.up cp client.down /etc/openvpn/dns_client.down chmod +x /etc/openvpn/dns_client.*
/etc/openvpn:

Para usar los scripts use las siguientes conguraciones:


; Actualizar resolv.conf(5) usando script UP up /etc/openvpn/dns_client.up ; Actualizar resolv.conf(5) usando script DOWN en privilegios bajos plugin /usr/lib/openvpn/openvpn-down-root.so /etc/openvpn/dns_client.down

Para ms informacin sobre foreign_options y la directiva

--up

--plugin

vea la pgina del manual de openvpn (8).

Recursos adicionales
Si desea obtener ms informacin sobre los programas y pginas de manual relacionadas se aconseja que acceda a los siguientes recursos adicionales.

Sitios web
En las paginas listadas a continuacin encontrar mayor informacin sobre los programas utilizados en este capitulo. http://openvpn.net/index.php/open-source/documentation/howto.html#dhcp - Pushing DHCP options to clients http://openvpn.net/index.php/open-source/documentation/howto.html#pki - OpenVPN HOWTO - Setting up your own Certicate Authority (CA) and generating certicates and keys for an OpenVPN server and multiple clients

Paginas de manual
Para conocer ms sobre el uso y conguracin de los programas utilizados en el capitulo, se recomienda leer los manuales relacionados. openvpn (8) - secure IP tunnel daemon. ifcong (8) - congure a network interface route (8) - show / manipulate the IP routing table traceroute (1) - print the route packets trace to network host resolv.conf (5) - resolver conguration le

Captulo 11. Reforzando la seguridad de OpenVPN


Tabla de contenidos Introduccin Usando TLS-auth para autenticacin TLS Uso del protocolo UDP como medida de prevencin de ataques

56 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...


Usando llaves RSA y de cifrado simtrico ms grandes Revocando Certicados para clientes VPN Previniendo ataques de tipo Man In The Middle Recursos adicionales Sitios web Paginas de manual

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Este capitulo est dedicado a extender la informacin relacionada a los mecanismos de seguridad que ofrece OpenVPN, veremos los parmetros de conguracin y otras conguraciones requeridas para reforzar la seguridad de la VPN.

Introduccin
OpenVPN provee diferentes mecanismos para asegurar la privacidad y condencialidad de los datos transmitidos por el tnel VPN, haremos uso de rmas HMAC (Hash-based Message Authentication Code) para la autenticacin de paquetes, tambin conocido como "HMAC rewall", uso del protocolo UDP para prevenir ataques DoS comunes, crearemos llaves RSA ms grandes, como revocar el acceso a la VPN revocando los certicados x509, agregaremos atributos adicionales al certicado del servidor VPN para prevenir ataques de tipo Man In The Middle, en las siguientes secciones veremos como asegurar la VPN usando los mtodos antes mencionados.

Usando TLS-auth para autenticacin TLS


OpenVPN provee un mecanismo de seguridad por capas, hasta ahora solo hemos visto como manejar la autenticacin va llave esttica y certicados x509, en esta seccin veremos como una capa de seguridad adicional haciendo uso de la autenticacin TLS a travs de rmas HMAC. La directiva tls-auth agrega una rma HMAC adicional a todas las transacciones de paquetes SSL/TLS para vericar la integridad de los paquetes transmitidos entre el cliente y servidor OpenVPN. Cuando el servidor OpenVPN este congurado para autenticar los paquetes y un cliente no autorizado (no posee una llave HMAC) intenta establecer una conexin, el servidor rechazar la conexin inmediatamente sin ninguna otra vericacin. El uso de las rmas HMAC y el soporte de autenticacin TLS de OpenVPN proveen una capa adicional de seguridad ms all de la que SSL/TLS por si mismas, por ejemplo, con el uso de rmas HMAC y tls-auth reforzamos la seguridad protegindonos contra: Ataques de Denegacin de Servicio (DoS) o ataques de inundacin en el puerto UDP de OpenVPN. Escaneo de puertos para determinar que puertos UDP del servidor estn en estado de escucha. Vulnerabilidades de Buer Overow en la implementacin SSL/TLS Negociaciones SSL/TLS originadas desde maquinas no autorizadas, (aunque tales negociaciones resultarn fallidas al nal, tls-auth puede rechazarlas desde una etapa temprana) Para agregar el soporte tls-auth en OpenVPN debemos de generar otra llave esttica que usaremos como la rma HMAC. La rma la podemos generar en el servidor con el siguiente comando:
root@vpn-matriz:/etc/openvpn# openvpn --genkey --secret ta.key

El comando anterior generar una llave esttica de OpenVPN y la escribir en el archivo ta.key en el directorio actual, es decir, /etc/openvpn/ta.key. Esta llave puede ser copiada por un canal seguro previamente establecido (SCP/PGP) a los equipos clientes que deseen autenticarse. Si esta implementando este mtodo de seguridad despus de haber seguido los captulos anteriores, entonces podr copiar el archivo ta.key por el tnel VPN. Vea el contenido de la llave esttica para ver el tamao de la llave y su contenido::
root@vpn-matriz:/etc/openvpn# cat ta.key # # 2048 bit OpenVPN static key # -----BEGIN OpenVPN Static key V1----b55037a4deac4da4b3bc9faec687a601 570aa8265dcc18c5df986a9039791fa9 6220a7cc3970025c3386adef73fa1698 e8d6ebd608cc55ffca4afa7cc82a9db1 98acaacb5873b7a724659f5187bc2901 b67fa8c3174567be96bfb306cf5ce977 4334516dbbecc9fb4d87083ad106baa7 4a7cb4d5cdb9bc615f65ca0ada63754e 26b1a93cd4289babad21c08f19d36de1 e6368cc944125a568cff60e27e90ebfb 5fae2d55b625c7425592d475b981acb6 41ce95c1839c2ec8d0916044d29cc06e 76a124b3c4e92224446ca936239ba2ee ad2c88f8411628d97267e998bedd9fc0 cdf05d9cf06e5bb61e44f345fcc96b82 71e4289ae84261d75b77cd1798dcd6b6 -----END OpenVPN Static key V1-----

Ahora, en el archivo de conguracin del servidor OpenVPN de Matriz agregue el parmetro tls-auth y la ruta al archivo de la rma HMAC , el formato de l parmetro tls-auth es:
tls-auth hmac.key direction

Note que cuando se usa la directiva tls-auth y una llave esttica, debe denir una direccin, el parmetro direction habilita el uso de 4 llaves (HMAC-send, cipher-encrypt, HMAC-receive, cipher-decrypt) para que cada direccin del ujo de datos tenga su conjunto de llaves HMAC y de cifrado. La direccin debe ser complementaria en cada lado de la conexin, por ejemplo, del lado del servidor usa 0 y del cliente(s) use 1. Edite el archivo de conguracin del servidor OpenVPN y agregue:

57 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

tls-auth ta.key 0

Es necesario que re inicie el proceso openvpn para que tome efecto este cambio, si su servidor OpenVPN ya esta en ejecucin puede mandarle una seal SIGHUP para que se re inicie y re-lea el archivo de conguracin con los nuevos cambios.
root@vpn-matriz:/etc/openvpn# kill -SIGHUP `pidof openvpn`

En Debian/Ubuntu puede utilizar los scripts de inicio:


root@vpn-matriz:/etc/openvpn# /etc/init.d/openvpn reload * Reloading virtual private network daemon. [ OK ]

Al mandar la seal SIGHUP al proceso openvpn podr ver esto en los logs:
Sun Sun Sun Sun Sun Sun Sun Sun Sun Sun Sun Sun Sun Sun Sun Sun Sun Sun Sun Sun Sun Sun Sun Sun Sun Sun Sun Feb Feb Feb Feb Feb Feb Feb Feb Feb Feb Feb Feb Feb Feb Feb Feb Feb Feb Feb Feb Feb Feb Feb Feb Feb Feb Feb 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22:47:35 22:47:35 22:47:35 22:47:35 22:47:35 22:47:35 22:47:35 22:47:35 22:47:37 22:47:37 22:47:37 22:47:37 22:47:37 22:47:37 22:47:37 22:47:37 22:47:37 22:47:37 22:47:37 22:47:37 22:47:37 22:47:37 22:47:37 22:47:37 22:47:37 22:47:37 22:47:37 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 event_wait : Interrupted system call (code=4) TCP/UDP: Closing socket route del -net 10.8.0.0 netmask 255.255.255.0 route del -net 192.168.93.0 netmask 255.255.255.0 Closing TUN/TAP interface SIGHUP[hard,] received, process restarting OpenVPN 2.1_rc7 x86_64-pc-linux-gnu [SSL] [LZO2] [EPOLL] built on Jun 11 2008 Restart pause, 2 second(s) Diffie-Hellman initialized with 1024 bit key /usr/bin/openssl-vulnkey -q -b 1024 -m <modulus omitted> Control Channel Authentication: using 'ta.key' as a OpenVPN static key file Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication TLS-Auth MTU parms [ L:1542 D:166 EF:66 EB:0 ET:0 EL:0 ] TUN/TAP device tun0 opened TUN/TAP TX queue length set to 100 ifconfig tun0 10.8.0.1 pointopoint 10.8.0.2 mtu 1500 route add -net 192.168.93.0 netmask 255.255.255.0 gw 10.8.0.2 route add -net 10.8.0.0 netmask 255.255.255.0 gw 10.8.0.2 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ] Socket Buffers: R=[124928->131072] S=[124928->131072] UDPv4 link local (bound): [undef]:1194 UDPv4 link remote: [undef] MULTI: multi_init called, r=256 v=256 IFCONFIG POOL: base=10.8.0.4 size=62 IFCONFIG POOL LIST Initialization Sequence Completed

Note los mensajes de Control Channel Authentication que le indican que el soporte fue habilitado tanto para el ujo entrante como saliente. Copie el archivo de la llave HMAC a cada uno de los clientes que estarn autorizados para conectarse a la VPN y guardelo en un directorio que pueda leer el proceso openvpn, de preferencia en el mismo lugar que almacn los certicados. Edite el archivo de conguracin de cada cliente y agregue el parmetro tls-auth y la ruta al archivo de la llave, adems indique la direccin, por ejemplo:
tls-auth ta.key 1

Si agrego esta conguracin a un cliente que este ejecutndose, entonces tambin deber de mandar la seal SIGHUP o reiniciar por completo el proceso OpenVPN. Despus de re inicar OpenVPN en el cliente, usted podr ver lo siguiente en los logs:
Sun Feb 22 22:47:33 2009 Control Channel Authentication: using 'ta.key' as a OpenVPN static key file Sun Feb 22 22:47:33 2009 Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication Sun Feb 22 22:47:33 2009 Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication

Ahora solo podrn iniciar conexiones por UDP aquellos sistemas que tengan la rma HMAC y por supuesto, sus respectivos certicados y llaves privadas. TODO: Mostrar extracto de log de una conexin rechazada por no estar autenticada. Para ms informacin sobre el uso del parmetro
tls-auth

lea la pagina del manual openvpn(8).

Uso del protocolo UDP como medida de prevencin de ataques


OpenVPN permite el uso del protocolo UDP TCP como medio de transporte para la VPN, el protocolo UDP provee una mejor proteccin en contra de ataques DoS y escaneo de puertos que la que provee el protocolo TCP Ver la seccin Usando TLS-auth para autenticacin TLS para ms . informacin sobre medidas de proteccin para el protocolo UDP . Cuando use el protocolo UDP como medio de transporte asegrese de denirlo tanto en el archivo de conguracin del servidor como de los clientes, por ejemplo:
proto udp

Debe reiniciar el servidor y clientes openvpn para que el cambio tome efecto.

Usando llaves RSA y de cifrado simtrico ms grandes


Cuando creamos los certicados con pkitool/openssl el tamao predenido de las llaves RSA es de 1024 bits, dena la variable de ambiente KEY_SIZE de forma global en el archivo easy-rsa/vars, por ejemplo, para crear llaves de 2048 bits use:

58 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

export KEY_SIZE=2048

Es importante notar que entre ms grandes sean las llaves RSA mayor el incremento en la carga del sistema cuando se realiza la negociacin de la sesin SSL/TLS, la cual ocurre cada hora, tambin afecta al momento de la creacin de los parmetros Die Hellman, pero este procedimiento solo se realiza una sola vez. Aunque el algoritmo de cifrado predeterminado de OpenVPN es Blowsh (128 bits), OpenVPN soporta todos los tipos de cifrado que este soportado por la biblioteca OpenSSL, por lo tanto podremos usar diferentes algoritmos de cifrado con llaves de diferentes tamaos. Use el parmetro cipher para indicar el cifrado a utilizar, por ejemplo puede cambiar a el cifrado AES (Advanced Encryption Standard) de diferentes tamaos. La version de 128-bit de AES (Advanced Encryption Standard) puede ser usada agregando lo siguiente a los archivos de conguracin del cliente y del servidor:
cipher AES-128-CBC

Nota Recuerdo que debe de especicar el mismo cifrado en los archivos de conguracin de cada cliente y servidor. Use el comando openvpn con el parmetro para listar los cifrados soportados:

--show-ciphers

# openvpn --show-ciphers The following ciphers and cipher modes are available for use with OpenVPN. Each cipher shown below may be used as a parameter to the --cipher option. The default key size is shown as well as whether or not it can be changed with the --keysize directive. Using a CBC mode is recommended. DES-CFB 64 bit default key (fixed) DES-CBC 64 bit default key (fixed) RC2-CBC 128 bit default key (variable) RC2-CFB 128 bit default key (variable) RC2-OFB 128 bit default key (variable) DES-EDE-CBC 128 bit default key (fixed) DES-EDE3-CBC 192 bit default key (fixed) DES-OFB 64 bit default key (fixed) DES-EDE-CFB 128 bit default key (fixed) DES-EDE3-CFB 192 bit default key (fixed) DES-EDE-OFB 128 bit default key (fixed) DES-EDE3-OFB 192 bit default key (fixed) DESX-CBC 192 bit default key (fixed) BF-CBC 128 bit default key (variable) BF-CFB 128 bit default key (variable) BF-OFB 128 bit default key (variable) RC2-40-CBC 40 bit default key (variable) CAST5-CBC 128 bit default key (variable) CAST5-CFB 128 bit default key (variable) CAST5-OFB 128 bit default key (variable) RC2-64-CBC 64 bit default key (variable) AES-128-CBC 128 bit default key (fixed) AES-128-OFB 128 bit default key (fixed) AES-128-CFB 128 bit default key (fixed) AES-192-CBC 192 bit default key (fixed) AES-192-OFB 192 bit default key (fixed) AES-192-CFB 192 bit default key (fixed) AES-256-CBC 256 bit default key (fixed) AES-256-OFB 256 bit default key (fixed) AES-256-CFB 256 bit default key (fixed) AES-128-CFB1 128 bit default key (fixed) AES-192-CFB1 192 bit default key (fixed) AES-256-CFB1 256 bit default key (fixed) AES-128-CFB8 128 bit default key (fixed) AES-192-CFB8 192 bit default key (fixed) AES-256-CFB8 256 bit default key (fixed) DES-CFB1 64 bit default key (fixed) DES-CFB8 64 bit default key (fixed)

Para que este cambio tome efecto debe de reiniciar el servidor y el cliente, puede mandar una seal SIGHUP o usar sus scripts de inicio de su distribucin.
# kill -SIGHUP `pidof openvpn`

Si realizo el cambio del cifrado en el servidor, pero olvido hacer el cambio en un cliente, es posible que no se pueda conectar y que en el log del cliente vera algunos mensajes, como los siguientes:
Sun ... ... Sun Sun Sun Sun Feb 22 23:01:27 2009 WARNING: 'cipher' is used inconsistently, local='cipher BF-CBC', remote='cipher AES-128-CBC'

Feb Feb Feb Feb

22 22 22 22

23:05:47 23:05:57 23:06:07 23:06:17

2009 2009 2009 2009

Authenticate/Decrypt Authenticate/Decrypt Authenticate/Decrypt Authenticate/Decrypt

packet packet packet packet

error: error: error: error:

cipher cipher cipher cipher

final final final final

failed failed failed failed


cipher

Lo cual indica que no estamos usando el mismo cifrado que en el servidor, para corregir este problema, cambie conguracin del cliente.

AES-128-CBC

en el archivo de

59 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Revocando Certicados para clientes VPN


Los certicados x509 emitidos para los clientes OpenVPN tienen una fecha de inicio de validez y una fecha de expiracin, durante este tiempo los clientes podrn autenticarse con el servidor OpenVPN usando como credenciales el certicado pblico o llave pblica. El servidor OpenVPN autorizar el acceso a los clientes siempre y cuando la fecha de expiracin del certicado pblico del cliente no haya expirado, sin embargo, habr ocaciones en las que se desee invalidar o revocar un certicado para un cliente OpenVPN de manera que ya no pueda ser usado para propositos de autenticacin. Entre las principales razones para revocar el acceso a la VPN podemos encontrar: Ya no se desea dar acceso a la VPN a un usuario en especico La llave privada asociada con el certicado ha sido comprometida o robada. El usuario no recuerda la contrasea con la que se cifro la llave privada asociada a un certicado Para revocar el certicado de un cliente siga el siguiente procedimiento: Entrar al directorio de la CA
# cd /etc/openvpn/MiEmpresaCA/

Exportar variables de entorno de la CA:


# source vars

El archivo /etc/openssl/ExampleCA/openssl.cnf carga el mdulo pkcs11, pero si no lo tiene cargado la revocacin va a fallar, se recomienda que comente todo el bloque [pkcs11 section] en el archivo:
# vim openssl.cnf

Por ejemplo:
#[ pkcs11_section ] #engine_id = pkcs11 #dynamic_path = /usr/lib/engines/engine_pkcs11.so #MODULE_PATH = $ENV::PKCS11_MODULE_PATH #PIN = $ENV::PKCS11_PIN #init = 0

Ahora ejecutamos el comando revoke-full con el nombre del certicado o mejor dicho con el common name como argumento, por ejemplo:
# ./revoke-full consultor01.midominio.com Using configuration from /etc/openvpn/MiEmpresaCA/openssl.cnf Enter pass phrase for /etc/openvpn/MiEmpresaCA/keys/ca.key:SuperPASSPHRASE!!! Revoking Certificate 04. Data Base Updated Using configuration from /etc/openvpn/MiEmpresaCA/openssl.cnf Enter pass phrase for /etc/openvpn/MiEmpresaCA/keys/ca.key:SuperPASSPHRASE!!! vendedor01.midominio.com.crt: /C=MX/ST=DF/L=Mexico/O=Mi Empresa S.A./OU=Ventas/CN=consultor01.midominio.com/emailAddress=consultor01@midominio.com error 23 at 0 depth lookup:certificate revoked

El comando revoke-full le solicitar el passphrase de la llave privada ca.key para realizar la operacin de revocacin del certicado. Despus le vuelve a preguntar el passphrase de la llave ca.key para validar que el certicado haya sido revocado. Nota El error 23 en la ltima linea nos indica que la validacin del certicado revocado fallo, esto quiere decir que el certicado fue revocado exitosamente. El comando revoke-full generar el archivo de la lista de revocacion de certicados (CRL) copiado a una ruta a la que el servidor OpenVPN tenga acceso, por ejemplo:
# cp crl.pem /etc/openvpn/

crl.pem

en el directorio

keys.

Este archivo debe ser

Para habilitar la vericacin de la CRL en el servidor OpenVPN, edite el archivo de conguracin del servidor OpenVPN y agregue la siguiente linea:
crl-verify crl.pem

Reinicie el servidor OpenVPN para que el cambio tome efecto, si un usuario listado en la CRL trata de conectarse a la VPN la conexin ser rechazada Cuando la opcin crl-verify es usada en OpenVPN, el archivo CRL ser re leido cada vez que un nuevo cliente se conecta, o una conexin existente re negocia la connexin SSL/TLS (por default cada hora). Esto signica que puedes actualizar el archivo CRL mientras el servidor OpenVPN esta corriendo, y que la nueva CRL tome efecto inmediatamente para nuevas conexiones. Cuando el cliente con el certicado revocado trat de conectarse en el log de OpenVPN se registrar lo siguiente:
201.114.193.4:46423 201.114.193.4:46423 201.114.193.4:46423 201.114.193.4:46423 201.114.193.4:46423

VERIFY OK: depth=1, /C=MX/ST=DF/L=Mexico/O=Distribuidora_de_Cintas_y_Herrajes_S.A._de_C.V./CN=Distribuidora_de_Cintas_y_Herrajes_S.A._de_C.V CRL CHECK FAILED: /C=MX/ST=DF/L=Mexico/O=Computaci_xC3on_Grafica_de_Mexico_S.A._de_C.V./OU=Linux/CN=jorge.medina.e-compugraf.com/emailAddres TLS_ERROR: BIO read tls_read_plaintext error: error:140890B2:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:no certificate returned TLS Error: TLS object -> incoming plaintext read error TLS Error: TLS handshake failed

60 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

201.114.193.4:46423 Fatal TLS error (check_tls_errors_co), restarting 201.114.193.4:46423 SIGUSR1[soft,tls-error] received, client-instance restarting TCP/UDP: Closing socket

Si el cliente para el cual el certicado fue revocado ya esta conectado, puedes reiniciar el servidor va la seal (SIGUSR1 o SIGHUP) y desconectar todos los clientes, o puedes conectarte a la consola de administracin del servidor OpenVPN y usar el comando kill para explicitamente matar la instanca del cliente en el servidor sin tener que interrumpir a los otros usuarios. Para ms informacin de la consola de administracin de OpenVPN vea el capitulo La Consola de Administracin OpenVPN.

Previniendo ataques de tipo Man In The Middle


Para evitar posibles ataques de tipo Man-in-the-Middle, en el cual un cliente autorizado trata de conectarse a otro cliente haciendose pasar por el servidor, asegurece de reforzar la vericacin del certicado del servidor en el cliente. Hay 5 formas diferentes para realizar esta tarea, listadas en el orde de precedencia: [OpenVPN 2.1 y recientes] Crea el certicado del servidor con el tipo extendido de servidor. El RFC3280 dene que se puede usar el tipo server para certicados de uso solo de servidor. El atributo especial para designar un certicado como solo-servidor, es nsCertType=server, para crear certicados de servidor puede utilizar el comando pkitool parte de easy-rsa de la siguiente manera:
# ./pkitool --interact --server vpnserver.midominio.com

Nota En el capitulo de creacin de CA se creo el certicado del servidor con el atributo extendido nsCertType=server. Para que los clientes hagan la validacin de dicho atributo, deber de agregar a cada cliente OpenVPN la siguiente linea en su archivo de conguracin:
remote-cert-tls server

Deber de reiniciar el cliente OpenVPN para que este cambio tome efecto, cuando un cliente trate de conectarse con el servidor OpenVPN, y si la validacin del tipo de certicado del servidor es correcta, ver esto en los logs:
Sun Feb 22 23:31:17 2009 VERIFY OK: nsCertType=SERVER

[OpenVPN 2.0 y anteriores] En estas versiones tambin se tiene el soporte para vericar el tipo de certicado, para la vericacin en los clientes se usa la directiva:
ns-cert-type server

Deber de reiniciar el cliente OpenVPN para que este cambio tome efecto, cuando un cliente trate de conectarse con el servidor OpenVPN, y si la validacin del tipo de certicado del servidor es correcta, ver esto en los logs:
Sun Feb 22 23:31:17 2009 VERIFY OK: nsCertType=SERVER

Usando la directiva tls-remote, usted puede agregar una capa adicional para la vericacin del certicado del servidor OpenVPN, use la directiva tls-remote en el cliente para permitir o rechazar conexiones del servidor OpenVPN basado en el Common Name del certicado del servidor. Para ver el Common Name o Subject de un certicado x509 podemos usar el comando:
root@vpn-matriz:/etc/openvpn# openssl x509 -noout -subject -in vpnserver.midominio.com.crt subject= /C=MX/ST=Distrito Federal/L=Mexico/O=Mi Empresa S.A./OU=Redes/CN=vpnserver.midominio.com/emailAddress=vpnadmin@miempresa.com

Nota El subject del certicado del servidor OpenVPN tiene espacios, esto fue porque asi se introdujo la informacin al momento de la creacin, sin embargo, OpenVPN convierte los espacios por guiones bajo "_" al momento de presentar el certicado a un cliente. Esto podemos verlo en los logs de un cliente.
Sun Feb 22 23:25:18 2009 VERIFY OK: depth=0, /C=MX/ST=Distrito_Federal/L=Mexico/O=Mi_Empresa_S.A./OU=Redes/CN=vpnserver.midominio.com/emailAddress=vpnadmin@miempresa.com

Si en el Subject del certicado del servidor se encuentran espacios en blanco, tendr que convertirlos a "_" para que la validacin funcione. Puede usar el siguiente comando para convertir el subject con espacios a "_".
root@vpn-matriz:/etc/openvpn# openssl x509 -noout -subject -in vpnserver.midominio.com.crt | tr ' ' '_' subject=_/C=MX/ST=Distrito_Federal/L=Mexico/O=Mi_Empresa_S.A./OU=Redes/CN=vpnserver.midominio.com/emailAddress=vpnadmin@miempresa.com

Ahora en el cliente agregue la siguiene linea:


tls-remote "/C=MX/ST=Distrito_Federal/L=Mexico/O=Mi_Empresa_S.A./OU=Redes/CN=vpnserver.midominio.com/emailAddress=vpnadmin@miempresa.com"

Deber de reiniciar el cliente OpenVPN para que este cambio tome efecto, cuando un cliente trate de conectarse con el servidor OpenVPN, y si la validacin del tipo de certicado del servidor es correcta, ver esto en los logs:
Sun Feb 22 23:36:01 2009 VERIFY X509NAME OK: /C=MX/ST=Distrito_Federal/L=Mexico/O=Mi_Empresa_S.A./OU=Redes/CN=vpnserver.midominio.com/emailAddress=vpnadmin@miempresa.com

Recursos adicionales

61 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Si desea obtener ms informacin sobre los programas y pginas de manual relacionadas se aconseja que acceda a los siguientes recursos adicionales.

Sitios web
En las paginas listadas a continuacin encontrar mayor informacin sobre los programas utilizados en este capitulo. http://openvpn.net/index.php/open-source/documentation/howto.html#security - Hardening OpenVPN Security

Paginas de manual
Para conocer ms sobre el uso y conguracin de los programas utilizados en el capitulo, se recomienda leer los manuales relacionados. openvpn (8) - secure IP tunnel daemon. openssl (1ssl) - OpenSSL command line tool

Captulo 12. La Consola de Administracin OpenVPN


La interfaz de administracin de OpenVPN permite que OpenVPN sea administrado y controlado desde un programa externo va un socket TCP . la interfaz de administracin esta implementada usando una conexin TCP cliente/servidor, en la cual OpenVPN scucha en una direccin IP y puerto especico para las conexiones de administracin. Para habilitar la consola de administracin en el servidor OpenVPN agrege los siguientes parametros al archivo de conguracin del servidor:
management 127.0.0.1 1195

Ya que la interfaz de administracin no provee mecanismos de autenticacin por contrasea, se recomienda que active la interfaz solo en la interfaz localhost, cambie el puerto a su eleccin. Re inicie el servidor OpenVPN para que la interfaz de administracin sea activada.
# /etc/init.d/openvpn restart

Importante Esto har que todos los clientes OpenVPN activos se reconecten al servidor. Para conectarse a la interfaz de administracin de OpenVPN puede usar un cliente telnet, por ejemplo:
# telnet 127.0.0.1 1195 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. >INFO:OpenVPN Management Interface Version 1 -- type 'help' for more info

Use el comando help para ver una lista de comandos soportados:


help Management Interface for Commands: auth-retry t : bytecount n : echo [on|off] [N|all] : exit|quit : forget-passwords : help : hold [on|off|release] : kill cn kill IP:port log [on|off] [N|all] mute [n] needok type action net password type p signal s state [on|off] [N|all] status [n] test n username type u verb [n] version END : : : : : : : : : : : : : : OpenVPN 2.1_rc7 x86_64-pc-linux-gnu [SSL] [LZO2] [EPOLL] built on Jun 11 2008 Auth failure retry mode (none,interact,nointeract). Show bytes in/out, update every n secs (0=off). Like log, but only show messages in echo buffer. Close management session. Forget passwords entered so far. Print this message. Set/show hold flag to on/off state, or release current hold and start tunnel. Kill the client instance(s) having common name cn. Kill the client instance connecting from IP:port. Turn on/off realtime log display + show last N lines or 'all' for entire history. Set log mute level to n, or show level if n is absent. Enter confirmation for NEED-OK request of 'type', where action = 'ok' or 'cancel'. (Windows only) Show network info and routing table. Enter password p for a queried OpenVPN password. Send signal s to daemon, s = SIGHUP|SIGTERM|SIGUSR1|SIGUSR2. Like log, but show state history. Show current daemon status info using format #n. Produce n lines of output for testing/debugging. Enter username u for a queried OpenVPN username. Set log verbosity level to n, or show if n is absent. Show current version number.

Para desconectarse de la interfaz de administracin use el comando quit:


quit Connection closed by foreign host.

Para ver los clientes conectados use el comando status:

62 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

status OpenVPN CLIENT LIST Updated,Sat Apr 10 22:06:54 2010 Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since guadalajara.example.com,187.154.8.201:55788,58131094,100947999,Wed Apr 7 20:14:21 2010 ROUTING TABLE Virtual Address,Common Name,Real Address,Last Ref 10.97.0.5,guadalajara.example.com,187.154.8.201:55788,Sat Apr 10 21:27:44 2010 172.16.70.0/24,guadalajara.example.com,187.154.8.201:55788,Wed Apr 7 20:14:24 2010 GLOBAL STATS Max bcast/mcast queue length,0 END

Para desconectar un usuario use el comando kill, por ejemplo:


kill guadalajara.example.com

O usando el socket:
kill 187.154.8.201:55788

Si el cliente OpenVPN esta congurado para auto reconectarse despus de perder la conexin con el servidor, el comando kill obligar al cliente a reconectarse. Para ms informacin acerca de la interfaz de administracin ver: Management Interface: http://openvpn.net/index.php/open-source /documentation/miscellaneous/79-management-interface.html

Captulo 13. Administracin avanzada de clientes y certicados


Tabla de contenidos Autenticacin basada en Usuario y Contrasea Llaves privadas protegidas por contrasea Estableciendo contraea en Llave Privada sin proteccin Estableciendo contrasea en Llave Privada en GNU/Linux con OpenSSL Estableciendo contraea en Llave Privada en Windows Creando llaves privadas con contrasea Cambiando la contrasea de una Llave privada protegida Cambiando la contrasea de una Llave Privada protegida en GNU/Linux con OpenSSL Cambiando la contrasea de una Llave Privada protegida en Windows En este capitulo veremos algunos mtodos adicionales para la administracin de los cientes y los certicados de las VPNs. Veremos como congurar el servidor OpenVPN para agregar un nivel ms para la autenticacin de los usaurios, en este caso usaremos el plugin PAM para permitir el acceso a los usuarios de sistema, en especial a los de un grupo en especico. Tambin veremos como establecer, cambiar y eliminar la contrasea de la llave privada de un cliente.

Autenticacin basada en Usuario y Contrasea


En el arcihvo de conguracin agregue la directiva plugin para cargar el mdulo PAM:
# Autenticacin de usuarios locales de sistema por medio de PAM plugin /usr/lib/openvpn/openvpn-auth-pam.so ovpn

Le estamos especicando que use el plugin de autenticacin

openvpn-auth-pam.so

(incluido) y que use el modulo ovpn de PAM. con el siguiente contenido:

El archivo del modulo ovpn no existe, por lo que crearemos el archivo

/etc/pam.d/ovpn

# # /etc/pam.d/common-auth - authentication settings common to all services # # This file is included from other service-specific PAM config files, # and should contain a list of the authentication modules that define # the central authentication scheme for use on the system # (e.g., /etc/shadow, LDAP, Kerberos, etc.). The default is to use the # traditional Unix authentication mechanisms. # auth required pam_listfile.so onerr=fail item=group sense=allow file=/etc/security/vpn.grupos.permitidos auth requisite pam_unix.so nullok_secure auth optional pam_smbpass.so migrate missingok

Con esta conguracin decimos que use el modulo pam_listfile.so para permitir autenticacin basada en grupos, crearemos el archivo /vpn.grupos.permitidos en el cual indicaremos que grupos son los permitidos.
root@firewall:/etc/openvpn# cat /etc/security/vpn.grupos.permitidos vpn

/etc/security

Ahora crearemos el grupo vpn en nuestro sistema:


# groupadd vpn

Y crearemos un par de usuarios:


# useradd -g vpn -c "Usuario VPN jorge" -s /bin/false jorge

63 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...


Y
# useradd -g vpn -c "Usuario VPN foolano" -s /bin/false foolano

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Es necesario que se reinicie el servidor OpenVPN para que tome los cambios.
# kill -SIGHUP `pidof openvpn`

En el archivo de conguracin del cliente OpenVPN se agregar la siguiente linea:


auth-user-pass

Cuando un cliente OpenVPN se autentique le solicitar un nombre de usuario y contrasea, por ejemplo:
root@cliente:/etc/openvpn # openvpn monterrey_Lan2LanTLS.conf Mon Feb 23 02:37:12 2009 OpenVPN 2.1_rc7 x86_64-pc-linux-gnu [SSL] [LZO2] [EPOLL] built on Jun 11 2008 Enter Auth Username:jorge Enter Auth Password:password

Si el usuario y la contrasea son validos, y adems el usuario jorge pertenece al grupo vpn, se le garantizar el acceso. En caso que el usuario o la contrasea no sean validos, o el usuario no pertenece al grupo vpn, entonces el usuario ver un mensaje como este en sus logs:
Mon Feb 23 02:37:27 2009 AUTH: Received AUTH_FAILED control message Mon Feb 23 02:37:27 2009 TCP/UDP: Closing socket Mon Feb 23 02:37:27 2009 SIGTERM[soft,auth-failure] received, process exiting

Llaves privadas protegidas por contrasea


Si creo llaves privadas protegidas con contrasea, probablemente habr ocaciones en las que los usuarios requieran cambiar la contrasea de su llave privada, o quizas tambin quiera establecer una contrasea a alguna llave privada que no haya sido creada con contrasea. Existen diferentes procedimientos para llevar a cabo dicha tarea, dependern de el sistema operativo en el cual se encuentre el archivo de la llave privada. A continuacin se describen los procedimientos relacionados con la tarea de establecer contraeseas en llaves privadas tanto en GNU/Linux y Windows.

Estableciendo contraea en Llave Privada sin proteccin


Si creo las llaves privadas sin crontrasea, y ahora desea establecer una contraesea a su llave privada podr utilizar alguno de los metodos descritos a continuacin. Estableciendo contrasea en Llave Privada en GNU/Linux con OpenSSL Si usa OpenVPN como cliente en algn sistema operativo GNU/Linux, usted podr utilizar el comando openssl para establecer una contrasea a su llave privada. Digamos que el archivo de su llave es /etc/openvpn/cliente.midominio.com.key, usted esta localizado en el directorio /etc/openvpn/, puede usar el siguiente comando para crear una copia de su llave privada, pero en este caso, la copia estar protegida por una contrasea.
root@cliente:/etc/openvpn # openssl rsa -des3 -in cliente.midominio.com.key -out cliente.midominio.com-SI-PASSPHRASE.key writing RSA key Enter PEM pass phrase: Ll4v3d3p4s0 Verifying - Enter PEM pass phrase:Ll4v3d3p4s0

Ahora movemos el archivo


root@cliente:/etc/openvpn # mv cliente.midominio.com-SI-PASSPHRASE.key cliente.midominio.com.key

Aviso Por cuestiones de seguridad no se recomienda preservar la llave privada sin passphrase. Ahora cuando trate de levantar el cliente OpenVPN, se le solicitar la contrasea de la llave privada, por ejemplo:
root@cliente:/etc/openvpn # openvpn monterrey_Lan2LanTLS.conf Mon Feb 23 01:49:21 2009 OpenVPN 2.1_rc7 x86_64-pc-linux-gnu [SSL] [LZO2] [EPOLL] built on Jun 11 2008 Enter Private Key Password: Ll4v3d3p4s0

Si teclea la contrasea correcta entonces se podr autenticar correctamente, en caso de que la contraea de la llave privada este mal, vera un mensaje en los logs as:

root@cliente:/etc/openvpn # openvpn monterrey_Lan2LanTLS.conf Mon Feb 23 01:50:30 2009 OpenVPN 2.1_rc7 x86_64-pc-linux-gnu [SSL] [LZO2] [EPOLL] built on Jun 11 2008 Enter Private Key Password: Mon Feb 23 01:50:31 2009 Cannot load private key file cliente.midominio.com.key: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt: error Mon Feb 23 01:50:31 2009 Error: private key password verification failed Mon Feb 23 01:50:31 2009 Exiting

Estableciendo contraea en Llave Privada en Windows Para establecer una contrasea a la llave privada en sistemas operativos Windows, puede usar el comando openssl en MS-DOS, o puede utilizar la

64 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...


interfaz grca de OpenVPN, por ejemplo: Meter Imagen. Creando llaves privadas con contrasea

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Si quiere generar las llaves privadas con contrasea desde el inicio, use el comando pkitool con la opcin
root@vpn-matriz:/etc/openvpn/MiEmpresaCA# ./pkitool --interact --pass cliente8vpn.midominio.com Generating a 1024 bit RSA private key ...............................................++++++ ...............++++++ writing new private key to 'cliente8vpn.midominio.com.key' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----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) [MX]:

--pass,

por ejemplo:

Cambiando la contrasea de una Llave privada protegida


Si ya tiene una llave privada con una contraea establecida, y ahora desea actualizar la contraea de su llave publica, puede usar el comando openssl de la misma forma que se utilizo para asignar una contraea, lo unico que cambiar es que le solicitar la contrasea actual. Cambiando la contrasea de una Llave Privada protegida en GNU/Linux con OpenSSL Si usa OpenVPN en un sistema GNU/Linux puede usar el siguiente comando para actualizar la contaea de su llave privada:
root@cliente:/etc/openvpn # openssl rsa -des3 -in cliente.midominio.com.key -out cliente.midominio.com-NUEVO-PASSPHRASE.key Enter pass phrase for cliente.midominio.com.key:PASSPHRASE_ACTUAL writing RSA key Enter PEM pass phrase:PASSPHRASE_NUEVO Verifying - Enter PEM pass phrase:PASSPHRASE_NUEVO

Cambiando la contrasea de una Llave Privada protegida en Windows Si usa el sistema operativo Windows, y tiene una llave privada protegida por contrasea y desea actualizarla, puede usar el mismo procedimiento descrito en la seccin Estableciendo contraea en Llave Privada en Windows.

Captulo 14. Resolucin de Problemas


Rutas? Firewall

Captulo 15. Apendices


Tabla de contenidos El archivo de conguracin /etc/openvpn/servidor.conf (Servidor OpenVPN) El archivo de conguracin /etc/openvpn/cliente.conf Usando el servicio DNS Dinamico de DynDNS con el cliente Dinamico ddclient Parrafo.

El archivo de conguracin /etc/openvpn/servidor.conf (Servidor OpenVPN)


################################################# # Configuracin para servidor OpenVPN 2.0 # # multi-cliente. # # # # Comentarios precedidos con '#' o ';' # ################################################# # Direccin IP local en la que OpenVPN escucha # peticiones de clientes remotos (opcional) ;local a.b.c.d # En que puerto escucha peticiones el servidor OpenVPN port 1194 # Usando el protocolo UDP para recibir conexines remotas proto udp # Configuracin de interfaz TUN para VPN tipo Enrutada dev tun # Configuraciones TLS/SSL

65 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...


# # Ruta al archivo del Certificado Raz con la que fueron # firmados los cerficiados ca ca.crt # Ruta del archivo del certificado del servidor OpenVPN cert vpnserver.intracompugraf.info.crt # Ruta del archivo de la llave privada del servidor OpenVPN key vpnserver.intracompugraf.info.key # Ruta al archivo de parametros Diffie hellman. dh dh1024.pem # Configuracin en modo servidor # Uso de pool de direcciones 10.98.0.0/24 para asignar # direcciones IP dinamicas a los clientes VPN. # En modo server OpenVPN usar su servidor DHCP integrado. # El servidor tomar la direccin 10.98.0.1 para si mismo. # y el resto sern asignadas dinamicamente a los clientes. server 10.98.0.0 255.255.255.0 # Cada direccin asignada dinamicamente a los clientes VPN # es registrada en el archivo /etc/openvpn/ipp.txt para # uso del servidor DHCP integrado en OpenVPN, as, si el # cliente openvpn se cae o se desconecta, se le volver # a asignar la direccin IP previamente asignada. ifconfig-pool-persist ipp.txt # Directorio para Configuraciones de Clientes client-config-dir ccd # Creamos ruta local para la red remota 192.168.93.0/24 #route 192.168.93.0 255.255.255.0 # NOTE que debe de existir un archivo de cliente # con la configuracin "iroute 192.168.93.0 255.255.255.0" # para que se cree la ruta interfa para OpenVPN # La directiva keepalive causa que se envien mensajes # tipo-ping tanto de ida como regreso para que cada # punto de la VPN sepa cuando el otro punto este caido. # Hacer Ping cada 10 segundos, y si el host remoto no # responde durante 120 segundos (2 minutos) el equipo # remoto se considerar caido. keepalive 10 120 # Cifrado criptogrfico que usar OpenVPN. # NOTE: Esta misma configuracin debe de ser usada # por los clientes de la VPN. cipher BF-CBC # Blowfish 128 bits (predeterminado) ;cipher AES-128-CBC # AES 128 bits # Habilitanto compresin en el tunnel VPN # NOTE: esta misma configuracin debe ser usada # para los clientes de la VPN. comp-lzo # Separacin de privilegios para el servidor OpenVPN, # despus de que el servicio haya sido iniciadao. # De root:root a nobody:nobody ;user nobody ;group nobody # Trata de preservar el estado de las sesiones y la interfaz tun # # aun despues de que el cliente se reinicie por (ping restart) persist-key persist-tun # Registro de eventos para el estado de conexiones # En el log de estado se registra informacin: # - Conexiones activas, truncadas # - Informacin del cliente: IP pblica origen, certificado, IP virtual # - bytes enviados y bytes recibidos por el cliente # Este archivo de estado es actualizado cada minuto. status /var/log/openvpn-status.log # A donde envar los logs del servidor OpenVPN ;log-append /var/log/openvpn.log # Nivel del severidad para logs de OpenVPN # 0 es silencioso, excepto para errores fatales # 4 es razonable para uso general # 5 y 6 puede ser usado para diagnosticar problemas de conexin # 9 es extremadamente verboso, tipo tcpdump. verb 3 # Silence repeating messages. Por lo menos 20 mensajes # consecutivos de la misma categora de mensaje sern # registrado en en log. ;mute 20 ## Configuracines para interfaz de administracin OpenVPN ## # Abrir interfaz de administracin en la direccin 127.0.0.1

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

66 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...


# en el puerto 1195 (TCP) management 127.0.0.1 1195

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

El archivo de conguracin /etc/openvpn/cliente.conf


################################################# # Configuracin para cliente OpenVPN 2.0 # # # # Comentarios precedidos con '#' o ';' # ################################################# # Especificando que es una configuracion para cliente, # Cuando OpenVPN actua como cliente har pull de # parametros de red desde el servidor OpenVPN client # Configuracin de interfaz TUN para VPN tipo Enrutada dev tun # Conectarse por UDP al servidor OpenVPN remoto proto udp # Hostname o direccin IP del servidor OpenVPN # tambin se especifica el puerto en el que el servidor OpenVPN # escucha peticiones. remote vpnserver.midominio.com 1194 # Trata de resolver el hostname del servidor infinitamente # Muy til, cuando el cliente o servidor OpenVPN tienen i # direccin IP dinamica. resolv-retry infinite # No hacer bind a un nmero de puerto local en especifico nobind # Delegar privilegios del proceso openvpn al usuario nobody # (Solo clientas NO Windowos) ;user nobody ;group nobody # Trata de preservar el estado de las sesiones y la interfaz tun # aun despues de que el cliente se reinicie por (ping restart) persist-key persist-tun # Configuraciones SSL/TLS # # Ruta al archivo del Certificado Raz con la que fueron # firmados los cerficiados ca ca.crt # Ruta del archivo del certificado del servidor OpenVPN cert jmedina.intracompugraf.info.crt # Ruta del archivo de la llave privada del servidor OpenVPN key jmedina.intracompugraf.info.key ## Proteccin anti Man In The Middle### # Solo aceptar conexines de servidores OpenVPN que tienen # el atributo extendido nsCertType=server. Esta es una proteccin # importante para protegerse contra ataques potenciales de tipo # Main In the Middle: http://openvpn.net/howto.html#mitm ns-cert-type server

# Solo aceptar conexines del servidor autenticado con el # siguiente Nombre Distinguido (DN) en el certificado: tls-remote "/C=MX/ST=Distrito_Federal/L=Mexico/O=Computacion_Grafica_de_Mexico/OU=Seguridad/CN=vpnserver.intracompugraf.info/emailAddress=vpnadmin@e-compugraf.c # Cifrado criptogrfico que usar OpenVPN. # NOTE: Esta misma configuracin debe de ser usada # en el servidor OpenVPN. cipher BF-CBC # Blowfish 128 bits (predeterminado) ;cipher AES-128-CBC # AES 128 bits # Habilitanto compresin en el tunnel VPN # NOTE: esta misma configuracin debe ser usada # en el servidor OpenVPN. comp-lzo # Nivel del severidad para logs de OpenVPN verb 3 # Repeticin silenciosa de mensajes de log. Por lo menos 20 mensajes # consecutivos de la misma categora de mensaje sern # registrado en en log. ;mute 20

Usando el servicio DNS Dinamico de DynDNS con el cliente Dinamico ddclient


Instalando el cliente DNS Dinamico ddclient, el programa ddclient nos ayudar a usar el servicio DynDNS para la actualizacin automtica de la direccin IP publica, esto es util cuando tenemos una conexin a Internet con direccin IP dinamica.

67 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...


El primer paso para usar el servicio En Ubuntu puede usar apt-get:
root@vpn-matriz:~# apt-get install ddclient

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Si utiliza Ubuntu debe de congurar ddclient para que corra como demonio, al correr como demonio se puede congurar el intervalo de tiempo entre actualizaciones, por ejemplo, en el archivo /etc/default/ddclient congurare los siguientes parametros:
# Set to "true" if ddclient should run in daemon mode run_daemon="true" # Set the time interval between the updates of the dynamic DNS name in seconds. # This option only takes effect if the ddclient runs in daemon mode. daemon_interval="300"

Congure ddclient usando el archivo de conguracin /etc/ddclient.conf, por ejemplo: Ejemplo de conguracin para ddclient:
# # # # # # Configuration file for ddclient generated by debconf Configuracin para que la revision de la IP la haga por medio de la pagina web de dyndns. Util cuando la conexion es a travs de un router o no tiene una direccin IP publica. /etc/ddclient.conf

pid=/var/run/ddclient.pid syslog=yes protocol=dyndns2 use=web, web=checkip.dyndns.org/, web-skip='IP Address' server=members.dyndns.org login=USUARIO_DYNDNS password='PASSWORD_DYNDNS' misubdominio.dyndns.org

Apndice A. Historial de Revisiones


Historial de revisiones Revisin 0.01 Revisin 0.10 Revisin 0.20 Revisin 0.30 Revisin 0.40 Revisin 0.42 Revisin 0.44 Se extendio la seccin del cliente para GNU/Linux Revisin 0.50 Revisin 0.60 2010-02-12 2010-02-12 Jorge Medina Jorge Medina Agregue contenido a la seccin de revocacion de certicados para clientes VPN Agregue tip para ejecutar automaticamente el cliente OpenVPN GUI en windows...., Cambie los ejemplos de actualizacion automatica de DNS en cliente vpn, Actualice un poco la seccion para crear certicados para los clietnes VPN Revisin 0.70 2010-04-11 Jorge Medina Se actualiza el capitulo de instalacin del cliente OpenVPN, se incluyen los requisitos de sistema para el cliente en GNU/Linux y MS Windows XP Vistas y 7, informacin sobre el directorio de conguraciones para GNU/Linux y MS Windows, como controlar el servicio OpenVPN en , GNU/Linux, Conectarse a la VPN desde MS Windows usando OpenVPN GUI, incluyendo tips para Windows Vista y 7 referentes a permiso de UAC, resolucin de problemas comunes. Revisin 0.80 2010-04-11 Jorge Medina Se actualiza el capitulo de instalacin del servidor OpenVPN, se incluyen los requisitos de sistema para el servidor en GNU/Linux, informacin sobre el directorio de conguraciones para GNU/Linux, como controlar el servicio OpenVPN en GNU/Linux. Revisin 0.82 Revisin 0.90 2010-04-11 2010-04-11 Jorge Medina Jorge Medina Actualizacin del capitulo de la consola de administracin de OpenVPN, incluye como habilitarla y uso de comandos basicos. Se agrego el capitulo informacin de los metodos de autenticacin de OpenVPN, se agrega informacin bsica de los metodos basados en llaves estaticas y RSA. Revisin 0.91 2010-04-11 Jorge Medina 2009-02-02 2009-02-22 2009-02-23 2009-02-23 2009-02-23 2009-07-31 2009-07-31 Jorge Medina Jorge Medina Jorge Medina Jorge Medina Jorge Medina Jorge Medina Jorge Medina

Documento Inicial, incluye la estructura del documento y contenido para los capitulos iniciales. Se completaro la seccin de creacion de tuneles punto a punto tanto con llave estatica como por certicados. Se agrego capitulo para reforzar la seguridad de OpenVPN Se agregaron las secciones: Autenticacin con usuario y contrasea, Llaves privadas protegidas por contrasea Se agreg capitulo para la instalacin del cliente OpenVPN, con la seccin para la instalacin del cliente en GNU/Linux y Windows XP Se ordeno como procedimiento la instalacion del cliente de windows y se agregaron explicaciones incluyendo screenshots

68 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Actualice el Resumen del documento, agregue la informacin de la resea de OpenVPN y sus caracteristicas, junto con un historial de cambios signicativos en el desarrollo de OpenVPN. Revisin 0.92 2010-06-23 Jorge Medina Cambios en titulo de capitulo y secciones vpn site-to-site. Se agregaron los objetivos del capitulo. Re organizacion de archivos de conguracion. Informacin para conexiones client-to-client. Nuevas referencias web. Se re ordenaron los requerimientos, instalacin y ejecucin, ms referencias. Mas informacin para preparar requerimientos de cliente, servidor y red. Correcciones generales en ejemplos y uso de easy-rsa para revocar certicados, ms referencias. Referencia a manual de la interfaz de administracion. Movi esta informacin al capitulo de introduccin a OpenVPN. Agregue prefacio.xml y quite el de los mtodos de autenticacin. Agregue seccin de los mtodos de autenticacin de openvpn a capitulo intro a openvpn Revisin 0.93 Actualizaciones en capitulo vpn punto-a-punto Cambios en titulo de capitulo y secciones. Re organizacion de archivos de conguracion. Correcciones en ejemplos, mas explicaciones. Nuevas referencias web. Agregue seccin de los mtodos de autenticacin de openvpn. Actualizacion en archivos de conguracion y mas explicaciones. Nueva seccin para asignar IPs estticas para multi-clientes. Ms informacin de envio de opciones DHCP a clientes. Mas referencias. Actualizaciones en conguraciones para usar plugin pam auth. Actualizacion en introduccion de conguracion CA, revision ejemplos y mas referencias. 2010-06-24 Jorge Medina

Apndice B. Licencia de Documentacin Libre de GNU


Versin 1.2, Noviembre 2002
Tabla de contenidos PREMBULO APLICABILIDAD Y DEFINICIONES COPIA LITERAL COPIADO EN CANTIDAD MODIFICACIONES COMBINACIN DE DOCUMENTOS COLECCIONES DE DOCUMENTOS AGREGACIN CON TRABAJOS INDEPENDIENTES TRADUCCIN TERMINACIN REVISIONES FUTURAS DE ESTA LICENCIA ADENDA: Cmo usar esta Licencia en sus documentos This is an unocial translation of the GNU Free Documentation License into Spanish. It was not published by the Free Software Foundation, and does not legally state the distribution terms for documentation that uses the GNU FDL -- only the original English text of the GNU FDL does that. However, we hope that this translation will help Spanish speakers understand the GNU FDL better. sta es una traduccin no ocial de la GNU Free Document License a Espaol (Castellano). No ha sido publicada por la Free Software Foundation y no establece legalmente los trminos de distribucin para trabajos que usen la GFDL (slo el texto de la versin original en Ingls de la GFDL lo hace). Sin embargo, esperamos que esta traduccin ayude los hispanohablantes a entender mejor la GFDL. La versin original de la GFDL esta disponible en la Free Software Foundation. Esta traduccin est basada en una de la versin 1.1 de Igor Tmara y Pablo Reyes. Sin embargo la responsabilidad de su interpretacin es de Joaqun Seoane. Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. Se permite la copia y distribucin de copias literales de este documento de licencia, pero no se permiten cambios [1].

PREMBULO
El propsito de esta Licencia es permitir que un manual, libro de texto, u otro documento escrito sea libre en el sentido de libertad: asegurar a todo el mundo la libertad efectiva de copiarlo y redistribuirlo, con o sin modicaciones, de manera comercial o no. En segundo trmino, esta Licencia proporciona al autor y al editor[2] una manera de obtener reconocimiento por su trabajo, sin que se le considere responsable de las modicaciones realizadas por otros. Esta Licencia es de tipo copyleft, lo que signica que los trabajos derivados del documento deben a su vez ser libres en el mismo sentido. Complementa la Licencia Pblica General de GNU, que es una licencia tipo copyleft diseada para el software libre. Hemos diseado esta Licencia para usarla en manuales de software libre, ya que el software libre necesita documentacin libre: un programa

69 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

libre debe venir con manuales que ofrezcan la mismas libertades que el software. Pero esta licencia no se limita a manuales de software; puede usarse para cualquier texto, sin tener en cuenta su temtica o si se publica como libro impreso o no. Recomendamos esta licencia principalmente para trabajos cuyo n sea instructivo o de referencia.

APLICABILIDAD Y DEFINICIONES
Esta Licencia se aplica a cualquier manual u otro trabajo, en cualquier soporte, que contenga una nota del propietario de los derechos de autor que indique que puede ser distribuido bajo los trminos de esta Licencia. Tal nota garantiza en cualquier lugar del mundo, sin pago de derechos y sin lmite de tiempo, el uso de dicho trabajo segn las condiciones aqu estipuladas. En adelante la palabra Documento se referir a cualquiera de dichos manuales o trabajos. Cualquier persona es un licenciatario y ser referido como Usted. Usted acepta la licencia si copia. modica o distribuye el trabajo de cualquier modo que requiera permiso segn la ley de propiedad intelectual. Una Versin Modicada del Documento signica cualquier trabajo que contenga el Documento o una porcin del mismo, ya sea una copia literal o con modicaciones y/o traducciones a otro idioma. Una Seccin Secundaria es un apndice con ttulo o una seccin preliminar del Documento que trata exclusivamente de la relacin entre los autores o editores y el tema general del Documento (o temas relacionados) pero que no contiene nada que entre directamente en dicho tema general (por ejemplo, si el Documento es en parte un texto de matemticas, una Seccin Secundaria puede no explicar nada de matemticas). La relacin puede ser una conexin histrica con el tema o temas relacionados, o una opinin legal, comercial, losca, tica o poltica acerca de ellos. Las Secciones Invariantes son ciertas Secciones Secundarias cuyos ttulos son designados como Secciones Invariantes en la nota que indica que el documento es liberado bajo esta Licencia. Si una seccin no entra en la denicin de Secundaria, no puede designarse como Invariante. El documento puede no tener Secciones Invariantes. Si el Documento no identica las Secciones Invariantes, es que no las tiene. Los Textos de Cubierta son ciertos pasajes cortos de texto que se listan como Textos de Cubierta Delantera o Textos de Cubierta Trasera en la nota que indica que el documento es liberado bajo esta Licencia. Un Texto de Cubierta Delantera puede tener como mucho 5 palabras, y uno de Cubierta Trasera puede tener hasta 25 palabras. Una copia Transparente del Documento, signica una copia para lectura en mquina, representada en un formato cuya especicacin est disponible al pblico en general, apto para que los contenidos puedan ser vistos y editados directamente con editores de texto genricos o (para imgenes compuestas por puntos) con programas genricos de manipulacin de imgenes o (para dibujos) con algn editor de dibujos ampliamente disponible, y que sea adecuado como entrada para formateadores de texto o para su traduccin automtica a formatos adecuados para formateadores de texto. Una copia hecha en un formato denido como Transparente, pero cuyo marcaje o ausencia de l haya sido diseado para impedir o dicultar modicaciones posteriores por parte de los lectores no es Transparente. Un formato de imagen no es Transparente si se usa para una cantidad de texto sustancial. Una copia que no es Transparente se denomina Opaca. Como ejemplos de formatos adecuados para copias Transparentes estn ASCII puro sin marcaje, formato de entrada de Texinfo, formato de entrada de LaTeX, SGML o XML usando una DTD disponible pblicamente, y HTML, PostScript o PDF simples, que sigan los estndares y diseados para que los modiquen personas. Ejemplos de formatos de imagen transparentes son PNG, XCF y JPG. Los formatos Opacos incluyen formatos propietarios que pueden ser ledos y editados nicamente en procesadores de palabras propietarios, SGML o XML para los cules las DTD y/o herramientas de procesamiento no estn ampliamente disponibles, y HTML, PostScript o PDF generados por algunos procesadores de palabras slo como salida. La Portada signica, en un libro impreso, la pgina de ttulo, ms las pginas siguientes que sean necesarias para mantener legiblemente el material que esta Licencia requiere en la portada. Para trabajos en formatos que no tienen pgina de portada como tal, Portada signica el texto cercano a la aparicin ms prominente del ttulo del trabajo, precediendo el comienzo del cuerpo del texto. Una seccin Titulada XYZ signica una parte del Documento cuyo ttulo es precisamente XYZ o contiene XYZ entre parntesis, a continuacin de texto que traduce XYZ a otro idioma (aqu XYZ se reere a nombres de seccin especcos mencionados ms abajo, como Agradecimientos, Dedicatorias , Aprobaciones o Historia. Conservar el Ttulo de tal seccin cuando se modica el Documento signica que permanece una seccin Titulada XYZ segn esta denicin[3] . El Documento puede incluir Limitaciones de Garanta cercanas a la nota donde se declara que al Documento se le aplica esta Licencia. Se considera que estas Limitaciones de Garanta estn incluidas, por referencia, en la Licencia, pero slo en cuanto a limitaciones de garanta: cualquier otra implicacin que estas Limitaciones de Garanta puedan tener es nula y no tiene efecto en el signicado de esta Licencia.

[3]

En sentido estricto esta licencia parece exigir que los ttulos sean exactamente Acknowledgements, Dedications, Endorsements e History, en ingls.

COPIA LITERAL
Usted puede copiar y distribuir el Documento en cualquier soporte, sea en forma comercial o no, siempre y cuando esta Licencia, las notas de copyright y la nota que indica que esta Licencia se aplica al Documento se reproduzcan en todas las copias y que usted no aada ninguna otra condicin a las expuestas en esta Licencia. Usted no puede usar medidas tcnicas para obstruir o controlar la lectura o copia posterior de las copias que usted haga o distribuya. Sin embargo, usted puede aceptar compensacin a cambio de las copias. Si distribuye un nmero sucientemente grande de copias tambin deber seguir las condiciones de la seccin 3. Usted tambin puede prestar copias, bajo las mismas condiciones establecidas anteriormente, y puede exhibir copias pblicamente.

COPIADO EN CANTIDAD
Si publica copias impresas del Documento (o copias en soportes que tengan normalmente cubiertas impresas) que sobrepasen las 100, y la nota de licencia del Documento exige Textos de Cubierta, debe incluir las copias con cubiertas que lleven en forma clara y legible todos esos Textos de Cubierta: Textos de Cubierta Delantera en la cubierta delantera y Textos de Cubierta Trasera en la cubierta trasera. Ambas cubiertas deben identicarlo a Usted clara y legiblemente como editor de tales copias. La cubierta debe mostrar el ttulo completo con todas las palabras igualmente prominentes y visibles. Adems puede aadir otro material en las cubiertas. Las copias con cambios limitados a las cubiertas, siempre que conserven el ttulo del Documento y satisfagan estas condiciones, pueden considerarse como copias literales.

70 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Si los textos requeridos para la cubierta son muy voluminosos para que ajusten legiblemente, debe colocar los primeros (tantos como sea razonable colocar) en la verdadera cubierta y situar el resto en pginas adyacentes. Si Usted publica o distribuye copias Opacas del Documento cuya cantidad exceda las 100, debe incluir una copia Transparente, que pueda ser leda por una mquina, con cada copia Opaca, o bien mostrar, en cada copia Opaca, una direccin de red donde cualquier usuario de la misma tenga acceso por medio de protocolos pblicos y estandarizados a una copia Transparente del Documento completa, sin material adicional. Si usted hace uso de la ltima opcin, deber tomar las medidas necesarias, cuando comience la distribucin de las copias Opacas en cantidad, para asegurar que esta copia Transparente permanecer accesible en el sitio establecido por lo menos un ao despus de la ltima vez que distribuya una copia Opaca de esa edicin al pblico (directamente o a travs de sus agentes o distribuidores). Se solicita, aunque no es requisito, que se ponga en contacto con los autores del Documento antes de redistribuir gran nmero de copias, para darles la oportunidad de que le proporcionen una versin actualizada del Documento.

MODIFICACIONES
Puede copiar y distribuir una Versin Modicada del Documento bajo las condiciones de las secciones 2 y 3 anteriores, siempre que usted libere la Versin Modicada bajo esta misma Licencia, con la Versin Modicada haciendo el rol del Documento, por lo tanto dando licencia de distribucin y modicacin de la Versin Modicada a quienquiera posea una copia de la misma. Adems, debe hacer lo siguiente en la Versin Modicada: A. Usar en la Portada (y en las cubiertas, si hay alguna) un ttulo distinto al del Documento y de sus versiones anteriores (que deberan, si hay alguna, estar listadas en la seccin de Historia del Documento). Puede usar el mismo ttulo de versiones anteriores al original siempre y cuando quien las public originalmente otorgue permiso. B. Listar en la Portada, como autores, una o ms personas o entidades responsables de la autora de las modicaciones de la Versin Modicada, junto con por lo menos cinco de los autores principales del Documento (todos sus autores principales, si hay menos de cinco), a menos que le eximan de tal requisito. C. Mostrar en la Portada como editor el nombre del editor de la Versin Modicada. D. Conservar todas las notas de copyright del Documento. E. Aadir una nota de copyright apropiada a sus modicaciones, adyacente a las otras notas de copyright. F. Incluir, inmediatamente despus de las notas de copyright, una nota de licencia dando el permiso para usar la Versin Modicada bajo los trminos de esta Licencia, como se muestra en la Adenda al nal de este documento. G. Conservar en esa nota de licencia el listado completo de las Secciones Invariantes y de los Textos de Cubierta que sean requeridos en la nota de Licencia del Documento original. H. Incluir una copia sin modicacin de esta Licencia. I. Conservar la seccin Titulada Historia, conservar su Ttulo y aadirle un elemento que declare al menos el ttulo, el ao, los nuevos autores y el editor de la Versin Modicada, tal como guran en la Portada. Si no hay una seccin Titulada Historia en el Documento, crear una estableciendo el ttulo, el ao, los autores y el editor del Documento, tal como guran en su Portada, aadiendo adems un elemento describiendo la Versin Modicada, como se estableci en la oracin anterior. J. Conservar la direccin en red, si la hay, dada en el Documento para el acceso pblico a una copia Transparente del mismo, as como las otras direcciones de red dadas en el Documento para versiones anteriores en las que estuviese basado. Pueden ubicarse en la seccin Historia. Se puede omitir la ubicacin en red de un trabajo que haya sido publicado por lo menos cuatro aos antes que el Documento mismo, o si el editor original de dicha versin da permiso. K. En cualquier seccin Titulada Agradecimientos o Dedicatorias, Conservar el Ttulo de la seccin y conservar en ella toda la sustancia y el tono de los agradecimientos y/o dedicatorias incluidas por cada contribuyente. L. Conservar todas las Secciones Invariantes del Documento, sin alterar su texto ni sus ttulos. Nmeros de seccin o el equivalente no son considerados parte de los ttulos de la seccin. M. Borrar cualquier seccin titulada Aprobaciones. Tales secciones no pueden estar incluidas en las Versiones Modicadas. N. No cambiar el ttulo de ninguna seccin existente a Aprobaciones ni a uno que entre en conicto con el de alguna Seccin Invariante. O. Conservar todas las Limitaciones de Garanta. Si la Versin Modicada incluye secciones o apndices nuevos que caliquen como Secciones Secundarias y contienen material no copiado del Documento, puede opcionalmente designar algunas o todas esas secciones como invariantes. Para hacerlo, aada sus ttulos a la lista de Secciones Invariantes en la nota de licencia de la Versin Modicada. Tales ttulos deben ser distintos de cualquier otro ttulo de seccin. Puede aadir una seccin titulada Aprobaciones, siempre que contenga nicamente aprobaciones de su Versin Modicada por otras fuentes --por ejemplo, observaciones de peritos o que el texto ha sido aprobado por una organizacin como la denicin ocial de un estndar. Puede aadir un pasaje de hasta cinco palabras como Texto de Cubierta Delantera y un pasaje de hasta 25 palabras como Texto de Cubierta Trasera en la Versin Modicada. Una entidad solo puede aadir (o hacer que se aada) un pasaje al Texto de Cubierta Delantera y uno al de Cubierta Trasera. Si el Documento ya incluye un textos de cubiertas aadidos previamente por usted o por la misma entidad que usted representa, usted no puede aadir otro; pero puede reemplazar el anterior, con permiso explcito del editor que agreg el texto anterior. Con esta Licencia ni los autores ni los editores del Documento dan permiso para usar sus nombres para publicidad ni para asegurar o implicar aprobacin de cualquier Versin Modicada.

COMBINACIN DE DOCUMENTOS
Usted puede combinar el Documento con otros documentos liberados bajo esta Licencia, bajo los trminos denidos en la seccin 4 anterior para versiones modicadas, siempre que incluya en la combinacin todas las Secciones Invariantes de todos los documentos originales, sin modicar, listadas todas como Secciones Invariantes del trabajo combinado en su nota de licencia. As mismo debe incluir la Limitacin de Garanta. El trabajo combinado necesita contener solamente una copia de esta Licencia, y puede reemplazar varias Secciones Invariantes idnticas por una sola copia. Si hay varias Secciones Invariantes con el mismo nombre pero con contenidos diferentes, haga el ttulo de cada una de estas secciones nico aadindole al nal del mismo, entre parntesis, el nombre del autor o editor original de esa seccin, si es conocido, o si no, un nmero nico. Haga el mismo ajuste a los ttulos de seccin en la lista de Secciones Invariantes de la nota de licencia del trabajo combinado. En la combinacin, debe combinar cualquier seccin Titulada Historia de los documentos originales, formando una seccin Titulada Historia; de la misma forma combine cualquier seccin Titulada Agradecimientos, y cualquier seccin Titulada Dedicatorias. Debe borrar todas las secciones tituladas Aprobaciones.

COLECCIONES DE DOCUMENTOS
71 of 75 06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Puede hacer una coleccin que conste del Documento y de otros documentos liberados bajo esta Licencia, y reemplazar las copias individuales de esta Licencia en todos los documentos por una sola copia que est incluida en la coleccin, siempre que siga las reglas de esta Licencia para cada copia literal de cada uno de los documentos en cualquiera de los dems aspectos. Puede extraer un solo documento de una de tales colecciones y distribuirlo individualmente bajo esta Licencia, siempre que inserte una copia de esta Licencia en el documento extrado, y siga esta Licencia en todos los dems aspectos relativos a la copia literal de dicho documento.

AGREGACIN CON TRABAJOS INDEPENDIENTES


Una recopilacin que conste del Documento o sus derivados y de otros documentos o trabajos separados e independientes, en cualquier soporte de almacenamiento o distribucin, se denomina un agregado si el copyright resultante de la compilacin no se usa para limitar los derechos de los usuarios de la misma ms all de lo que los de los trabajos individuales permiten. Cuando el Documento se incluye en un agregado, esta Licencia no se aplica a otros trabajos del agregado que no sean en s mismos derivados del Documento. Si el requisito de la seccin 3 sobre el Texto de Cubierta es aplicable a estas copias del Documento y el Documento es menor que la mitad del agregado entero, los Textos de Cubierta del Documento pueden colocarse en cubiertas que enmarquen solamente el Documento dentro del agregado, o el equivalente electrnico de las cubiertas si el documento est en forma electrnica. En caso contrario deben aparecer en cubiertas impresas enmarcando todo el agregado.

TRADUCCIN
La Traduccin es considerada como un tipo de modicacin, por lo que usted puede distribuir traducciones del Documento bajo los trminos de la seccin 4. El reemplazo las Secciones Invariantes con traducciones requiere permiso especial de los dueos de derecho de autor, pero usted puede aadir traducciones de algunas o todas las Secciones Invariantes a las versiones originales de las mismas. Puede incluir una traduccin de esta Licencia, de todas las notas de licencia del documento, as como de las Limitaciones de Garanta, siempre que incluya tambin la versin en Ingls de esta Licencia y las versiones originales de las notas de licencia y Limitaciones de Garanta. En caso de desacuerdo entre la traduccin y la versin original en Ingls de esta Licencia, la nota de licencia o la limitacin de garanta, la versin original en Ingls prevalecer. Si una seccin del Documento est Titulada Agradecimientos, Dedicatorias o Historia el requisito (seccin 4) de Conservar su Ttulo (Seccin 1) requerir, tpicamente, cambiar su ttulo.

TERMINACIN
Usted no puede copiar, modicar, sublicenciar o distribuir el Documento salvo por lo permitido expresamente por esta Licencia. Cualquier otro intento de copia, modicacin, sublicenciamiento o distribucin del Documento es nulo, y dar por terminados automticamente sus derechos bajo esa Licencia. Sin embargo, los terceros que hayan recibido copias, o derechos, de usted bajo esta Licencia no vern terminadas sus licencias, siempre que permanezcan en total conformidad con ella.

REVISIONES FUTURAS DE ESTA LICENCIA


De vez en cuando la Free Software Foundation puede publicar versiones nuevas y revisadas de la Licencia de Documentacin Libre GNU. Tales versiones nuevas sern similares en espritu a la presente versin, pero pueden diferir en detalles para solucionar nuevos problemas o intereses. Vea http://www.gnu.org/copyleft/. Cada versin de la Licencia tiene un nmero de versin que la distingue. Si el Documento especica que se aplica una versin numerada en particular de esta licencia o cualquier versin posterior, usted tiene la opcin de seguir los trminos y condiciones de la versin especicada o cualquiera posterior que haya sido publicada (no como borrador) por la Free Software Foundation. Si el Documento no especica un nmero de versin de esta Licencia, puede escoger cualquier versin que haya sido publicada (no como borrador) por la Free Software Foundation.

ADENDA: Cmo usar esta Licencia en sus documentos


Para usar esta licencia en un documento que usted haya escrito, incluya una copia de la Licencia en el documento y ponga el siguiente copyright y nota de licencia justo despus de la pgina de ttulo: Copyright (c) AO SU NOMBRE. Se concede permiso para copiar, distribuir y/o modicar este documento bajo los trminos de la Licencia de Documentacin Libre de GNU, Versin 1.2 o cualquier otra versin posterior publicada por la Free Software Foundation; sin Secciones Invariantes ni Textos de Cubierta Delantera ni Textos de Cubierta Trasera. Una copia de la licencia est incluida en la seccin titulada GNU Free Documentation License. Si tiene Secciones Invariantes, Textos de Cubierta Delantera y Textos de Cubierta Trasera, reemplace la frase sin ... Trasera por esto: siendo las Secciones Invariantes LISTE SUS TTULOS, siendo los Textos de Cubierta Delantera LISTAR, y siendo sus Textos de Cubierta Trasera LISTAR. Si tiene Secciones Invariantes sin Textos de Cubierta o cualquier otra combinacin de los tres, mezcle ambas alternativas para adaptarse a la situacin. Si su documento contiene ejemplos de cdigo de programa no triviales, recomendamos liberar estos ejemplos en paralelo bajo la licencia de software libre que usted elija, como la Licencia Pblica General de GNU (GNU General Public License), para permitir su uso en software libre.

[1] [2]

sta es la traduccin del Copyright de la Licencia, no es el Copyright de esta traduccin no autorizada.

La licencia original dice publisher, que es, estrictamente, quien publica, diferente de editor, que es ms bien quien prepara un texto para publicar. En castellano editor se usa para ambas cosas.

Apndice C. GNU Free Documentation License

72 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

0. PREAMBLE
The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the eective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

1. APPLICABILITY AND DEFINITIONS


This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A "Modied Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not t the above denition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specication is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent le format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modication by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modication. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specic section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this denition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no eect on the meaning of this License.

2. VERBATIM COPYING
You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies.

3. COPYING IN QUANTITY
If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts:

73 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to t legibly, you should put the rst ones listed (as many as t reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

4. MODIFICATIONS
You may copy and distribute a Modied Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modied Version under precisely this License, with the Modied Version lling the role of the Document, thus licensing distribution and modication of the Modied Version to whoever possesses a copy of it. In addition, you must do these things in the Modied Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modications in the Modied Version, together with at least ve of the principal authors of the Document (all of its principal authors, if it has fewer than ve), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modied Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modied Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modied Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modied Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modied Version. N. Do not retitle any existing section to be Entitled "Endorsements" or to conict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. If the Modied Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modied Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modied Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative denition of a standard. You may add a passage of up to ve words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modied Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modied Version.

5. COMBINING DOCUMENTS
You may combine the Document with other documents released under this License, under the terms dened in section 4 above for modied versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodied, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but dierent contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History";

74 of 75

06/01/12 22:40

Creacin de Redes Privadas Virtuales en GNU/Linux con...

http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".

6. COLLECTIONS OF DOCUMENTS
You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

7. AGGREGATION WITH INDEPENDENT WORKS


A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

8. TRANSLATION
Translation is considered a kind of modication, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

9. TERMINATION
You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

10. FUTURE REVISIONS OF THIS LICENSE


The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may dier in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document species that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specied version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.

ADDENDUM: How to use this License for your documents


To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (C) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.

75 of 75

06/01/12 22:40

Anda mungkin juga menyukai