tutorial openvpn

75
Creación de Redes Privadas Virtuales en GNU/Linux con OpenVPN Jorge Armando Medina Computación Gráfica de México. Documentación Técnica < [email protected]> Alejandro Gabriel Sánchez Martínez Computación Gráfica de México. Documentación Técnica < [email protected]> Copyright © 2009, 2010, 2011 Jorge Armando Medina, Alejandro Sánchez Martínez Se otorga permiso para copiar, distribuir y/o modificar éste documento bajo los términos de la Licencia de Documentación Libre GNU GFDL, Versión 1.2 o cualquier otra posterior publicada por la Fundación 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 final del ibro, tambien una traducción libre no oficial al español de la licencia GFDL y referencias de como utilizarla en sus proyectos, si por alguna razón se tuviera que utilizar por cuestiones legales la licencia GFDL la unica valida es la versión en inlges de ella. 2011/06/25 Resumen Este documento describe los procedimientos para la creación de Redes Privadas Virtuales basadas en SSL/TLS usando software y tecnologías libres, la configuraciones serán hechas en Ubuntu Server como sistema operativo para el Servidor VPN con clientes GNU/Linux y MS Windows, el software para la creación de tuneles VPN es OpenVPN el cual es software libre liberado bajo la licencía GNU GPL versión 2, es bastante robusto y flexible, se verán los procedimientos para la creación de tuneles VPN en modo Punto a Punto o host-to-host, creación de tuneles VPN para conectar multiples sitios remotos, también conocida como VPN site-to-site, configuraciónes para clientes móviles RoadWarriors, veremos diferentes métodos para la autenticación de la VPN, tanto mecanismos de autenticación basados en Llaves secretas pre compartidas y autenticación por certificados x.509, también conocidos como certificados SSL usando una Infraestructura de Llave Pública PKI, procedimientos para incrementar la seguridad de la VPN, y por último se incluyen procedimientos de administración y operación del las VPN. Tabla de contenidos Prefacio Convenciones del Documento Convenciones Tipográficas Convenciones del documento Notas y Advertencias ¡Necesitamos sus comentarios! 1. Introducción a Tecnologías VPN 2. Esquemas de comunicación de las redes VPN 3. Introducción a OpenVPN Caracteristicas de OpenVPN Los métodos de autenticación de OpenVPN Autenticación basada en llaves estáticas pre compartidas Autenticación basada en certificados X.509 Historial de cambios significativos en OpenVPN OpenVPN 2.1 versión estable liberada Recursos adicionales Sitios web 4. Preparando los requerimientos de instalación Informacion previa del servidor OpenVPN GNU/Linux Información previa de los clientes OpenVPN Información 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. Configuración de una Autoridad Certificadora con OpenSSL para la administración de llaves RSA Generando la llave privada y certificado raíz para la Autoridad Certificadora Generando la llave privada y certificado para el servidor OpenVPN Generando las llaves privadas y certificados para los clientes VPN Recursos adicionales Sitios web Paginas de manual 6. Instalación de OpenVPN en el servidor GNU/Linux Objetivos Requisitos de sistema Instalación de OpenVPN en el servidor GNU/Linux Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu... 1 of 75 06/01/12 22:40

Upload: cosme-roque

Post on 26-Jul-2015

687 views

Category:

Documents


8 download

TRANSCRIPT

Page 1: Tutorial Openvpn

Creación de Redes Privadas Virtuales en GNU/Linux con OpenVPN

Jorge Armando Medina

Computación Gráfica de México.Documentación Técnica

<[email protected]>

Alejandro Gabriel Sánchez Martínez

Computación Gráfica de México.Documentación Técnica

<[email protected]>

Copyright © 2009, 2010, 2011 Jorge Armando Medina, Alejandro Sánchez Martínez

Se otorga permiso para copiar, distribuir y/o modificar éste documento bajo los términos de la Licencia de Documentación Libre GNU GFDL,Versión 1.2 o cualquier otra posterior publicada por la Fundación de Software Libre; sin secciones invariantes, sin textos en portada ycontraportada. Una copia de la licencia en ingles la puede encontrar en los apendices al final del ibro, tambien una traducción libre no oficial alespañol de la licencia GFDL y referencias de como utilizarla en sus proyectos, si por alguna razón se tuviera que utilizar por cuestiones legales lalicencia GFDL la unica valida es la versión en inlges de ella.

2011/06/25

Resumen

Este documento describe los procedimientos para la creación de Redes Privadas Virtuales basadas en SSL/TLS usando software y tecnologíaslibres, la configuraciones serán hechas en Ubuntu Server como sistema operativo para el Servidor VPN con clientes GNU/Linux y MS Windows, elsoftware para la creación de tuneles VPN es OpenVPN el cual es software libre liberado bajo la licencía GNU GPL versión 2, es bastante robusto yflexible, se verán los procedimientos para la creación de tuneles VPN en modo Punto a Punto o host-to-host, creación de tuneles VPN paraconectar multiples sitios remotos, también conocida como VPN site-to-site, configuraciónes para clientes móviles RoadWarriors, veremosdiferentes métodos para la autenticación de la VPN, tanto mecanismos de autenticación basados en Llaves secretas pre compartidas yautenticación por certificados x.509, también conocidos como certificados SSL usando una Infraestructura de Llave Pública PKI, procedimientospara incrementar la seguridad de la VPN, y por último se incluyen procedimientos de administración y operación del las VPN.

Tabla de contenidos

PrefacioConvenciones del Documento

Convenciones TipográficasConvenciones del documentoNotas y Advertencias

¡Necesitamos sus comentarios!1. Introducción a Tecnologías VPN2. Esquemas de comunicación de las redes VPN3. Introducción a OpenVPN

Caracteristicas de OpenVPNLos métodos de autenticación de OpenVPN

Autenticación basada en llaves estáticas pre compartidasAutenticación basada en certificados X.509

Historial de cambios significativos en OpenVPNOpenVPN 2.1 versión estable liberada

Recursos adicionalesSitios web

4. Preparando los requerimientos de instalaciónInformacion previa del servidor OpenVPN GNU/LinuxInformación previa de los clientes OpenVPNInformación sobre la la conectividad del servidor OpenVPNRequerimientos de FirewallEsquemas de enrutamiento para conexiones VPN

Escenario 1: OpenVPN en el mismo Firewall/GatewayEscenario 2: OpenVPN en un equipo distinto al Firewall/Gateway

5. Configuración de una Autoridad Certificadora con OpenSSL para la administración de llaves RSAGenerando la llave privada y certificado raíz para la Autoridad CertificadoraGenerando la llave privada y certificado para el servidor OpenVPNGenerando las llaves privadas y certificados para los clientes VPNRecursos adicionales

Sitios webPaginas de manual

6. Instalación de OpenVPN en el servidor GNU/LinuxObjetivosRequisitos de sistemaInstalación de OpenVPN en el servidor GNU/Linux

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

1 of 75 06/01/12 22:40

Page 2: Tutorial Openvpn

Controlando la ejecución de OpenVPNRecursos adicionales

Sitios webPaginas de manual

7. Instalación del Cliente OpenVPNRequisitos de sistemaInstalación de OpenVPN en el cliente GNU/Linux

Requisitos de sistemaInstalación de OpenVPN en el cliente GNU/LinuxControlando la ejecución de OpenVPN

Instalación del cliente OpenVPN en WindowsRequisitos de sistema para clientes MS WindowsInstalando el cliente OpenVPN GUI en Windows XPInstalando el cliente OpenVPN GUI en Windows Vista y Windows 7El directorio de configuración del cliente OpenVPN GUI en WindowsEjecución de OpenVPN GUI en WindowsResolución de problemas para Clientes OpenVPN en Windows

La conexión a la VPN no es establecida, en el log de OpenVPN aparece el mensaje "All TAP-Win32 adapters on this system arecurrently in use"

Recursos AdicionalesSitios webPaginas de manual

8. Creando conexiones VPN punto a punto con OpenVPNInformación previa y requerimientosConexiones VPN punto a punto usando el modo de autenticación basada en llaves estáticas

Configurando el servidor OpenVPN de una conexión punto a puntoConfigurando el cliente OpenVPN de una conexión punto a puntoEjecutando scripts con OpenVPN para agregar rutas

Conexiones VPN punto a punto usando el modo de autenticación basada en certificados SSL/TLSConfigurando el servidor OpenVPN de una conexión punto a puntoConfigurando el cliente OpenVPN de una conexión punto a punto

Resolución de problemas en conexiones VPN punto a punto con OpenVPNRecursos adicionales

Sitios webPaginas de manual

9. Creando conexiones VPN sitio a sitio con OpenVPNObjetivosInformación previa sobre el entorno de redConfigurando el servidor OpenVPN para la VPN sitio a sitio en la oficina MatrizConfigurando el cliente OpenVPN para la VPN sitio a sitio en la oficina remota 1Pruebas de conectividad entre VPN sitio a sitioConfigurando el cliente OpenVPN para la VPN sitio a sitio en la oficina remota 2Permitiendo comunicacion entre redes LAN remotasRecursos adicionales

Sitios webPaginas de manual

10. Configuraciones para clientes OpenVPN RoadWarriorsConfigurando el cliente OpenVPN en sistemas MS WindowsConfigurando el cliente OpenVPN en sistemas GNU/LinuxEstableciendo la conexión con el servidor OpenVPNAsignando direcciones IP estáticas para los clientes OpenVPNEnviando opciones DHCP a los clientes OpenVPNActualizando automática de los parámetros DNS en clientes GNU/LinuxRecursos adicionales

Sitios webPaginas de manual

11. Reforzando la seguridad de OpenVPNIntroducciónUsando TLS-auth para autenticación TLSUso del protocolo UDP como medida de prevención de ataquesUsando llaves RSA y de cifrado simétrico más grandesRevocando Certificados para clientes VPNPreviniendo ataques de tipo Man In The MiddleRecursos adicionales

Sitios webPaginas de manual

12. La Consola de Administración OpenVPN13. Administración avanzada de clientes y certificados

Autenticación basada en Usuario y ContraseñaLlaves privadas protegidas por contraseña

Estableciendo contraeña en Llave Privada sin protecciónEstableciendo contraseña en Llave Privada en GNU/Linux con OpenSSLEstableciendo contraeña en Llave Privada en WindowsCreando llaves privadas con contraseña

Cambiando la contraseña de una Llave privada protegidaCambiando la contraseña de una Llave Privada protegida en GNU/Linux con OpenSSLCambiando la contraseña de una Llave Privada protegida en Windows

14. Resolución de Problemas15. Apendices

El archivo de configuración /etc/openvpn/servidor.conf (Servidor OpenVPN)

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

2 of 75 06/01/12 22:40

Page 3: Tutorial Openvpn

El archivo de configuración /etc/openvpn/cliente.confUsando el servicio DNS Dinamico de DynDNS con el cliente Dinamico ddclient

A. Historial de RevisionesB. Licencia de Documentación Libre de GNU

PREÁMBULOAPLICABILIDAD Y DEFINICIONESCOPIA LITERALCOPIADO EN CANTIDADMODIFICACIONESCOMBINACIÓN DE DOCUMENTOSCOLECCIONES DE DOCUMENTOSAGREGACIÓN CON TRABAJOS INDEPENDIENTESTRADUCCIÓNTERMINACIÓNREVISIONES FUTURAS DE ESTA LICENCIAADENDA: Cómo usar esta Licencia en sus documentos

C. GNU Free Documentation License

Lista de figuras

9.1. Dos Redes Remotas

Lista de tablas

5.1. Archivos de inicialización de la CA5.2. Archivos de certificados de la CA5.3. Archivos de certificados5.4. Archivos de certificados9.1. Tabla de certificados y llaves privadas requeridos para servidor OpenVPN en Matriz9.2. Tabla de certificados y llaves privadas requeridos para servidor OpenVPN en Matriz

Prefacio

Tabla de contenidos

Convenciones del DocumentoConvenciones TipográficasConvenciones del documentoNotas y Advertencias

¡Necesitamos sus comentarios!

Convenciones del Documento

Este manual utiliza varias convenciones para resaltar algunas palabras y frases y llamar la atención sobre ciertas partes específicas deinformación.

Convenciones Tipográficas

Se utilizan cuatro convenciones tipográficas para llamar la atención sobre palabras o frases específicas. Dichas convenciones y las circunstanciasen que se aplican son las siguientes:

Negrita monoespaciado

Utilizada para resaltar la entrada del sistema, incluyendo comandos de shell, nombres de archivo y rutas. También se utiliza para resaltar teclasclaves y combinaciones de teclas.

Para ver el contenido del archivo my_next_bestselling_novel en su directorio actual de trabajo, escriba el comando catmy_next_bestselling_novel en el intérprete 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 alcontexto.

Las combinaciones de teclas se pueden distinguir de las teclas claves mediante el guión que conecta cada parte de una combinación de tecla. Porejemplo:

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 sesión de Ventanas-X.

La primera oración resalta la tecla clave determinada que se debe pulsar. La segunda resalta dos conjuntos de tres teclas claves, cada conjuntopresionado simultáneamente.

Si el código fuente es discutido, nombres de clase, métodos, funciones, nombres de variables, y valores de retorno mencionados dentro de unpárrafo serán presentados como lo anterior, en Negrita-monoespaciado. Por ejemplo:

Las clases de archivo relacionadas incluyen filename para sistema de archivos, file para archivos y dir para directorios. Cada clase tienesu propio conjunto asociado de permisos.

Proportional Bold

Esta denota palabras o frases encontradas en un sistema, incluyendo nombres de aplicación; texto de cuadro de diálogo, botones etiquetados,etiquetas de cajilla de verificación y botón de radio; títulos de menú y títulos del sub-menú. Por ejemplo:

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

3 of 75 06/01/12 22:40

Page 4: Tutorial Openvpn

Seleccionar Sistema > Preferencias > Ratón desde la barra del menú principal para lanzar Preferencias de Ratón. En la pestaña deBotones, haga clic en la cajilla ratón de mano izquierda y luego haga clic en Cerrar para cambiar el botón principal del ratón de laizquierda a la derecha (adecuando el ratón para la mano izquierda).

Para insertar un caracter especial en un archivo gedit, seleccione desde la barra del menú principal Aplicaciones > Accesorios > Mapade caracteres. Luego, desde la barra del menú elija Búsqueda > Hallar… mapa de caracteres, teclee el nombre del caracter en el campode Búsqueda y haga clic en Siguiente. El caracter buscado se resaltará en la Tabla de caracteres. Haga doble clic en este caracterresaltado para colocarlo en el campo de Texto para copiar y luego haga clic en el botón de Copiar. Ahora regrese a su documento y elijaEditar > Pegar desde la barra de menú de gedit.

El texto anterior incluye nombres de aplicación; nombres de menú de todo el sistema y elementos; nombres de menú de aplicaciones específicas ybotones 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 través de un menú y sus sub-menúes. Esto es para evitar la dificultad de seguir elmétodo 'Seleccionar Ratón desde el sub-menú Preferencias en el menú de Sistema de la barra de menú principal'.

Itálicas-negrita monoespaciado o Itálicas-negrita proporcional

Negrita monoespaciado o Negrita proporcional, la adición de itálicas indica texto reemplazable o variable. Las itálicas denotan texto que usted noescribe literalmente o texto mostrado que cambia dependiendo de la circunstancia. Por ejemplo:

Para conectar a una máquina remota utilizando ssh, teclee ssh [email protected] en un intérprete de comandos de shell. Si lamáquina remota es example.com y su nombre de usuario en esa máquina es john, teclee ssh [email protected].

El comando mount -o remount file-system remonta el sistema de archivo llamado. Por ejemplo, para volver a montar el sistema dearchivo /home, el comando es mount -o remount /home.

Para ver la versión de un paquete actualmente instalado, utilice el comando rpm -q paquete. Éste entregará el resultado siguiente:paquete-versión-lanzamiento.

Observe las palabras en itálicas- negrita sobre — nombre de usuario, domain.name, sistema de archivo, paquete, versión y lanzamiento. Cadapalabra es un marcador de posición, tanto para el texto que usted escriba al ejecutar un comando como para el texto mostrado por el sistema.

Aparte del uso estándar para presentar el título de un trabajo, las itálicas denotan el primer uso de un término nuevo e importante. Por ejemplo:

cuando el servidor Apache HTTP acepta solicitudes, envía procesos hijos o hilos para manejarlos. Este grupo de procesos hijos o hilos seconoce como un server-pool. Bajo el servidor HTTP de Apache 2.0, la responsabilidad para crear o mantener estos server-pool seresume en un grupo de módulos llamado Módulos de multi-procesamiento (MPMs). A diferencia de otros módulos, sólo un módulo delgrupo MPM puede ser cargado por el servidor HTTP de Apache.

Convenciones del documento

Dos, usualmente de varias líneas, los tipos de datos se distinguen visualmente del texto circundante.

Salida enviada a una terminal está establecida en tipo romano monoespaciado y presentada así:

books Desktop documentation drafts mss photos stuff svnbooks_tests Desktop1 downloads images notes scripts svgs

Los listados de código fuente también se establecen en romano monoespaciado, pero se presentan y resaltan de la siguiente manera:

package org.jboss.book.jca.ex1;

import javax.naming.InitialContext;

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 atención sobre la información que de otro modo se podría 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 debería tenerconsecuencias negativas, pero podría perderse de algunos trucos que pueden facilitarle las cosas.

Importante

Los cuadros de importante dan detalles de cosas que se pueden pasar por alto fácilmente: cambios de configuración únicamenteaplicables a la sesión actual, o servicios que necesitan reiniciarse antes de que se aplique una actualización. Ignorar estos

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

4 of 75 06/01/12 22:40

Page 5: Tutorial Openvpn

cuadros de importante no ocasionará pérdida de datos, pero puede causar enfado y frustración.

Advertencia

Las advertencias no deben ignorarse. Ignorarlas muy probablemente ocasionará pérdida de datos.

¡Necesitamos sus comentarios!

Si encuentra errores tipográficos en este manual, o si ha pensando en alguna manera de mejorarlo, nos gustaría escuchar lo. Por favor envíecualquier comentario o corrección a la dirección de correo: <[email protected]>.

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 documentación, trata de ser tan especifico como sea posible cuando las describa. Si ha encontrado un error,por favor incluya el número de sección y algún otro texto cercano de tal manera que podamos localizarlo facilmente.

Capítulo 1. Introducción a Tecnologías VPN

TODO: Usar información de la presentación.

Capítulo 2. Esquemas de comunicación de las redes VPN

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

Capítulo 3. Introducción a OpenVPN

Tabla de contenidos

Caracteristicas de OpenVPNLos métodos de autenticación de OpenVPN

Autenticación basada en llaves estáticas pre compartidasAutenticación basada en certificados X.509

Historial de cambios significativos en OpenVPNOpenVPN 2.1 versión estable liberada

Recursos adicionalesSitios web

OpenVPN es una solución libre para la implementación de Redes Privadas Virtuales basadas en SSL, esta liberado bajo la Licencía PúblicaGeneral GPL versión 2, incluye caracteristicas que permiten configuraciones simples para tuneles Punto a Punto, Acceso Remoto, VPNs sitio-a-sitio, seguridad para redes Inalámbricas Wi-Fi, además incluye funcionalidades de nivel empresarial para proveer balanceo de cargas, failover, ycontroles de acceso refinados. Iniciando con la premisa fundamental de que la complejidad es enemiga de la seguridad, OpenVPN ofrece unaalternativa ligera y economica a otras tecnologias VPN.

OpenVPN combina la seguridad con la facilidad de uso, el diseño ligero de OpenVPN se deshace de muchas de las complejidades que caracterizanotras implementaciones VPN. El modelo de seguridad de OpenVPN es basado en SSL, el estandar de la industria para comunicaciones seguras víael Internet. OpenVPN implementa las extensiones 2 o 3 del modelo OSI usando los protocolos SSL/TLS, soporta metodos flexibles deautenticación para los clientes basados en certificados, smart cards, y autenticación de doble factor, y permite politicas de control de acceso parausuarios o grupos en especifico usando reglas de firewall aplicadas a la interfaz virtual VPN. OpenVPN no es un proxy de aplicaciónes web y noopera a través de un navegador web.

Para una mayor introducción a OpenVPN, ve las notas de la platica de James Yonan's en el Linux Fest Northwest 2004 -- Understanding theUser-Space VPN: History, Conceptual Foundations, and Practical Usage.

Vea la siguiente sección para un lista de las caracteristicas de OpenVPN.

Caracteristicas de OpenVPN

OpenVPN es un software para la creación de VPNs basadas en SSL, la cual le permitirá conectar sus oficinas remotas de forma segura, ademáspodrá otorgar acceso remoto seguro a usuarios moviles a los servicios en su red privada LAN. Basada en estandares abiertos SSL/TLS y ensoftware libre OpenVPN ofrece las siguientes caracteristicas:

Solución VPN de clase empresarial basada en Software libre y GNU/Linux

