Cómo crear una VPN con OpenVPN en Windows. Parte 1: Servidor

Hace unos días nos han encargado realizar una VPN en un Windows Server 2008 R2. Como los usuarios podían no ser todos Windows (y también para probar), decidimos no usar la VPN de Windows y crearla con OpenVPN.
Os dejamos los pasos.
Puedes seguir el proceso en inglés también aquí. Y este vídeo está muy bien para ver los pasos (yo he hecho modificaciones al proceso, cuidado).

Configurar el servidor.

Primero hay que configurar el servidor al que se van a conectar los clientes, donde están las carpetas que queremos ver. En nuestro caso el Windows Server 2008, pero puede ser cualquier otro Windows (evidentemente mejor el servidor).

Instalar el programa OpenVPN en el servidor.

Vamos a descargarnos el programa de OpenVPN (es el mismo para servidor y para cliente). Puedes hacerlo aquí (la versión community es la gratuita). El programa más sencillo a descargar es el Windows Installer.
Descargamos el instalador, lo ejecutamos y damos a todas las opciones que si marcando la casilla de EasyRSA 2 Certificate…. (la necesitas para generar los certificados).


Cuando te pida instalar el adaptador TAP di que si y marca la opción de confiar en el fabricante.

Abre un terminal (cmd) y ve a la carpeta C:\Program Files\OpenVPN\easy-rsa  
Pon init-config y pulsa Enter.
Después hace copy vars.bat.sample a vars.bat


Edita el fichero creado con notepad vars.bat
Ve a las líneas siguientes y modifica la información con tus datos. Voy a poner unos de ejemplo:

set KEY_COUNTRY=US 
set KEY_PROVINCE=CA
set KEY_CITY=SanFrancisco
set KEY_ORG=OpenVPN
set KEY_EMAIL=mail@host.domain

Lo modificamos por

set KEY_COUNTRY=ES
set KEY_PROVINCE=MD
set KEY_CITY=Madrid
set KEY_ORG=TUEMPRESA (tb puedes dejarlo como OPenVPN)
set KEY_EMAIL=tucorreo@tucorreo.com

Guarda el fichero y ejecuta (Enter después de cada comando):
vars.bat
clean-all



Generar las claves y certificados del servidor.

  • Ahora vamos a generar las claves y certificados que necesita el servidor. En la misma carpeta de Easy-rsa ejecutamos el comando para crear la entidad certificadora:
    build-ca

Va a preguntar unos valores pero son los anteriores que has puesto en el fichero. Así que con que des a Enter se quedan esos valores.
Salvo cuando pregunte: Common Name (eg, your name or your server’s hostname) [] que yo suelo poner el nombre completo del servidor (aunque OpenVPN lo deja como OpenVPN-CA).

  • Creemos las claves con:
    build-key-server server

Vuelve a preguntar los mismos datos, das como antes a Enter salvo cuando pregunte «Common Name» pones server. Responde y a las dos preguntas y ya está.

  • Ahora genera la encriptación con
    build-dh

Configuración del servidor.

  • Ahora copia el fichero server.ovpn de la carpeta C:\Program Files\OpenVPN\sample-config al directorio C:\Program Files\OpenVPN\config
  • Edita el fichero server.ovpn. Recomiendo Notepad++ o, en Windows Server, Wordpad («abrir con», elegir programa, Wordpad). No uses notepad, te va a descolocar las líneas.

Vamos a modificar las siguientes secciones:

  • Poner el túnel como dev tap. No hace falta hacer la parte de Bridge (puente) en los interfaz de red que dice el vídeo mencionado arriba. Pero por lo que leo tap admite más protocolos que tun (aunque tun requiere menos recursos). Tu elijes, nosotros usamos tap pero sin modo bridge.
  • Donde pone:
ca ca.crt 
cert server.crt
key server.key

Pon:

ca "C:\\Program Files\\OpenVPN\\config\\ca.crt" cert "C:\\Program Files\\OpenVPN\\config\\server.crt" key "C:\\Program Files\\OpenVPN\\config\\server.key"
  • Donde pone: dh dh1024.pem pon: dh "C:\\Program Files\\OpenVPN\\config\\dh2048.pem"

Nota: en la generación de mis certificados me creó el fichero dh2048.pem en
C:\Program Files\OpenVPN\easy-rsa\ La cifra puede variar y podéis tener dh4096.pem, verifícalo.

  • Donde pone server 10.8.0.0 255.255.255.0 elije la red de tu VPN. Puedes poner cualquier red privada pero te recomiendo que no uses las de telefónica típicas (192.168.1.X ni 192.168.0.X). Yo suelo usar las 10, como la que viene en el fichero por ejemplo, o 192.168.2.X, 192.168.3.X etc). También, por lo tanto, puedes dejar la red que viene por defecto. Esto quiere decir que tu servidor VPN tendrá IP de VPN 10.8.0.1 y tus clientes tendrán la 10.8.0.X (según la máscara que elijas).
  • Verifica que la línea tls-auth ta.key 0 pone 0 en el servidor. Quita lo de # This file is kept secret de detrás. En los clientes tiene que ser: tls-auth ta.key 1.
  • Salva el fichero.
  • Copia los ficheros de clave. Ve a C:\Program Files\OpenVPN\easy-rsa\keys\ y copia los ficheros siguientes a C:\Program Files\OpenVPN\config\
ca.crt 
dh1024.pem
server.crt
server.key
server.ovpn
  • En la misma carpeta easy-rsa pon openvpn –genkey –secret ta.key  y copia ese fichero también a la carpeta C:\Program Files\OpenVPN\config\

El servidor ya está. Sólo tendrías que abrir el puerto 1194 UDP en el router apuntando a la IP (fija) de tu servidor. Recomiendo también abrir el firewall de Windows, si está activado, para ese puerto.

Si tienes IP dinámica tendrás que activar un servicio de DNS dinámicon tipo DYNDNS.

Puedes probar a ejecutar el icono de OpenVPN que te ha creado en el escritorio y darle botón derecho>Connect para que se empieze a ejecutar el servidor VPN.

Si todo va bien está preparado para recibir llamadas. Queda configurar a los clientes (en otro artículo).

Nota: si quieres que los clientes remotos vean los clientes de la oficina tienes que activar la opción client-to-client en el fichero de configuración del servidor.
Nota2: si quieres dirigir todo el tráfico del cliente por la VPN activa la opción push «redirect-gateway def1 bypass-dhcp» en el fichero de configuración del servidor.

Nosotros encontramos un error en Windows Server 2008 R2, que al arrancar la primera vez funcionaba, pero si reiniciábamos la GUI el TAP no cogía IP en Windows (OpenVPN decía que si). Y no sabía enrutar. Lo arreglamos instalando OpenVPN como servicio (otro artículo) y, si ocurre (que no debería al ser un servicio) con desactivar el TAP un momento y volver a activarlo cogía IP de nuevo.