Creación de tuneles VPN para conexiones Punto a Punto, Sitio a Sitio y usuarios móviles (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 conexiónes NAT (Network Address Translation) y direcciones IP dinamicas

Basada en los estandares de la industria SSL/TLS para comunicaciónes seguras y autenticación, usa todas las caracteristicas de OpenSSLpara el cifrado, autenticación y certificación para proteger el tráfico privado de su red mientras transita por el Internet

Usa cualquier cifrado, tamaño de llave, o digest HMAC (para el chequeo de la integridad de los datagramas) soportados por la bibliotecaOpenSSL.

Cifrado flexible permitiendo elejir entre:

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

5 of 75 06/01/12 22:40

Page 6: Tutorial Openvpn

Cifrado convencional basado en llaves estáticas pre compartidas

Cifrado asimetrico usando llaves públicas basada en certificados x509

Permite usar llaves estaticas, pre compartidas o llaves dinamicas basadas en TLS para el intercambio de llaves

Permite usar compresión del enlace en tiempo real y traffic-shapping para administrar el uso de ancho de banda

Permite el uso de plugins para extender los mecanismos de autenticación, actualmente incluye un plugin para PAM y LDAP

El servidor DHCP integrado en OpenVPN puede entregar la siguiente información de red a los clientes VPN:

Dirección IP Virtual dinamica ó estática

Dirección de servidores DNS

Sufijo DNS

Dirección de ruta del gateway predeterminado

Servidor WINS

Integración con Firewall (netfilter/iptables) para filtrar tráfico 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 implementación de la mayoría de las caracteristicas arriba descritas.

Para más información acerca de OpenVPN ver página Community Software Overview en el sitio oficial de OpenVPN. El modelo de seguridad deOpenVPN esta descrito en el documento Security Overview.

Los métodos de autenticación de OpenVPN

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

Autenticación basada en llaves estáticas pre compartidas

OpenVPN soporta cifrado convencional usando llaves secretas pre-compartidas usando el modo Static Key, las llaves estaticas son usadas tantopara la autenticación y la autorización.

El uso de llaves estaticas para la autenticación tiene sus ventajas y desventajas las cuales se listan a continuación:

Ventajas

Fácil configuración de los dos puntos de la VPN

No hay certificados,autoridades certificadoras o protocolos y negociaciones seguras complicadas. El único requerimiento es que se puedacrear un canal seguro previamente establecido para el intercambio de la llave estatica entre los dos puntos (peers) de la VPN, puede ser scpo correo con PGP.

Desventajas

Solo se puede crear un tunel punto-a-punto con el uso de llaves estaticas, sin embargo,

Si quiere crear más tuneles, debe de ejecutar una nueva instancía de OpenVPN con otro archivo de configuración y use un puerto de escucha(opción port) diferente e independiente.

Nota

Nada lo detiene para que utilice la misma llave estática para los nuevos tuneles, sin embargo, no se recomienda desde elpunto de vista de la seguridad, ya que otros usuarios podrían conectarse a otras VPN, claro, a menos que exista algún otrotipo de filtrado a nivel firewall.

Debe de existir un canal seguro previamente establecido para intercambiar la llave, esto no es un problema con una PKI ya que el usuariopuede generar su propía llave privada y generar una solicitud de certificado o CSR (Certificate Signing Request por sus siglas en Ingés) y elsecreto 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.

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

6 of 75 06/01/12 22:40

Page 7: Tutorial Openvpn

Dependiendo del modo del tunel de la VPN es el metodo de autenticación que va a usar, normalmente para conexiones punto a punto ó host tohost 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

Autenticación basada en certificados X.509

En la autenticación basada en certificados SSL, OpenVPN

El certificado raíz es usado para validar la autenticidad del certificado del servidor OpenVPN y de los clientes VPN, es decir, se realiza unaautenticación mutua, el cliente valida la autenticidad del certificado con el que se identifica el servidor y el servidor valida la autenticidad delcertificado con el que se identifica el cliente.

El cliente OpenVPN usa un certificado para autenticarse con el servidor OpenVPN y además para realizar el cifrado de paquetes que a traviesanel tunel VPN,

Del man:

TLS mode is the most powerful crypto mode of OpenVPN in both security and flexibility. TLS mode works by establishing control and datachannels which are multiplexed over a single TCP/UDP port. OpenVPN initiates a TLS session over the control channel and uses it to exchangecipher and HMAC keys to protect the data channel. TLS mode uses a robust reliability layer over the UDP connection for all control channelcommunication, while the data channel, over which encrypted tunnel data passes, is forwarded without any mediation. The result is the best ofboth worlds: a fast data channel that forwards over UDP with only the overhead of encrypt, decrypt, and HMAC functions, and a control channelthat provides all of the security features of TLS, including certificate-based authentication and Diffie Hellman forward secrecy.

To use TLS mode, each peer that runs OpenVPN should have its own local certificate/key pair ( --cert and --key ), signed by the root certificatewhich is specified in --ca.

When two OpenVPN peers connect, each presents its local certificate to the other. Each peer will then check that its partner peer presented acertificate which was signed by the master root certificate as specified in --ca.

If that check on both peers succeeds, then the TLS negotiation will succeed, both OpenVPN peers will exchange temporary session keys, and thetunnel will begin passing data.

The OpenVPN distribution contains a set of scripts for managing RSA certificates & 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 significativos en OpenVPN

En esta sección se reseñan los cambios más significativos en la evolución del desarrollo de OpenVPN.

El Roadmap oficial se pública en el siguiente URL: https://community.openvpn.net/openvpn/wiki/RoadMap.

OpenVPN 2.1 versión estable liberada

El día de hoy James Yonan anunció en la lista de correos openvpn-users la liberación de la versión estable 2.1 de OpenVPN, basicamente es unrelease 2.1_rc22 + algunos arreglos algo triviales y correcciones en la documentación y codigos de ejemplos para los plugins.

Aquí les dejo una lista con los cambios más significantes:

La GUI está empaquetada en el instalador de Windows.

Extensiones para la Interfaz de Administración para permitir un control más programático de clientes y servidores OpenVPN.

Opción topology subnet, la cual permite crear subredes más intuitivas para VPNs basadas en TUN, de esta forma los clientes solo tienen unadirección IP.

Soporte para DHCP proxy para clientes windows usando la opción route-gateway dhcp

El adaptador TAP-Win32 ahora puede ser abierto desde el modo non-administrator.

Funcionalidades PKCS #11 para usar tokens criptográficos (”smart cards”)

Opción multihome para permitir soporte multihoming para UDP cuando el servidor tiene más de una interfaz o multiples enlaces a Internet

Opción 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 opción script-security debe ser activada para permitir la ejecución descripts.

Para conocer más a detalle todos los cambios que ha habido en esta versión les recomiendo revisar el ChangeLog.

Recursos adicionales

Si desea obtener más información sobre los programas y páginas de manual relacionadas se aconseja que acceda a los siguientes recursosadicionales.

Sitios web

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

7 of 75 06/01/12 22:40

Page 8: Tutorial Openvpn

En las paginas listadas a continuación encontrará mayor información 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

Capítulo 4. Preparando los requerimientos de instalación

Tabla de contenidos

Informacion previa del servidor OpenVPN GNU/LinuxInformación previa de los clientes OpenVPNInformación sobre la la conectividad del servidor OpenVPNRequerimientos de FirewallEsquemas de enrutamiento para conexiones VPN

Escenario 1: OpenVPN en el mismo Firewall/GatewayEscenario 2: OpenVPN en un equipo distinto al Firewall/Gateway

En este capitulo veremos los requerimientos de sistema y comunicaciónes que debemos de tener antes de configurar la VPN en los sistemas.

Informacion previa del servidor OpenVPN GNU/Linux

Los procedimientos descritos en este documento fueron realizandos usando la distribución GNU/Linux Ubuntu Server 8.04 LTS en su versiónamd64. Las configuraciones realizadas en los sistemas GNU/Linux son para versiones de OpenVPN 2.0 o superior, sin embargo, se instalo laversión 2.1 en el servidor ya que corrije incluye nuevas y mejores funcionalidades.

El servidor esta conectado a Internet a través de un enlace dedicado E1 de 2Mbps, se tiene una dirección IP fija a través de la cual se van aconectar los clientes VPN remotos, sean VPN Gateways de oficinas remotas o usuarios móviles.

Para más información del los requisitos de sisema del servidor OpenVPN vea el cápitulo Instalación de OpenVPN en sistemas GNU/Linux.

Información previa de los clientes OpenVPN

Los procedimientos de instalación y configuración del cliente OpenVPN en sistemas GNU/Linux se realizaron en la distribución Ubuntu 8.04 TLStanto en la versión Escritorio como Servidor, tanto en versiones de 32 y 64-bit. Las tareas descritas se realizan con el usuario root ya que serequieren privilegios de administrador para controlar la interfaz de red virtual y modificar la tabla de rutas, si el usuario no tiene permisos deroot se tendra que dar acceso vía sudo.

Los procedimientos de instalación del cliente OpenVPN en sistemas MS Windows se realizo en Windows XP Professional, también se incluyeinformación para clientes Windows Vista y Windows 7 en su versión Professional, todas en versiones de 32-bit. Para que un usuario puedaejecutar el cliente GUI de OpenVPN se requieren de privilegios de Administrador o que el usuario pertenezca al grupo Operadores deconfiguración de red para poder controlar la interfaz de red virtual y modificar la tabla de rutas.

Para más información de los requisitos de sisema par los clienes OpenVPN vea el cápitulo Instalación del Cliente OpenVPN.

Información sobre la la conectividad del servidor OpenVPN

Antes de establecer el túnel VPN con OpenVPN, el cliente debe alcanzar al servidor en un solo puerto TCP/UDP en especifico, el servidor norequiere 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 capazde conectarse a dicho puerto, esto facilita la administración de firewall.

Los tipos de túneles VPN descritos en los siguientes capitulos se realizan configurando 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 redprivada, en el mismo sistema tiene un firewall configurado con IPTables/Netfilter para controlar el acceso desde Internet y además realizanfunciones 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 oficialmente aprovado por IANA. Por lo que es aconsejable abrir el puerto UDP 1194en el firewall o usarlo en su regla de NAT en el caso que el servidor OpenVPN no este instalado en el mismo firewall o gateway.

En Linux, podemos utilizar la siguiente regla de IPTables para permitir conexiones al puerto UDP 1194 desde cualquier origen.

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

8 of 75 06/01/12 22:40

Page 9: Tutorial Openvpn

Nota

En este ejemplo se utiliza -i ppp0 ya que ppp0 es la interfaz WAN de nuestro enlace ADSL, si usted esta conectado directamentean 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 filtrar el tráfico entre la red local y el túnel VPN se debe hacer sobre la interfaz TUN.

Esquemas de enrutamiento para conexiones VPN

En esta sección veremos dos esquemas de enrutamient para las conexiones VPN, en especifico nos referimos al enrutado de trafico entre losclientes 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 además es su gatewaypredeterminado. 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 firewall independiente el que da la salida a Internet, se tiene que hacer NAT de tipo Port Forwardinghacia 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.

Capítulo 5. Configuración de una Autoridad Certificadora con OpenSSL para laadministración de llaves RSA

Tabla de contenidos

Generando la llave privada y certificado raíz para la Autoridad CertificadoraGenerando la llave privada y certificado para el servidor OpenVPNGenerando las llaves privadas y certificados para los clientes VPNRecursos adicionales

Sitios webPaginas de manual

En este capitulo veremos como crear una Autoridad Certificadora (Certificate Authority) privada para la administración de las llaves RSA, enespecifico usaremos la CA para emitir certificados X.509 o mejor conocidos como certificados SSL. El propósito final es crear y administrar unaInfraestructura de Llave Pública (Public Key Infrastructure) o PKI, los certificados emitidos por la CA privada serán usados principalmente paraautenticar las conexiones VPN, en especifico para tareas de autenticación y autorización 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 ayudarán a realizar las tareas de administración de los certificados, tales como emisión de certificados, revocación ygeneración de listas de revocación. Los scripts easy-rsa hacen uso del comando openssl para realizar dichas tareas, los certificados generados sealmacenan en el formato PEM.

Los certificados por la CA privada también pueden ser usados para asegurar las conexiones de servidores Web como Apache o IIS, servidores decorreo como Sendmail, Postrix, Courier IMAP, Dovecot, servidores de directorio LDAP como OpenLDAP y otros servicios de red que soportenconexiones SSL/TLS.

Generando la llave privada y certificado raíz para la Autoridad Certificadora

En esta sección crearemos los certificados y llaves privadas para la CA (también conocido como certificado raíz), el servidor OpenVPN y losclientes OpenVPN. Para la creación y administración de nuestra CA usaremos los scripts Easy RSA v2.0, los cuales vienen incluidos con elpaquete openvpn. Estos scripts de la versión 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 configuración de OpenVPN, por ejemplo: /etc/openvpn/ExampleCA.

root@vpn-matriz:~# cp -va /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/ExampleCA

Nota

De ahora en adelante tendrá que cambiarse a ese directorio para realizar todas las tareas relacionadas con la emisión decertificados.

Nos cambiaremos al directorio /etc/openvpn/ExampleCA para inicializar la CA y generar los certificados principales.

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

Los parámetros globales para la generación y administración de la CA usando easy-rsa estan en el archivo vars, editaremos este archivo paradefinir los parámetros predeterminados para la creación de la CA privada:

root@vpn-matriz:/etc/openvpn/ExampleCA# vim vars

El primer parámetro que configuraremos será el parámetro KEY_DIR, el cual apunta al directorio en donde residen todos los archivos de los

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

9 of 75 06/01/12 22:40

Page 10: Tutorial Openvpn

certificados. Es en este directorio donde se almacenaran las llaves privadas (.key), los archivos de solicitud de certificado (.csr), los certificados(.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 scriptslocalicen el directorio de las llaves.

Los certificados al ser emitidos se les asigna una fecha de emisión y una fecha de expiración, defina la variable CA_EXPIRE para definir el tiempo deexpiración para el certificado raíz de la CA, por default esta configurado para que el certificado dure 10 años, si desea definir otra fecha, porejemplo 20 años puede configurar:

export CA_EXPIRE=7300

El tiempo de expiración para los certificados de servidores y clientes se definen en la variable KEY_EXPIRE, por default los certificados generadospara clientes tendrán un tiempo de expiración de 10 años, quizás usted quiera generar certificados para clientes validos por un año ya que ustedquiere estar teniendo mayor control y aprovechar las capacidades de la lista de certificados revocados (CRL).

export KEY_EXPIRE=365

Nota

En secciones adelante se verá como expirar y renovar certificados.

Ahora definiremos los parámetros con la información general de nuestra CA

export KEY_COUNTRY="MX"export KEY_PROVINCE="Distrito Federal"export KEY_CITY="Ciudad de Mexico"export KEY_ORG="Example Inc."export KEY_EMAIL="[email protected]"

Los scripts de easy-rsa usan los parámetros de configuración definidos en las variables del archivo vars, exporte las variables al entorno del shellusando el siguiente comando:

root@vpn-matriz:/etc/openvpn/ExampleCA# source varsNOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/ExampleCA/keys

Antes de inicializar la CA ejecute el script clean-all, el cual se asegura que iniciemos con un entorno limpio, además crea el archivo keys/index.txten el cual se registra un índice de archivos creados y su estado, también crea el archivo key/serial el cual se almacena el número de serie delúltimo certificado creado.

root@vpn-matriz:/etc/openvpn/ExampleCA# ./clean-all

Importante

Una vez que ha creado los certificados para la CA, servidores y clientes no vuelva a ejecutar clean-all ya que borrara todos losarchivos de los certificados.

En la siguiente tabla se describe el propósito de los archivos y directorios creados por el script clean-all:

Tabla 5.1. Archivos de inicialización de la CA

Nombre de archivo Descripción

keys Directorio donde se almacenan las llaves y certificados.

index.txt Archivo de índice de certificados, en el se muestra información de validez entre otras cosas.

serial Archivo con el número de serie de certificados.

Ahora inicialice la CA usando el script pkitool con la opción --initca. También usamos la opción --pass, la cual protegerá la llave privada raíz conuna llave de paso (passphrase).

root@vpn-matriz:/etc/openvpn/ExampleCA# ./pkitool --initca --passUsing CA Common Name: Example Inc. CAGenerating 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 descripción se muestran en la tabla de abajo:

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

10 of 75 06/01/12 22:40

Page 11: Tutorial Openvpn

Tabla 5.2. Archivos de certificados de la CA

Nombre de archivo Descripción

ca.key Archivo de Llave Privada Raíz

ca.crt Archivo de certificado (llave pública raíz)

El archivo keys/ca.crt es el archivo del Certificado Raíz de la CA, este archivo si es de carácter público y debe ser distribuido a todos los miembrosde la VPN, este certificado 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 podría comprometer la seguridad de la VPNy la PKI en general.

Use el comando openssl para ver el contenido del certificado raíz, por ejemplo:

root@vpn-matriz:/etc/openvpn/ExampleCA# openssl x509 -in keys/ca.crt -noout -textCertificate: 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/[email protected] 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/[email protected] 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/[email protected] 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 emisión del certificado raíz, son los 10 años.

El archivo del certificado raíz debe ser copiado tanto al servidor como a los clientes OpenVPN.

En las siguientes secciones veremos como generar los certificados para el servidor y clientes VPN, recuerde mantener seguro el archivo de lallave privada raíz y recuerde su passphrase porque sera requerido cuando genere o revoque certificados de clientes y servidores.

Generando la llave privada y certificado para el servidor OpenVPN

Ahora usaremos el script pkitool para generar los certificados para el servidor OpenVPN, usaremos pkitool en modo interactivo (--interact) yemitiremos el certificado con el atributo especial para servidores (--server).

root@vpn-matriz:/etc/openvpn/ExampleCA# ./pkitool --interact --server fwproxy.example.comGenerating a 1024 bit RSA private key...................++++++...................++++++writing new private key to 'fwproxy.example.com.key'-----

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

11 of 75 06/01/12 22:40

Page 12: Tutorial Openvpn

You are about to be asked to enter information that will be incorporatedinto 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 blankFor 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 TICommon Name (eg, your name or your server's hostname) [fwproxy.example.com]:<ENTER>Email Address [[email protected]]:<ENTER>

Please enter the following 'extra' attributesto be sent with your certificate requestA challenge password []:An optional company name []:Using configuration from /etc/openvpn/ExampleCA/openssl.cnfEnter pass phrase for /etc/openvpn/ExampleCA/keys/ca.key:SuperPASSPHRASE!!!Check that the request matches the signatureSignature okThe Subject's Distinguished Name is as followscountryName :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:'[email protected]'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]yWrite out database with 1 new entriesData Base Updated

Como pudimos ver, todos los valores fueron tomados de el archivo vars y define el commonName con el argumento que le dimos al script pkitool.Que en nuestro caso fue: fwproxy.example.com.

Podemos ver la información del certificado del servidor OpenVPN con el siguiente comando:

root@vpn-matriz:/etc/openvpn/ExampleCA# openssl x509 -noout -text -in keys/fwproxy.example.com.crtCertificate: 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/[email protected] 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/[email protected] 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/[email protected] 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:

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

12 of 75 06/01/12 22:40

Page 13: Tutorial Openvpn

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

Nota

Vea que hay un atributo especial en este certificado Netscape Cert Type: SSL Server, este atributo se usará para reforzar laseguridad de la VPN.

El servidor OpenVPN también requiere de un archivo con la llave Diffie-Hellman, El archivo con los parámetros Diffie-Hellman permite que elcliente 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 parámetros Diffie Hellman:

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

El comando anterior creará el archivo keys/dh1024.pem, este archivo debe ser copiado de forma segura al servidor OpenVPN.

Importante

El archivo de los parámetros Diffie Hellman solo es usado por el servidor OpenVPN y nunca debe ser copiado a los clientes.

Copie el archivo del certificado raíz keys/ca.crt, el archivo y llave pública del servidor keys/fwproxy.example.com.crt, keys/fwproxy.example.com.key y elarchivo de los parámetros Diffie-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 certificado para el servidor tiene una validez de un año, tome lo en consideración para que prevenga la renovación delcertificado y sea instalado antes de que el certificado expire, de lo contrario los clientes no podrán conectarse al servidor.

Generando las llaves privadas y certificados para los clientes VPN

Una de las ventajas que tiene el método de autenticación basada en certificados SSL/TLS es que podemos aplicar configuraciones personalizadaspor clientes en base al commonName asignado al certificado con el que se autentica, por ejemplo, es posible asignar una dirección IP estática aun cliente en especifico en base al nombre del certificado, también se le pueden asignar las rutas a ciertas redes privadas, aplicar reglas deacceso a nivel firewall entre muchas cosas.

Al momento de crear los certificados para el cliente VPN se recomienda que tenga la información de la persona para la que emitirá loscertificados, como mínimo debe tener la siguiente información:

Nombre Persona o Host: Juan Perez

Departamento o nombre de empresa externa: IT

E-mail: [email protected]

Nombre Certificado (Common Name): jperez.example.com

Nota

En el ejemplo de arriba se usa el common name en base a la dirección de correo electrónico, esto facilita la administración deconfiguraciones personalizadas.

Además va a requerir el passphrase de la llave privada del certificado raíz de la CA.

Use el script pkitool de forma interactiva para crear los certificados de el cliente jperez.example.com, por ejemplo:

root@vpn-matriz:/etc/openvpn/ExampleCA# ./pkitool --interact jperez.example.comGenerating 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 incorporatedinto 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 blankFor 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>

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

13 of 75 06/01/12 22:40

Page 14: Tutorial Openvpn

Organizational Unit Name (eg, section) []:ITCommon Name (eg, your name or your server's hostname) [jperez.example.com]:<ENTER>Email Address [[email protected]]:[email protected]

Please enter the following 'extra' attributesto be sent with your certificate requestA challenge password []:<ENTER>An optional company name []:<ENTER>Using configuration from /etc/openvpn/ExampleCA/openssl.cnfEnter pass phrase for /etc/openvpn/ExampleCA/keys/ca.key:SuperPASSPHRASE!!!Check that the request matches the signatureSignature okThe Subject's Distinguished Name is as followscountryName :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:'[email protected]'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]yWrite out database with 1 new entriesData Base Updated

El script anterior crea tres archivos en el directorio /etc/openvpn/ExampleCA/keys, los archivos y su descripción se muestran en la tabla de abajo:

Tabla 5.3. Archivos de certificados

Nombre de archivo Descripción

jperez.example.com.csr Archivo de la petición de certificado (Certificate Signing Request)

jperez.example.com.key Archivo de Llave Privada

jperez.example.com.crt Archivo de certificado (llave pública)

De estos tres archivos solo el archivo de la llave privada y la llave pública serán utilizados por el cliente VPN además del archivo del certificadoraíz de la CA, transfiera de forma segura los archivos al cliente.

En el siguiente ejemplo crearemos un certificado que será utilizado por un Gateway VPN de la oficina remota en la ciudad de Guadalajara, elcertificado para el gateway VPN remoto tendrá la siguiente información:

Nombre Persona o Host: guadalajara.example.com

Departamento o nombre de empresa externa: Sucursal Guadalajara

E-mail: [email protected]

Nombre Certificado: guadalajara.example.com

Para crear el certificado para el gateway VPN remoto guadalajara.example.com usaremos el script pkitool de forma interactiva de la siguientemanera:

root@vpn-matriz:/etc/openvpn/ExampleCA# ./pkitool --interact guadalajara.example.comGenerating 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 incorporatedinto 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 blankFor 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]:JaliscoLocality Name (eg, city) [Ciudad de Mexico]:GuadalajaraOrganization Name (eg, company) [Example Inc.]:<ENTER>Organizational Unit Name (eg, section) []:GuadalajaraCommon Name (eg, your name or your server's hostname) [guadalajara.example.com]:<ENTER>Email Address [[email protected]]:[email protected]

Please enter the following 'extra' attributesto be sent with your certificate requestA challenge password []:<ENTER>An optional company name []:<ENTER>Using configuration from /etc/openvpn/ExampleCA/openssl.cnfEnter pass phrase for /etc/openvpn/ExampleCA/keys/ca.key:SuperPASSPHRASE!!!Check that the request matches the signatureSignature okThe Subject's Distinguished Name is as followscountryName :PRINTABLE:'MX'stateOrProvinceName :PRINTABLE:'Distrito Federal'localityName :PRINTABLE:'Ciudad de Mexico'

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

14 of 75 06/01/12 22:40

Page 15: Tutorial Openvpn

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

1 out of 1 certificate requests certified, commit? [y/n]yWrite out database with 1 new entriesData Base Updated

El script anterior crea tres archivos en el directorio /etc/openvpn/ExampleCA/keys, los archivos y su descripción se muestran en la tabla de abajo:

Tabla 5.4. Archivos de certificados

Nombre de archivo Descripción

guadalajara.example.com.csr Archivo de la petición de certificado (Certificate Signing Request)

guadalajara.example.com.key Archivo de Llave Privada

guadalajara.example.com.crt Archivo de certificado (llave pública)

Copie los archivos keys/guadalajara.example.com.crt, keys/guadalajara.example.key, keys/ca.crt a un directorio en el servidor VPN de la sucursal deGuadalajara.

Recursos adicionales

Si desea obtener más información sobre los programas y páginas de manual relacionadas se aconseja que acceda a los siguientes recursosadicionales.

Sitios web

En las paginas listadas a continuación encontrará mayor información 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 Certificate Authority(CA) and generating certificates 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-certificates - Setting Up OpenVPN with X509 Certificates

http://tldp.org/HOWTO/SSL-Certificates-HOWTO/ - SSL Certificates HOWTO

http://www.rsa.com/rsalabs/node.asp?id=2248 - 3.6.1 What is Diffie-Hellman?

Paginas de manual

Para conocer más sobre el uso y configuración de los programas utilizados en el capitulo, se recomienda leer los manuales relacionados.

openssl (1ssl) - OpenSSL command line tool

Capítulo 6. Instalación de OpenVPN en el servidor GNU/Linux

Tabla de contenidos

ObjetivosRequisitos de sistemaInstalación de OpenVPN en el servidor GNU/LinuxControlando la ejecución de OpenVPNRecursos adicionales

Sitios webPaginas de manual

En esta sección veremos la instalación del sofware requerido para nuestro entorno de VPN, en esta sección en especifico se ve la instalación parael servidor OpenVPN en sistemas GNU/Linux, aunque el documento esta enfocado a Sistemas Debian/Ubuntu, las notas también pueden aplicar aotras distribuciones como Redhat/CentOS y en caso de ser necesario se hará notar la diferencía.

Objetivos

En este capituo veremos como realizar las tareas relacionadas a la instalación de OpenVPN en sistemas GNU/Linux como Debian/Ubuntu, losobjetivos son:

Las tareas que realizaremos nos permitirán lograr los siguientes objetivos:

Conocer los requisitos de sistema para instalar y ejecutar OpenVPN en GNU/Linux.

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

15 of 75 06/01/12 22:40

Page 16: Tutorial Openvpn

Instalar openvpn en Debian/Ubuntu con apt.

Controlar la ejecución de forma manual y automática de OpenVPN.

Las tareas a realizar requieren que se tenga privilegios de administrador en el sistema, puede ser como usuario root o usando sudo, también serequieren conocimientos para ejecutar programas en la línea de comandos y editar archivos de configuración 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 debibliotecas de sistema. Además se requieren de ciertas herramientas adicionales para la configuracón de interfaces de red virtuales y asignar lasdirecciones IP del túnel. 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 puertoUDP/TCP, tambíen 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í eficientar las comunicaciones, es bastante eficiente con tuenles basadosen UDP y en enlaces lentos.

PAM - Cuando usa OpenVPN con mecanismos de autenticación adicionales, como autenticación por usuario y contraseña probablementerequiere usar PAM, en Debian/Ubuntu el soporte de PAM esta incluido por default, basicamente a través de los paquetes: libpam0g,libpam-modules y libpam-runtime. En Redhat/CentOS no hay un paquete oficial de LZO (use de dag) y para PAM el paquete es: pam.

Las tareas de instalación y configuración 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 túneles conOpenVPN, si el soporte TUN se incluye como módulo del kernel entonces tendrá que cargarlo antes de ejecutar OpenVPN, si el soporte está comoestático entonces no hay que cargar nada.

En Ubuntu 8.04 Hardy el módulo TUN esta incluido como módulo cargable del kernel, vea el archivo de configuración del kernel para ver como secompilo:

# grep -i "CONFIG_TUN=" /boot/config-2.6.24-23-serverCONFIG_TUN=m

Puede ver la información del módulo con el comando modinfo, por ejemplo:

# modinfo tunfilename: /lib/modules/2.6.24-21-xen/kernel/drivers/net/tun.koalias: char-major-10-200license: GPLauthor: (C) 1999-2004 Max Krasnyansky <[email protected]>description: Universal TUN/TAP device driversrcversion: 08388FE146550F7E73EBDE9depends:vermagic: 2.6.24-21-xen SMP mod_unload

En distribuciones Ubuntu 10.04 Lucid el módulo TUN esta incluido como estático, por lo que no hay que preocuparse que el módulo se cargueantes 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 través del archivo de dispositivo en el sistema archivos /dev/net/tun*, es necesario que exista unarchivo /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 instalación delpaquete.

Cargue el módulo del kernel con el comando modprobe, por ejemplo:

# modprobe tun

# lsmod | grep tuntun 14336 1

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.

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

16 of 75 06/01/12 22:40

Page 17: Tutorial Openvpn

Es importante que el servidor OpenVPN abrira un socket UDP en el puerto 1194 por lo que si hay algún firewall de por medio abran dicho puertopara permitir las comunicaciónes entre el cliente y el servidor.

Instalación de OpenVPN en el servidor GNU/Linux

En esta sección veremos como instalar el paquete OpenVPN en distribuciones Debian/Linux usando la herramienta apt para descargar lasdependencias de libssl, libzlo y otras de forma automática:

# 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 instalación del paquete OpenVPN crea el directorio /etc/openvpn en donde se recomienda se almacenen los archivos de configuración y otrosarchivos relacionados a la configuración de OpenVPN, también se creo el script de inicialización /etc/init.d/openvpn el cual se usa para controlar laejecución de las instancias de OpenVPN que se configuren en el directorio /etc/openvpn, los archivos de configuración de las instancias deOpenVPN deben terminar con .conf. Este script esta configurado para inicializar OpenVPN las instancias de OpenVPN de forma automática alinicio del sistema y apagarlas al apagar el sistema.

En las siguientes capitulos y secciones veremos como y donde crear los archivos de configuración de las instancias de OpenVPN y como controlarla ejecución de forma manul y automática.

Controlando la ejecución de OpenVPN

En la mayoría de casos se requiere ejecutar OpenVPN de forma automática, tanto en el cliente como servidor, para ejecuar OpenVPN de formaautomática al inicio del sistema de forma automática use el script de control de ejecución /etc/init.d/openvpn.

El script requiere que exista un archivo de configuración de OpenVPN en el directorio /etc/openvpn con terminación .conf, por ejemplo /etc/openvpn/hosta.conf.

Para ejecutar la instalancia de OpenVPN en los archivos de configuración en /etc/openvpn/*.conf use el comando:

# /etc/init.d/openvpn start

Como vemos en la salida del comando anterior, nos confirma que el servidor fue iniciado con exito.

Nota

El script ejecuta el programa openvpn con el parametro --daemon por cada archivo de configuración en el directorio /etc/openvpn/con terminación .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

Si realizo cambios significantes en la configuración del servidor o cliente OpenVPN, como cambio de dirección IP, protocolo, puertos o directoriosde configuraciones, 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 delsistema, 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 configuraciones o conexiones VPN se recomienda que ejecute el programa openvpn en primer plano para queasí 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 log o log-append en el archivo de configuracion.

Si ejecuto openvpn en primer plano, presion Ctrl+C para cancelar su ejecución.

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

17 of 75 06/01/12 22:40

Page 18: Tutorial Openvpn

Con el comando anterior, ninguna instancía de OpenVPN será iniciado al arranque del sistema, para controlarlo se tendrá que hacer con algunode los metodos antes mencionados o la Consola de Aministración de OpenVPN.

Recursos adicionales

Si desea obtener más información sobre los programas y páginas de manual relacionadas se aconseja que acceda a los siguientes recursosadicionales.

Sitios web

En las paginas listadas a continuación encontrará mayor información sobre los programas utilizados en este capitulo.

http://openvpn.net/index.php/open-source/documentation/install.html - Installation Notes

Paginas de manual

Para conocer más sobre el uso y configuración 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.

Capítulo 7. Instalación del Cliente OpenVPN

Tabla de contenidos

Requisitos de sistemaInstalación de OpenVPN en el cliente GNU/Linux

Requisitos de sistemaInstalación de OpenVPN en el cliente GNU/LinuxControlando la ejecución de OpenVPN

Instalación del cliente OpenVPN en WindowsRequisitos de sistema para clientes MS WindowsInstalando el cliente OpenVPN GUI en Windows XPInstalando el cliente OpenVPN GUI en Windows Vista y Windows 7El directorio de configuración del cliente OpenVPN GUI en WindowsEjecución de OpenVPN GUI en WindowsResolución de problemas para Clientes OpenVPN en Windows

La conexión a la VPN no es establecida, en el log de OpenVPN aparece el mensaje "All TAP-Win32 adapters on this system are currentlyin use"

Recursos AdicionalesSitios webPaginas de manual

En este capitulo se verán los requisitos de sistema para instalar el OpenVPN en modo cliente para diferentes sistemas operativos, en especialGNU/Linux y MS Windwos, además de algunos tips de resolución 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 losrequisitos especificos para GNU/Linux tanto para arquitecturas x86 como amd64 y MS Windows XP Professional, Windows Vista y Windows7tanto para arquitecturas de 32 y 64bits.

Instalación de OpenVPN en el cliente GNU/Linux

En esta sección se verán los requerimientos de software y permisos de ejecución para usar el cliente de OpenVPN en sistemas operativosGNU/LInux, en especial para Debian/Ubuntu. Si usted usa alguna distribución basada en RHEL, como CentOS, distribuciones que no cuentan conun paquete oficial de OpenVPN, usted deberá compilar el paquete de OpenVPN para su distribución.

Nota

El archivo tar de las fuentes de OpenVPN se encuentra el archivo .spec el cual puede ser usado para construir su propio paqueteRPM binario.

Para otras distribuciones consulte su sistema de paquetes ya que probablemente puede estar incluido en los repositorios oficiales, y como últimorecurso 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 debibliotecas de sistema. Además se requieren de ciertas herramientas adicionales para la configuracón de interfaces de red virtuales y asignar las

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

18 of 75 06/01/12 22:40

Page 19: Tutorial Openvpn

direcciones IP del túnel. 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 puertoUDP/TCP, tambíen 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í eficientar las comunicaciones, es bastante eficiente con tuenles basadosen UDP y en enlaces lentos.

PAM - Cuando usa OpenVPN con mecanismos de autenticación adicionales, como autenticación por usuario y contraseña probablementerequiere usar PAM, en Debian/Ubuntu el soporte de PAM esta incluido por default, basicamente a través de los paquetes: libpam0g,libpam-modules y libpam-runtime. En Redhat/CentOS no hay un paquete oficial de LZO (use de dag) y para PAM el paquete es: pam.

Las tareas de instalación y configuración 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 túneles conOpenVPN, si el soporte TUN se incluye como módulo del kernel entonces tendrá que cargarlo antes de ejecutar OpenVPN, si el soporte está comoestático entonces no hay que cargar nada.

En Ubuntu 8.04 Hardy el módulo TUN esta incluido como módulo cargable del kernel, vea el archivo de configuración del kernel para ver como secompilo:

# grep -i "CONFIG_TUN=" /boot/config-2.6.24-23-serverCONFIG_TUN=m

Puede ver la información del módulo con el comando modinfo, por ejemplo:

# modinfo tunfilename: /lib/modules/2.6.24-21-xen/kernel/drivers/net/tun.koalias: char-major-10-200license: GPLauthor: (C) 1999-2004 Max Krasnyansky <[email protected]>description: Universal TUN/TAP device driversrcversion: 08388FE146550F7E73EBDE9depends:vermagic: 2.6.24-21-xen SMP mod_unload

En distribuciones Ubuntu 10.04 Lucid el módulo TUN esta incluido como estático, por lo que no hay que preocuparse que el módulo se cargueantes 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 través del archivo de dispositivo en el sistema archivos /dev/net/tun*, es necesario que exista unarchivo /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 instalación delpaquete.

Cargue el módulo del kernel con el comando modprobe, por ejemplo:

# modprobe tun

# lsmod | grep tuntun 14336 1

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 través del puerto UDP/1194, por lo que si hay algún firewall depor medio abran dicho puerto para permitir las comunicaciónes entre el cliente y el servidor.

Instalación de OpenVPN en el cliente GNU/Linux

En esta sección veremos como instalar el paquete OpenVPN en distribuciones Debian/Linux usando la herramienta apt para descargar lasdependencias de libssl, libzlo y otras de forma automática:

# apt-get update# apt-get install openvpn....

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

19 of 75 06/01/12 22:40

Page 20: Tutorial 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 instalación del paquete OpenVPN crea el directorio /etc/openvpn en donde se recomienda se almacenen los archivos de configuración y otrosarchivos relacionados a la configuración de OpenVPN, también se creo el script de inicialización /etc/init.d/openvpn el cual se usa para controlar laejecución de las instancias de OpenVPN que se configuren en el directorio /etc/openvpn, los archivos de configuración de las instancias deOpenVPN deben terminar con .conf. Este script esta configurado para inicializar OpenVPN las instancias de OpenVPN de forma automática alinicio del sistema y apagarlas al apagar el sistema.

En las siguientes capitulos y secciones veremos como y donde crear los archivos de configuración de las instancias de OpenVPN y como controlarla ejecución de forma manul y automática.

Controlando la ejecución de OpenVPN

En la mayoría de casos se requiere ejecutar OpenVPN de forma automática, tanto en el cliente como servidor, para ejecuar OpenVPN de formaautomática al inicio del sistema de forma automática use el script de control de ejecución /etc/init.d/openvpn.

El script requiere que exista un archivo de configuración de OpenVPN en el directorio /etc/openvpn con terminación .conf, por ejemplo /etc/openvpn/hosta.conf.

Para ejecutar la instalancia de OpenVPN en los archivos de configuración en /etc/openvpn/*.conf use el comando:

# /etc/init.d/openvpn start

Como vemos en la salida del comando anterior, nos confirma que el servidor fue iniciado con exito.

Nota

El script ejecuta el programa openvpn con el parametro --daemon por cada archivo de configuración en el directorio /etc/openvpn/con terminación .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

Si realizo cambios significantes en la configuración del servidor o cliente OpenVPN, como cambio de dirección IP, protocolo, puertos o directoriosde configuraciones, 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 delsistema, 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 configuraciones o conexiones VPN se recomienda que ejecute el programa openvpn en primer plano para queasí 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 ejecución.

Con el comando anterior, ninguna instancía de OpenVPN será iniciado al arranque del sistema, para controlarlo se tendrá que hacer con algunode los metodos antes mencionados o la Consola de Aministración de OpenVPN.

Instalación del cliente OpenVPN en Windows

En esta sección veremos los requerimientos de software y permisos para instalar el cliente de OpenVPN en sistemas operativos MS Windows, enesta ocasión se verá la instalación 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 grupoOperadores de configuración de red.

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

20 of 75 06/01/12 22:40

Page 21: Tutorial Openvpn

Adicionalmente, si el servidor OpenVPN envía información de red al cliente VPN, como la dirección IP del servidor DNS para usar en la VPNdeberá de asegurarse que los servicios Cliente DNS y Cliente DHCP estén habilitados y en ejecución.

Instalando el cliente OpenVPN GUI en Windows XP

Siga el siguiente procedimiento para instalar el cliente OpenVPN para Windows:

Descargar la última versión de OpenVPN para Windows, ir a la sección de descargas del sitio oficial de OpenVPN, y descargar la últimaversión de la serie 2.1.x, a la fecha la última versión 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.

1.

Deberás de ver el asistente de instalación, haz clic en Next > para proceder.2.

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

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

4.

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

21 of 75 06/01/12 22:40

Page 22: Tutorial Openvpn

Ahora elija la ruta de instalación, la ruta predeterminada es: C:\Archivos de programa\OpenVPN para sistemas en Español o C:\Program Files\OpenVPN, hagaclic en Install para continuar.

Nota

Recuerde esta ruta ya que es en ella en donde se instalan los archivos de configuración y certificados.

5.

El proceso de instalación inicia y el asistente de instalación copiará los archivos al sistema a la ruta: C:\Archivos de programa\OpenVPN.6.

El driver de la interfaz de red virtual TAP-Win32 Adapter V9 será instalado durante el proceso de instalación. Ya que el driver no estafirmado por Microsoft, un mensaje de alerta será mostrado, podemos ignorar el mensaje y dar clic en Continuar.

7.

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

22 of 75 06/01/12 22:40

Page 23: Tutorial Openvpn

Si la instalación de los archivos de programa y el driver fue exitosa, entonces el asistente terminara el proceso de instalación, demos clic enNext >.

8.

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

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 versión 2.1.1 ya que corrigue variosproblemas de privilegios con Windows Vista y Windows 7:

Descargar la última versión de OpenVPN para Windows, ir a la sección de descargas del sitio oficial de OpenVPN, y descargar la últimaversión de la serie 2.1.x, a la fecha la última versión 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.

1.

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

23 of 75 06/01/12 22:40

Page 24: Tutorial Openvpn

Deberás de ver el asistente de instalación, haz clic en Next > para proceder.2.

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

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

4.

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

24 of 75 06/01/12 22:40

Page 25: Tutorial Openvpn

Ahora elija la ruta de instalación, la ruta predeterminada es: C:\Archivos de programa\OpenVPN para sistemas en Español o C:\Program Files\OpenVPN, hagaclic en Install para continuar.

Nota

Recuerde esta ruta ya que es en ella en donde se instalan los archivos de configuración y certificados.

5.

El proceso de instalación inicia y el asistente de instalación copiará los archivos al sistema a la ruta: C:\Archivos de programa\OpenVPN. además quesolicita la instalación del driver de la interfaz de red virtual TAP-Win32 Adapter V9. Haga clic sobre el botón Instalar para configurar lainstalación del controlador.

6.

Si la instalación de los archivos de programa y el driver fue exitosa, entonces el asistente terminara el proceso de instalación, demos clic enNext >.

7.

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 debeejecutar el cliente OpenVPN GUI como administrador, haga clic en Finish para terminar.

8.

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

25 of 75 06/01/12 22:40

Page 26: Tutorial Openvpn

El directorio de configuración del cliente OpenVPN GUI en Windows

Ahora que el cliente de OpenVPN esta instalado copie los archivos de configuración y certificados a la ruta: C:\Archivos de programa\OpenVPN\config\, acontinuación se listan los archivos que requiere copiar al directorio de archivos de configuración:

MiVPN.ovpn

ca.crt

mi.common.name.crt

mi.common.name.key

Puede tener varios archivos de configuración con terminación .ovpn para ejecutar diferentes instancias de OpenVPN, solo recuerde que losarchivos de configuración como llaves y certificados sean diferentes para cada configuración.

Vea la siguiente sección para ejecutar el cliente OpenVPN GUI.

Ejecución 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 dobleclic sobre el icono, recuerde que debe ser usuario administrador o miembro del grupo Operadores de configuración de red para poder iniciarla 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 elusuario autorice la ejecución del cliente OpenVPN con niveles elevados aun cuando el usuario sea administrador local, para darle la vuelta a esteproblema se puede realizar los siguientes pasos:

En el icono de OpenVPN GUI que se agrega en el Escritorio, hacer clic con el botón derecho y seleccionar la opción Ejecutar comoadministrador, por ejemplo:

Cuando el sistema UAC solicite autorización para que OpenVPN GUI realice cambios en el equipo haga cli en el botón Si, de esta forma seevitarán problemas para abrir la interfaz de red virtual TUN/TAP, configurar parametros de red en la interfaz virtual y agregar rutas a las redesremotas.

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

26 of 75 06/01/12 22:40

Page 27: Tutorial Openvpn

Para predefinir la ejecución de OpenVPN como administrador de forma permanente haga clic con el botón derecho sobre el programa C:\Arhivosde Programa\OpenVPN\bin\openvpn-gui.1.0.3.exe ó sobre el icono del acceso directo de OpenVPN GUI del escritorio y seleccione la opciónPropiedades.

Después vaya a la pestaña Compatibilidad y vaya al bloque de Nivel de privilegio, seleccione la casilla para Ejecutar este programa comoadministrador.

El programa OpenVPN GUI es ejecutado y se mueve la bandeja del sistema, el icono nos muestra el estado de la conexión, 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 queesta Desconectado.

Haga clic con el botón derecho sobre el icon de OpenVPN GUI en la bandeja de sistema y seleccione la opción connect para conectarse a la VPN.

Hga clic con el botón derecho sobre el icono de OpenVPN GUI en la bandeja de sistema para desplegar el menú contextual del cliente OpenVPNGUI, en el menu podemos ver el log de conexión (útil en caso de problemas de conexión), asignar o cambiar la contraseña de la llave privada, oincluso editar el archivo de configuración.

Resolución de problemas para Clientes OpenVPN en Windows

En esta sección veremos la resolución de los problemas más comunes en las implementaciones de OpenVPN GUI en MS WIndows.

La conexión a la VPN no es establecida, en el log de OpenVPN aparece el mensaje "All TAP-Win32 adapters on this system are

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

27 of 75 06/01/12 22:40

Page 28: Tutorial Openvpn

currently in use"

Si no se puede conectar a la VPN y al final del log de OpenVPN GUI aparece el mensaje All TAP-Win32 adapters on this system are currentlyin use puede significar 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 seaadministrador no va a poder abrir el adaptador, tiene que ir al icono de OpenVPN GUI y dar clic con el boton derecho y seleccionar "ejecutarcomo administrador".

En la mayoría 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 significa que la VPN no esta en uso, sin embargo, el adaptador si esta habilitado.

Si la interfaz esta deshabilitada, el estado del adaptador se vería así:

Para habilitar el adaptador haga clic derecho sobre el adaptador y haga clic sobre la opción Activar.

Recursos Adicionales

Si desea obtener más información sobre los programas y páginas de manual relacionadas se aconseja que acceda a los siguientes recursosadicionales.

Sitios web

En las paginas listadas a continuación encontrará mayor información 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 más sobre el uso y configuración 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.

Capítulo 8. Creando conexiones VPN punto a punto con OpenVPN

Tabla de contenidos

Información previa y requerimientosConexiones VPN punto a punto usando el modo de autenticación basada en llaves estáticas

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

28 of 75 06/01/12 22:40

Page 29: Tutorial Openvpn

Configurando el servidor OpenVPN de una conexión punto a puntoConfigurando el cliente OpenVPN de una conexión punto a puntoEjecutando scripts con OpenVPN para agregar rutas

Conexiones VPN punto a punto usando el modo de autenticación basada en certificados SSL/TLSConfigurando el servidor OpenVPN de una conexión punto a puntoConfigurando el cliente OpenVPN de una conexión punto a punto

Resolución de problemas en conexiones VPN punto a punto con OpenVPNRecursos adicionales

Sitios webPaginas 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 conexión esútil para asegurar conexiones ya sean por internet o en redes locales.

Los ejemplos de conexión que veremos las realizaremos con dos sistemas GNU/Linux, estos equipos se conectan a través de Internet, uno tiene unelace dedicado con dirección IP fija y el otro tiene un elace ADSL con IP dinamica. Ambos sistemas usan la distribución Linux Ubuntu Hardy 8.04de 64-bit (aunque también son soportadas las arquitectuas de 32-bit).

Veremos dos tipos de configuraciones para establecer los túneles VPN, una usando autenticación con llaves estáticas (pre shared key) y la otrausando autenticación asimétrica con certificados x.509 TLS/SSL.

Información previa y requerimientos

En las siguientes secciones realizaremos un túnel VPN entre dos sistemas que se describen a continuación:

Se conectarán dos hosts: HostA y HostB.

La conexión es a través de Internet usando las direcciones IP públicas resueltas por DNS dinamicos.

El equipo HostA actuará como servidor, ya que usa una dirección 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 firewall.

El cliente HostB actuará como cliente, también se le configuro 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 tuadministrador de firewall.

Los sistemas GNU/Linux que se usarán ya cumplen con todos los requerimientos de software por lo que no veremos más los procedimientos deinstalación de OpenVPN.

Asegurese de que los puntos que se listan atras sean tomandos en consideración cuando realizce una conexión ya sea en laboratorios o enproducción, lo ayudara a facilitar las cosas cuando se presenten problemas relacionados a la conexión.

Conexiones VPN punto a punto usando el modo de autenticación basada en llavesestáticas

En esta sección veremos las tareas requeridas para realizar una conexión VPN punto a punto usando el método de autenticación de llaves precompartidas (pre shared key). Este tipo de conexiones punto a punto es la más fácil de realizar ya que es la que menos operaciones requiere tantodel lado del cliente como del servidor. La llave pre compartida es de tipo HMAC de 2048 bits.

Configurando el servidor OpenVPN de una conexión punto a punto

En esta sección se veremos como crear un archivo de configuración para el servidor OpenVPN para una conexión de tipo Punto a Punto, laautenticación entre el cliente y el servidor se realiza a través 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 parámetros de configuración para el servidoren la conexión punto a punto.

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

Con el siguiente contenido:

;; Archivo de configuración de servidor OpenVPN tunnel p2p:;

mode p2p

dev tunproto udp

port 1194

ifconfig 10.5.0.1 10.5.0.2

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

29 of 75 06/01/12 22:40

Page 30: Tutorial Openvpn

secret /etc/openvpn/static.key

cipher BF-CBC

comp-lzo

ping 10ping-restart 180ping-timer-rempersist-tunpersist-key

script-security 2

log-append /var/log/openvpn.logverb 3status /var/log/openvpn-status.logmute 50

El modo p2p (predeterminado) usa una topología punto-a-punto en donde la dirección IP virtual del peer remoto de la interfaz tun del cliente(10.5.0.1) siempre apunta a la dirección IP virtual local de la interfaz tun del servidor. Este modo asigna una dirección IP virtual individual a losclientes, solo use este modo para clientes NO Windows, ya que hay una limitante en el driver TAP de Windows.

En el archivo de configuración se usan los siguientes parámetros:

mode p2p

dev tun

proto udp

port 1194

# OpenVPN 2.0 uses UDP port 1194 by default

# (official port assignment by iana.org 11/04).

# OpenVPN 1.x uses UDP port 5000 by default.

# Each OpenVPN tunnel must use # a different port number.

# lport or rport can be used

# to denote different ports

# for local and remote.

ifconfig 10.5.0.1 10.5.0.2

secret /etc/openvpn/static.key

cipher BF-CBC

;cipher BF-CBC # Blowfish (default) ;cipher AES-128-CBC # AES ;cipher DES-EDE3-CBC # Triple-DES

comp-lzo

ping 10

Envíar 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 especificar 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 usaping en los modos de seguridad --secret, --tls-server o --tls-client, los paquetes ping son enviados criptográficamente seguros.

ping-restart

La opción ping-restart es usada para mandar una señal SIGUSR1 al proceso openvpn si no se ha recibido un paquete ping o cualquier otrotipo de paquete desde el otro punto de la VPN

Esta opción es util en casos donde los peer remotos tienen dirección IP dinamica y un TTL DNS demasiado bajo, por ejemplo usando elservicio de http://dyndns.org/ más el cliente DNS Dinamico ddclient. Para la instalación y configuración del cliente DNS dinamico ddclientver el apendice Usando el servicio DNS Dinamico de DynDNS con el cliente Dinamico ddclient.

ping-timer-rem

Ejecuta ping-restart solo si tenemos una dirección remota, solo usar esta opción cuando se usa en modo listen, y no se esta usando una opciónexplicita de remote, esta opción es util si no desea iniciar los conteos de timeout si no hasta que los clientes se contan.

Los parametros persiste- nos ayudarán 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 TUN/TAP, tampoco ejecutar los scripts up y down al recibir una señal SIGUSR1 o haya sucedido un ping-restart.

La señal SIGUSR1 es una señal de reinicio similar a SIGHUP, pero ofrece un control granular sobre las opciones de reset.

persist-key

No re-leer el archivo de la llave cuando se reciba una señal SIGUSR1 o haya sucedido un ping-restart.

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

30 of 75 06/01/12 22:40

Page 31: Tutorial Openvpn

Esta opción puede ser combinada con la opción user nobody para permitir reinicios cuando se recibe la señal SIGUSR1, normalmente si setiran 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, define 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 información

Conexiones activas.

truncadas.

Información del cliente: IP pública origen, certificado, 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 serán omitidos.

Ahora crearemos la llave estática 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 estática con el comando openvpn y la opción --genkey:

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

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-----fd44e3c22e40176a8a81cea0c7248d94791eda0773cfa625fe6c7752fa5d682e5954df038b5ccf9d04d865e9d0a9d56230e6ca4e656d930f179e2f0adc55ed40ed71699940323f3685c3b1a0942dff0ef94c8eca75e86fd46e956e4452d1f82cf5a31667cf7e526ea93ad416a4fe0ffc0a0c941a90f96142eab1f1672bbc24154b132da4c96ad0a769945e9983753d5503b1cf67ef06ba1973df98e5687bf1e6544431cefc7e684d618ac1c17318b95a8ccda9e96638368b060d1c6ab2259187c332d0675db525fd777c0ec5b32d6b0897fc48d60fe24fac5635c6d49bd2a59a56f4e24d9e3ff84ac7256881e8b336f73e2f50a9d8adbc6b4405d9e2c279ec12-----END OpenVPN Static key V1-----

Nota

Desde OpenVPN 1.5 se crean llaves estaticas HMAC de 2048 bits para la autenticación, en versiones anteriores las llaves eran de1024 bits.

Importante

El comando openvpn crea el archivo de la llave con permisos 600, se recomienda se mantengan los permisos 600 con lospropietarios 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.

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

31 of 75 06/01/12 22:40

Page 32: Tutorial Openvpn

Ahora incie la instancia del servidor OpenVPN en el hosta:

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

En otra consola use el comando ifconfig para verificar que se creo la interfaz virtual TUN:

root@hosta:~# ifconfig tun0tun0 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 dirección del peer 10.5.0.2, use el comando route para verificarlo:

root@hosta:~# route -n | grep tun10.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 openvpnudp 0 0 0.0.0.0:1194 0.0.0.0:* 7198/openvpn

Si no se presentaron problemas con la ejecución de OpenVPN cancele el proceso y renombre el archivo de configuración con terminación .confpara 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 sección veremos como configurar el el cliente OpenVPN en el sistema hostb.

Configurando el cliente OpenVPN de una conexión punto a punto

En esta sección se veremos como crear un archivo de configuración para el cliente OpenVPN para una conexión de tipo Punto a Punto, laautenticación entre el cliente y el servidor se realiza a través de una llave pre compartida que será transferia desde el servidor al cliente.

En el hostb crearemos el archivo /etc/openvpn/hostb-cliente-p2p-static.ovpn en donde mantendremos los parámetros de configuración para el clienteen la conexión punto a punto.

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

Con el siguiente contenido:

;; Archivo de configuración de cliente OpenVPN punto a punto:;

mode p2p

dev tunproto udp

port 1194

remote 69.60.121.173nobind

ifconfig 10.5.0.2 10.5.0.1

secret /etc/openvpn/static.key

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

32 of 75 06/01/12 22:40

Page 33: Tutorial Openvpn

cipher BF-CBC

comp-lzo

ping 10ping-restart 180ping-timer-rempersist-tunpersist-key

script-security 2

log-append /var/log/openvpn.logverb 3status /var/log/openvpn-status.logmute 50

En el archivo de configuración se usan los siguientes parámetros:

mode p2p

dev tun

proto udp

port 1194

# OpenVPN 2.0 uses UDP port 1194 by default

# (official port assignment by iana.org 11/04).

# OpenVPN 1.x uses UDP port 5000 by default.

# Each OpenVPN tunnel must use # a different port number.

# lport or rport can be used

# to denote different ports

# for local and remote.

ifconfig 10.5.0.1 10.5.0.2

secret /etc/openvpn/static.key

cipher BF-CBC

;cipher BF-CBC # Blowfish (default) ;cipher AES-128-CBC # AES ;cipher DES-EDE3-CBC # Triple-DES

comp-lzo

ping 10

Envíar 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 especificar 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 usaping en los modos de seguridad --secret, --tls-server o --tls-client, los paquetes ping son enviados criptográficamente seguros.

ping-restart

La opción ping-restart es usada para mandar una señal SIGUSR1 al proceso openvpn si no se ha recibido un paquete ping o cualquier otrotipo de paquete desde el otro punto de la VPN

Esta opción es util en casos donde los peer remotos tienen dirección IP dinamica y un TTL DNS demasiado bajo, por ejemplo usando elservicio de http://dyndns.org/ más el cliente DNS Dinamico ddclient. Para la instalación y configuración del cliente DNS dinamico ddclientver el apendice Usando el servicio DNS Dinamico de DynDNS con el cliente Dinamico ddclient.

ping-timer-rem

Ejecuta ping-restart solo si tenemos una dirección remota, solo usar esta opción cuando se usa en modo listen, y no se esta usando una opciónexplicita de remote, esta opción es util si no desea iniciar los conteos de timeout si no hasta que los clientes se contan.

Los parametros persiste- nos ayudarán 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 TUN/TAP, tampoco ejecutar los scripts up y down al recibir una señal SIGUSR1 o haya sucedido un ping-restart.

La señal SIGUSR1 es una señal de reinicio similar a SIGHUP, pero ofrece un control granular sobre las opciones de reset.

persist-key

No re-leer el archivo de la llave cuando se reciba una señal SIGUSR1 o haya sucedido un ping-restart.

Esta opción puede ser combinada con la opción user nobody para permitir reinicios cuando se recibe la señal SIGUSR1, normalmente si setiran 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

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

33 of 75 06/01/12 22:40

Page 34: Tutorial Openvpn

log-append /var/log/openvpn.log

Cuando se ejecuta OpenVPN como demonio en el background, define 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 información

Conexiones activas.

truncadas.

Información del cliente: IP pública origen, certificado, IP virtual.

bytes enviados y bytes recibidos por el cliente.

Este archivo de estado es actualizado cada minuto.

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

En hostb el proceso openvpn crea una interfaz tun0, use el comando ifconfig para ver la información:

root@hostb:~# ifconfig tun0tun0 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 dirección del servidor:

root@hostb:~# route -n | grep tun010.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 dirección IP privada del túnel:

root@hostb:~# ping -c 3 10.5.0.1PING 10.5.0.1 (10.5.0.1) 56(84) bytes of data.64 bytes from 10.5.0.1: icmp_req=1 ttl=64 time=81.9 ms64 bytes from 10.5.0.1: icmp_req=2 ttl=64 time=79.9 ms64 bytes from 10.5.0.1: icmp_req=3 ttl=64 time=80.3 ms

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

34 of 75 06/01/12 22:40

Page 35: Tutorial Openvpn

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

Pruebe la conectivdad con el servidor hacía el cliente usando la dirección IP del túnel VPN:

root@hosta:~# ping -c 3 10.5.0.2PING 10.5.0.2 (10.5.0.2) 56(84) bytes of data.64 bytes from 10.5.0.2: icmp_seq=1 ttl=64 time=79.9 ms64 bytes from 10.5.0.2: icmp_seq=2 ttl=64 time=79.3 ms64 bytes from 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 2002msrtt min/avg/max/mdev = 79.314/79.581/79.960/0.426 ms

Si no se presentaron problemas con la ejecución de OpenVPN cancele el proceso y renombre el archivo de configuración con terminación .confpara 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 parámetro up, por ejemplo:

# Our up script will establish routes# once the VPN is alive.up ./office.up

El script contiene:

$ cat office.up #!/bin/shroute add -net 10.0.1.0 netmask 255.255.255.0 gw $5

Recuerde que el archivo del script debe tener permisos de ejecución.

Y en el cliente:

# Our up script will establish routes# once the VPN is alive.up ./home.up

El script:

$ cat home.up #!/bin/shroute add -net 10.0.0.0 netmask 255.255.255.0 gw $5

Conexiones VPN punto a punto usando el modo de autenticación basada en certificadosSSL/TLS

En esta sección veremos las tareas requeridas para realizar una conexión VPN punto a punto usando el método de certificados x.509 (TLS/SSL).Una de las ventajas de usar autenticación basada en certificados SSL es que pueden ser usados para túneles punto a punto y también para VPNscon múltiples clientes.

Para información de la creación de los certificados de el servidor y clientes OpenVPN ver el cápitulo Configuración de una Autoridad Certificadoracon OpenSSL.

Configurando el servidor OpenVPN de una conexión punto a punto

En esta sección se veremos como crear un archivo de configuración para el servidor OpenVPN para una conexión de tipo Punto a Punto, laautenticación entre el cliente y el servidor se realiza a través de certificados SSL/TLS. Los certificados son generados en el servidor con losscripts easy-rsa.

En el hosta crearemos el archivo /etc/openvpn/hosta-server-p2p-tls.ovpn en donde mantendremos los parámetros de configuración para el servidor enla conexión punto a punto.

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

Con el siguiente contenido:

;; Archivo de configuración de servidor OpenVPN tunnel p2p:;

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

35 of 75 06/01/12 22:40

Page 36: Tutorial Openvpn

tls-server

dev tunproto udp

port 1194

ifconfig 10.5.0.1 10.5.0.2

ca ca.crtcert fwproxy.example.com.crtkey fwproxy.example.com.keydh dh1024.pem

cipher BF-CBC

comp-lzo

ping 10ping-restart 180ping-timer-rempersist-tunpersist-key

;script-security 2

log-append /var/log/openvpn.logverb 3status /var/log/openvpn-status.logmute 50

Ell modo p2p (predeterminado) usa una topología punto-a-punto en donde la dirección IP virtual del peer remoto de la interfaz tun del cliente(10.5.0.1) siempre apunta a la dirección IP virtual local de la interfaz tun del servidor. Este modo asigna una dirección IP virtual individual a losclientes, solo use este modo para clientes NO Windows, ya que hay una limitante en el driver TAP de Windows.

En el archivo de configuración se usan los siguientes parámetros:

mode p2p

dev tun

proto udp

port 1194

# OpenVPN 2.0 uses UDP port 1194 by default

# (official port assignment by iana.org 11/04).

# OpenVPN 1.x uses UDP port 5000 by default.

# Each OpenVPN tunnel must use # a different port number.

# lport or rport can be used

# to denote different ports

# for local and remote.

ifconfig 10.5.0.1 10.5.0.2

secret /etc/openvpn/static.key

cipher BF-CBC

;cipher BF-CBC # Blowfish (default) ;cipher AES-128-CBC # AES ;cipher DES-EDE3-CBC # Triple-DES

comp-lzo

ping 10

Envíar 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 especificar 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 usaping en los modos de seguridad --secret, --tls-server o --tls-client, los paquetes ping son enviados criptográficamente seguros.

ping-restart

La opción ping-restart es usada para mandar una señal SIGUSR1 al proceso openvpn si no se ha recibido un paquete ping o cualquier otrotipo de paquete desde el otro punto de la VPN

Esta opción es util en casos donde los peer remotos tienen dirección IP dinamica y un TTL DNS demasiado bajo, por ejemplo usando elservicio de http://dyndns.org/ más el cliente DNS Dinamico ddclient. Para la instalación y configuración del cliente DNS dinamico ddclientver el apendice Usando el servicio DNS Dinamico de DynDNS con el cliente Dinamico ddclient.

ping-timer-rem

Ejecuta ping-restart solo si tenemos una dirección remota, solo usar esta opción cuando se usa en modo listen, y no se esta usando una opciónexplicita de remote, esta opción es util si no desea iniciar los conteos de timeout si no hasta que los clientes se contan.

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

36 of 75 06/01/12 22:40

Page 37: Tutorial Openvpn

Los parametros persiste- nos ayudarán 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 TUN/TAP, tampoco ejecutar los scripts up y down al recibir una señal SIGUSR1 o haya sucedido un ping-restart.

La señal SIGUSR1 es una señal de reinicio similar a SIGHUP, pero ofrece un control granular sobre las opciones de reset.

persist-key

No re-leer el archivo de la llave cuando se reciba una señal SIGUSR1 o haya sucedido un ping-restart.

Esta opción puede ser combinada con la opción user nobody para permitir reinicios cuando se recibe la señal SIGUSR1, normalmente si setiran 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, define 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 información

Conexiones activas.

truncadas.

Información del cliente: IP pública origen, certificado, 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 serán omitidos.

Ahora incie la instancia del servidor OpenVPN en el hosta:

root@hosta# openvpn /etc/openvpn/hosta-pserver-2p-tls.ovpnThu Jun 16 00:31:47 2011 OpenVPN 2.1_rc7 x86_64-pc-linux-gnu [SSL] [LZO2] [EPOLL] built on Dec 15 2010Thu Jun 16 00:31:47 2011 Diffie-Hellman initialized with 1024 bit keyThu Jun 16 00:31:47 2011 /usr/bin/openssl-vulnkey -q -b 1024 -m <modulus omitted>Thu Jun 16 00:31:47 2011 LZO compression initializedThu Jun 16 00:31:47 2011 Control Channel MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ]Thu Jun 16 00:31:47 2011 TUN/TAP device tun0 openedThu Jun 16 00:31:47 2011 TUN/TAP TX queue length set to 100Thu Jun 16 00:31:47 2011 ifconfig tun0 10.5.0.1 pointopoint 10.5.0.2 mtu 1500Thu Jun 16 00:31:47 2011 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ]Thu Jun 16 00:31:47 2011 Local Options hash (VER=V4): '917749b8'Thu Jun 16 00:31:47 2011 Expected Remote Options hash (VER=V4): '84c0f112'Thu Jun 16 00:31:47 2011 Socket Buffers: R=[124928->131072] S=[124928->131072]Thu Jun 16 00:31:47 2011 UDPv4 link local (bound): [undef]:1191Thu Jun 16 00:31:47 2011 UDPv4 link remote: [undef]

En otra consola use el comando ifconfig para verificar que se creo la interfaz virtual TUN:

root@hosta:~# ifconfig tun0tun0 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 dirección del peer 10.5.0.2, use el comando route para verificarlo:

root@hosta:~# route -n | grep tun10.5.0.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

37 of 75 06/01/12 22:40

Page 38: Tutorial Openvpn

El proceso openvpn abre un socket UDP local en el puerto UDP 1194, podemos verlo con netstat:

root@hosta:~# netstat -plun | grep openvpnudp 0 0 0.0.0.0:1194 0.0.0.0:* 7198/openvpn

Si no se presentaron problemas con la ejecución de OpenVPN cancele el proceso y renombre el archivo de configuración con terminación .confpara 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 sección veremos como configurar el el cliente OpenVPN en el sistema hostb.

Configurando el cliente OpenVPN de una conexión punto a punto

En esta sección se veremos como crear un archivo de configuración para el cliente OpenVPN para una conexión de tipo Punto a Punto, laautenticación entre el cliente y el servidor se realiza a través de certificados SSL/TLS. Los certificados son generados en el servidor con losscripts easy-rsa.

En el hostb crearemos el archivo /etc/openvpn/hostb-cliente-p2p-tls.ovpn en donde mantendremos los parámetros de configuración para el cliente enla conexión punto a punto.

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

Con el siguiente contenido:

;; Archivo de configuración de cliente OpenVPN punto a punto:;

tls-client

dev tunproto udp

port 1194

remote 69.60.121.173nobind

ifconfig 10.5.0.2 10.5.0.1

ca ca.crtcert guadalajara.example.com.crtkey guadalajara.example.com.key

cipher BF-CBC

comp-lzo

ping 10ping-restart 180ping-timer-rempersist-tunpersist-key

;script-security 2

log-append /var/log/openvpn.logverb 3status /var/log/openvpn-status.logmute 50

En el archivo de configuración se usan los siguientes parámetros:

mode p2p

dev tun

proto udp

port 1194

# OpenVPN 2.0 uses UDP port 1194 by default

# (official port assignment by iana.org 11/04).

# OpenVPN 1.x uses UDP port 5000 by default.

# Each OpenVPN tunnel must use # a different port number.

# lport or rport can be used

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

38 of 75 06/01/12 22:40

Page 39: Tutorial Openvpn

# to denote different ports

# for local and remote.

ifconfig 10.5.0.1 10.5.0.2

secret /etc/openvpn/static.key

cipher BF-CBC

;cipher BF-CBC # Blowfish (default) ;cipher AES-128-CBC # AES ;cipher DES-EDE3-CBC # Triple-DES

comp-lzo

ping 10

Envíar 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 especificar 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 usaping en los modos de seguridad --secret, --tls-server o --tls-client, los paquetes ping son enviados criptográficamente seguros.

ping-restart

La opción ping-restart es usada para mandar una señal SIGUSR1 al proceso openvpn si no se ha recibido un paquete ping o cualquier otrotipo de paquete desde el otro punto de la VPN

Esta opción es util en casos donde los peer remotos tienen dirección IP dinamica y un TTL DNS demasiado bajo, por ejemplo usando elservicio de http://dyndns.org/ más el cliente DNS Dinamico ddclient. Para la instalación y configuración del cliente DNS dinamico ddclientver el apendice Usando el servicio DNS Dinamico de DynDNS con el cliente Dinamico ddclient.

ping-timer-rem

Ejecuta ping-restart solo si tenemos una dirección remota, solo usar esta opción cuando se usa en modo listen, y no se esta usando una opciónexplicita de remote, esta opción es util si no desea iniciar los conteos de timeout si no hasta que los clientes se contan.

Los parametros persiste- nos ayudarán 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 TUN/TAP, tampoco ejecutar los scripts up y down al recibir una señal SIGUSR1 o haya sucedido un ping-restart.

La señal SIGUSR1 es una señal de reinicio similar a SIGHUP, pero ofrece un control granular sobre las opciones de reset.

persist-key

No re-leer el archivo de la llave cuando se reciba una señal SIGUSR1 o haya sucedido un ping-restart.

Esta opción puede ser combinada con la opción user nobody para permitir reinicios cuando se recibe la señal SIGUSR1, normalmente si setiran 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, define 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 información

Conexiones activas.

truncadas.

Información del cliente: IP pública origen, certificado, 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# openvpn hostb-cliente-p2p-tls.conf Thu Jun 16 00:34:15 2011 OpenVPN 2.1.0 x86_64-pc-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] [MH] [PF_INET6] [eurephia] built on Jul 20 2010Thu Jun 16 00:34:15 2011 WARNING: No server certificate verification method has been enabled. See http://openvpn.net/howto.html#mitm for more info.Thu Jun 16 00:34:15 2011 NOTE: the current --script-security setting may allow this configuration to call user-defined scriptsThu Jun 16 00:34:15 2011 /usr/bin/openssl-vulnkey -q -b 1024 -m <modulus omitted>

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

39 of 75 06/01/12 22:40

Page 40: Tutorial Openvpn

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

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

Thu Jun 16 00:34:15 2011 TLS: Initial packet from 69.60.121.173:56554, sid=202cc0c6 2722aad7Thu Jun 16 00:34:16 2011 VERIFY OK: depth=1, /C=US/ST=CA/L=SanFrancisco/O=Fort-Funston/CN=Fort-Funston_CA/[email protected] Jun 16 00:34:16 2011 VERIFY OK: depth=0, /C=MX/ST=Jalisco/L=Guadalajara/O=Sucuresal_Guadalajara/OU=x/CN=guadalajara.example.com/[email protected] Jun 16 00:34:17 2011 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit keyThu Jun 16 00:34:17 2011 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authenticationThu Jun 16 00:34:17 2011 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit keyThu Jun 16 00:34:17 2011 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authenticationThu Jun 16 00:34:17 2011 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSAThu Jun 16 00:34:17 2011 [guadalajara.example.com] Peer Connection Initiated with 69.60.121.173:56554Thu Jun 16 00:34:18 2011 Initialization Sequence Completed

En hostb el proceso openvpn crea una interfaz tun0, use el comando ifconfig para ver la información:

root@hostb:~# ifconfig tun0tun0 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 dirección del servidor:

root@hostb:~# route -n | grep tun010.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 dirección IP privada del túnel:

root@hostb:~# ping -c 3 10.5.0.1PING 10.5.0.1 (10.5.0.1) 56(84) bytes of data.64 bytes from 10.5.0.1: icmp_req=1 ttl=64 time=81.9 ms64 bytes from 10.5.0.1: icmp_req=2 ttl=64 time=79.9 ms64 bytes from 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 2002msrtt min/avg/max/mdev = 79.937/80.738/81.945/0.868 ms

Pruebe la conectivdad con el servidor hacía el cliente usando la dirección IP del túnel VPN:

root@hosta:~# ping -c 3 10.5.0.2PING 10.5.0.2 (10.5.0.2) 56(84) bytes of data.64 bytes from 10.5.0.2: icmp_seq=1 ttl=64 time=79.9 ms64 bytes from 10.5.0.2: icmp_seq=2 ttl=64 time=79.3 ms64 bytes from 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 2002msrtt min/avg/max/mdev = 79.314/79.581/79.960/0.426 ms

Si no se presentaron problemas con la ejecución de OpenVPN cancele el proceso y renombre el archivo de configuración con terminación .confpara 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.

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

40 of 75 06/01/12 22:40

Page 41: Tutorial Openvpn

Resolución de problemas en conexiones VPN punto a punto con OpenVPN

Si en su equipo OpenVPN tanto cliente o servidor tiene una politica predeterminada de filtrado de trafico entrante de DROP o REJECT, serecomienda 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 más información sobre los programas y páginas de manual relacionadas se aconseja que acceda a los siguientes recursosadicionales.

Sitios web

En las paginas listadas a continuación encontrará mayor información 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 Certificate Authority(CA) and generating certificates and keys for an OpenVPN server and multiple clients

Paginas de manual

Para conocer más sobre el uso y configuración de los programas utilizados en el capitulo, se recomienda leer los manuales relacionados.

ifconfig (8) - configure 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

Capítulo 9. Creando conexiones VPN sitio a sitio con OpenVPN

Tabla de contenidos

ObjetivosInformación previa sobre el entorno de redConfigurando el servidor OpenVPN para la VPN sitio a sitio en la oficina MatrizConfigurando el cliente OpenVPN para la VPN sitio a sitio en la oficina remota 1Pruebas de conectividad entre VPN sitio a sitioConfigurando el cliente OpenVPN para la VPN sitio a sitio en la oficina remota 2Permitiendo comunicacion entre redes LAN remotasRecursos adicionales

Sitios webPaginas de manual

En este cápitulo veremos las configuraciones requeridas para crear una VPN de sitio a sitio para unir de forma segura dos oficinas remotas.

La autenticación de los puntos de la VPN se realizará usando certificados TLS/SSL, esta configuración permite la conexión de múltiples clientes,por lo tanto podremos conectar múltiples oficinas remotas y múltiples clientes independientes.

Objetivos

Los objetivos que se buscan son:

Conectar a través de un túnel VPN dos oficinas remotas.

Configurar el servidor OpenVPN en modo server (TLS) en la red de Matriz.

Configurar el cliente OpenVPN en modo client (TLS) en la red de Monterrey para establecer el túnel VPN con matriz.

Permitir que los clientes en la red LAN de la oficina de monterrey 192.168.200.0/24 puedan alcanzar los servidores de archivos en la red deMatriz 192.168.99.12.

Permitir que los clientes en la red LAN de la oficina Matriz 192.168.99.0/24 puedan alcanzar los servidores de archivos en la red deMonterrey 192.168.200.2.

Configurar el servidor OpenVPN para permitir conexiones entre clientes OpenVPN y las redes remotas.

Información previa sobre el entorno de red

Las configuraciones de red de las redes que conectaremos son similares, con la siguiente lista y el diagrama se tendrá un mejor panorama paraentener forma como están conectadas las redes.

En la oficina Matriz se tiene un enlace dedicado a Internet de 2Mbps con direcciónes IP fijas.

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

41 of 75 06/01/12 22:40

Page 42: Tutorial Openvpn

En la oficina de Monterrey se tiene un enlace ADSL de 2Mbps con dirección IP dinámica.

En cada oficina se tiene un servidor GNU/Linux con dos tarjetas de red una WAN y otra LAN, estos servidores realizan funciones de Firewally Router de Internet, son el gateway predeterminado de los equipos en las redes privadas.

La red LAN de cada oficina 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 laLAN de Monterrey.

En el siguiente diagrama se describe la forma en que estan conectadas a Internet las redes de las dos oficinas:

Figura 9.1. Dos Redes Remotas

En las siguientes secciones veremos como configurar el servidor OpenVPN en el servidor gateway de la oficina Matriz, y el cliente en el servidorgateway de la oficina de Monterrey.

Configurando el servidor OpenVPN para la VPN sitio a sitio en la oficina Matriz

En esta sección se verá la configuración del servidor OpenVPN para una conexión VPN de tipo sitio a sitio (site-to-site) usando autenticaciónbasada en certificados X.509 emitidos por la Autoridad Certificadora local creada con los scripts easy-rsa.

La configuración del servidor OpenVPN para conexiónes de sitio a sitio la realizaremos configurando OpenVPN en modo server (tls-server), estemodo permite la conexión de más de un cliente TLS de forma simultanea, esto quiere decir que, con una sola instancia de OpenVPN en modoserver podremos conectar más de una oficina remota, si no que también podremos conectar usuarios móviles (Road Warriors) para dar accesoseguro a los recursos internos de la empresa, el modo server es una versión de el modo tls-server pero cambia el esquema en el que asigna lasdirecciones IP virtuales a los clientes. La autenticación de clientes y servidores se realizará usando el método de autenticación basada encertificados X.509.

Para configurar el servidor OpenVPN en modo server vamos a requerir el certificado y la llave pública del servidor fwproxy.example.com. Acontinuación se muestra una lista de los certificados y llaves privadas requeridas:

Tabla 9.1. Tabla de certificados y llaves privadas requeridos para servidor OpenVPN en Matriz

Nombre de Archivo Proposito Secreto

/etc/openvpn/ca.crt Certificado CA Raíz NO

/etc/openvpn/dh1024.pem Parametros Diffie Hellman NO

/etc/opevpn/fwproxy.example.com.crt Certificado para fwproxy.example.com NO

/etc/openvpn/fwproxy.example.key 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 certificados fueron creados en otro equipo,entonces transfiera los certificados por un medio seguro hacía el servidor, por ejemplo SSH/SCP o Corre electrónico seguro usando PGP(GNUPG).

Creamos el archivo de configuración para el servidor OpenVPN:

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

Con el siguiente contenido:

;; Archivo de configuración 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

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

42 of 75 06/01/12 22:40

Page 43: Tutorial Openvpn

proto udpport 1194

; Archivos de certificados y llaves:ca ca.crtcert fwproxy.example.com.crtkey fwproxy.example.com.keydh dh1024.pem

ifconfig-pool-persist ipp.txtclient-config-dir ccd

; Cifrado:cipher BF-CBC

; Compresion:comp-lzo

; Mantener conexiones activas via ping:keepalive 10 60persist-tunpersist-key

; Opciones de logs:log-append /var/log/openvpn.logverb 3status /var/log/openvpn-status.logmute 50

; Rutas hacia redes remotas:route 192.168.200.0 255.255.255.0

El modo server (basado en tls-server) usa una subred de clase C para asignar una dirección IP a cada cliente VPN, puede asignar las direccionesIP virtuales de forma dinamica o estatica en base al nombre común del certificado del cliente, para cada cliente que se conecta usa una subred/30 (4 IPs por conexión). En este modo se pueden conectar múltiples clientes, tanto GNU/Linux, Windows y otros sistemas operativos conautenticación basada en certificados TLS/SSL.

En el archivo de configuración se usan los siguientes parámetros:

server 10.8.0.0 255.255.255.0

A helper directive designed to simplify the configuration of OpenVPN's server mode. This directive will set up an OpenVPN server which willallocate addresses to clients out of the given network/netmask. The server itself will take the ".1" address of the given network for use as theserver-side endpoint of the local TUN/TAP interface.

For example, --server 10.8.0.0 255.255.255.0 expands as follows:

mode servertls-serverpush "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 config file option back to the client for remote execution. Note that option must be enclosed in double quotes (""). The client mustspecify --pull in its config file. The set of options which can be pushed is limited by both fea‐ sibility and security. Some options such as thosewhich would execute scripts are banned, since they would effectively 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 servercan be initiated.

This is a partial list of options which can currently be pushed: --route, --route-gateway, --route-delay, --redirect-gate‐ way, --ip-win32, --dhcp-option, --inactive, --ping, --ping-exit, --ping-restart, --setenv, --persist-key, --persist-tun, --echo, --comp-lzo, --socket-flags, --sndbuf, --rcvbuf

--ifconfig-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 willbe given a /30 subnet (for interoperability with Windows clients). For tap-style tunnels, indi‐ vidual addresses will be allocated, and theoptional netmask parameter will also be pushed to clients.

dev tun

El tipo de dispositivos tun es usado para VPN de tipo routed.

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

43 of 75 06/01/12 22:40

Page 44: Tutorial Openvpn

proto udp

Usa el protocol UDP como transporte.

port 1194

# OpenVPN 2.0 uses UDP port 1194 by default

# (official port assignment by iana.org 11/04).

# OpenVPN 1.x uses UDP port 5000 by default.

# Each OpenVPN tunnel must use # a different port number.

# lport or rport can be used

# to denote different ports

# for local and remote.

ca ca.crt

cert fwproxy.example.com.crt

key fwproxy.example.com.key

dh dh1024.pem

ifconfig-pool-persist ipp.txt

Persist/unpersist ifconfig-pool data to file, 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 addressassigned to them from the ifconfig-pool. Maintaining a long-term association is good for clients because it allows them to effectively use the--persist-tun option.

file is a comma-delimited ASCII file, formatted as <Common-Name>,<IP-address>.

If seconds = 0, file will be treated as read-only. This is useful if you would like to treat file as a configuration file.

Note that the entries in this file are treated by OpenVPN as suggestions only, based on past associations between a common name and IPaddress. They do not guarantee that the given common name will always receive the given IP address. If you want guaranteed assignment,use --ifconfig-push

client-cofig-dir ccd

Indica la ruta del Directorio de Configuraciones de Clientes (Client Config Directory), en este caso usaremos el directorio ccd localizado en lamisma ruta que el archivo de configuración, es decir, en el /etc/openvpn/ccd/ almacenaremos las configuraciones para los clientes.

Specify a directory dir for custom client config files. After a connecting client has been authenticated, OpenVPN will look in this directory fora file having the same name as the client's X509 common name. If a matching file exists, it will be opened and parsed for client-specificconfiguration options. If no matching file is found, OpenVPN will instead try to open and parse a default file called "DEFAULT", which may beprovided but is not required.

This file can specify a fixed IP address for a given client using --ifconfig-push, as well as fixed subnets owned by the client using --iroute.

One of the useful properties of this option is that it allows client configuration files to be conveniently created, edited, or removed while theserver is live, without needing to restart the server.

The following options are legal in a client-specific context: --push, --push-reset, --iroute, --ifconfig-push, and --con‐ fig.

cipher BF-CBC

;cipher BF-CBC # Blowfish (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 también las envía vía push al cliente. Esto causa que seenvien mensajes tipo ping desde ambos lados del túnel 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 esconsiderado 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

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

44 of 75 06/01/12 22:40

Page 45: Tutorial Openvpn

Nota

Con esta opción en el servidor no es necesario definir --ping y --ping-restart en el archivo de configuración del cliente amenos que desee usar parámetros diferentes.

ping-restart

La opción ping-restart es usada para mandar una señal SIGUSR1 al proceso openvpn si no se ha recibido un paquete ping o cualquier otrotipo de paquete desde el otro punto de la VPN

Esta opción es util en casos donde los peer remotos tienen dirección IP dinamica y un TTL DNS demasiado bajo, por ejemplo usando elservicio de http://dyndns.org/ más el cliente DNS Dinamico ddclient. Para la instalación y configuración del cliente DNS dinamico ddclientver el apendice Usando el servicio DNS Dinamico de DynDNS con el cliente Dinamico ddclient.

Los siguientes parámetros nos ayudarán a evitar tener que re crear la interfaz virtual tun0 y re leer la llave privada en caso de un restart portimeout.

persist-tun

No cerrar o re-abrir el dispositivo TUN/TAP, tampoco ejecutar los scripts up y down al recibir una señal SIGUSR1 o haya sucedido un ping-restart.

La señal SIGUSR1 es una señal de reinicio similar a SIGHUP, pero ofrece un control granular sobre las opciones de reset.

persist-key

No re-leer el archivo de la llave cuando se reciba una señal SIGUSR1 o haya sucedido un ping-restart.

Esta opción puede ser combinada con la opción user nobody para permitir reinicios cuando se recibe la señal SIGUSR1, normalmente si setiran 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, define 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 información

Conexiones activas.

truncadas.

Información del cliente: IP pública origen, certificado, 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 serán omitidos.

route 192.168.200.0 255.255.255.0

Agrega ruta local hacía la red remota.

Creee el directorio ccd para configuraciones por cliente:

root@hosta:/etc/openvpn# mkdir -m 700 ccd

Inicie el servidor OpenVPN en hosta:

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

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

45 of 75 06/01/12 22:40

Page 46: Tutorial Openvpn

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

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 tun0tun0 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 tun010.8.0.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun010.8.0.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun0192.168.221.0 10.8.0.2 255.255.255.0 UG 0 0 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 openvpnudp 0 0 0.0.0.0:1194 0.0.0.0:* 9245/openvpn

Si no se presentaron problemas con la ejecución de OpenVPN cancele el proceso y renombre el archivo de configuración con terminación .confpara 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 sección configuraremos el cliente OpenVPN en el servidor gateway de la oficina remota de Monterrey, o oficina remota 1.

Configurando el cliente OpenVPN para la VPN sitio a sitio en la oficina remota 1

Para configurar el cliente OpenVPN en modo client vamos a requerir el certificado y la llave pública del servidor monterrey.example.com. Acontinuación se muestra una lista de los certificados y llaves privadas requeridas:

Tabla 9.2. Tabla de certificados y llaves privadas requeridos para servidor OpenVPN en Matriz

Nombre de Archivo Proposito Secreto

/etc/openvpn/ca.crt Certificado CA Raíz NO

/etc/opevpn/monterrey.example.com.crt Certificado para monterrey.example.com NO

/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 oficina remota 1. Transfiera loscertificados por un medio seguro como por ejemplo SSH/SCP o corre electrónico seguro usando PGP (GNUPG).

En el servidor gateway de la oficina remota 1 cree el archivo de configuración /etc/openvpn/hostb-cliente-s2s-tls.opvn:

root@hostb:/etc/openvpn# vim hostb-cliente-s2s-tls.opvn

Con el siguiente contenido:

;; Archivo de configuración del cliente OpenVPN modo TLS:;

; Modo cliente TLS:client

; Opciones de conexion del tunel:dev tunproto udpport 1194

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

46 of 75 06/01/12 22:40

Page 47: Tutorial Openvpn

nobindresolv-retry infinite

; Servidor remoto:remote hosta.dyndns.org

; Archivos de certificados y llaves:ca ca.crtcert monterrey.example.com.crtkey monterrey.example.com.key

; Cifrado:cipher BF-CBC

; Compresion:comp-lzo

; Mantener conexiones activas via ping:persist-tunpersist-key

; Opciones de logs:;log-append /var/log/openvpn.logverb 3status /var/log/openvpn-status.logmute 50

En el servidor OpenVPN de la oficina Matriz, dentro del directorio ccd cree un archivo de configuración especifico para el cliente con el certificadomonterrey.example.com, en este archivo definiremos la dirección IP virtual que le asignaremos al VPN gatway de monterrey, agregaremos rutasinternas 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 certificado.

Con el siguiente contenido:

;; Archivo de configuración de cliente: monterrey.example.com;

# Dirección IP fijaifconfig-push 10.8.0.9 10.8.0.10

# Ruta interna para OpenVPN hacía la subred 192.168.200.0/24iroute 192.168.200.0 255.255.255.0

# No heredar la lista push globalpush-reset

# Exportamos la subred LAN de Matriz 192.168.99.0/24push "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 parámetros usados en el archivo de configuración del cliente monterrey.example.com:

ifconfig-push 10.8.0.9 10.8.0.10

Push virtual IP endpoints for client tunnel, overriding the --ifconfig-pool dynamic allocation.

The parameters local and remote-netmask are set according to the --ifconfig directive which you want to execute on the client machine toconfigure the remote end of the tunnel. Note that the parameters local and remote-netmask are from the perspective of the client, not theserver. 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 specific client instance, which means that it must be specified either in a client instance config fileusing --client-config-dir or dynamically generated using a --client-connect script.

Remember also to include a --route directive in the main OpenVPN config file which encloses local, so that the kernel will know to route it tothe server's TUN/TAP interface.

OpenVPN's internal client IP address selection algorithm works as follows:

1 -- Use --client-connect script generated file for static IP (first choice).

2 -- Use --client-config-dir file for static IP (next choice).

3 -- Use --ifconfig-pool allocation for dynamic IP (last choice).

iroute 192.168.200.0 255.255.255.0

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

47 of 75 06/01/12 22:40

Page 48: Tutorial Openvpn

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

iroute siempre debe de ir acompañado de un route correspondiente en el archivo de configuración del servidor, por ejemplo: route192.168.200.0 255.255.255.0.

Generate an internal route to a specific client. The netmask parameter, if omitted, defaults to 255.255.255.255.

This directive can be used to route a fixed 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 tworoutes are needed is that the --route directive routes the packet from the kernel to OpenVPN. Once in OpenVPN, the --iroute directive routesto the specific client.

This option must be specified either in a client instance config file using --client-config-dir or dynamically generated using a --client-connectscript.

The --iroute directive also has an important interaction with --push "route ...". --iroute essentially defines a subnet which is owned by aparticular 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 effect this. In order for all clients to see A's subnet, OpenVPN must push this route to all clients EXCEPT forA, 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'siroutes.

push-reset

Don't inherit the global push list for a specific client instance. Specify this option in a client-specific context such as with a --client-config-dirconfiguration file. This option will ignore --push options at the global config file level.

push "route 192.168.99.0 255.255.255.0"

Push a config file option back to the client for remote execution. Note that option must be enclosed in double quotes (""). The client mustspecify --pull in its config file. The set of options which can be pushed is limited by both fea‐ sibility and security. Some options such as thosewhich would execute scripts are banned, since they would effectively 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 servercan be initiated.

This is a partial list of options which can currently be pushed: --route, --route-gateway, --route-delay, --redirect-gate‐ way, --ip-win32, --dhcp-option, --inactive, --ping, --ping-exit, --ping-restart, --setenv, --persist-key, --persist-tun, --echo, --comp-lzo, --socket-flags, --sndbuf, --rcvbuf

Ejecute el cliente OpenVPN:

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

En servidor vpn-monterrey el proceso openvpn crea una interfaz tun0, podemos verla con ifconfig:

root@hostb:/etc/openvpn# ifconfig tun0tun0 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 dirección IP 10.8.0.9 definida en el archivo /etc/openvpn/ccd/monterrey.midominio.com en el servidor OpenVPN de Matriz.

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

48 of 75 06/01/12 22:40

Page 49: Tutorial Openvpn

También se crean unas rutas al peer y a la subred en Matriz.

root@hostb:/etc/openvpn# route -n | grep tun010.8.0.1 10.8.0.10 255.255.255.255 UGH 0 0 0 tun010.8.0.10 0.0.0.0 255.255.255.255 UH 0 0 0 tun0192.168.99.0 10.8.0.10 255.255.255.0 UG 0 0 0 tun0

Haga un ping a la dirección IP virtual del servidor OpenVPN:

root@hostb:/etc/openvpn# ping 10.8.0.1PING 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 ms64 bytes from 10.8.0.1: icmp_seq=2 ttl=64 time=0.000 ms64 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 1999msrtt 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 dirección del peer remoto asignada a la interfaz tun0.

Si no se presentaron problemas con la ejecución de OpenVPN cancele el proceso y renombre el archivo de configuración con terminación .confpara 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

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 sección realizaremos varias pruebas para verificar la conectividad entre las dos redes remotas.

Pruebas de conectividad entre VPN sitio a sitio

TODO

Configurando el cliente OpenVPN para la VPN sitio a sitio en la oficina remota 2

Genere el par de llaves para el cliente tijuana.example.com y transfieralas al servidor de tijuana en el directorio /etc/openvpn.

Edite el archivo de configuración del servidor OpenVPN y agregue al ruta a la red remota:

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

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 configuración para el servidor OpenVPN en Tijuana

root@hostc:/etc/openvpn# vim hostc-cliente-s2s-tls.ovpn

Con el siguiente contenido:

;; Archivo de configuración del cliente OpenVPN modo TLS:;

; Modo cliente TLS:client

; Opciones de conexion del tunel:dev tunproto udpport 1194

nobindresolv-retry infinite

; Servidor remoto:remote hosta.dyndns.org

; Archivos de certificados y llaves:ca ca.crtcert tijuana.example.com.crtkey tijuana.example.com.key

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

49 of 75 06/01/12 22:40

Page 50: Tutorial Openvpn

; Cifrado:cipher BF-CBC

: Compresion:comp-lzo

; Mantener conexiones activas via ping:persist-tunpersist-key

; Opciones de logs:;log-append /var/log/openvpn.logverb 3status /var/log/openvpn-status.logmute 50

En el servidor OpenVPN de la oficina Matriz, dentro del directorio ccd cree un archivo de configuración especifico para el cliente con el certificadotijuana.example.com, en este archivo definiremos la dirección IP virtual que le asignaremos al VPN gatway de Tijuana, agregaremos rutasinternas hacia la red remota y exportaremos las rutas de las redes locales hacia el cliente.

Crear archivo de configuración para tijuana.midominio.com en servidor Matriz:

root@hosta:~# vim /etc/openvpn/ccd/tijuana.example.com

Con el siguiente contenido:

;; Archivo de configuración de cliente: tijuana.example.com;

# Dirección IP fijaifconfig-push 10.8.0.13 10.8.0.14

# Ruta interna para OpenVPN hacía la subred 192.168.200.0/24iroute 192.168.100.0 255.255.255.0

# No heredar la lista push globalpush-reset

# Exportamos la subred LAN de Matriz 192.168.99.0/24push "route 192.168.99.0 255.255.255.0"

Ejecute el cliente OpenVPN:

Haga un ping a la dirección IP virtual del servidor OpenVPN:

root@hostc:/etc/openvpn# ping 10.8.0.1PING 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 ms64 bytes from 10.8.0.1: icmp_seq=2 ttl=64 time=0.000 ms64 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 1999msrtt 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 dirección del peer remoto asignada a la interfaz tun0.

Si no se presentaron problemas con la ejecución de OpenVPN cancele el proceso y renombre el archivo de configuración con terminación .confpara 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

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 conexión 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 configuración delservidor OpenVPN agregue la directiva --client-to-client, por ejemplo:

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

Y agregue la línea.

; Permitir conexiones de cliente a clienteclient-to-client

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

50 of 75 06/01/12 22:40

Page 51: Tutorial Openvpn

Cuando OpenVPN esta configurado en modo server maneja múltiples clientes a través de una sola interfaz TUN, se convierte en en un router. Ladirectiva --client-to-client le dice a OpenVPN que enrute el trafico de clientes a clientes en lugar de que mande todo el trafico originado por elcliente 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 verían. No use estaopción si quiere filtrar con un firewall el tráfico del túnel de forma personalizada.

Cuando el cliente se conecte a un servidor OpenVPN con la directiva client-to-client se le crearán las siguientes rutas:

10.8.0.6

Ruta de host hacía el peer remoto del túnel VPN, es directa a través de la interfaz tunX.

10.8.0.0

Ruta hacia la red virtual del tunel VPN, la conexión es a través de la dirección del peer remoto por la interfaz tunX.

192.168.225.0

Ruta hacia la red privada LAN atras del servidor OpenVPN, la conexión es a través de la dirección del peer remoto por la interfaz tunX.

las siguientes rutas a través de la interfaz tun0:

root@hostb:~# route -n | grep tun010.8.0.6 0.0.0.0 255.255.255.255 UH 0 0 0 tun010.8.0.0 10.8.0.6 255.255.255.0 UG 0 0 0 tun0192.168.221.0 10.8.0.6 255.255.255.0 UG 0 0 0 tun0

Como podemos ver nos agrega la ruta a toda la red 10.8.0.0 a través del peer 10.8.0.6.

Recursos adicionales

Si desea obtener más información sobre los programas y páginas de manual relacionadas se aconseja que acceda a los siguientes recursosadicionales.

Sitios web

En las paginas listadas a continuación encontrará mayor información 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 additionalmachines on either the client or server subnet.

http://openvpn.net/index.php/open-source/documentation/howto.html#pki - OpenVPN HOWTO - Setting up your own Certificate Authority(CA) and generating certificates and keys for an OpenVPN server and multiple clients

Paginas de manual

Para conocer más sobre el uso y configuración de los programas utilizados en el capitulo, se recomienda leer los manuales relacionados.

ifconfig (8) - configure 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

Capítulo 10. Configuraciones para clientes OpenVPN RoadWarriors

Tabla de contenidos

Configurando el cliente OpenVPN en sistemas MS WindowsConfigurando el cliente OpenVPN en sistemas GNU/LinuxEstableciendo la conexión con el servidor OpenVPNAsignando direcciones IP estáticas para los clientes OpenVPNEnviando opciones DHCP a los clientes OpenVPNActualizando automática de los parámetros DNS en clientes GNU/LinuxRecursos adicionales

Sitios webPaginas de manual

En este capitulo veremos como configurar los cilentes OpenVPN para realizar conexiones al servidor OpenVPN y obtener acceso remoto seguro alos sistemas atras del servidor VPN. Veremos las configuraciones para clientes MS Windows y GNU/Linux.

Configurando el cliente OpenVPN en sistemas MS Windows

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

51 of 75 06/01/12 22:40

Page 52: Tutorial Openvpn

En clientes MS Windows que usan el cliente OpenVPN GUI deben de almacenar los archivos de configuración en el directorio C:\ProgramFiles\OpenVPN\\config. La extensión del archivo debe ser .ovpn para que el cliente OpenVPN GUI detecte la configuración y pueda lanzar lasconexiones desde el icono en la bandeja de sistema.

El siguiente es un ejemplo de un archivo de configuración para el cliente OpenVPN:

;; Archivo de configuración de cliente OpenVPN modo TLS:;

client

dev tunproto udp

port 1194

remote hosta.dyndns.org 1194nobindresolv-retry infinite

ca ca.crtcert jperez.example.com.crtkey jperez.example.com.key

cipher BF-CBC

comp-lzo

persist-tunpersist-key

;log-append /var/log/openvpn.logverb 3;status /var/log/openvpn-status.logmute 50

Si el archivo de configuración .ovpn y los archivos de los certificados y la llave privada se encuentran en el mismo directorio puede escribir lasrutas a los archivos usando la ruta relativa, por ejemplo:

ca ca.crtcert jperez.example.com.crtkey jperez.example.com.key

Nota

En este caso se asume que el directorio predeterminado para almacenar las configuraciones y certificados es: C:\\ProgramFiles\\OpenVPN\\config

Si los archivos de los certificados y la llave privada se encuentran en rutas diferentes a la del archivo de configuración .ovpn se recomienda queescriba 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"

Nota

La ruta se debe escribir entre comillas dobles y usar doble diagonal invertida para separar los directorios.

Es común que tenga más de un juego de archivo de configuración y certificados en un mismo sistema, en dado caso se recomienda almacenar losarchivos .ovpn en el directorio predeterminado C:\Program Files\OpenVPN\\config y almacene los archivos de los certificados y la llave privada endirectorios separados, por ejemplo:

Para la conexión 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 conexión 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 beneficio de poder conectarse a múltiples VPNs desde el cliente OpenVPN GUI.

Configurando el cliente OpenVPN en sistemas GNU/Linux

Crearemos un archivo de configuración par los clientes OpenVPN:

root@hostc:/etc/openvpn# vim hostc-client-s2s-tls.ovpn

Con el siguiente contenido:

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

52 of 75 06/01/12 22:40

Page 53: Tutorial Openvpn

;; Archivo de configuración de servidor OpenVPN client mode (TLS):;

client

dev tunproto udp

port 1194

remote hosta.dyndns.org 1194nobindresolv-retry infinite

ca ca.crtcert tijuana.example.com.crtkey tijuana.example.com.key

cipher BF-CBC

comp-lzo

persist-tunpersist-key

;log-append /var/log/openvpn.logverb 3status /var/log/openvpn-status.logmute 50

Las opciones usadas en el archivo de configuración del cliente OpenVPN son las siguientes:

client

A helper directive designed to simplify the configuration of OpenVPN's client mode. This directive is equivalent to:

pulltls-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 optionspushed 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 trustthe server to have control over the client's routing table.

tls-client

Enable TLS and assume client role during TLS handshake.

Estableciendo la conexión con el servidor OpenVPN

Ejecute el cliente:

root@cliente:/home/sydmin/cliente1vpn # openvpn cliente1vpn.midominio.com.confSun Feb 15 23:59:47 2009 OpenVPN 2.0.9 i486-pc-linux-gnu [SSL] [LZO] [EPOLL] built on Jun 11 2008Sun 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 initializedSun 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:1194Sun Feb 15 23:59:48 2009 TLS: Initial packet from 189.142.216.138:1194, sid=a2621fba ad2cabf2Sun 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/[email protected] Feb 15 23:59:48 2009 VERIFY OK: nsCertType=SERVERSun 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/[email protected] Feb 15 23:59:48 2009 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit keySun Feb 15 23:59:48 2009 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authenticationSun Feb 15 23:59:48 2009 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit keySun Feb 15 23:59:48 2009 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authenticationSun Feb 15 23:59:48 2009 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSASun Feb 15 23:59:48 2009 [vpnserver.midominio.com] Peer Connection Initiated with 189.142.216.138:1194Sun 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 modifiedSun Feb 15 23:59:50 2009 OPTIONS IMPORT: --ifconfig/up options modifiedSun Feb 15 23:59:50 2009 OPTIONS IMPORT: route options modifiedSun Feb 15 23:59:50 2009 TUN/TAP device tun0 openedSun Feb 15 23:59:50 2009 ifconfig tun0 10.8.0.10 pointopoint 10.8.0.9 mtu 1500Sun Feb 15 23:59:50 2009 route add -net 10.8.0.1 netmask 255.255.255.255 gw 10.8.0.9

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

53 of 75 06/01/12 22:40

Page 54: Tutorial Openvpn

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

Al establecerse la conexión sergura VPN hacía la oficina vemos que se crea una interfaz de red virtual:

root@cliente:~ # ifconfig tun0tun0 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 también se crea una ruta a la Red A

root@cliente:~ # route -nKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface10.8.0.1 10.8.0.9 255.255.255.255 UGH 0 0 0 tun010.8.0.9 0.0.0.0 255.255.255.255 UH 0 0 0 tun010.0.99.0 10.8.0.9 255.255.255.0 UG 0 0 0 tun0

Verificando la conectividad

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

--- 10.0.99.200 ping statistics ---3 packets transmitted, 3 received, 0% packet loss, time 2000msrtt 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 estáticas para los clientes OpenVPN

Cuando se configura el servidor OpenVPN en modo server (multiclient) se asigna un pool de direcciones IP para asignar de forma dinamica a losclientes OpenVPN. En las configuraciones descritas arriba se usa la topología net30 en la cual se asigna una subred /30 para cada cliente, en estetipo 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 limitación en el modo emulaciónTUN 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 - Dirección de subred virtual.

10.8.0.1/30 - Dirección IP Virtual en el servidor OpenVPN (PEER).

10.8.0.2/30 - Dirección IP virtual asignada al cliente (no se asigna realmente a un cliente).

10.8.0.3/30 - Dirección IP de Broadcast.

El primer client en contectarse usara la siguiente subred /30:

10.8.0.4/30 - Dirección de subred virtual.

10.8.0.5/30 - Dirección IP Virtual del cliente.

10.8.0.6/30 - Dirección IP virtual del peer (no se asigna realmente a un sistema).

10.8.0.7/30 - Dirección IP de Broadcast.

Las direcciones IP que puede asignar usando la topología /30 son:

[ 1, 2] [ 5, 6] [ 9, 10] [ 13, 14] [ 17, 18][ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38][ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58][ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78][ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98][101,102] [105,106] [109,110] [113,114] [117,118][121,122] [125,126] [129,130] [133,134] [137,138][141,142] [145,146] [149,150] [153,154] [157,158][161,162] [165,166] [169,170] [173,174] [177,178][181,182] [185,186] [189,190] [193,194] [197,198][201,202] [205,206] [209,210] [213,214] [217,218][221,222] [225,226] [229,230] [233,234] [237,238][241,242] [245,246] [249,250] [253,254]

La asignación de direcciones IP estáticas dentro de un pool se realiza desde el servidor OpenVPN, el servidor OpenVPN debe usar la directiva--client-config-dirpara permitir configuraciones personalizadas por cliente, por lo tanto se requieren que cada cliente tenga un certificado con un

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

54 of 75 06/01/12 22:40

Page 55: Tutorial Openvpn

commonName único.

Si desea asignar una dirección IP estática alcliente con el commonName emartinez.example.com cree el siguiente archivo de configuraciónccd: /etc/openvpn/ccd/emartinez.example.com con el siguiente contenido:

;; Archivo de configuración de cliente: emartinez.example.com

; Dirección IP estáticaifconfig-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 información de red a los clientes vía unservidor DHCP incorporado.

A través del uso de la directiva --dhcp-option en el cliente OpenVPN es posible configurar los parámetros DNS en el sistema operativo cliente. Ladirectiva --dhcp-option puede definirse de dos formas, una en el archivo de configuración del cliente y la otra (recomendada) es que sean enviadasdesde el servidor usando la directiva --push.

En el siguiente ejemplo hacemos push de las opciones DOMAIN y DNS de forma global, definiendo las siguientes directivas en el archivo deconfiguración del servidor OpenVPN

push "dhcp-option DOMAIN example.com"push "dhcp-option DNS 10.8.0.1"

Nota

Los clientes MS Windows automáticamente configuran los parámetros DNS recibidos siempre y cuando la interfaz TUN/TAPtenga habilitado el soporte DHCP.

Nota

Si las opciones dhcp son enviadas vía --push a clientes no-cwindows, las opciones serán guardadas en las variables de ambientedel cliente antes de que el script up sea llamado, las opciones se almacenan bajo el nombre "foreign_option_{n}"

También puede enviar información vía 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 información la envía a través de la directiva --push, por lo que el cliente OpenVPN debe estar configurado en modo client ya que esta a su vezincluye la directiva --pull.

Importante

Es posible usar la directiva push de forma global o por archivo de configuración de cliente usando client-config-dir.

Para más información del uso de las opciones DHCP ver la descripción de la directiva --dhcp-option en el manual de openvpn(8).

Actualizando automática de los parámetros DNS en clientes GNU/Linux

Los parámetros de el o los servidores DNS y opcionalmente el sufijo DNS que son enviados por el servidor OpenVPN vía las opciones DHCP noson actualizados de forma automatica en los sistemas cliente GNU/Linux. Esto es debido a que por default, OpenVPN no puede modificar elarchivo resolv.conf(5). Sin embargo es posible usar la directiva --up para ejecutar un script que se encargue de actualizarlos cada vez que seestablezca una conexión con el servidor VPN. y también usaremos la directiva --plugin para usar el plugin openvpn-down-root.so para restaurar losparámetros de los DNS que se tenian en resolv.conf(5) antes de establecer la conexión VPN.

Edite el archivo de configuración del cliente OpenVPN:

# vim /etc/openvpn/cliente.ovpn

Y al final del archivo agregue las siguientes líneas:

; Actualizar resolv.conf(5) usando script UPup /etc/openvpn/update_dns_client.up,sh

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

Cree el script /etc/openvpn/update_dns_client.up,sh, este es un script simple que obtiene el servidor DNS desde la opción 1 y crea un nuevo archivoresolv.conf :

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

Con el siguiente contenido:

#!/bin/sh

## script: update_dns_client.up.sh

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

55 of 75 06/01/12 22:40

Page 56: Tutorial Openvpn

#

# Variables de ambiente via $foreign_optionsDNS_SERVER=`echo $foreign_option_1 |cut -b 17-`

# Respalda resolv.conf originalcp /etc/resolv.conf /etc/resolv.conf.orig

# Crea un nuevo resolv.conf con el DNS de la VPNecho "nameserver $DNS_SERVER" > /etc/resolv.conf

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 orginalmv /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 losparámetros de los servidores DNS en el archivo resolv.conf(5) en sistemas GNU/Linux de forma automática cuando se conecte al servidorOpenVPN.

Descargue e instale los scripts en el directorio /etc/openvpn:

# 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.*

Para usar los scripts use las siguientes configuraciones:

; Actualizar resolv.conf(5) usando script UPup /etc/openvpn/dns_client.up

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

Para más información sobre foreign_options y la directiva --up y --plugin vea la página del manual de openvpn (8).

Recursos adicionales

Si desea obtener más información sobre los programas y páginas de manual relacionadas se aconseja que acceda a los siguientes recursosadicionales.

Sitios web

En las paginas listadas a continuación encontrará mayor información 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 Certificate Authority(CA) and generating certificates and keys for an OpenVPN server and multiple clients

Paginas de manual

Para conocer más sobre el uso y configuración de los programas utilizados en el capitulo, se recomienda leer los manuales relacionados.

openvpn (8) - secure IP tunnel daemon.

ifconfig (8) - configure 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 configuration file

Capítulo 11. Reforzando la seguridad de OpenVPN

Tabla de contenidos

IntroducciónUsando TLS-auth para autenticación TLSUso del protocolo UDP como medida de prevención de ataques

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

56 of 75 06/01/12 22:40

Page 57: Tutorial Openvpn

Usando llaves RSA y de cifrado simétrico más grandesRevocando Certificados para clientes VPNPreviniendo ataques de tipo Man In The MiddleRecursos adicionales

Sitios webPaginas de manual

Este capitulo está dedicado a extender la información relacionada a los mecanismos de seguridad que ofrece OpenVPN, veremos los parámetrosde configuración y otras configuraciones requeridas para reforzar la seguridad de la VPN.

Introducción

OpenVPN provee diferentes mecanismos para asegurar la privacidad y confidencialidad de los datos transmitidos por el túnel VPN, haremos usode firmas HMAC (Hash-based Message Authentication Code) para la autenticación de paquetes, también conocido como "HMAC firewall", uso delprotocolo UDP para prevenir ataques DoS comunes, crearemos llaves RSA más grandes, como revocar el acceso a la VPN revocando loscertificados x509, agregaremos atributos adicionales al certificado del servidor VPN para prevenir ataques de tipo Man In The Middle, en lassiguientes secciones veremos como asegurar la VPN usando los métodos antes mencionados.

Usando TLS-auth para autenticación TLS

OpenVPN provee un mecanismo de seguridad por capas, hasta ahora solo hemos visto como manejar la autenticación vía llave estática ycertificados x509, en esta sección veremos como una capa de seguridad adicional haciendo uso de la autenticación TLS a través de firmas HMAC.

La directiva tls-auth agrega una firma HMAC adicional a todas las transacciones de paquetes SSL/TLS para verificar la integridad de los paquetestransmitidos entre el cliente y servidor OpenVPN.

Cuando el servidor OpenVPN este configurado para autenticar los paquetes y un cliente no autorizado (no posee una llave HMAC) intentaestablecer una conexión, el servidor rechazará la conexión inmediatamente sin ninguna otra verificación. El uso de las firmas HMAC y el soportede autenticación TLS de OpenVPN proveen una capa adicional de seguridad más allá de la que SSL/TLS por si mismas, por ejemplo, con el uso defirmas HMAC y tls-auth reforzamos la seguridad protegiéndonos contra:

Ataques de Denegación de Servicio (DoS) o ataques de inundación en el puerto UDP de OpenVPN.

Escaneo de puertos para determinar que puertos UDP del servidor están en estado de escucha.

Vulnerabilidades de Buffer Overflow en la implementación SSL/TLS

Negociaciones SSL/TLS originadas desde maquinas no autorizadas, (aunque tales negociaciones resultarán fallidas al final, tls-auth puederechazarlas desde una etapa temprana)

Para agregar el soporte tls-auth en OpenVPN debemos de generar otra llave estática que usaremos como la firma HMAC. La firma la podemosgenerar en el servidor con el siguiente comando:

root@vpn-matriz:/etc/openvpn# openvpn --genkey --secret ta.key

El comando anterior generará una llave estática 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 estaimplementando este método de seguridad después de haber seguido los capítulos anteriores, entonces podrá copiar el archivo ta.key por el túnelVPN.

Vea el contenido de la llave estática para ver el tamaño de la llave y su contenido::

root@vpn-matriz:/etc/openvpn# cat ta.key## 2048 bit OpenVPN static key#-----BEGIN OpenVPN Static key V1-----b55037a4deac4da4b3bc9faec687a601570aa8265dcc18c5df986a9039791fa96220a7cc3970025c3386adef73fa1698e8d6ebd608cc55ffca4afa7cc82a9db198acaacb5873b7a724659f5187bc2901b67fa8c3174567be96bfb306cf5ce9774334516dbbecc9fb4d87083ad106baa74a7cb4d5cdb9bc615f65ca0ada63754e26b1a93cd4289babad21c08f19d36de1e6368cc944125a568cff60e27e90ebfb5fae2d55b625c7425592d475b981acb641ce95c1839c2ec8d0916044d29cc06e76a124b3c4e92224446ca936239ba2eead2c88f8411628d97267e998bedd9fc0cdf05d9cf06e5bb61e44f345fcc96b8271e4289ae84261d75b77cd1798dcd6b6-----END OpenVPN Static key V1-----

Ahora, en el archivo de configuración del servidor OpenVPN de Matriz agregue el parámetro tls-auth y la ruta al archivo de la firma HMAC , elformato de l parámetro tls-auth es:

tls-auth hmac.key direction

Note que cuando se usa la directiva tls-auth y una llave estática, debe definir una dirección, el parámetro direction habilita el uso de 4 llaves(HMAC-send, cipher-encrypt, HMAC-receive, cipher-decrypt) para que cada dirección del flujo de datos tenga su conjunto de llaves HMAC y decifrado. La dirección debe ser complementaria en cada lado de la conexión, por ejemplo, del lado del servidor usa 0 y del cliente(s) use 1.

Edite el archivo de configuración del servidor OpenVPN y agregue:

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

57 of 75 06/01/12 22:40

Page 58: Tutorial Openvpn

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 ejecución puede mandarleuna señal SIGHUP para que se re inicie y re-lea el archivo de configuración 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 señal SIGHUP al proceso openvpn podrá ver esto en los logs:

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

Note los mensajes de Control Channel Authentication que le indican que el soporte fue habilitado tanto para el flujo entrante como saliente.

Copie el archivo de la llave HMAC a cada uno de los clientes que estarán autorizados para conectarse a la VPN y guardelo en un directorio quepueda leer el proceso openvpn, de preferencia en el mismo lugar que almacén los certificados.

Edite el archivo de configuración de cada cliente y agregue el parámetro tls-auth y la ruta al archivo de la llave, además indique la dirección, porejemplo:

tls-auth ta.key 1

Si agrego esta configuración a un cliente que este ejecutándose, entonces también deberá de mandar la señal SIGHUP o reiniciar por completoel proceso OpenVPN.

Después 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 fileSun Feb 22 22:47:33 2009 Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authenticationSun Feb 22 22:47:33 2009 Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication

Ahora solo podrán iniciar conexiones por UDP aquellos sistemas que tengan la firma HMAC y por supuesto, sus respectivos certificados y llavesprivadas.

TODO: Mostrar extracto de log de una conexión rechazada por no estar autenticada.

Para más información sobre el uso del parámetro tls-auth lea la pagina del manual openvpn(8).

Uso del protocolo UDP como medida de prevención de ataques

OpenVPN permite el uso del protocolo UDP ó TCP como medio de transporte para la VPN, el protocolo UDP provee una mejor protección encontra de ataques DoS y escaneo de puertos que la que provee el protocolo TCP. Ver la sección Usando TLS-auth para autenticación TLS para másinformación sobre medidas de protección para el protocolo UDP.

Cuando use el protocolo UDP como medio de transporte asegúrese de definirlo tanto en el archivo de configuración del servidor como de losclientes, por ejemplo:

proto udp

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

Usando llaves RSA y de cifrado simétrico más grandes

Cuando creamos los certificados con pkitool/openssl el tamaño predefinido de las llaves RSA es de 1024 bits, defina la variable de ambienteKEY_SIZE de forma global en el archivo easy-rsa/vars, por ejemplo, para crear llaves de 2048 bits use:

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

58 of 75 06/01/12 22:40

Page 59: Tutorial Openvpn

export KEY_SIZE=2048

Es importante notar que entre más grandes sean las llaves RSA mayor el incremento en la carga del sistema cuando se realiza la negociación dela sesión SSL/TLS, la cual ocurre cada hora, también afecta al momento de la creación de los parámetros Diffie Hellman, pero este procedimientosolo se realiza una sola vez.

Aunque el algoritmo de cifrado predeterminado de OpenVPN es Blowfish (128 bits), OpenVPN soporta todos los tipos de cifrado que estesoportado por la biblioteca OpenSSL, por lo tanto podremos usar diferentes algoritmos de cifrado con llaves de diferentes tamaños.

Use el parámetro cipher para indicar el cifrado a utilizar, por ejemplo puede cambiar a el cifrado AES (Advanced Encryption Standard) dediferentes tamaños. La version de 128-bit de AES (Advanced Encryption Standard) puede ser usada agregando lo siguiente a los archivos deconfiguración del cliente y del servidor:

cipher AES-128-CBC

Nota

Recuerdo que debe de especificar el mismo cifrado en los archivos de configuración de cada cliente y servidor.

Use el comando openvpn con el parámetro --show-ciphers para listar los cifrados soportados:

# openvpn --show-ciphersThe 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 señal SIGHUP o usar sus scripts de inicio de sudistribución.

# 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 delcliente vera algunos mensajes, como los siguientes:

Sun Feb 22 23:01:27 2009 WARNING: 'cipher' is used inconsistently, local='cipher BF-CBC', remote='cipher AES-128-CBC'......Sun Feb 22 23:05:47 2009 Authenticate/Decrypt packet error: cipher final failedSun Feb 22 23:05:57 2009 Authenticate/Decrypt packet error: cipher final failedSun Feb 22 23:06:07 2009 Authenticate/Decrypt packet error: cipher final failedSun Feb 22 23:06:17 2009 Authenticate/Decrypt packet error: cipher final failed

Lo cual indica que no estamos usando el mismo cifrado que en el servidor, para corregir este problema, cambie cipher a AES-128-CBC en el archivo deconfiguración del cliente.

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

59 of 75 06/01/12 22:40

Page 60: Tutorial Openvpn

Revocando Certificados para clientes VPN

Los certificados x509 emitidos para los clientes OpenVPN tienen una fecha de inicio de validez y una fecha de expiración, durante este tiempo losclientes podrán autenticarse con el servidor OpenVPN usando como credenciales el certificado público o llave pública. El servidor OpenVPNautorizará el acceso a los clientes siempre y cuando la fecha de expiración del certificado público del cliente no haya expirado, sin embargo,habrá ocaciones en las que se desee invalidar o revocar un certificado para un cliente OpenVPN de manera que ya no pueda ser usado parapropositos de autenticación.

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 especifico

La llave privada asociada con el certificado ha sido comprometida o robada.

El usuario no recuerda la contraseña con la que se cifro la llave privada asociada a un certificado

Para revocar el certificado 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 módulo pkcs11, pero si no lo tiene cargado la revocación va a fallar, se recomienda que comentetodo 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 certificado o mejor dicho con el common name como argumento, por ejemplo:

# ./revoke-full consultor01.midominio.comUsing configuration from /etc/openvpn/MiEmpresaCA/openssl.cnfEnter pass phrase for /etc/openvpn/MiEmpresaCA/keys/ca.key:SuperPASSPHRASE!!!Revoking Certificate 04.Data Base UpdatedUsing configuration from /etc/openvpn/MiEmpresaCA/openssl.cnfEnter 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/[email protected] 23 at 0 depth lookup:certificate revoked

El comando revoke-full le solicitará el passphrase de la llave privada ca.key para realizar la operación de revocación del certificado. Después levuelve a preguntar el passphrase de la llave ca.key para validar que el certificado haya sido revocado.

Nota

El error 23 en la última linea nos indica que la validación del certificado revocado fallo, esto quiere decir que el certificado fuerevocado exitosamente.

El comando revoke-full generará el archivo de la lista de revocacion de certificados (CRL) crl.pem en el directorio keys. Este archivo debe sercopiado a una ruta a la que el servidor OpenVPN tenga acceso, por ejemplo:

# cp crl.pem /etc/openvpn/

Para habilitar la verificación de la CRL en el servidor OpenVPN, edite el archivo de configuración del servidor OpenVPN y agregue la siguientelinea:

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 conexión serárechazada

Cuando la opción crl-verify es usada en OpenVPN, el archivo CRL será re leido cada vez que un nuevo cliente se conecta, o una conexión existentere negocia la connexión SSL/TLS (por default cada hora). Esto significa que puedes actualizar el archivo CRL mientras el servidor OpenVPN estacorriendo, y que la nueva CRL tome efecto inmediatamente para nuevas conexiones.

Cuando el cliente con el certificado revocado traté de conectarse en el log de OpenVPN se registrará lo siguiente:

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._CA/em201.114.193.4:46423 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/emailAddress=jmedi201.114.193.4:46423 TLS_ERROR: BIO read tls_read_plaintext error: error:140890B2:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:no certificate returned201.114.193.4:46423 TLS Error: TLS object -> incoming plaintext read error201.114.193.4:46423 TLS Error: TLS handshake failed

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

60 of 75 06/01/12 22:40

Page 61: Tutorial Openvpn

201.114.193.4:46423 Fatal TLS error (check_tls_errors_co), restarting201.114.193.4:46423 SIGUSR1[soft,tls-error] received, client-instance restartingTCP/UDP: Closing socket

Si el cliente para el cual el certificado fue revocado ya esta conectado, puedes reiniciar el servidor vía la señal (SIGUSR1 o SIGHUP) ydesconectar todos los clientes, o puedes conectarte a la consola de administración del servidor OpenVPN y usar el comando kill paraexplicitamente matar la instancía del cliente en el servidor sin tener que interrumpir a los otros usuarios.

Para más información de la consola de administración de OpenVPN vea el capitulo La Consola de Administración 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 elservidor, asegurece de reforzar la verificación del certificado del servidor en el cliente. Hay 5 formas diferentes para realizar esta tarea, listadasen el orde de precedencia:

[OpenVPN 2.1 y recientes] Crea el certificado del servidor con el tipo extendido de servidor. El RFC3280 define que se puede usar el tiposerver para certificados de uso solo de servidor. El atributo especial para designar un certificado como solo-servidor, esnsCertType=server, para crear certificados 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 creación de CA se creo el certificado del servidor con el atributo extendido nsCertType=server.

Para que los clientes hagan la validación de dicho atributo, deberá de agregar a cada cliente OpenVPN la siguiente linea en su archivo deconfiguración:

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, ysi la validación del tipo de certificado 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 también se tiene el soporte para verificar el tipo de certificado, para la verificación en losclientes 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, ysi la validación del tipo de certificado 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 verificación del certificado del servidor OpenVPN, use ladirectiva tls-remote en el cliente para permitir o rechazar conexiones del servidor OpenVPN basado en el Common Name del certificado delservidor.

Para ver el Common Name o Subject de un certificado x509 podemos usar el comando:

root@vpn-matriz:/etc/openvpn# openssl x509 -noout -subject -in vpnserver.midominio.com.crtsubject= /C=MX/ST=Distrito Federal/L=Mexico/O=Mi Empresa S.A./OU=Redes/CN=vpnserver.midominio.com/[email protected]

Nota

El subject del certificado del servidor OpenVPN tiene espacios, esto fue porque asi se introdujo la información al momentode la creación, sin embargo, OpenVPN convierte los espacios por guiones bajo "_" al momento de presentar el certificado aun 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/[email protected]

Si en el Subject del certificado del servidor se encuentran espacios en blanco, tendrá que convertirlos a "_" para que la validación 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/[email protected]

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/[email protected]"

Deberá de reiniciar el cliente OpenVPN para que este cambio tome efecto, cuando un cliente trate de conectarse con el servidor OpenVPN, ysi la validación del tipo de certificado 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/[email protected]

Recursos adicionales

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

61 of 75 06/01/12 22:40

Page 62: Tutorial Openvpn

Si desea obtener más información sobre los programas y páginas de manual relacionadas se aconseja que acceda a los siguientes recursosadicionales.

Sitios web

En las paginas listadas a continuación encontrará mayor información 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 más sobre el uso y configuración 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

Capítulo 12. La Consola de Administración OpenVPN

La interfaz de administración de OpenVPN permite que OpenVPN sea administrado y controlado desde un programa externo vía un socket TCP.

la interfaz de administración esta implementada usando una conexión TCP cliente/servidor, en la cual OpenVPN scucha en una dirección IP ypuerto especifico para las conexiones de administración.

Para habilitar la consola de administración en el servidor OpenVPN agrege los siguientes parametros al archivo de configuración del servidor:

management 127.0.0.1 1195

Ya que la interfaz de administración no provee mecanismos de autenticación por contraseña, se recomienda que active la interfaz solo en lainterfaz localhost, cambie el puerto a su elección.

Re inicie el servidor OpenVPN para que la interfaz de administración 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 administración de OpenVPN puede usar un cliente telnet, por ejemplo:

# telnet 127.0.0.1 1195Trying 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:

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

Para desconectarse de la interfaz de administración use el comando quit:

quitConnection closed by foreign host.

Para ver los clientes conectados use el comando status:

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

62 of 75 06/01/12 22:40

Page 63: Tutorial Openvpn

statusOpenVPN CLIENT LISTUpdated,Sat Apr 10 22:06:54 2010Common Name,Real Address,Bytes Received,Bytes Sent,Connected Sinceguadalajara.example.com,187.154.8.201:55788,58131094,100947999,Wed Apr 7 20:14:21 2010ROUTING TABLEVirtual Address,Common Name,Real Address,Last Ref10.97.0.5,guadalajara.example.com,187.154.8.201:55788,Sat Apr 10 21:27:44 2010172.16.70.0/24,guadalajara.example.com,187.154.8.201:55788,Wed Apr 7 20:14:24 2010GLOBAL STATSMax bcast/mcast queue length,0END

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 configurado para auto reconectarse después de perder la conexión con el servidor, el comando kill obligará al clientea reconectarse.

Para más información acerca de la interfaz de administración ver: Management Interface: http://openvpn.net/index.php/open-source/documentation/miscellaneous/79-management-interface.html

Capítulo 13. Administración avanzada de clientes y certificados

Tabla de contenidos

Autenticación basada en Usuario y ContraseñaLlaves privadas protegidas por contraseña

Estableciendo contraeña en Llave Privada sin protecciónEstableciendo contraseña en Llave Privada en GNU/Linux con OpenSSLEstableciendo contraeña en Llave Privada en WindowsCreando llaves privadas con contraseña

Cambiando la contraseña de una Llave privada protegidaCambiando la contraseña de una Llave Privada protegida en GNU/Linux con OpenSSLCambiando la contraseña de una Llave Privada protegida en Windows

En este capitulo veremos algunos métodos adicionales para la administración de los cientes y los certificados de las VPNs.

Veremos como configurar el servidor OpenVPN para agregar un nivel más para la autenticación de los usaurios, en este caso usaremos el pluginPAM para permitir el acceso a los usuarios de sistema, en especial a los de un grupo en especifico.

También veremos como establecer, cambiar y eliminar la contraseña de la llave privada de un cliente.

Autenticación basada en Usuario y Contraseña

En el arcihvo de configuración agregue la directiva plugin para cargar el módulo PAM:

# Autenticación de usuarios locales de sistema por medio de PAMplugin /usr/lib/openvpn/openvpn-auth-pam.so ovpn

Le estamos especificando que use el plugin de autenticación openvpn-auth-pam.so (incluido) y que use el modulo ovpn de PAM.

El archivo del modulo ovpn no existe, por lo que crearemos el archivo /etc/pam.d/ovpn con el siguiente contenido:

## /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.permitidosauth requisite pam_unix.so nullok_secureauth optional pam_smbpass.so migrate missingok

Con esta configuración decimos que use el modulo pam_listfile.so para permitir autenticación basada en grupos, crearemos el archivo /etc/security/vpn.grupos.permitidos en el cual indicaremos que grupos son los permitidos.

root@firewall:/etc/openvpn# cat /etc/security/vpn.grupos.permitidosvpn

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

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

63 of 75 06/01/12 22:40

Page 64: Tutorial Openvpn

Y

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

Es necesario que se reinicie el servidor OpenVPN para que tome los cambios.

# kill -SIGHUP `pidof openvpn`

En el archivo de configuración del cliente OpenVPN se agregará la siguiente linea:

auth-user-pass

Cuando un cliente OpenVPN se autentique le solicitará un nombre de usuario y contraseña, por ejemplo:

root@cliente:/etc/openvpn # openvpn monterrey_Lan2LanTLS.confMon Feb 23 02:37:12 2009 OpenVPN 2.1_rc7 x86_64-pc-linux-gnu [SSL] [LZO2] [EPOLL] built on Jun 11 2008Enter Auth Username:jorgeEnter Auth Password:password

Si el usuario y la contraseña son validos, y además el usuario jorge pertenece al grupo vpn, se le garantizará el acceso.

En caso que el usuario o la contraseña no sean validos, o el usuario no pertenece al grupo vpn, entonces el usuario verá un mensaje como este ensus logs:

Mon Feb 23 02:37:27 2009 AUTH: Received AUTH_FAILED control messageMon Feb 23 02:37:27 2009 TCP/UDP: Closing socketMon Feb 23 02:37:27 2009 SIGTERM[soft,auth-failure] received, process exiting

Llaves privadas protegidas por contraseña

Si creo llaves privadas protegidas con contraseña, probablemente habrá ocaciones en las que los usuarios requieran cambiar la contraseña de sullave privada, o quizas también quiera establecer una contraseña a alguna llave privada que no haya sido creada con contraseña. Existendiferentes procedimientos para llevar a cabo dicha tarea, dependerán de el sistema operativo en el cual se encuentre el archivo de la llaveprivada.

A continuación se describen los procedimientos relacionados con la tarea de establecer contraeseñas en llaves privadas tanto en GNU/Linux yWindows.

Estableciendo contraeña en Llave Privada sin protección

Si creo las llaves privadas sin crontraseña, y ahora desea establecer una contraeseña a su llave privada podrá utilizar alguno de los metodosdescritos a continuación.

Estableciendo contraseña en Llave Privada en GNU/Linux con OpenSSL

Si usa OpenVPN como cliente en algún sistema operativo GNU/Linux, usted podrá utilizar el comando openssl para establecer una contraseña asu 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 siguientecomando para crear una copia de su llave privada, pero en este caso, la copia estará protegida por una contraseña.

root@cliente:/etc/openvpn # openssl rsa -des3 -in cliente.midominio.com.key -out cliente.midominio.com-SI-PASSPHRASE.keywriting RSA keyEnter PEM pass phrase: Ll4v3d3p4s0Verifying - 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 contraseña de la llave privada, por ejemplo:

root@cliente:/etc/openvpn # openvpn monterrey_Lan2LanTLS.confMon Feb 23 01:49:21 2009 OpenVPN 2.1_rc7 x86_64-pc-linux-gnu [SSL] [LZO2] [EPOLL] built on Jun 11 2008Enter Private Key Password: Ll4v3d3p4s0

Si teclea la contraseña correcta entonces se podrá autenticar correctamente, en caso de que la contraeña de la llave privada este mal, vera unmensaje en los logs así:

root@cliente:/etc/openvpn # openvpn monterrey_Lan2LanTLS.confMon Feb 23 01:50:30 2009 OpenVPN 2.1_rc7 x86_64-pc-linux-gnu [SSL] [LZO2] [EPOLL] built on Jun 11 2008Enter 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:0906A0Mon Feb 23 01:50:31 2009 Error: private key password verification failedMon Feb 23 01:50:31 2009 Exiting

Estableciendo contraeña en Llave Privada en Windows

Para establecer una contraseña a la llave privada en sistemas operativos Windows, puede usar el comando openssl en MS-DOS, o puede utilizar la

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

64 of 75 06/01/12 22:40

Page 65: Tutorial Openvpn

interfaz gráfica de OpenVPN, por ejemplo:

Meter Imagen.

Creando llaves privadas con contraseña

Si quiere generar las llaves privadas con contraseña desde el inicio, use el comando pkitool con la opción --pass, por ejemplo:

root@vpn-matriz:/etc/openvpn/MiEmpresaCA# ./pkitool --interact --pass cliente8vpn.midominio.comGenerating 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 incorporatedinto 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 blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [MX]:

Cambiando la contraseña de una Llave privada protegida

Si ya tiene una llave privada con una contraeña establecida, y ahora desea actualizar la contraeña de su llave publica, puede usar el comandoopenssl de la misma forma que se utilizo para asignar una contraeña, lo unico que cambiará es que le solicitará la contraseña actual.

Cambiando la contraseña 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 contaeña de su llave privada:

root@cliente:/etc/openvpn # openssl rsa -des3 -in cliente.midominio.com.key -out cliente.midominio.com-NUEVO-PASSPHRASE.keyEnter pass phrase for cliente.midominio.com.key:PASSPHRASE_ACTUALwriting RSA keyEnter PEM pass phrase:PASSPHRASE_NUEVOVerifying - Enter PEM pass phrase:PASSPHRASE_NUEVO

Cambiando la contraseña de una Llave Privada protegida en Windows

Si usa el sistema operativo Windows, y tiene una llave privada protegida por contraseña y desea actualizarla, puede usar el mismo procedimientodescrito en la sección Estableciendo contraeña en Llave Privada en Windows.

Capítulo 14. Resolución de Problemas

Rutas?

Firewall

Capítulo 15. Apendices

Tabla de contenidos

El archivo de configuración /etc/openvpn/servidor.conf (Servidor OpenVPN)El archivo de configuración /etc/openvpn/cliente.confUsando el servicio DNS Dinamico de DynDNS con el cliente Dinamico ddclient

Parrafo.

El archivo de configuración /etc/openvpn/servidor.conf (Servidor OpenVPN)

################################################## Configuración para servidor OpenVPN 2.0 ## multi-cliente. ## ## Comentarios precedidos con '#' o ';' ##################################################

# Dirección IP local en la que OpenVPN escucha# peticiones de clientes remotos (opcional);local a.b.c.d

# En que puerto escucha peticiones el servidor OpenVPNport 1194

# Usando el protocolo UDP para recibir conexiónes remotasproto udp

# Configuración de interfaz TUN para VPN tipo Enrutadadev tun

# Configuraciones TLS/SSL

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

65 of 75 06/01/12 22:40

Page 66: Tutorial Openvpn

## Ruta al archivo del Certificado Raíz con la que fueron# firmados los cerficiadosca ca.crt# Ruta del archivo del certificado del servidor OpenVPNcert vpnserver.intracompugraf.info.crt# Ruta del archivo de la llave privada del servidor OpenVPNkey vpnserver.intracompugraf.info.key

# Ruta al archivo de parametros Diffie hellman.dh dh1024.pem

# Configuración 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 dirección 10.98.0.1 para si mismo.# y el resto serán asignadas dinamicamente a los clientes.server 10.98.0.0 255.255.255.0

# Cada dirección 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 dirección IP previamente asignada.ifconfig-pool-persist ipp.txt

# Directorio para Configuraciones de Clientesclient-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 configuración "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 criptográfico que usará OpenVPN.# NOTE: Esta misma configuración 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 compresión en el tunnel VPN# NOTE: esta misma configuración debe ser usada# para los clientes de la VPN.comp-lzo

# Separación de privilegios para el servidor OpenVPN,# después 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-keypersist-tun

# Registro de eventos para el estado de conexiones# En el log de estado se registra información:# - Conexiones activas, truncadas# - Información del cliente: IP pública 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 envíar 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 conexión# 9 es extremadamente verboso, tipo tcpdump.verb 3

# Silence repeating messages. Por lo menos 20 mensajes# consecutivos de la misma categoría de mensaje serán# registrado en en log.;mute 20

## Configuraciónes para interfaz de administración OpenVPN ##

# Abrir interfaz de administración en la dirección 127.0.0.1

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

66 of 75 06/01/12 22:40

Page 67: Tutorial Openvpn

# en el puerto 1195 (TCP)management 127.0.0.1 1195

El archivo de configuración /etc/openvpn/cliente.conf

################################################## Configuración 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 OpenVPNclient

# Configuración de interfaz TUN para VPN tipo Enrutadadev tun

# Conectarse por UDP al servidor OpenVPN remotoproto udp

# Hostname o dirección IP del servidor OpenVPN# también 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# dirección IP dinamica.resolv-retry infinite

# No hacer bind a un número de puerto local en especificonobind

# 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-keypersist-tun

# Configuraciones SSL/TLS## Ruta al archivo del Certificado Raíz con la que fueron# firmados los cerficiadosca ca.crt# Ruta del archivo del certificado del servidor OpenVPNcert jmedina.intracompugraf.info.crt# Ruta del archivo de la llave privada del servidor OpenVPNkey jmedina.intracompugraf.info.key

## Protección anti Man In The Middle#### Solo aceptar conexiónes de servidores OpenVPN que tienen# el atributo extendido nsCertType=server. Esta es una protección# importante para protegerse contra ataques potenciales de tipo# Main In the Middle: http://openvpn.net/howto.html#mitmns-cert-type server

# Solo aceptar conexiónes 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/[email protected]"

# Cifrado criptográfico que usará OpenVPN.# NOTE: Esta misma configuración debe de ser usada# en el servidor OpenVPN.cipher BF-CBC # Blowfish 128 bits (predeterminado);cipher AES-128-CBC # AES 128 bits

# Habilitanto compresión en el tunnel VPN# NOTE: esta misma configuración debe ser usada# en el servidor OpenVPN.comp-lzo

# Nivel del severidad para logs de OpenVPNverb 3

# Repetición silenciosa de mensajes de log. Por lo menos 20 mensajes# consecutivos de la misma categoría de mensaje serán# 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 actualización automática de ladirección IP publica, esto es util cuando tenemos una conexión a Internet con dirección IP dinamica.

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

67 of 75 06/01/12 22:40

Page 68: Tutorial Openvpn

El primer paso para usar el servicio

En Ubuntu puede usar apt-get:

root@vpn-matriz:~# apt-get install ddclient

Si utiliza Ubuntu debe de configurar ddclient para que corra como demonio, al correr como demonio se puede configurar el intervalo de tiempoentre actualizaciones, por ejemplo, en el archivo /etc/default/ddclient configurare los siguientes parametros:

# Set to "true" if ddclient should run in daemon moderun_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"

Configure ddclient usando el archivo de configuración /etc/ddclient.conf, por ejemplo:

Ejemplo de configuración para ddclient:

# Configuration file for ddclient generated by debconf# Configuración para que la revision de la IP la haga por medio# de la pagina web de dyndns. Util cuando la conexion es a través# de un router o no tiene una dirección IP publica.## /etc/ddclient.conf

pid=/var/run/ddclient.pidsyslog=yesprotocol=dyndns2use=web, web=checkip.dyndns.org/, web-skip='IP Address'server=members.dyndns.orglogin=USUARIO_DYNDNSpassword='PASSWORD_DYNDNS'misubdominio.dyndns.org

Apéndice A. Historial de Revisiones

Historial de revisiones

Revisión 0.01 2009-02-02 Jorge Medina

Documento Inicial, incluye la estructura del documento y contenido para los capitulos iniciales.

Revisión 0.10 2009-02-22 Jorge Medina

Se completaro la sección de creacion de tuneles punto a punto tanto con llave estatica como por certificados.

Revisión 0.20 2009-02-23 Jorge Medina

Se agrego capitulo para reforzar la seguridad de OpenVPN

Revisión 0.30 2009-02-23 Jorge Medina

Se agregaron las secciones: Autenticación con usuario y contraseña, Llaves privadas protegidas por contraseña

Revisión 0.40 2009-02-23 Jorge Medina

Se agregó capitulo para la instalación del cliente OpenVPN, con la sección para la instalación del cliente en GNU/Linux y Windows XP

Revisión 0.42 2009-07-31 Jorge Medina

Se ordeno como procedimiento la instalacion del cliente de windows y se agregaron explicaciones incluyendo screenshots

Revisión 0.44 2009-07-31 Jorge Medina

Se extendio la sección del cliente para GNU/Linux

Revisión 0.50 2010-02-12 Jorge Medina

Agregue contenido a la sección de revocacion de certificados para clientes VPN

Revisión 0.60 2010-02-12 Jorge Medina

Agregue tip para ejecutar automaticamente el cliente OpenVPN GUI en windows...., Cambie los ejemplos de actualizacion automatica de DNS encliente vpn, Actualice un poco la seccion para crear certificados para los clietnes VPN

Revisión 0.70 2010-04-11 Jorge Medina

Se actualiza el capitulo de instalación del cliente OpenVPN, se incluyen los requisitos de sistema para el cliente en GNU/Linux y MS WindowsXP, Vistas y 7, información sobre el directorio de configuraciones para GNU/Linux y MS Windows, como controlar el servicio OpenVPN enGNU/Linux, Conectarse a la VPN desde MS Windows usando OpenVPN GUI, incluyendo tips para Windows Vista y 7 referentes a permiso deUAC, resolución de problemas comunes.

Revisión 0.80 2010-04-11 Jorge Medina

Se actualiza el capitulo de instalación del servidor OpenVPN, se incluyen los requisitos de sistema para el servidor en GNU/Linux, informaciónsobre el directorio de configuraciones para GNU/Linux, como controlar el servicio OpenVPN en GNU/Linux.

Revisión 0.82 2010-04-11 Jorge Medina

Actualización del capitulo de la consola de administración de OpenVPN, incluye como habilitarla y uso de comandos basicos.

Revisión 0.90 2010-04-11 Jorge Medina

Se agrego el capitulo información de los metodos de autenticación de OpenVPN, se agrega información básica de los metodos basados en llavesestaticas y RSA.

Revisión 0.91 2010-04-11 Jorge Medina

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

68 of 75 06/01/12 22:40

Page 69: Tutorial Openvpn

Actualice el Resumen del documento, agregue la información de la reseña de OpenVPN y sus caracteristicas, junto con un historial de cambiossignificativos en el desarrollo de OpenVPN.

Revisión 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 configuracion.

Información para conexiones client-to-client.

Nuevas referencias web.

Se re ordenaron los requerimientos, instalación y ejecución, más referencias.

Mas información para preparar requerimientos de cliente, servidor y red.

Correcciones generales en ejemplos y uso de easy-rsa para revocar certificados, más referencias.

Referencia a manual de la interfaz de administracion.

Movi esta información al capitulo de introducción a OpenVPN.

Agregue prefacio.xml y quite el de los métodos de autenticación.

Agregue sección de los métodos de autenticación de openvpn a capitulo intro a openvpn

Revisión 0.93 2010-06-24 Jorge Medina

Actualizaciones en capitulo vpn punto-a-punto

Cambios en titulo de capitulo y secciones.

Re organizacion de archivos de configuracion.

Correcciones en ejemplos, mas explicaciones.

Nuevas referencias web.

Agregue sección de los métodos de autenticación de openvpn.

Actualizacion en archivos de configuracion y mas explicaciones.

Nueva sección para asignar IPs estáticas para multi-clientes.

Más información de envio de opciones DHCP a clientes.

Mas referencias.

Actualizaciones en configuraciones para usar plugin pam auth.

Actualizacion en introduccion de configuracion CA, revision ejemplos y mas referencias.

Apéndice B. Licencia de Documentación Libre de GNU

Versión 1.2, Noviembre 2002

Tabla de contenidos

PREÁMBULOAPLICABILIDAD Y DEFINICIONESCOPIA LITERALCOPIADO EN CANTIDADMODIFICACIONESCOMBINACIÓN DE DOCUMENTOSCOLECCIONES DE DOCUMENTOSAGREGACIÓN CON TRABAJOS INDEPENDIENTESTRADUCCIÓNTERMINACIÓNREVISIONES FUTURAS DE ESTA LICENCIAADENDA: Cómo usar esta Licencia en sus documentos

This is an unofficial translation of the GNU Free Documentation License into Spanish. It was not published by the Free SoftwareFoundation, and does not legally state the distribution terms for documentation that uses the GNU FDL -- only the original English textof the GNU FDL does that. However, we hope that this translation will help Spanish speakers understand the GNU FDL better.

Ésta es una traducción no oficial de la GNU Free Document License a Español (Castellano). No ha sido publicada por la Free SoftwareFoundation y no establece legalmente los términos de distribución para trabajos que usen la GFDL (sólo el texto de la versión originalen Inglés de la GFDL lo hace). Sin embargo, esperamos que esta traducción ayude los hispanohablantes a entender mejor la GFDL. Laversión original de la GFDL esta disponible en la Free Software Foundation.

Esta traducción está basada en una de la versión 1.1 de Igor Támara y Pablo Reyes. Sin embargo la responsabilidad de su interpretaciónes de Joaquín 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 distribución de copias literales de este documento de licencia, pero no se permiten cambios[1].

PREÁMBULO

El propósito de esta Licencia es permitir que un manual, libro de texto, u otro documento escrito sea libre en el sentido de libertad: asegurar atodo el mundo la libertad efectiva de copiarlo y redistribuirlo, con o sin modificaciones, de manera comercial o no. En segundo término, esta

Licencia proporciona al autor y al editor[2] una manera de obtener reconocimiento por su trabajo, sin que se le considere responsable de lasmodificaciones realizadas por otros.

Esta Licencia es de tipo copyleft, lo que significa que los trabajos derivados del documento deben a su vez ser libres en el mismo sentido.Complementa la Licencia Pública General de GNU, que es una licencia tipo copyleft diseñada para el software libre.

Hemos diseñado esta Licencia para usarla en manuales de software libre, ya que el software libre necesita documentación libre: un programa

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

69 of 75 06/01/12 22:40

Page 70: Tutorial Openvpn

libre debe venir con manuales que ofrezcan la mismas libertades que el software. Pero esta licencia no se limita a manuales de software; puedeusarse para cualquier texto, sin tener en cuenta su temática o si se publica como libro impreso o no. Recomendamos esta licencia principalmentepara trabajos cuyo fin 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 autorque indique que puede ser distribuido bajo los términos de esta Licencia. Tal nota garantiza en cualquier lugar del mundo, sin pago de derechos ysin límite de tiempo, el uso de dicho trabajo según las condiciones aquí estipuladas. En adelante la palabra Documento se referirá a cualquiera dedichos manuales o trabajos. Cualquier persona es un licenciatario y será referido como Usted. Usted acepta la licencia si copia. modifica odistribuye el trabajo de cualquier modo que requiera permiso según la ley de propiedad intelectual.

Una Versión Modificada del Documento significa cualquier trabajo que contenga el Documento o una porción del mismo, ya sea una copia literal ocon modificaciones y/o traducciones a otro idioma.

Una Sección Secundaria es un apéndice con título o una sección preliminar del Documento que trata exclusivamente de la relación entre losautores o editores y el tema general del Documento (o temas relacionados) pero que no contiene nada que entre directamente en dicho temageneral (por ejemplo, si el Documento es en parte un texto de matemáticas, una Sección Secundaria puede no explicar nada de matemáticas). Larelación puede ser una conexión histórica con el tema o temas relacionados, o una opinión legal, comercial, filosófica, ética o política acerca deellos.

Las Secciones Invariantes son ciertas Secciones Secundarias cuyos títulos son designados como Secciones Invariantes en la nota que indica queel documento es liberado bajo esta Licencia. Si una sección no entra en la definición de Secundaria, no puede designarse como Invariante. Eldocumento puede no tener Secciones Invariantes. Si el Documento no identifica 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 lanota que indica que el documento es liberado bajo esta Licencia. Un Texto de Cubierta Delantera puede tener como mucho 5 palabras, y uno deCubierta Trasera puede tener hasta 25 palabras.

Una copia Transparente del Documento, significa una copia para lectura en máquina, representada en un formato cuya especificación estádisponible al público en general, apto para que los contenidos puedan ser vistos y editados directamente con editores de texto genéricos o (paraimágenes compuestas por puntos) con programas genéricos de manipulación de imágenes o (para dibujos) con algún editor de dibujosampliamente disponible, y que sea adecuado como entrada para formateadores de texto o para su traducción automática a formatos adecuadospara formateadores de texto. Una copia hecha en un formato definido como Transparente, pero cuyo marcaje o ausencia de él haya sido diseñadopara impedir o dificultar modificaciones posteriores por parte de los lectores no es Transparente. Un formato de imagen no es Transparente si seusa para una cantidad de texto sustancial. Una copia que no es Transparente se denomina Opaca.

Como ejemplos de formatos adecuados para copias Transparentes están ASCII puro sin marcaje, formato de entrada de Texinfo, formato deentrada de LaTeX, SGML o XML usando una DTD disponible públicamente, y HTML, PostScript o PDF simples, que sigan los estándares ydiseñados para que los modifiquen personas. Ejemplos de formatos de imagen transparentes son PNG, XCF y JPG. Los formatos Opacos incluyenformatos propietarios que pueden ser leídos y editados únicamente en procesadores de palabras propietarios, SGML o XML para los cuáles lasDTD y/o herramientas de procesamiento no estén ampliamente disponibles, y HTML, PostScript o PDF generados por algunos procesadores depalabras sólo como salida.

La Portada significa, en un libro impreso, la página de título, más las páginas siguientes que sean necesarias para mantener legiblemente elmaterial que esta Licencia requiere en la portada. Para trabajos en formatos que no tienen página de portada como tal, Portada significa el textocercano a la aparición más prominente del título del trabajo, precediendo el comienzo del cuerpo del texto.

Una sección Titulada XYZ significa una parte del Documento cuyo título es precisamente XYZ o contiene XYZ entre paréntesis, a continuación detexto que traduce XYZ a otro idioma (aquí XYZ se refiere a nombres de sección específicos mencionados más abajo, como Agradecimientos,Dedicatorias , Aprobaciones o Historia. Conservar el Título de tal sección cuando se modifica el Documento significa que permanece una sección

Titulada XYZ según esta definición[3] .

El Documento puede incluir Limitaciones de Garantía cercanas a la nota donde se declara que al Documento se le aplica esta Licencia. Seconsidera que estas Limitaciones de Garantía están incluidas, por referencia, en la Licencia, pero sólo en cuanto a limitaciones de garantía:cualquier otra implicación que estas Limitaciones de Garantía puedan tener es nula y no tiene efecto en el significado de esta Licencia.

[3] En sentido estricto esta licencia parece exigir que los títulos sean exactamente Acknowledgements, Dedications, Endorsements e History, eninglés.

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 decopyright y la nota que indica que esta Licencia se aplica al Documento se reproduzcan en todas las copias y que usted no añada ninguna otracondición a las expuestas en esta Licencia. Usted no puede usar medidas técnicas para obstruir o controlar la lectura o copia posterior de lascopias que usted haga o distribuya. Sin embargo, usted puede aceptar compensación a cambio de las copias. Si distribuye un númerosuficientemente grande de copias también deberá seguir las condiciones de la sección 3.

Usted también puede prestar copias, bajo las mismas condiciones establecidas anteriormente, y puede exhibir copias públicamente.

COPIADO EN CANTIDAD

Si publica copias impresas del Documento (o copias en soportes que tengan normalmente cubiertas impresas) que sobrepasen las 100, y la notade licencia del Documento exige Textos de Cubierta, debe incluir las copias con cubiertas que lleven en forma clara y legible todos esos Textos deCubierta: Textos de Cubierta Delantera en la cubierta delantera y Textos de Cubierta Trasera en la cubierta trasera. Ambas cubiertas debenidentificarlo a Usted clara y legiblemente como editor de tales copias. La cubierta debe mostrar el título completo con todas las palabrasigualmente prominentes y visibles. Además puede añadir otro material en las cubiertas. Las copias con cambios limitados a las cubiertas, siempreque conserven el título del Documento y satisfagan estas condiciones, pueden considerarse como copias literales.

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

70 of 75 06/01/12 22:40

Page 71: Tutorial Openvpn

Si los textos requeridos para la cubierta son muy voluminosos para que ajusten legiblemente, debe colocar los primeros (tantos como searazonable colocar) en la verdadera cubierta y situar el resto en páginas adyacentes.

Si Usted publica o distribuye copias Opacas del Documento cuya cantidad exceda las 100, debe incluir una copia Transparente, que pueda serleída por una máquina, con cada copia Opaca, o bien mostrar, en cada copia Opaca, una dirección de red donde cualquier usuario de la mismatenga acceso por medio de protocolos públicos y estandarizados a una copia Transparente del Documento completa, sin material adicional. Siusted hace uso de la última opción, deberá tomar las medidas necesarias, cuando comience la distribución de las copias Opacas en cantidad, paraasegurar que esta copia Transparente permanecerá accesible en el sitio establecido por lo menos un año después de la última vez que distribuyauna copia Opaca de esa edición al público (directamente o a través 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 número de copias, paradarles la oportunidad de que le proporcionen una versión actualizada del Documento.

MODIFICACIONES

Puede copiar y distribuir una Versión Modificada del Documento bajo las condiciones de las secciones 2 y 3 anteriores, siempre que usted liberela Versión Modificada bajo esta misma Licencia, con la Versión Modificada haciendo el rol del Documento, por lo tanto dando licencia dedistribución y modificación de la Versión Modificada a quienquiera posea una copia de la misma. Además, debe hacer lo siguiente en la VersiónModificada:

A. Usar en la Portada (y en las cubiertas, si hay alguna) un título distinto al del Documento y de sus versiones anteriores (que deberían, sihay alguna, estar listadas en la sección de Historia del Documento). Puede usar el mismo título de versiones anteriores al original siempre ycuando quien las publicó originalmente otorgue permiso.B. Listar en la Portada, como autores, una o más personas o entidades responsables de la autoría de las modificaciones de la VersiónModificada, junto con por lo menos cinco de los autores principales del Documento (todos sus autores principales, si hay menos de cinco), amenos que le eximan de tal requisito.C. Mostrar en la Portada como editor el nombre del editor de la Versión Modificada.D. Conservar todas las notas de copyright del Documento.E. Añadir una nota de copyright apropiada a sus modificaciones, adyacente a las otras notas de copyright.F. Incluir, inmediatamente después de las notas de copyright, una nota de licencia dando el permiso para usar la Versión Modificada bajo lostérminos de esta Licencia, como se muestra en la Adenda al final 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 lanota de Licencia del Documento original.H. Incluir una copia sin modificación de esta Licencia.I. Conservar la sección Titulada Historia, conservar su Título y añadirle un elemento que declare al menos el título, el año, los nuevos autoresy el editor de la Versión Modificada, tal como figuran en la Portada. Si no hay una sección Titulada Historia en el Documento, crear unaestableciendo el título, el año, los autores y el editor del Documento, tal como figuran en su Portada, añadiendo además un elementodescribiendo la Versión Modificada, como se estableció en la oración anterior.J. Conservar la dirección en red, si la hay, dada en el Documento para el acceso público a una copia Transparente del mismo, así como lasotras direcciones de red dadas en el Documento para versiones anteriores en las que estuviese basado. Pueden ubicarse en la secciónHistoria. Se puede omitir la ubicación en red de un trabajo que haya sido publicado por lo menos cuatro años antes que el Documentomismo, o si el editor original de dicha versión da permiso.K. En cualquier sección Titulada Agradecimientos o Dedicatorias, Conservar el Título de la sección y conservar en ella toda la sustancia y eltono de los agradecimientos y/o dedicatorias incluidas por cada contribuyente.L. Conservar todas las Secciones Invariantes del Documento, sin alterar su texto ni sus títulos. Números de sección o el equivalente no sonconsiderados parte de los títulos de la sección.M. Borrar cualquier sección titulada Aprobaciones. Tales secciones no pueden estar incluidas en las Versiones Modificadas.N. No cambiar el título de ninguna sección existente a Aprobaciones ni a uno que entre en conflicto con el de alguna Sección Invariante.O. Conservar todas las Limitaciones de Garantía.

Si la Versión Modificada incluye secciones o apéndices nuevos que califiquen como Secciones Secundarias y contienen material no copiado delDocumento, puede opcionalmente designar algunas o todas esas secciones como invariantes. Para hacerlo, añada sus títulos a la lista deSecciones Invariantes en la nota de licencia de la Versión Modificada. Tales títulos deben ser distintos de cualquier otro título de sección.

Puede añadir una sección titulada Aprobaciones, siempre que contenga únicamente aprobaciones de su Versión Modificada por otras fuentes --porejemplo, observaciones de peritos o que el texto ha sido aprobado por una organización como la definición oficial de un estándar.

Puede añadir un pasaje de hasta cinco palabras como Texto de Cubierta Delantera y un pasaje de hasta 25 palabras como Texto de CubiertaTrasera en la Versión Modificada. Una entidad solo puede añadir (o hacer que se añada) un pasaje al Texto de Cubierta Delantera y uno al deCubierta Trasera. Si el Documento ya incluye un textos de cubiertas añadidos previamente por usted o por la misma entidad que ustedrepresenta, usted no puede añadir otro; pero puede reemplazar el anterior, con permiso explícito 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 implicaraprobación de cualquier Versión Modificada.

COMBINACIÓN DE DOCUMENTOS

Usted puede combinar el Documento con otros documentos liberados bajo esta Licencia, bajo los términos definidos en la sección 4 anterior paraversiones modificadas, siempre que incluya en la combinación todas las Secciones Invariantes de todos los documentos originales, sin modificar,listadas todas como Secciones Invariantes del trabajo combinado en su nota de licencia. Así mismo debe incluir la Limitación de Garantía.

El trabajo combinado necesita contener solamente una copia de esta Licencia, y puede reemplazar varias Secciones Invariantes idénticas por unasola copia. Si hay varias Secciones Invariantes con el mismo nombre pero con contenidos diferentes, haga el título de cada una de estas seccionesúnico añadiéndole al final del mismo, entre paréntesis, el nombre del autor o editor original de esa sección, si es conocido, o si no, un númeroúnico. Haga el mismo ajuste a los títulos de sección en la lista de Secciones Invariantes de la nota de licencia del trabajo combinado.

En la combinación, debe combinar cualquier sección Titulada Historia de los documentos originales, formando una sección Titulada Historia; dela misma forma combine cualquier sección Titulada Agradecimientos, y cualquier sección Titulada Dedicatorias. Debe borrar todas las seccionestituladas Aprobaciones.

COLECCIONES DE DOCUMENTOS

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

71 of 75 06/01/12 22:40

Page 72: Tutorial Openvpn

Puede hacer una colección que conste del Documento y de otros documentos liberados bajo esta Licencia, y reemplazar las copias individuales deesta Licencia en todos los documentos por una sola copia que esté incluida en la colección, siempre que siga las reglas de esta Licencia para cadacopia literal de cada uno de los documentos en cualquiera de los demás aspectos.

Puede extraer un solo documento de una de tales colecciones y distribuirlo individualmente bajo esta Licencia, siempre que inserte una copia deesta Licencia en el documento extraído, y siga esta Licencia en todos los demás aspectos relativos a la copia literal de dicho documento.

AGREGACIÓN CON TRABAJOS INDEPENDIENTES

Una recopilación que conste del Documento o sus derivados y de otros documentos o trabajos separados e independientes, en cualquier soportede almacenamiento o distribución, se denomina un agregado si el copyright resultante de la compilación no se usa para limitar los derechos de losusuarios de la misma más allá de lo que los de los trabajos individuales permiten. Cuando el Documento se incluye en un agregado, esta Licenciano se aplica a otros trabajos del agregado que no sean en sí mismos derivados del Documento.

Si el requisito de la sección 3 sobre el Texto de Cubierta es aplicable a estas copias del Documento y el Documento es menor que la mitad delagregado entero, los Textos de Cubierta del Documento pueden colocarse en cubiertas que enmarquen solamente el Documento dentro delagregado, o el equivalente electrónico de las cubiertas si el documento está en forma electrónica. En caso contrario deben aparecer en cubiertasimpresas enmarcando todo el agregado.

TRADUCCIÓN

La Traducción es considerada como un tipo de modificación, por lo que usted puede distribuir traducciones del Documento bajo los términos de lasección 4. El reemplazo las Secciones Invariantes con traducciones requiere permiso especial de los dueños de derecho de autor, pero ustedpuede añadir traducciones de algunas o todas las Secciones Invariantes a las versiones originales de las mismas. Puede incluir una traducción deesta Licencia, de todas las notas de licencia del documento, así como de las Limitaciones de Garantía, siempre que incluya también la versión enInglés de esta Licencia y las versiones originales de las notas de licencia y Limitaciones de Garantía. En caso de desacuerdo entre la traducción yla versión original en Inglés de esta Licencia, la nota de licencia o la limitación de garantía, la versión original en Inglés prevalecerá.

Si una sección del Documento está Titulada Agradecimientos, Dedicatorias o Historia el requisito (sección 4) de Conservar su Título (Sección 1)requerirá, típicamente, cambiar su título.

TERMINACIÓN

Usted no puede copiar, modificar, sublicenciar o distribuir el Documento salvo por lo permitido expresamente por esta Licencia. Cualquier otrointento de copia, modificación, sublicenciamiento o distribución del Documento es nulo, y dará por terminados automáticamente sus derechosbajo esa Licencia. Sin embargo, los terceros que hayan recibido copias, o derechos, de usted bajo esta Licencia no verán 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 Documentación Libre GNU. Talesversiones nuevas serán similares en espíritu a la presente versión, pero pueden diferir en detalles para solucionar nuevos problemas o intereses.Vea http://www.gnu.org/copyleft/.

Cada versión de la Licencia tiene un número de versión que la distingue. Si el Documento especifica que se aplica una versión numerada enparticular de esta licencia o cualquier versión posterior, usted tiene la opción de seguir los términos y condiciones de la versión especificada ocualquiera posterior que haya sido publicada (no como borrador) por la Free Software Foundation. Si el Documento no especifica un número deversión de esta Licencia, puede escoger cualquier versión que haya sido publicada (no como borrador) por la Free Software Foundation.

ADENDA: Cómo 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 ynota de licencia justo después de la página de título:

Copyright (c) AÑO SU NOMBRE. Se concede permiso para copiar, distribuir y/o modificar este documento bajo los términos de laLicencia de Documentación Libre de GNU, Versión 1.2 o cualquier otra versión posterior publicada por la Free Software Foundation; sinSecciones Invariantes ni Textos de Cubierta Delantera ni Textos de Cubierta Trasera. Una copia de la licencia está incluida en la seccióntitulada 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 TÍTULOS, siendo los Textos de Cubierta Delantera LISTAR, y siendo sus Textos de CubiertaTrasera LISTAR.

Si tiene Secciones Invariantes sin Textos de Cubierta o cualquier otra combinación de los tres, mezcle ambas alternativas para adaptarse a lasituación.

Si su documento contiene ejemplos de código de programa no triviales, recomendamos liberar estos ejemplos en paralelo bajo la licencia desoftware libre que usted elija, como la Licencia Pública General de GNU (GNU General Public License), para permitir su uso en software libre.

[1] Ésta es la traducción del Copyright de la Licencia, no es el Copyright de esta traducción no autorizada.

[2] La licencia original dice publisher, que es, estrictamente, quien publica, diferente de editor, que es más bien quien prepara un texto parapublicar. En castellano editor se usa para ambas cosas.

Apéndice C. GNU Free Documentation License

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

72 of 75 06/01/12 22:40

Page 73: Tutorial Openvpn

Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. Everyone is permitted tocopy 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 assureeveryone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, thisLicense preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications madeby others.

This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. Itcomplements 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 programshould come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be usedfor any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for workswhose 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 bedistributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work underthe conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressedas "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.

A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modificationsand/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 thepublishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directlywithin 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, ethicalor 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 saysthat the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designatedas 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 theDocument 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 specification is available to the generalpublic, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paintprograms or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to avariety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence ofmarkup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent ifused 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 XMLusing a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples oftransparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only byproprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generatedHTML, 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 Licenserequires 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 mostprominent 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 textthat translates XYZ in another language. (Here XYZ stands for a specific 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 asection "Entitled XYZ" according to this definition.

The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These WarrantyDisclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication thatthese Warranty Disclaimers may have is void and has no effect 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 copyrightnotices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditionswhatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies youmake or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you mustalso 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 theDocument's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts:

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

73 of 75 06/01/12 22:40

Page 74: Tutorial Openvpn

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 thepublisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add othermaterial on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfythese conditions, can be treated as verbatim copying in other respects.

If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actualcover, 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 Transparentcopy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-usingpublic has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. Ifyou use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that thisTransparent 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 givethem a chance to provide you with an updated version of the Document.

4. MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release theModified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution andmodification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

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 publisherof that version gives permission.

A.

List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version,together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they releaseyou from this requirement.

B.

State on the Title page the name of the publisher of the Modified Version, as the publisher.C.Preserve all the copyright notices of the Document.D.Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.E.Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms ofthis License, in the form shown in the Addendum below.

F.

Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.G.Include an unaltered copy of this License.H.Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher ofthe Modified 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 Modified Version as stated in the previoussentence.

I.

Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise thenetwork locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit anetwork location for a work that was published at least four years before the Document itself, or if the original publisher of the version itrefers to gives permission.

J.

For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all thesubstance and tone of each of the contributor acknowledgements and/or dedications given therein.

K.

Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are notconsidered part of the section titles.

L.

Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.M.Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.N.Preserve any Warranty Disclaimers.O.

If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied fromthe 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 InvariantSections in the Modified 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 Modified Version by various parties--forexample, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

You may add a passage of up to five 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 ofCover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or througharrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or byarrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicitpermission 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 implyendorsement of any Modified Version.

5. COMBINING DOCUMENTS

You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modifiedversions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them allas 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. Ifthere are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the endof 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 tothe 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";

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

74 of 75 06/01/12 22:40

Page 75: Tutorial Openvpn

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 thisLicense in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License forverbatim 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 thisLicense 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 ordistribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of thecompilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to theother 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 entireaggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent ofcovers 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 modification, so you may distribute translations of the Document under the terms of section 4. ReplacingInvariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or allInvariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the licensenotices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and theoriginal versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or anotice 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 (section1) 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 havereceived 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 versionswill be similar in spirit to the present version, but may differ 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 specifies 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 specified version or of any later versionthat has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, youmay 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 licensenotices 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, Version1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and noBack-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 beingLIST.

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 freesoftware license, such as the GNU General Public License, to permit their use in free software.

Creación de Redes Privadas Virtuales en GNU/Linux con... http://tuxjm.net/docs/Creacion_de_Redes_Privadas_Virtu...

75 of 75 06/01/12 22:40