12 pensamientos en “Cómo crear una VPN con OpenVPN en Windows. Parte 1: Servidor

  1. Jordi

    Hola muchas gracias por la información me podríais ayudar con este problema:
    he configurado el servidor y el cliente y conectan, pero no se ven cuando lanzo ping ni un terminal
    el servidor tiene la ip 192.168.10.1 gate 192.168.10.100
    servidor VPN server 10.8.0.0 255.255.255.0
    la opción client-to-client esta sin el ;

    gracias por todo

  2. Jordi

    Hola he deshabilitado la tarjeta en el servidor tab y la he vuelto a habilitar y he conectado el servidor ya funciona el ping, me gustaría poder hacer un ping desde el cliente que tiene la ip 10.8.0.x al servidor 192.168.10.1
    tengo habilitado esta opcion el la configuracion del servidor vpn
    push «route 192.168.10.0 255.255.255.0»

    1. David G. Smyth (SmythSys) Autor

      Push route hace que el servidor «anuncie» esa red al cliente. Pero no tiene por qué hacer ping. Tienes que ver primero a) si se está de verdad publicando las rutas. Puedes ver las rutas en el cliente con un comando de Windows.
      Después tienes que ver si, una vez sabe llegar, el ping está habilitado o deshabilitado. Y si hace ping a otras máquinas.

      1. David G. Smyth (SmythSys) Autor

        Por cierto, si la LAN del cliente (no la IP de VPN) es también 192.168.10.X te va a dar problemas.

  3. Duntari

    Using this settings on Windows 10 :
    Start -> Right-click My Computer -> Manage
    Services
    Right-click Routing and Remote Access -> Properties -> Automatic Right-click Routing and Remote Access -> Start
    Next:
    Control Panel
    Network and Sharing Center
    Local Area Connection
    Properties
    Sharing
    Tick the box «Allow other network users to connect through this computer’s Internet connection» From the drop-down list select «Local Area Connection 2», or whatever is the connection name of your TAP server connection.
    regedit
    Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters Value: IPEnableRouter
    Type: REG_DWORD
    Data: 0x00000001 (1)
    Buenas, indicar que si quieres que todo el tráfico vaya por la vpn edites el archivo del servidor indicando las DNS que tiene que usar. Sintu windows no tiene servidor dns usa las de google por ejemplo.
    Para que funcione en windows 10, hay que modificar unas cosas para que permita el enrutamiento de los datos del cliente:

    Si no haceis esto en el servidor no sereis capaces de hacer que funcione el “redirect-gateway”

    Saludos

  4. Eric

    Hola,
    Tengo una duda. Yo tengo el servidor en una red remota (192.168.1.0/24) el servidor tiene la IP 210 de esa red. Cuando levanto el VPN, segun el archivo de configuración se puede poner qué subred usar para la VP, por defecto viene la 10.8.0.0/24, con esta red si que me conecta cliente-servidor, pero claro no puedo ver nada de los recursos de mi red remota original la 192.168.1.0/24.
    He probado con el puente de interficies en el servidor y nada, con los dos parámetros del fichero que decís al final y tampoco.
    ¿Qué debería hacer?
    Gracias

    1. David G. Smyth (SmythSys) Autor

      Conectar la red de la VPN en la típica de los operadores no es buena idea. Se puede arreglar, nosotros lo hemos hecho en algún cliente, con rutas. Pero luego nos ha costado hacerlo.
      Lo mejor es que la red del servidor sea diferente (porque la de los clientes puede variar).

  5. Eric

    Y qué debo hacer para que cuando se conecte el cliente VPN le dé una dirección de la red que tengo yo que es la 192.168.1.0/24?? no puedo cambiar todas las direcciones todos…

    1. David G. Smyth (SmythSys) Autor

      A ver aquí hay 3 redes.
      1) Red de la oficina donde esté la VPN. No debería estar en las que dan las operadoras 192.168.1.X o 192.168.0.X. Si no se puede cambiar ver abajo.
      2) Red del usuario. No puedes controlarla.
      3) Red de la VPN. Suele ponerla el sistema en una red totalmente diferente, sólo sirve de puente.
      El problema surge cuando el 1 y el 3 coinciden. Porque el ordenador en 3, si recibe orden de mandar a la (pongamos que es la del servidor remoto) 192.168.1.200 (suponemos que la de la 3 es 192.168.1.X), al ser de su red la mantiene en su LAN. Si fueran diferentes redes la 1 y la 3 no tiene duda sobre por dónde mandar la petición.
      Si no puedes cambiarlo (repito que te va a ahorrar mucha guerra), lo que tienes que hacer es poner rutas estáticas en la configuración de la VPN para que las IPs en 1 vayan por la interfaz de la VPN. Anunciar que tiene que meterlas por ahí. Cómo hacerlo depende de cada versión de OpenVPN. No puedo decírtelo pero ya te digo que lo hemos conseguido….peleando mucho cada vez que nos toca hacerlo.

  6. federico

    Hola
    Si creo una partida local tanto de cs o battlefield 2, el que esta conectado por vpn, las puede visualizar?

    Me viene pasando que con la vpn de windows esto no sucede y solo puede ingresar al servidor si ingresa la ip manualmente (caso cs 1.6)

    1. David G. Smyth (SmythSys) Autor

      Que ponga la IP en el archivo hosts durante la partida. Luego lo puede quitar. El problema que dices es de red, te va a pasar igual.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Resumen de nuestra Política de Privacidad

  • Responsable: SmythSys IT Consulting SLNE.
  • Finalidad: Gestionar y moderar los comentarios.
  • Legitimación: Necesitas dar tu consentimiento para publicar un comentario.
  • Destinatarios: Tus datos se alojan en los servidores de OVH.
  • Derechos: Tienes derecho a acceder, rectificar, limitar y suprimir los datos en la dirección del responsable (en nuestra política de privacidad).

Time limit is exhausted. Please reload CAPTCHA.