En pasados post vimos como podíamos crear muy fácilmente nuestro propio servidor VPN mediante el protocolo pptp.

https://geekland.eu/crear-un-servidor-vpn-pptp/

Pudimos constatar y experimentar que la instalación y configuración del servidor era sumamente sencilla y era altamente compatible con la totalidad de sistemas operativos existentes, pero como punto negativo también vimos que a día de hoy pptp presenta serios problemas en lo que a la seguridad se refiere.

Por lo tanto a toda la gente que necesite un VPN para la transmisión de información sensible no le recomiendo el uso del protocolo pptp. Le recomiendo el uso del protocolo OpenVPN. Para ver como instalar y configurar este tipo de servidor VPN tan solo tienen que seguir los pasos que vamos a definir a continuación.

TIPO DE CONFIGURACIÓN VPN QUE VAMOS A USAR

Hay distintas formas de configurar un servidor mediante OpenVPN. Los distintos tipos de configuración existentes son Host to Host, Road to Warrior (Host to LAN) y Net to net. Nosotros nos focalizaremos en el Road to Warrior o Host to LAN, por ser el más popular de todos y el que seguramente se adaptar a prácticamente las necesidades de de cualquier usuario.

Diagrama Host to net

La configuración Road to Warrior (Host to LAN mediante túnel) permitirá que múltiples dispositivos u ordenadores se puedan conectar simultáneamente a nuestra red VPN y compartir recursos e informaciones con la red a que se conectan. Por lo tanto en este caso tenemos varios clientes que se pueden conectar de forma independiente al servidor VPN. Para quien precise de más información acerca de este tipo de configuración puede consultar el siguiente enlace.

Diagrama Host to Host

La configuración Host to Host, a diferencia del modo de configuración anterior, únicamente nos permitirá la conexión entre 2 máquinas o dispositivos conectados a Internet o dentro de una red local. Por lo tanto en este caso solamente existe un cliente y un servidor. Además estás 2 máquinas o dispositivos no podrán compartir recursos e informaciones con otros equipos que estén conectados en la misma red LAN.

Diagrama Net to net

Para finalizar tenemos la configuración Net to Net, Red-red, o LAN to LAN. Esta configuración mayoritariamente es usada en el mundo empresarial. Esta configuración lo que hace es unir redes locales (LAN) ubicadas en distintas ubicaciones geográficas para de esta forma poder compartir información entre todos los clientes de todas las redes. De este modo cada una de las redes locales LAN tiene un punto de acceso o puerta de enlace que proporciona un canal de transmisión seguro entre 2 o más redes.

ASEGURAR QUE EL SERVIDOR OPENVPN TENGA IP FIJA EN LA RED LOCAL

Es muy importante asegurar que nuestro servidor disponga de una IP interna fija en la red local. Es importante porqué cuando recibamos una petición de los clientes VPN, el router tendrá que saber a que IP interna tiene que redireccionar la petición del cliente VPN.

Para conseguir disponer de un servidor con ip interna fija tan solo tienen que seguir los pasos que se detallan en el siguiente enlance:

https://geekland.eu/configurar-ip-fija_o_estatica_ipv4/

Nota: El método descrito en el enlace es válido en el caso que estéis usando un servidor sin entorno gráfico. En el caso que el servidor que uséis disponga de entorno gráfico tendréis que configurar este aspecto a través de las interfaces visuales de vuestro gestor de red que probablemente será network manager o wicd.

Una vez terminados la totalidad de pasos mi servidor tendrá una IP fija que en mi caso será la 192.168.1.188. Esta IP es la que deberemos usar para que el router redireccione las peticiones de los clientes al servidor OpenVPN.

REDIRECCIONAMIENTO DINÁMICO NO-IP

Cuando tengamos nuestro servidor VPN funcionando, lo más probable es que tengamos conectarnos desde el exterior de nuestra local red local mediante el servidor VPN.

Para conectarnos a nuestra red local tendremos que saber nuestra IP Pública pero desafortunadamente en la gran mayoría de casos la IP que tenemos es dinámica. Por lo tanto se puede dar perfectamente el caso que en el momento de conectarnos no sepamos la IP Pública de nuestro servidor.

Para solucionar este problema tenemos que asociar la IP Pública de nuestro servidor a un dominio. Para poder realizar este paso tan solo tienen que seguir las indicaciones del siguiente enlace:

https://geekland.eu/encontrar-servidor-con-dns-dinamico/

Una vez realizados estos pasos tendréis vuestra IP Pública asociada a un dominio. En mi caso mi IP Pública está asociada al dominio geekland.sytes.net

INSTALACIÓN DEL SERVIDOR

La instalación del servidor la vamos a realizar en un sistema operativo Debian Wheezy. La totalidad del procedimiento descrito tiene que funcionar en cualquier distribución que derive de Debian como pueden ser Ubuntu, Crunchbang, Linux Mint, Kubuntu, etc.

Para instalar el servidor OpenVPN lo primero que tenemos que hacer es abrir una terminal. Dentro de la terminal teclean el siguiente comando:

sudo apt-get install openvpn openssl

Ahora ya tenemos instalado el servidor.

CREAR UNA AUTORIDAD DE CERTIFICACIÓN

OpenVPN es un protocolo de VPN basado SSL/TLS mediante certificados y claves RSA creadas mediante openssl. Por lo tanto el nivel de seguridad proporcionado por OpenVPN es muy elevado.

Al ser un protocolo que funciona bajo certificados y claves necesitaremos crear una autoridad de certificación para a posteriori generar los certificados.

Nota: La principal función de una autoridad de certificación es la de emitir y revocar certificados digitales para terceros. Para quien necesite más información puede consultar el siguiente enlace.
Crear el certificado raíz ca para firmar y revocar los certificados de los clientes

Para poder emitir y revocar la claves necesitamos crear nuestra propia autoridad certificadora y disponer de nuestro certificado raíz ca.ctr y de nuestra clave ca.key para poder crear y firmar las claves de los clientes y del servidor.

Para realizar este paso, y el resto de pasos, ejecutoriaremos los scripts que OpenVPN trae incorporados de serie. Para ello tenemos que crear una carpeta con nombre easy-rsa dentro de la ubicación /etc/openvpn. Para ello abrimos una terminal y tecleamos el siguiente comando:

cd /etc/openvpn
mkdir easy-rsa

Seguidamente tenemos que copiar los scripts de configuración de OpenVPN, que se hallan en la ubicación /usr/share/doc/openvpn/examples/easy-rsa/2.0/, dentro de la carpeta easy-rsa que acabamos de crear. Para ello en la terminal tecleamos el siguiente comando:

cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* easy-rsa

Una captura de pantalla los pasos realizados hasta el momento se puede ver a continuación:

Ejemplos de configuración del servidor OpenVPN

En el caso que que vuestra distro trabaje con la versión 3 de easy-rsa, en el momento de introducir el último comando, obtendréis un error parecido al siguiente error:

cp: no se puede efectuar `stat’ sobre «/usr/share/doc/openvpn/examples/easy-rsa/2.0/*»: No existe el archivo o el directorio

Los pasos a realizar para solucionar este error son los siguientes. En la terminal escriben el siguiente comando para instalar el paquete easy-rsa.

apt-get install easy-rsa

Seguidamente borran la carpeta easy-rsa que habíamos creado inicialmente introduciendo el siguiente comando en la terminal:

rm -R /etc/openvpn/easy-rsa

Finalmente para obtener los scripts para la creación de claves en la terminal introducimos el siguiente comando:

make-cadir /etc/openvpn/easy-rsa
Nota: Algunas de las distros que funcionan con easy-rsa 3.0 son Ubuntu 14.04, Linux Mint 16, etc.

Para ejecutar los scripts que acabamos de copiar o de obtener, tenemos que ir a la ubicación donde los guardamos. Para ello ingresamos el siguiente comando en la terminal:

cd /etc/openvpn/easy-rsa

Antes de ejecutar los scripts editaremos el fichero vars para modificar una serie de parámetros. Para modificar el fichero vars se tiene que introducir el siguiente comando en la terminal:

nano vars
Tamaño de las claves

Una vez abierto el editor de texto tenemos que localizar y modificar la siguiente línea:

export_KEY_SIZE=1024

Una vez encontrada la sustituyen por la siguiente linea:

export_KEY_SIZE=2048

Nota: Con esta modificación estamos incrementando el tamaño de la claves privadas (.key) que vamos a generar y también del parámetro de Diffie Hellman. Con esta modificación incrementarios del tamaño de las claves de 1024 bits a 2048 bits. También seria posible usar 4096 bits. Este parámetro no tiene porqué penalizar en exceso el rendimiento del servidor. Únicamente penalizará el proceso autentificación Handshake de SSL/TLS.
Datos de la entidad emisora de los certificados

Seguidamente tenemos que introducir los datos de la entidad emisora de los certificados que seremos nosotros mismos Para ello tenemos que localizar las siguientes lineas:

export KEY_COUNTRY=”US”
export KEY_PROVINCE=”CA”
export KEY_CITY=”SanFrancisco”
export KEY_ORG=”Fort-Funston”
export KEY_EMAIL=”me(arroba)myhost.mydomain”
export KEY_EMAIL=mail(arroba)host.domain
export KEY_CN=Changeme
export KEY_CN=Changeme
export KEY_OU=Changeme

Una vez localizadas las lineas tan solo se tienen reemplezar el contenido por defecto por nuestros datos reales. En mi caso los datos a rellenar podrían ser:

export KEY_COUNTRY=”ES” “Poner las 2 iniciales de tu país
export KEY_PROVINCE=”CA” “Poner las 2 iniciales de tu provincia”
export KEY_CITY=”s*******a” “Poner el nombre de tu ciudad
export KEY_ORG=”geekland” “Poner el nombre de la organización
export KEY_EMAIL=”xxxxxxx(arroba)gmail.com” “Usar vuestra dirección de email
export KEY_EMAIL=xxxxxxx(arroba)gmail.com “Usar vuestra dirección de email
export KEY_CN= wheezy “Usar el nombre del host del servidor
export KEY_NAME=vpnkey “Designa el nombre de la entidad certificadora que se creará
export KEY_OI=IT “Departamento de la empresa

Nota: Dentro de este fichero también podemos configurar el tiempo de validez que tendrá nuestra entidad certificadora y el tiempo de validez que tendrán los certificados y claves que crearemos. El valor estándar de validez son 3650 días que no voy a tocar.

Una vez modificado el archivo vars guardamos los cambios y lo cerramos. Ahora tendremos que exportar sus variables. Para exportar sus variables tenemos que teclear el siguiente comando en la terminal:

source ./vars

Seguidamente ejecutaremos el script clean-all. El script clean-all borrará la totalidad de claves que podrían existir en la ubicación /etc/openvpn/easy-rsa/keys. Para ejecutar el script tenemos que teclear el siguiente comando en la terminal:

./clean-all

El siguiente paso es generar los parámetros de Diffie Hellman. Los parámetros de Diffie Hellman se utilizarán para poder intercambiar las claves ente cliente y servidor de forma segura. Para poder realizar este paso tenemos que teclear el siguiente comando en la terminal:

./build-dh

Al terminar el proceso dentro de la ubicación /etc/openvpn/easy-rsa/keys se habrá creado el archivo dh2048.pem que contiene los parámetros Diffie Hellman.

Nota: Para quien requiera información adicional de los parámetros de Diffie Hellman puede consultar el siguiente enlace. Este parámetro se usará poder un intercambio de claves entre 2 participantes de forma segura.

En la siguiente captura de pantalla podrán ver una muestra de los pasos realizados hasta el momento:

Creación de los parámetros de Diffie Hellman

Finalmente vamos a a crear el certificado y la clave privada de nuestra propia autoridad certificadora. Para ello tenemos que teclear el siguiente comando en la terminal:

./build-ca

Durante el proceso de creación se les hará una serie de preguntas para incorporar información dentro del certificado que se creará. Como anteriormente hemos editado el fichero vars ahora solo nos tenemos que limitar a aceptar el valor por defecto de las preguntas que nos hacen.

Al terminar el proceso dentro de la ubicación /etc/openvpn/easy-rsa/keys se ha creado ca.crt y ca.key:

ca.crt: Es el certificado raíz público de la autoridad de certificación (CA)
ca.key: Este fichero contiene la clave privada de la autoridad de certificación (CA). Este archivo debe mantenerse protegido y no debe estar al alcance de terceros.

Una vez creado el certificado y la clave de vuestra autoridad certificador la pantalla de vuestro ordenador tiene que presentar el siguiente estado:

Entidad certificadora del servidor Openvpn

CREAR EL CERTIFICADOS Y LA CLAVE DEL SERVIDOR OPENVPN

A estas alturas ya lo tenemos todo listo para poder crear el certificado y clave de nuestro servidor. Para ello introducimos el siguiente comando en la terminal:

./build-key-server whezzyVPN
Nota: whezzy VPN es el nombre del servidor. Vosotros tenéis que introducir el nombre que vosotros queráis.

Una vez introducido este comando se nos hará una serie de preguntas. Simplemente tienen que contestar el valor por defecto ya que anteriormente hemos modificado el archivo vars.

Al terminar el proceso dentro de la ubicación /etc/openvpn/easy-rsa/keys se habrán creado los siguientes archivos:

whezzyVPN.key: Este fichero contiene la clave privada del servidor. Este archivo no debe estar al alcance de nadie.

whezzyVPN.crt: Este fichero corresponde al certificado público del servidor.

whezzyVPN.csr: Este archivo es la petición de certificado que se envía a la autoridad de certificación. Mediante la información que contiene el archivo .csr, la autoridad de certificación podrá realizar el certificado del servidor una vez hayan realizado las comprobaciones de seguridad pertinentes.

Una vez creado el certificado y la clave del servidor la pantalla de vuestro ordenador tiene que presentar el siguiente estado:

Certificado y clave del servidor OpenVPN

CREAR EL CERTIFICADO Y LAS CLAVES DE LOS CLIENTES

El siguiente paso es crear los certificados y las claves de los clientes que se podrán conectar al servidor VPN. Para ello tenemos que teclear el siguiente comando en la terminal:

./build-key usuariovpn
Nota: usuariovpn es el nombre de usuario que vamos a crear. En vuestro caso tendréis que reemplazar usuariovpn por el nombre que queráis.

Una vez introducido este comando se nos hará una serie de preguntas. Simplemente tienen que contestar el valor por defecto ya que anteriormente hemos editado el fichero vars.

Al terminar el proceso dentro de la ubicación /etc/openvpn/easy-rsa/keys se habrán creado los siguientes archivos

usuariovpn.key: Este fichero contiene la clave privada del cliente. Este archivo no debe estar al alcance de nadie.
usuariovpn.crt: Este fichero corresponde corresponde al certificado público del servidor.
usuariovpn.csr: Este archivo es la petición de certificado que es envía a la autoridad de certificación. Mediante la información contenida en el archivo .csr, la autoridad de certificación podrá realizar el certificado del cliente una vez hayan realizado las comprobaciones de seguridad pertinentes.

Nota: El procedimiento de generación de clientes se deberá repetir tantas veces como clientes queráis que tenga el servidor OpenVPN.

Una vez creado el certificado y la clave del cliente, la pantalla de vuestro ordenador tiene que presentar el siguiente estado:

Certificados y claves de los clientes del servidor Openvpn

FORTIFICAR LA SEGURIDAD DEL SERVIDOR OPENVPN CON TLS-AUTH

Nota: Esto paso en principio no es necesario pero lo realizaremos para incrementar la seguridad de nuestro servidor VPN.

Ahora generamos otra clave. Esta clave nos servirá para agregar soporte para usar la autentificación TLS y de este modo fortificar la seguridad del servidor VPN. Para generar la clave para poder fortificar el servidor se tiene que introducir el siguiente comando en la terminal:

cd /etc/openvpn/easy-rsa/keys

Una vez hemos accedido a la ubicación /etc/opnevpn/easy-rsa/keys tecleamos el siguiente comando:

openvpn --genkey --secret ta.key

Justo al ejecutar el comando, Como se puede ver en la captura de pantalla, se generará una clave con el nombre ta.key en la misma ubicación dónde hemos aplicado el comando.

Claves generadas para el servidor OpenVPN

La clave creada servirá para introducir una firma digital HMAC en todas las transacciones del protocolo handshake de SSL/TLS entre el cliente y el servidor. De esta forma podremos verificar la integridad de los paquetes intercambiados entre el cliente y el servidor VPN, y en el caso que un cliente intente conectarse al servidor VPN sin poseer la clave para firmar los paquetes la conexión se rechazará automáticamente. Además con el uso de autentificación TLS también conseguiremos prevenir los siguientes ataques:

  1. Ataques de denegación de servicio DoS.
  2. Ataques de denegación de servicio por inundación UDP al puerto del VPN.
  3. Escaneo de puertos en nuestro servidor para intentar averiguar vulnerabilidades.

UBICACIÓN DE LAS CLAVES GENERADAS

A estas alturas hemos generado multitud de claves y certificados. Si se han seguido los pasos detalladamente, la totalidad de claves se hallan en la ubicación /etc/openvpn/easy-rsa/keys.

Anteriormente ya he detallado el uso de cada una de la claves. Seguidamente pasaré a detallar la ubicación de cada una de las claves:

Archivo

Descripción

Ubicación

Secreto

dh2048.pem

Parámetros Diffie Hellman

Servidor (/etc/openvpn)

ca.crt

Certificado raíz de la entidad certificadora

Servidor (/etc/openvpn) y cliente

No

ca.key

Clave de la entidad certificadora

Servidor (/etc/openvpn)

whezzyVPN.key

Clave del servidor VPN

Servidor (/etc/openvpn)

whezzyVPN.crt

Certificado del servidor VPN

Servidor (/etc/openvpn) y cliente

No

whezzyVPN.csr

Archivo de petición de certificado

Servidor (/etc/openvpn)

No

usuariovpn.key

Clave privada del cliente VPN

Cliente

usuariovpn.crt

Certificado del cliente VPN

Cliente

No

usuariovpn.csr

Archivo de petición de certificado

Servidor (/etc/openvpn)

No

ta.key

Clave para la Autentificación TLS

Servidor (/etc/openvpn) y cliente

Nota: Tienen que trasladar cada una de las llaves mencionadas en las ubicaciones que se detallan en el cuadro. Recuerden transmitir y trasladar las claves y certificados del servidor al cliente por un canal seguro.

ASEGURAR QUE LAS PETICIONES DNS SE REALIZAN POR EL VPN

Otro punto a contemplar para asegurar que nuestro servidor VPN sea seguro es que nadie pueda capturar nuestras peticiones DNS para saber donde nos estamos conectando.

Nota: Quien no sepa que son las peticiones DNS puede consultar el siguiente enlace.

Para que nadie capture nuestras peticiones DNS lo que realizaremos es canalizar la totalidad de nuestras peticiones a través del túnel del servidor OpenVPN. Así las peticiones DNS se enviarán al servidor VPN de forma cifrada y será el servidor OpenVPN el encargado de resolverlas. Para poder realizar lo que acabo de describir lo primero que tienen que realizar es instalar dnsmasq. Para poder instalar dnsmasq teclean el siguiente comando en la terminal:

apt-get install dnsmasq

Una vez instalado dnsmasq lo tenemos que configurar para que escuche las peticiones DNS dirigidas al servidor VPN. Para ello accedemos al archivo de configuración introduciendo el siguiente comando en la terminal:

nano /etc/dnsmasq.conf

Una vez abierto el editor de texto introducen las siguientes líneas:

listen-address=127.0.0.1,10.8.0.1
bind-interfaces

Parámetros de configuración de DNSmasq

Nota: Introduciendo la primera línea lo que estamos haciendo es que Dnsmasq solamente tenga en cuenta las peticiones DNS que se dirijan a las interfaces [lo]: 127.0.0.1 y [tun0]: 10.8.0.1 que es la de nuestro servidor VPN.
Nota: Con la segunda línea estamos habilitando que dnsmasq tenga la capacidad de escuchar solo determinadas interfaces como por ejemplo las dos que hemos definido antes. La [lo] 127.0.0.1 y la [tun0] 10.8.0.1

Ahora tan solo tienen que guardar los cambios y salir del archivo de configuración. La configuración ha terminado y solamente hace falta reiniciar los servicios openvpn y dnsmasq. Para ello teclean los siguientes comandos en la terminal:

/etc/init.d/openvpn restart
/etc/init.d/dnsmasq restart

Es posible que cuando reinicien los servicios o arranquen el sistema vean un error parecido al de la captura de la pantalla:

Posible error al iniciar dnsmasq

Starting DNS forwarder and DHCP server: dnsmasq
dnsmasq: failed to creat listening to socket for 10.8.0.1: No se puede asignar la dirección solicitada.

Esto error es debido a que Dnsmaq arranca antes de que se cree la interfaz [tun0]. Por lo tanto cuando intenta escuchar la interfaz [tun0] nos dará el error porqué  [tun0] no existe. Para solucionar este problema y que dnsmasq puede realizar su función tan solo tiene que modificar el archivo /etc/rc.local. Para ello en la terminal escriben:

nano /etc/rc.local

Se abrirá el editor de textos y ahora, debajo de las reglas de iptables tan solo tienen que escribir:

/etc/init.d/dnsmasq restart

Solución para el error de DNSmasq

Una vez realizado este paso guardan el fichero y salen. Introduciendo esta linea lo que estamos haciendo es reiniciar el servicio dnsmasq una vez se han ejecutado la totalidad de scripts de inicio (init). De este modo cuando se reinicialice dnsmasq la interfaz [tun0] ya estará levantada.

Nota: Para que dnsmasq funcione tienen que tener configurado el servidor VPN tal y como se detalla en el apartado Configurar el servidor.

CONFIGURAR EL SERVIDOR OPENVPN

Existen ficheros de configuración standard que deberían funcionar out of the box y que podemos aprovechar para realizar nuestra configuración. Los ficheros de ejemplo que podemos usar para ver la totalidad de opciones que tenemos disponibles se hallan comprimidos en la siguiente ubicación ubicación:

/usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz

Para consultarlos teclear el siguiente comando para acceder a la ubicación de este archivo:

cd /usr/share/doc/openvpn/examples/sample-config-files

Seguidamente copiamos el archivo comprimido que dispone de los archivos de muestra de configuración en la ubicación /etc/openvpn. Para ello tecleamos el siguiente comando:

cp -a /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/

Seguidamente accedemos a la ubicación donde hemos copiado el archivo comprimido que contiene los archivos de configuración:

cd /etc/openvpn

Para descomprimir el archivo que contiene los archivos de configuración tecleamos:

gunzip server.conf.gz

Una vez descomprimido el archivo ya podemos consultar los ejemplos de configuración tanto del cliente como del servidor. Para ver y modificar la configuración estándar para adaptarla a nuestras necesidades tienen que teclear el siguiente comando en la terminal:

nano server.conf

Se abrirá el editor de texto en el que podrán ver de forma detallada las opciones de configuración de ejemplo del servidor. Ahora tendréis que comprobar que la totalidad de parámetros que se muestran en la tabla de este apartado estén dentro del fichero de configuración de ejemplo que es el que vamos a usar. En el caso de que los parámetros estén comentados habrá que descomentarlos, en el caso que no existen se deberán añadir y/o modificar.

Parámetro

Descripción

dev tunDispositivo virtual en el cual se creara el túnel.
proto udpProtocolo de la conexión VPN. También podríamos usar el tcp.
port 1194Puerto de escucha del servicio. El puerto de escucha se puede modificar.
ca ca.crtCertificado de la autoridad certificadora que creamos.
cert whezzyVPN.crtCertificado del servidor que hemos creado.
key whezzyVPN.keyClave privada del servidor que hemos creado.
dh dh2048.pemCarga de los parámetro de Diffie Hellman.
Server 10.8.0.0 255.255.255.0Indicamos que a los clientes del VPN se les asignará IP del tipo 10.8.0.0/24
ifconfig-pool-persist ipp.txtSe crea un fichero ipp.txt en el que se registran las IP de los clientes que se conectan al servidor VPN.
push “route 192.168.1.0 255.255.255.0”Con esta línea hacemos que los paquetes que tengan como destino la red 192.168.1.0 viajen por la interfaz del túnel (tun0). De esta forma el cliente VPN se podrá comunicar con cualquier máquina de la red 192.168.1.0.
keepalive 10 120El servidor VPN enviará un ping cada 10 segundos y como máximo esperará 120 segundos para que el cliente de una contestación.
tls-aut ta.key 0Activación de la autentificación TLS en el servidor.
comp-lzoActivar compresión LZO para la transmisión de datos.
max-clients 10Número máximo de clientes que se pueden conectar de forma simultanea. El valor se puede modificar según las necesidades.
user nobodyPara limitar los privilegios del demonio de VPN hacemos que funcione con el usuario nobody.
group nogroupPara limitar los privilegios del demonio de VPN hacemos que funcione con el grupo nogroup.
push “redirect-gateway def1”Para que la totalidad de tráfico vaya a través de nuestro VPN
push “dhcp-option DNS 10.8.0.1”Estamos definiendo que las peticiones DNS de los clientes se hagan a través del servidor VPN ubicado en 10.8.0.1
cipher AES-256-CBCPor defecto el algoritmo de cifrado de OpenVPN es Blowfish con un tamaño de clave de 128 bits. Quien crea que no es suficiente puede añadir esta línea para cambiar el algoritmo de cifrado a AES con un clave de cifrado de 256 bits. Para ver todos los algoritmos de cifrado disponibles teclear openvpn –show-ciphers en la terminal.
persist-keyEn caso que el servidor OpenVPN se caiga las claves no tendrán que ser analizadas de nuevo.
persist-tunEl dispositivo tun0 no tendrá que ser reabierto ni cerrado en el caso que tengamos que reiniciar el servidor.
status openvpn-status-logLog donde se guardará información respecto al túnel creado.
plugin /usr/lib/openvpn/openvpn-auth-pam.so /etc/pam.d/loginActivación del script encargado de realizar la autenticación del usuario y del cliente. (Ver el apartado “Autentificación del cliente mediante usuario y password”)
verb 3Grado de detalle del estado del túnel en los logs.

Una vez tenemos listo el fichero de configuración tan solo tenemos que guardar los cambios y cerrarlo.

Nota: Si queremos que los clientes que estan conectados al servidor VPN puedan comunicarse entre ellos tenemos que añadir la frase client-to-client en el fichero de configuración del servidor.
Nota: Si leéis con detalle el fichero de configuración podréis aplicar configuraciones distintas a las que se detallan en el post.
Nota: La configuración propuesta en este apartado se tendrá que adaptar a las características de vuestra red y a vuestras necesidades.

CONFIGURAR EL CLIENTE OPENVPN

Una vez configurado el servidor ahora pasaremos a configurar el cliente. Para ello dentro de la ubicación /etc/openvpn tecleamos el siguiente comando:

nano client.conf

Se abrirá el fichero de configuración en el que podrán ver un ejemplo de configuración para un cliente estándar. Aseguramos que el fichero de configuración estándar tenga los parámetros que se muestran en la tabla de este apartado. En caso de no tenerlos habrá que añadirlos manualmente, en el caso de que los parámetros estén comentados habrá que descomentarlos y en el caso que no existan se deberán añadir y/o modificar.

Parámetro

Descripción

dev tunDispositivo virtual en el cual se creara el túnel.
proto udpProtocolo de transmisión de paquetes del servidor VPN. Se puede usar TCP.
remote geekland.sytes.net 1194Dirección IP pública/Host DNS dinámico y puerto de escucha del servidor VPN. El puerto 1194 se puede cambiar. Si lo cambiamos deberemos adaptar el resto de configuraciones al nuevo puerto
resolv-retry infiniteEl cliente intentará de forma indefinida resolver la dirección o nombre de host indicado por la directiva remote (geeekland.sytes.net).
nobindA los clientes se les asignará puertos dinámicos (no privilegiados) cuando haya retorno de paquetes del servidor al cliente.
user nobodyPara limitar los privilegios de los clientes que se conectan al VPN les asignamos el usuario nobody. (no necesario para windows)
group nogroupPara limitar los privilegios de los clientes que se conectan al VPN les asignamos el grupo nogroup. (no necesario para windows)
persist-keyEn caso que el servidor OpenVPN sea reiniciado no se tendrán que volver a leer las claves.
persist-tunEl dispositivo tun0 no tendrá que ser reabierto ni cerrado en el caso que tengamos que reiniciar el cliente Vpn.
ca ca.crtCertificado de la autoridad certificadora que creamos
cert usuariovpn.crtCertificado del cliente
key usuariovpn.keyClave privada del cliente
ns-cert-type serverPara prevenir ataques man in the middle. Con esta frase hacemos que los clientes solo puedan aceptar un certificado de servidor del tipo servidor “nsCertType=server”. En este campo podríamos aplicar otras alternativas similares como por ejemplo «remote-cert-tls server«.
tls-auth ta.key 1Activación de la autentificación TLS en el cliente.
cipher AES-256-CBCPor defecto el algoritmo de cifrado de OpenVPN es Blowfish con un tamaño de clave de 128 bits. Quien crea que no es suficiente puede añadir esta línea para cambiar el algoritmo de cifrado a AES con un clave de cifrado de 256 bits. Para ver todos los algoritmos de cifrado disponibles teclear openvpn –show-ciphers en la terminal.
auth-user-passPara indicar que el cliente tiene que introducir un nombre de usuario y un password.
auth-nocachePara evitar que los password queden almacenados en la memoria cache de los clientes.
comp-lzoActivar compresión LZO para la transmisión de datos.
verb 3Grado de detalle del estado del túnel

AUTENTIFICACIÓN DEL CLIENTE MEDIANTE LOGIN Y PASSWORD

A pesar de toda la seguridad que hemos implementado hasta el momento podría darse el caso que alguien robará nuestro ordenador. Si alguien robará nuestro ordenador, teléfono o tablet podría encontrarse con la totalidad de nuestras claves criptográficas y de esta forma podría acceder fácilmente a nuestra red.

Para solucionar este problema vamos a introducir un usuario y un password para los clientes de nuestro servidor vpn. Para ello tan solo tenemos que añadir uno o los usuarios que queramos.

Para añadir un usuario, como por ejemplo el usuariovpn2, tienen que teclear el siguiente comando en la terminal:

useradd usuariovpn2 -M -s /bin/false

Una vez creado el usuario tenemos que definir un password del usuariovpn2. Para ello tecleamos el siguiente comando en la terminal:

passwd usuariovpn2

Una vez introducido el comando nos pedirá que introduzcamos la clave de usuario y después nos pedirá confirmación.

En el caso que a posteriori se precise eliminar el usuariovpn2 tan solo tienen que introducir el siguiente comando en la terminal:

deluser usuariovpn2

Seguidamente en la siguiente captura de pantalla pueden ver un resumen de los pasos realizados:

Resumen de la creación y eliminación de usuarios

Nota: Para que la autentificación mediante usuario y password funcione tienen que tener configurado el servidor y el cliente tal y como se detalla en los apartados Configurar el servidor y configurar el cliente.

CONFIGURAR IPTABLES PARA EL ENRUTAMIENTO DE PETICIONES

Cuando el servidor OpenVPN reciba las peticiones de los clientes se deberán enrutar adecuadamente, y además tendremos que tener configurar el firewall de nuestro equipo para que permita el tráfico a través del túnel que se ha creado ente el cliente y el servidor.

Para ello lo primero que tenemos que hacer es habilitar el IP forwarding. Para habilitar el IP Forwading de forma permanente tecleamos el siguiente comando en la terminal:

nano /etc/sysctl.conf

Se abrirá el editor de textos y seguidamente tendremos que localizar la siguiente linea:

#net.ipv4.ip_forward=1

Una vez localizada tan solo hay que descomentarla de forma que quede de la siguiente forma:

net.ipv4.ip_forward=1

Guardamos los cambios y cerramos el archivo.

Una vez habilitado el Ipforwarding tenemos que permitir el tráfico por nuestro túnel VPN, y además tenemos que hacer que los clientes VPN puedan acceder a redes externas públicas y otras subredes dentro de la red VPN. Para poder conseguir esto en la terminal escriben el siguiente comando:

nano /etc/rc.local

Una vez se abra el editor de textos tienen que escribir las siguientes reglas en nuestro firewall

iptables -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -o eth0 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Nota: En función de las características de vuestra red y configuración de vuestro firewall es posible que tenga que implementar reglas adicionales a las que se muestran en este ejemplo.

Con la primera de las reglas estamos permitiendo el tráfico por el dispositivo virtual en que que se crea el túnel.

Con la segunda de las reglas estamos permitiendo que los paquetes provenientes de 10.8.0.0/24 pueden enviarse o salir por la interfaz de salida eth0.

Con la tercera de las reglas estamos diciendo al servidor OpenVPN que cuando reciba una petición de cualquiera de los clientes, proceda el mismo a resolverla y enviarla en representación del cliente.

Una vez finalizando el proceso guardan el archivo y cierran el editor de textos. Antes de cerrar el archivo el fichero /etc/rc.local tendrá un aspecto parecido al siguiente:

Reglas de iptables

CONFIGURAR EL ROUTER Y ABRIR EL PUERTO DEL SERVIDOR OPENVPN

Ya para finalizar solo nos falta configurar nuestro router, para que redirija las peticiones de los clientes al servidor Opevpn, y abrir el puerto del servidor OpenVPN. Para realizar esto tenemos que abrir nuestro navegador y teclear nuestra puerta de entrada. Una vez realizado esto, tal y como se puede ver en la captura de pantalla, se abrirá una ventana en que nos pedirá nuestro nombre de usuario y contraseña:

Accediendo al router

Una vez introducida la información accederemos a la configuración de nuestro router. Seguidamente, tal y como se puede ver en la captura de pantalla, tenemos que acceder a los menús Advanced / NAT / Virtual Servers:

Acceso a virtual servers

Seguidamente presionamos el botón Add y nos aparecerá la siguiente pantalla:

Abrir puerto y configurar Openvpn

Tal y como se puede ver en la captura de pantalla, en en el campo custom server hay que escribir un nombre cualquiera. En mi caso como se puede ver en la captura de pantalla he escrito OpenVPN. Seguidamente en el campo Server IP Address tenemos que escribir la IP del servidor OpenVPN. En mi caso tal y como se puede ver en la captura de pantalla es la 192.168.1.188Finalmente tal y como se puede ver en la captura de imagen seleccionamos el protocolo UDP y escribimos el puerto de nuestro servidor OpenVPN (1194) en los puertos internos y externos.

Presionamos el botón Apply/Save y de esta forma todas las peticiones exteriores que lleguen a nuestro router por el puerto 1194 serán redirigidas a nuestro servidor OpenVPN.

COMO CONECTARNOS AL SERVIDOR OPENVPN

Seguidamente dejo una serie de enlaces en los que explico de forma detallada los pasos a seguir para conectarnos a nuestro servidor Openvpn en el caso de estar usando los siguientes sistemas operativos:

  1. Linux
  2. Android
  3. Windows
  4. iOS

Siguiendo las instrucciones de los enlaces que acabo de dejar podremos comprobar fácilmente el funcionamiento de nuestro servidor Openvpn.

SEGURIDAD QUE NOS APORTARÁ EL SERVIDOR OPENVPN

Si se configura el servidor Openvpn, tal y como se detalla en el post, se obtendrá un nivel de seguridad muy elevado y resultará prácticamente invulnerable frente a ataques.

La seguridad que aportará el servidor OpenVPN que acabamos de configurar estará compuesta por 3 capas:

Capa 1 “Autentificación TLS”: Con la autentificación TLS estamos introduciendo una firma digital HMAC a los paquetes antes de empezar la autentificación reciproca entre cliente y servidor. Si no se pasa el test de la firma HMAC, no se llegará ni a iniciar el proceso de autenticación entre cliente y servidor.

Capa 2 “SSL/TLS”: Mediante las herramientas de seguridad proporcionadas SSL/TLS se realiza el proceso de autentificacion bidireccional entre el cliente y el servidor OpenVPN mediante claves criptográficas.

Capa 3 “Cifrado”: Dispone de varios tipos de cifrado disponibles en la transmisión de datos entre el cliente y el servidor. Además podemos aplicar medidas para los privilegios del demonio de OpenVPN sean los mínimos para poder realizar la función que tiene que realizar.

Todas estas características, más las que se detallan en el post, hacen que OpenVPN sea una opción muy válida para la transmisión segura de datos sensibles. Por esto motivo OpenVPN es el protocolo que utilizan muchas organizaciones en el mundo empresarial. Además OpenVPN es una solución multiplataforma y dentro de lo que cabe no es difícil de configurar si lo comparamos con por ejemplo Ipsec.

En lo que a seguridad se refiere también tenemos que destacar que aparte de las 3 capas de seguridad, también hemos implementado un método para que los clientes del VPN tengan que introducir un usuario y un Password. Además la totalidad del tráfico, incluyendo la resolución de las peticiones DNS, será a través del servidor OpenVPN que acabamos instalar y de configurar.

Cabe decir que actualmente no se conocen vulnerabilidades importantes en este tipo de servidor VPN. Es posible que se descubran vulnerabilidades pero si vamos aplicando las actualizaciones de seguridad no deberíamos tener problema alguno en lo que a seguridad se refiere.

Únete a la conversación

125 comentarios

  1. En mi caso estoy empezando a vivir censura en mi país. Puedo hacer que el servidor vpn se conecte a Internet a tor y yo conectarme a él? Como lo haría?

    1. Estimado,

      Con algunos amigos (para que sea más económico) lo que pueden hacer es contratar un VPS en algún otro país y crear su VPN entre sus equipos y el VPS

  2. Muy bueno el Post, la verdad es muy claro, y me ha sido muy fácil seguirlo. Solamente me falta aprender a conectarme desde otros sistemas operativos para poder comprobar el correcto funcionamiento del servidor VPN ¿Publicarás pronto los posts que explican como conectarse desde diversos sistemas operativos?

    1. Hola Claudio, Muchas gracias por el feedback. Si no pasa nada en aproximadamente un mes deberían estar publicadas las instrucciones para conectarse en el servidor VPN en la totalidad de sistemas operativos más comunes. Android, iOS, Windows y Linux.

      Si alguién me regala un Mac también publicaré las instrucciones para Mac.

      Saludos y buen fin de semana.

      1. Espero puedas tenerlas antes de un mes. Al menos las instrucciones de como conectarse desde Windows o Android. Si pudieras enviarme alguna indicación al correo de como realizar la conexión desde dichos sistemas operativos… Si lo haces te regalo un Mac.

  3. Excelente Tutorial muy completo y bien redactado, Me ha servido bastante para una necesidad que tenia pendiente. Gracias.

  4. Es un tutorial de lujo hermano. Me gustó tu manera de redactarlo y las pantallas son muy didácticas. Si te parece te puedo complementar con la configuración del cliente openVPN para Windows y Android para que la puedas acoplar, ya que yo trabajo 100% con OpenVPN.

    1. Diego gracias por tu ayuda

      Actualmente estoy trabajando en redactar unas instrucciones para poder configurar los clientes en los diferentes sistemas operativos. La semana que viene tendré listo iOS y después iré trabajando en el resto.

      Saludos

  5. Genial tu explicación. Me quedo muy claro y está muy bien redactado. Espero el de Windows para poder implementarlo en un lugar que me encargaron.

    Gracias

    1. Hola Alberto

      Gracias por el feedback.

      Si esperas que publique como conectarse al servidor mediante un cliente de Windows en breve dispondrás de esta información.

      Si esperas que publique el mismo tutorial pero usando Windows en vez de Linux te informo que en principio no tengo planificado hacerlo.

      Saludos

    1. Este fin de semana saldrá para iOS.

      Después iré con Windows.

      Un saludo y buen fin de semana.

  6. Hola buenas, como puedo conectarme al servidor openVPN en linux ? Lo tienes subido ya? Muchas gracias. Un saludo

    1. Hola Buenas. De momento solo está disponible para Windows y para iOS. En breve lo subiré para Linux y finalmente para Android.

      Saludos

  7. Hola que tal en la parte donde coloco el siguiente comando cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa

    Me arroja este error y no puedo continuar.

    cp: no se puede efectuar `stat’ sobre «/usr/share/doc/openvpn/examples/easy-rsa/2.0/*»: No existe el archivo o el directorio

    Espero y me ayudes a resolver esto por favor

    1. Hola Juan

      No se si te podré ayudar mucho. Mejor explicado de lo que está en el artículo no lo se explicar.

      ¿Qué sistema operativo usas?

      ¿Has instalado openvpn y openssl?

      ¿Has mirado si las carpetas a las que acceden existen?

      Si no entiendes lo que estás haciendo te costará llegar hasta el final del tutorial y que todo funcione bien. Tendrás que tener paciencia y poner horas de dedicación por tu parte ya que el copiar, pegar no funciona porqué muchas veces aparecen puntos en que los tienes que adaptar a tu caso.

      Saludos

  8. Felicidades por el blog y Gracias por este artículo tan bien explicado. Me estás salvando la vida.

    Ha caído en mis manos un Debian Wheezy con OpenVPN virtualizado con WMware junto con tres windows 2008 server. Vamos un caramelo.

    Todo funciona OK. Los usuarios de windows se conectan a la vpn con su contraseña pero ahora tengo que añadir otro usuario y de linux ni papa.

    Dos dudas a ver si me puedes ayudar:

    1- Entiendo que directamente voy al paso crear el certificado y las claves de los clientes. Creo un usuario nuevo con ./build-key usuariovpn pero la serie de preguntas que hace como averiguo el contenido del fichero vars si no lo cree yo?

    2- Cuando termine de crear al usuario, como saco los archivos del Debian? no tiene entorno gráfico, y este comando cp /etc/openvpn/keys/* /media/usb no funciona..

    se agradece cualquier ayuda.

    1. Hola Juan Carlos. Respecto a tu pregunta no se como será el debian que te cayo en tus manos. Lo de caer en tus manos tiene una ventaja y un problema ya que ahora tienes un servidor openvpn, pero como no lo instalaste tu mismo, ahora tienes estas dudas. En el post detallo la ubicación del archivo vars. En el caso que no exista la ubicación del archivo vars por tener la versión de easy-rsa 3.0, también explico como generar los archivos para crear las claves y entre ellos está el vars. Las claves no las podrás crear si tu servidor no tiene los scripts de easy-rsa.

      Para sacar las claves con una memoria USB y la explicación que hago para conectarse a los clientes de iOS o de Windows te debería ser suficiente. Está explicado paso por paso y si lo haces bien y como está explicado te tiene que funcionar. Si no te funciona mira que tengas VMware configurado para que te detecte los USB.

      Un saludo

  9. Gracias por los consejos Joan Carles.

    Pero me crecen los enanos, se ve que ayer caduco el dyndns que teníamos y se ha tostado el openvpn, me pide contraseña, la acepta pero el cliente se queda con los dos iconos en amarillo con el letrero «conecting» y de ahí no pasa.

    He editado con nano el client.conf y he cambiado el la línea donde estaba el host de dyndns por la IP fija que he contratado. pero no se soluciono el problema.

    Me puedes echar un cable???

    1. Hola Buenas

      Quizás sea un problema de firewall. ¿Tienes bien configurado el firewall y tu router para redireccionar tus peticiones al servidor OpenVPN?

      La verdad si no es esto no se que puede ser. Los cambios a realizar son mínimos y lo que has hecho me parece correcto.

      Prueba distintos clientes para ver si el problema se reproduce con todos los clientes.

  10. Mi duda es si después de modificar el client.conf tengo que volver generar los archivos para los usuarios. Es decir lo que es guarda en la carpeta config. Si ha cambiado la ip del rooter como sabe el openvpn de los usuarios en que dirección esta el servidor?

    1. No tienes que crear claves nuevas para los clientes. Las que tienes sirven.

      No se si tu servidor Openvpn tiene fines comerciales o no. Si tienes fines comerciales deberás informar a todos tus clientes del cambio de IP y pasarles el nuevo archivo de configuración con la nueva IP que espero que sea fija. Con esto cada cliente sabrá al servidor donde tiene que apuntar.

      Saludos

  11. Para actualizar el repositorio si el siguiente comando no funciona:
    sudo apt-get install openvpn openssl

    Con el siguiente comando lo arreglan:
    sudo apt-get update && sudo apt-get install ethtool

    1. No lo se. Intento escribir cuando me apetece más que cuando planeo. La explicación para conectarse en Android pienso que es la más complicada de las 4 que me plantee realizar.

      Pienso que en unos o 2 meses debería estar la explicación redacta.

  12. Una consulta, he realizado los pasos según la configuración indica. Me conectan los usuarios, pero solo el primero que se conecta llega a tener comunicaciones con el server.

    Pero los otros se conectan, les da ips, pero no llegan a tener comunicación con el server, ¿qué puedo haber hecho mal ?

    1. No entiendo lo que que te pasa. Si se conectan quiere decir que tienen conexión con el servidor y tu me dices que se conectan y no tienen conexión con el servidor.

      No entiendo lo que te pasa y no se que puedes estar haciendo bien o mal. Si un cliente te va bien y otros no quizás sea tema de que el cliente esté mal configurado.

      Saludos

  13. que el servidor OpenVpn le asigna direcciones ip a los clientes, pero solo el primero puede hacer ping al servidor y los demás no pueden.

    1. La información que proporcionas es incompleta. Dudo que yo mismo ni nadie más te pueda ayudar con la información que proporcionas.

  14. Escribo sólo para agradecer tu trabajo y animarte a completarlo (que parece que no te apetece mucho ;) ) con la conexión en Android que personalmente espero para probar.

    Un saludo y ánimo.

  15. Hola no se si haya un vídeo de referencia. Es la primera vez que uso Openvpn.

    No me sale lo de hacer los certificados.

    ¿Si tengo una Ip estática como podría usar VPN en una red local(en mi propia casa)?

    ¿Y como comparto archivos comparto archivos con winscp?
    gracias

    1. De vídeos en youtube encontrarás. Pero que te pueda recomendar no se ninguno.

      Lo de los certificados está explicado paso por paso. Solo tienes que seguir las instrucciones. Mejor no lo se detallar.

      Si quieres testear el funcionamiento en tu red local tan solo tienes que introducir la ip interna del servidor en el fichero de configuración del cliente. En vez de la ip pública pones la Ip Interna.

      No se lo que es winscp pero he buscado y veo que es un cliente ftp. Ftp no tiene nada que ver con openvpn. Si te quieres conectar al servidor openvpn lee en el post que lo explica. Te aconsejaría sustituir winscp por Filezilla.

      Por tus preguntas creo que no solo eres nuevo en Openvpn. Creo que deberías ampliar tus conocimientos sobre redes. Sin unos conceptos mínimos dudo que puedas armar el servidor. Aunque siempre puedes copiar y pegar y debería funcionar…

      Saludos

  16. Hola Joan Carles.

    En primer lugar, felicitarte por la gran calidad de tu Blog. Es un placer encontrar personas como tú en la red, dispuestas a ayudar sin dejar de lado
    el rigor y el buen hacer.

    Por otra parte me gustaría saber si me puedes aclarar una duda. Tengo que montar una red VPN en mi empresa ya que tenemos varias oficinas en distintos lugares geográficos.

    He leído tus post sobre el tema, pero me surge una duda. En los post hablas de montar un servidor VPN y yo creía que lo único que hacía falta era un router con conexión VPN para montar la red. ¿Son necesarios los dos elementos, router y servidor, o uno excluye al otro?. Además, ¿Es necesario que los routers en ambos extremos de la red (oficinas) tengan conexión VPN?

    Gracias por tu respuesta.

    1. Hola Buenas,

      Hay Routers que traen incorporado el servidor VPN. Tendrás que mirar los protocolos VPN que soporta el router, la conexiones simultaneas de clientes que soportan, etc. Los Routers también requerirán de configuración. Si el nombre de clientes es bajo con 2 o más Router deberías tener suficiente para lo que quieres hacer.

      También es posible usar un router normal y corriente y tener un servidor virtual o real que actúe como servidor VPN.

      Yo mucho más no te puedo decir. El informático y quien tiene que montar esto eres tu. Yo por suerte o por desgracia no soy informático ni me dedico a ello.

      Saludos

  17. Para configurar el cliente openvpn también tenemos que coger la configuración de ejemplo el el directorio /usr/share/doc/openvpn/examples/sample-config-files/client.conf
    y editarla en este otro directorio /etc/openvpn/

    Has dicho que copiemos el server.conf pero no el client.conf, me imagino que el archivo que editaremos cuando nos pides que modifiquemos el cliente es el archivo client.conf que tenemos que copiar también en el directorio /etc/openvpn/

    Es por matizar :)

    Gracias por tu trabajo me ayuda muchísimo, gracias!!!

    1. Depende Antonio. Hay versiones de Openvpn en que el fichero de configuración del cliente se halla en /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz. Por lo tanto al mismo tiempo que copiamos el fichero de ejemplo del servidor también copiamos el del cliente. Este es el caso de Debian.

      En el caso de Mint 17 o Ubuntu 14.04 si que tienes razón. Hay que trasladar el fichero de muestra del cliente porqué está separado del servidor. El Fichero de muestra del cliente se halla en la siguiente dirección:

      /usr/share/doc/openvpn/examples/sample-config-files/client.conf

      Saludos

  18. Buena te cuento, logro seguir y hacer todos los pasos que detallas en la guía, al conectar desde mi android al servidor no logro tener acceso a internet.

    ¿Qué pude haber echo mal?, Además en la aplicación de android solo me sale que solo envío paquetes, pero no recibo desde el servidor. Saludos y buen día.

    1. Pues si sigues los pasos de la guía y te paso esto es que algún paso no está bien realizado.

      Si puedes enviar paquetes pero no los puedes recibir tu problema es probable que el firewall de tu servidor no esté redirigiendo las peticiones de forma adecuada.

      Quizás también pueda ser algún parámetro de la configuración del servidor. Tendrás que volver a repasar paso por paso lo realizado entendiendo lo que haces en cada momento. Con la información proporcionada poco más puedo decir.

  19. hola , tengo una gran pregunta. Yo tengo sistema windows.

    ¿Cuál es el programa que tengo que descargar para poder editar los server ?

    1. No acabo de entender tu pregunta. ¿Qué es esto de editar el server?

      Si quieres hacer lo mismo que el tutorial pero en Windows te aconsejo que mires en la web oficial de Openvpn. Para serte sincero en Windows no se como se hace y en estos momentos tampoco me interesa saber como se hace. Para el 100% de servidores que montes GNU Linux es infinitamente superior a Windows en todos los aspectos.

  20. Hola, esta genial tu tutorial, me servio mucho con lo del TLS/auth, sabes como son los pasos después de las configuraciones de servidor y clientes, para windows server, pues lo he montado ahi y me gustaría hacer lo del dns y lo demás que comentas, claro si es posible hacerlo, sin mas me despido. Gracias

  21. Estimado Amigo;

    primero que todo, felicitarte por el excelente post, debo decirte que en gran medida me he valido de lo que has presentado aquí para configurar mi servidor vpn en windows, soy recién un principiante en esto y quizás lo que te pregunte sea tonto, pero ya he recorrido por varias horas la web sin encontrar respuesta a mi inquietud, la cual quiero hacerte presente:

    Para la autentificación de clientes mediante login y password, tu presentas este comando: useradd usuariovpn2 -M -s /bin/false ; mi pregunta es, este es el mismo comando que debo usar en mi consola de comando en win para generar la misma regla que tu propones?

    hay alguna variante a considerar exepto usuariovpn2?

    por favor, me gustaría que me orientaras y me eches una mano.

    Desde ya te agradezco por este excelente post.

    1. Hola,

      No sabia que la mayoría de cosas funcionarían en Windows. Nunca he usado windows para configurar un servidor.

      El comando useradd diría que en Windows no funciona porqué este comando diría que solo funciona en sistemas Unix o derivados de Unix. Pero lo puedes probar por si acaso no? Si quieres un equivalente en windows simplemente no lo se. Si alguien lo sabe que lo ponga.

      Referente a lo de las variantes no se muy bien a lo que te refieres. Pero te puedo decir que puedes crear tantos usuarios como quieras. Así que si tienes el usuariovpn2 y quieres crear otro usuario no tendrás problema alguno.

      Saludos

  22. Buenas,

    tienes un error en la ruta:
    Pones:
    plugin /usr/lib/openvpn/openvn-auth-pam.so /etc/pam.d/login

    Pero debería ser:
    plugin /usr/lib/openvpn/openvpn-auth-pam.so /etc/pam.d/login

    Y el ta.key se debe copiar a «/etc/openvpn»

    1. Jordi, Gracias por tus aportaciones. Durante este fin de semana solucionaré los puntos que mencionas.

  23. Gracias excelente tutorial. tengo un problema con

    sudo apt-get install openvpn openssl

    sudo: apt-get: command not found

    lo estoy haciendo en centos 6.5 no quiero instalar de otra forma porque quiero seguir este tutorial cual seria la solución gracias

    1. Hola. CentOS no utiliza el gestor de paquetes apt-get. Si no voy mal usa yum. Por lo tanto usa los comandos equivalentes con el gestor de paquetes yum. «sudo yum install openvpn openssl» . Para el resto de comandos puedes mirarlos en google. Lo dificil es la configuración del servidor y el servidor se configura igual en CentOS que en Debian, que en windows.

      CentOS no es precisamente una distro fácil. Viendo la pregunta que has realizado dudo que CentOS sea la mejor opción para ti en estos momentos. Si utilizas Debian o Ubuntu encontrarás mucha más documentación y soporte de la comunidad.

      Saludos

  24. Buenas,

    Cuando ejecuto «source vars», me sale el mensaje:

    NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys

    Y no me deja continuar. Que hago mal??

    Gracias por todo!!

    1. Hola Luis,

      Por la pregunta que haces o no has leído el post o no entiendes lo que estás haciendo. Si es el segundo caso es difícil que llegues al final con el servidor funcionando.

      No estás haciendo nada mal. Si te fijas verás que a mi también me sale este mensaje.

      Saludos

  25. Hola de nuevo mi buen amigo y gracias por tu respuesta en el apartado anterior. Tengo algunas dudas y quisiera por favor me pudieras orientar.

    Para poder montar un servidor de las características de las que mencionas en tu post, el SO Debian solo lo debo instalar con las herramientas estándar (es decir, solo el entorno unix)sin entorno gráfico, sin laptop, server print y las demás opciones que aparecen cuando se instala por primera vez Debian?

    Cuando configuro rc.local, el fichero me aparece vacio sin ninguna regla para iptables, y ahi es donde agrego las 3 lineas que mencionas, pero lo que me confunde es que en la imagen del post tu tienes 2 lineas adicionales para este fichero, dando un total de 5 lineas; quisiera me explicaras, apelando a tu amabilidad, que significan las dos primeras lineas, si esas dos primeras lineas la debo colocar o no y si donde aparece la ip 192.168.2.0/24 ahí debo ingresar alguna dirección diferente a la que se ve (he buscado información sobre esto pero me confunde mas ya que unos dicen una cosa y otros cosas muy diferentes)

    Si estoy detrás de un router, debo elegir manualmente la IP interna de mi server en «configuración manual de la red» cuando se esta instalando Debian o lo puedo cambiar después?

    Por cierto, para quien no sepa, y si puedes agregar esto para quien no sea muy entendido como yo para Iniciar el servidor de VPN;
    teclear

    cd /etc/openvpn/
    openvpn server.conf

    Por favor orientame, ya que he consultado sobre lo de iptables pero en vez de avanzar me pierdo mas con las distintas versiones que encentro en la net.

    Desde ya, muchas gracias

    1. Hola Juan

      Para seguir las indicaciones del post lo puedes realizar con Debian y no hace falta instalar el entorno gráfico, ni un servidor de impresión ni nada. Con la instalación base del sistema es suficiente. Pero si quieres instalar entornos gráficos, etc lo puedes hacer tranquilamente. Si quieres usar Linux Mint, Ubuntu o cualquier otra distro diferente a Debian también lo puedes hacer.

      Las dos primeras lineas que no sabes lo que son no hacen referencia al servidor OpenVPN. Hacen referencia a un servidor VPN con el protocolo pptp. El significado de estas lineas se explica en el siguiente link.

      https://geekland.eu/crear-un-servidor-vpn-pptp/

      Un consejo. Si con OpenVPN no te sale puedes probar con pptp (el link que te acabo de dar). El proceso de configuración para pptp es mucho más sencillo que con OpenVPN. Verás que el único problema para hacerlo con pptp es que la seguridad de tu servidor es menor pero para el uso que le quieres dar imagino que la seguridad no es algo crítico.

      Para hacer que tu ip se fija lo puedes hacer tranquilamente después de instalar Debian.

      Referente a iniciar el servidor diría que no hace falta poner los comandos que mencionas. Una vez instalados los paquetes se autoinicia automáticamente. Y si no lo hace y no te quieres complicar la vida la próxima vez que reinicies ya se ejecutará automáticamente.

      Saludos y espero que te haya sido de ayuda.

  26. Estimado Joan;

    gracias por este tremendo tutorial, lo que quiero consultarte es lo siguiente:

    Resulta que cuando inicio el servidor me dice que no esta cargado el modulo tun. El módulo aparece como parte del kernel, pero al hacer modprobe tun no me devuelve nada, al hacer modprobe tun.ko me dice FATAL:modulo tun.ko no encontrado error:hd0, msdos1 read errorAl verificar con modinfo tun me devuelve /lib/modules/3.2.0-4-686-pae/kernel/drivers/net/tun.ko, indicando que se encuentra dicho modulo en el kernel de debian hay varias partes donde dice si esta el archivo del modulo tun en /dev/net/tun y efectivamente esta , pero es un archivo que tiene 0 bytes; por otra parte hay quienes dicen que debo crearlo con mknod tun c 10 200, es esto correcto?

    Quisiera que me orientaras, estoy trabajando con debian 7.6, versión de kernel 3.2.0-4-686-pae

    He intentado cargarlo pero no me resulta, apelo a tus conocimientos y por favor me digas los pasos a seguir de:
    Como lo cargo?

    Si hay que compilarlo, Como lo compilo?
    Si lo creo, que debe llevar en el contenido?
    Una vez cargado, como verifico que esta activo y funcionando?
    como lo incluyo en el arranque de sistema?

    Por favor necesito tu ayuda…desde ya muchas gracias Joan

    1. Hola

      Solo con hacer lo que se detalla en el tutorial levantaras la interfaz tun.

      No hace falta compilar nada. Cuando arranques el servidor openvpn podrás ver si tun se levanta con un ifconfig.

      Saludos

  27. Buenas Caballero, esta muy bien esta documentación.

    Ya prácticamente lo tengo funcionando, pero quería intentar habilitar Access Server web UIs, para ingresar vía Web y realizar el resto de configuraciones del Openvpn Server.

    No he podido habilitarlo, será que tengo que descargarlo aparte?

    Tienes un link para esta descarga?

    Gracias por tus comentarios.

    1. Si que se puede hacer lo que quieres hacer. Para realizar esto encontrarás los paquetes necesarios en este enlace:

      https://openvpn.net/index.php/access-server/overview.html

      Tienes que descargar el paquete, instalarlo ejecutarlo y configurar. Después de esto podrás acceder a la configuración de tu servidor Openvpn vía navegador. Si ya tienes realizados todos los pasos del tutorial dudo que quieras empezar de nuevo todo el proceso. Todo lo que hagas vía web se puede hacer por terminal consumiendo menos recursos. Además si lo haces desde la raíz siempre comprendes mejor lo que estás haciendo. De hecho en el post que escribo se realizan todas las configuraciones que seguramente necesites.

      Saludos

  28. Gracias!! En efecto prefiero la línea de comandos, pero el mantenimiento de los usuarios se lo debo dar a personal con poco conocimiento técnico, de allí que deseo habilitar la opción WEB.
    Ultima consulta, al instalar estos paquetes y entrar vía web, la configuración que ya realice se mantendrá intacta cierto?

    1. Hola. Lo tendrás que probar tu mismo y sabrás la respuesta. Yo no lo se porqué nunca lo he probado.

      Una vez lo hayas hecho me gustaría que lo comentarás en el blog para otras personas que tengan la misma duda que tu.

      Saludos

      1. Buenas, realice las pruebas y la configuración se mantiene intacta luego de instalar el ambiente WEB. Después de instalarlo la verdad no le vi ningún aporte importante así que lo volví a eliminar, en general no me gusto y no recomiendo usarlo.

        Sobre el manual quisiera anotar que la ruta:
        plugin /usr/lib/openvpn/openvpn-auth-pam.so /etc/pam.d/login

        debe cambiarse por la siguiente:
        plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so /etc/pam.d/login

        Ademas creo que es importante mencionar, aunque debería ser algo obvio, que se debe reiniciar el servidor luego de hacer cambios en los enrutamientos.

        De nuevo gracias por todo!

        1. Gracias a ti por reportar tu experiencia. En cuanto a mi servidor decirte que me funciona con este comando:

          plugin /usr/lib/openvpn/openvpn-auth-pam.so /etc/pam.d/login

          A quien no le funcione siempre puede probar tu propuesta.

  29. Como aprendiz de Linux, VPN, etc. te agradezco el post y tu clara exposición.

    Pronto empezaré con las pruebas pero me queda una duda: En la última imagen del fichero /etc/rc.local aparecen 5 lineas IPTABLES de las que solo hemos entrado 3, ¿se deben entrar las 2 que faltan?.

    1. Hola Pere

      Las dos primeras lineas no son necesarias.

      En el post intenté reflejar todos los pasos con el máximo detalle. Antes de ponerte a configurar el servidor te aconsejo que intentes entender cada uno de los pasos que vas realizando. De lo contrario te perderás y el resultado no será el esperado.

      Saludos

  30. Saludos muy buen post. He instalado todo pero me dice que el OpenVPN solo tiene licencia para 2 usuarios? hay manera de ampliar esto sin comprar las licencias de OpenVpn
    Gracias

  31. Buen día Joan,

    Permiteme felicitarte por el trabajo que haces y la forma en que colaboras con la comunidad, es un post bastante detallado y muy claro.

    Solo tengo una consulta, estoy tratando de implementar una VPN sobre Debian pero en mi Red Local tenemos un dominio, trabajamos con Windows Server 2008, quisiera saber si hay alguna configuración adicional para que los clientes se conecten a los servicios locales como el Servidor de BD que tenemos. Gracias!

    Saludos desde Perú,
    Jean Pierre Pérez Tang

    1. La mejor respuesta que te puedo dar es que lo pruebas y que lo intentes. Yo diría que tendrás que añadir una línea para redirigir las peticiones que llegan al servidor VPN hasta el servidor de la base de datos. Creo que deberías poner algo así en la configuración del servidor:

      push «route 10.9.0.0 255.255.255.0» donde 10.9.0.0 seria la ip la red donde se halla la base de datos y 255.255.255.0 la máscara de subred.

      Ten en cuenta que la configuración que se muestra en el tutorial es un host to LAN. En tu caso deberías ver si necesita una LAN to LAN o con una Host to LAN es suficiente.

      Si lo haces y te funciona me gustaría que me dijeras si la aportación realizada es correcta.

  32. Hola, buenos días.

    Estoy haciendo un ciclo de informática y tengo que montar una VPN para un trabajo, estoy siguiendo los pasos uno a uno y en el momento de comprobar el contenido de /etc/openvpn/client.conf me encuentro que no tengo ese archivo, tengo que crearlo yo desde cero? O es que algo estoy haciendo mal? Espero vuestra respuesta, gracias de antemano.

    Por lo demás los pasos vienen perfectamente detallado.

    Gracias, un saludo.

  33. Felicidades por este excelente tutorial.

    Pequeños detalles. Te dejaste un «-» en la instrucción bind-interfaces del apartado del dmasq.conf… He estado un buen rato hasta que encontré el fallo.

    En mi caso con el cliente Securepoint VPN no consigo habilitar el ta.key. He de deshabilitarlo del servidor ya que el log ( no habilitado por defecto ) me decía que el cliente no lo enviaba. Miraré algún otro cliente.

    También el dmasq me falla cuando añado el 127.0.0.1, me dice que ya esta siendo usado.Lo he quitado de la linea del «listen-adress» y parece funcionar.

    Finalmente comentar que si no le añades servidor de DNS en el server.conf no consigue navegar el cliente por Internet. Se llega al servidor y ahí se queda. Le añadí la opción ‘push «dhcp-option DNS 8.8.8.8» ‘ y funcionó.

    Muchas gracias.

    1. Gracias a ti por todo el feedback aportado. Antes de finalizar el año (queda poco), repasaré los comentarios realizados. Los tuyos y los de otro usuario. A mi las peticiones DNS me las resuelve sin tu linea, pero recuerdo tener un problema similar que solucione de la misma forma que lo has hecho tu con un servidor VPN pptp.

      Referente al único problema que parece que tienes. ¿Porqué no utilizas el cliente oficial de OpenVPN? Quizás sea esta la razón para que tengas problemas con el ta.key. Dentro de este post encontrarás un link para poder descargar y empezar a usar el cliente oficial de OpenVPN. (Porqué por lo que intuyo quieres conectarte al servidor desde Windows.)

      Saludos y ya comentaras lo de la autentificación TLS.

  34. Hola Joan Carles, enhorabuena por tu tutorial.

    Tengo un problema que seguramente es fácil para casi todos, menos para mí.
    Quiero que al establecerse la VPN pida usuario y contraseña y los valide contra los usuarios definidos en el servidor.
    Para ello tengo que añadir «auth-user-pass» en el cliente y «plugin /usr/lib/openvpn/openvpn-auth-pam.so /etc/pam.d/login» en el servidor.

    Bien, no encuentro la forma de instalar «openvpn-auth-pam.so». Instalo «libpam» y este fichero no lo encuentro.

    Todo eto lo hago en un router con openwrt.

    Espero que puedas ayudarme.

    Feliz 2015!!!

    Saludos.

    1. Hola Paco. Si no encuentras este fichero no se que decirte. Este fichero en mi debian Whezzy ya viene por defecto cuando isntalas Openvpn.

      Lo que puedes hacer es mirar es si en vez de el archivo /usr/lib/openvpn/openvpn-auth-pam.so tienes el archivo /usr/lib/openvpn/openvpn-plugin-auth-pam.so. Es lo único que se me ocurre a raíz de un comentario de un lector. Si tienes este archivo que te menciono entonces debería poner la siguiente frase en los archivos de configuración:

      plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so /etc/pam.d/login

      Saludos

  35. Joan Carles, muchas gracias por tu respuesta.

    Buscando en todo el router no encuentro nada parecido a lo que indicas. Seguramente es que no he instalado los programas adecuados. Revisaré los pasos que he dado para realizar la instalación de Openvpn.

    Si encuentro la solución, la comentaré aquí.

    Muchas gracias.

    Saludos.

    1. Perfecto Paco. Pero ten en cuenta que tu estas haciendo todo el proceso en un Router VPN. Esto no es lo que se explica en el post, por lo tanto imagino que ciertas partes es posible que sean diferentes. Te recomiendo que contactes con el fabricante del Router o mires las instrucciones del Router. Diría que estos Routers traen de por si una interfaz web para poder realizar toda la configuración desde la interfaz.

      Saludos

  36. En realidad no es un router VPN. Es un router al que le he instalado el Firmware Openwrt (distribución de Linux) y que para que levante la VPN he seguido unas instrucciones parecidas a las tuyas.

    Gracias y saludos.

  37. Hola Joan Carles, Desearte un Feliz Año 2015, y a la vez felicitarte por compartir esta base de conocimiento sobre algo tan útil. Para comentarte que seguí todo el post, y me salió. Pero me quedé en la última parte. Al momento de conectarme como cliente, me designa una ip y me llego a conectar pero se me va del todo el Internet. Es algo muy raro.

    1. Hola buenas. Lo que te pasa no es raro. Repasa todos los pasos realizados y sobretodo debes repasar los puntos que hacen referencia al redireccionamiento de peticiones en el servidor, y en el firewall del servidor, porqué es posible que el fallo esté allí. Y recuerda que lo que haces tu no tiene porqué ser una fotocopia de lo que cito en mi post. Tendrás que adaptar mi explicación a las particularidades de tu red.

      Saludos Hiro

  38. Hola, he conseguido que funcione con tu manual , pero pasa una cosa que cuando enciendo el equipo y arranca el servidor se para en el servicio openvpn cliente para a pedirme el usuario y contraseña y si no se lo metes no arranca del todo con lo cual es un problema si no estas delante del equipo para ponerlos.
    ¿ se puede solventar este problema ?
    gracias

  39. Muchas gracias por el tutorial, me está siendo de gran ayuda!
    Todo muy detallado y explicado, así da gusto.

  40. Excelente, Muy completo. para quienes no somos expertos nos ha ayudado mucho. Buen trabajo. Un saludo.

  41. Exelente, todo esta muy bien explicado. Solamente tengo un problema y no se exactamente a que se debe. El problema es el siguiente que al configurar el servidor de esta manera como esta puesto en el tutorial se me puede conectar solamente un cliente al mismo tiempo, me explico al conectarse segundo se desconecta el primero o simplemente no se puede conectar otro.

    Quería saber si por cada cliente tengo que crear un certificado y claves personales o me valen ya los creados para todos los clientes? – Se puede deber el error que no se pueden conectar simultáneamente porque tengo los mismos certificados y claves para todos los clientes?

    Muchas Gracias!

    1. Hola Suomi

      Obviamente tal y como se detalla en la explicación, cada cliente requiere su propio certificado. Por lo tanto cada cada cliente deberás generar un certificado.

      Saludos y gracias por comentar

  42. Hola!

    Tengo una pregunta hay alguna forma para que no todo el tráfico del cliente pase por el servidor? Me explico. Al configurar el servidor de esta forma como se explica en el tutorial todo funciona bien, el cliente se conecta al Internet pero, hay una pega que su conexión a Internet pasa por mi servidor y por esto su conexión se hace mas lenta y también su configuración local se adapta al servidor.

    Te doy un ejemplo el cliente abre google.com o youtube.com y en vez de que se abriera su pagina local de su país por ejemplo el google de Reino unido google.co.uk ,se abre este del servidor el mio google.es .

    Mi pregunta es se puede hacer la conexión entre el cliente y servidor normal para que el cliente se conecte directamente a Internet sin necesidad de pasar todo el trafico por mi servidor,pero al mismo tiempo que tenga el cliente una conexión normal VPN conmigo «me refiero al servidor» como si fuera una VPN de hamachi por ejemplo?!

    Muchas Gracias!

    1. Hola muy buenas, Lo que quieres realizar es imposible. VPN implica conectarse a una red externa y por lo tanto lo que comentas no se puede hacer. En el momento que tu tráfico deja de pasar por el servidor entonces el cliente pierde la conexión o no se conecta a través del servidor VPN.

      Saludos

  43. Buenas Joan, perdona que te haga unas preguntas generales que me surgen antes de empezar a montar mi propio OpenVPN. Perdona de antemano si son estúpidas o no tienen sentido, estoy empezando a preocuparme por estas cosas.

    Si el servidor en el que se monta está registrado a mi nombre y yo soy su único usuario, estaría ocultando mi actividad a mi ISP, pero de cara a Internet, el acceso sería igual sólo que desde una IP diferente y potencialmente en un país diferente con una legislación diferente. O me estoy perdiendo algo?

    He estado probando VPNs de pago que suministran nombres de usuario diferentes a cada cliente, esto me preocupa un poco al sentir que me tienen identificado en sus máquinas. ¿Tiene sentido la preocupación? Estoy identificado igualmente por la IP desde la que conecto y lo del username es una estupidez? Tendría sentido al montar un vpn ofrecer el mismo nombre usuario a todos los clientes? ¿ganarían algo en anonimato?

    Un saludo y gracias de antemano.

    1. Hola buenas

      Intentaré responder a tus preguntas una por una.

      Si tu montas tu propio servidor en tu casa y solo lo usas tu, no estarás ocultando nada a tu ISP ya que la petición de conexión del servidor VPN a la web final no está cifrada y tu ISP podrá analizar el tráfico y las peticiones. Si utilizas en servidor openVPN en un servidor VPS externo entonces si que estarás ocultando tu actividad a tu ISP.

      Si usas un VPN externo, sea de pago o gratuito, tendrás que confiar en ellos. Tengas nombre de usuario, o no… es posible que estos servicios VPN guarden registros de las IP que se conectan a sus servidores y de las peticiones que realizan estas IP. Por lo tanto tus preocupaciones tienen sentido ya que seguro que hay algún servidor VPN que se dedica a vender información de tus peticiones.

      Para finalizar hay servicios VPN que disponen de un único usuario y contraseña para todo el mundo. Por lo tanto hazlo como quieras.

      Por cierto. Para entender el funcionamiento del VPN te puedes leer esté artículo

      https://geekland.eu/conectarse-a-un-servidor-vpn-gratis/

      Saludos y suerte montando el servidor.

  44. Hola, muy buenas.

    Lo primero decir que me encanta la página y sus contenidos, muy buen trabajo y grandes post.

    Comento mi situación:

    Actualmente dispongo de una Raspberry Pi 2 B y una de las razones de adquirirla era construir mi VPN personal. Antes de seguir este post ya intenté crearla mediante un vídeo colgado en Youtube y Adafruit, pero me surgieron problemas para conectarme mediante SSH si tenía OpenVPN encendido.

    Referente al post, he seguido todos los pasos descritos hasta el punto donde explicáis la función dnsmasq. Instale no-ip y creé la DNS y me conecto a ella sin problemas, no toque el apartado de poner una IP estática, ya que lo intenté con Raspbian y daba problemas (aunque de por sí nunca me ha cambiado la IP, con lo cual por ahora no lo necesito). Todo bien hasta el punto de dnsmasq.

    Cuando añado las dos lineas en dnsmaq.conf y reinicio Raspbian, no me sale el error que comentaais, sino:

    dnsmasq: opción errónea en línea 626 de /etc/dnsmasq.conf failed!
    [FAIL] startpar: service(s) returned failure: dnsmasq ... failed!

    Imagino que hay confrontación en las interfaces, supongo que en la de [tun0]. Si ha alguien le ha pasado algo parecido, le agradecería bastante una ayuda, ya que he buscado por la web y no he encontrado nada referente a este problema :) además de que es la primera vez que uso dnsmasq.

    Añadir que, en la creación de la DNS, en el apartado de crear el script noip.sh, si os da problemas con vuestro Raspbian debéis añadir lo siguiente en el principio del script:

    #! /bin/sh
    # /etc/init.d/noip

    ### BEGIN INIT INFO
    # Provides: NombreDelScript
    # Required-Start: $remote_fs $syslog
    # Required-Stop: $remote_fs $syslog
    # Default-Start: 2 3 4 5
    # Default-Stop: 0 1 6
    # Short-Description: Simple script to start a program at boot
    # Description: A simple script which will start / stop a program a boot / shutdown.
    ### END INIT INFO

    Un saludo, espero respuestas.

    1. Muy buenas

      Lo primero es decirte que tienes que asegurarte que tu Raspberry tenga IP fija. Es importante.

      Referente al error que tienes. El motivo es posible que sea un error en el fichero de configuración. En el fichero de configuración de dnmasq sustituye:

      bind interfaces por:

      bind-interfaces

      Espero que con esto te funcione. Ya ves que es únicamente cuestión de un guión.

      Saludos

  45. Hola buena noches, he seguido al pie de la letra todo el excelente tutorial que has hecho, Sin embargo no he conseguido alcanzar otros servidores que están en la misma red a la que me conecto a través de la vpn, todo va muy bien hasta el servidor openvpn, pero de ahí en adelante no llego, estoy usando fedora 21. Muchas gracias por tu colaboración.

  46. Hola Joan!!! gracias por tu blog

    Como mas vale una imagen que mil palabras voy a poner una URL de MEGA con una carpeta que podrán ver todos y de paso si le pueden echar un vistazo a los archivos de configuración por que no llego a conectar con el server VPN, de echo si pongo una contraseña inventada el cliente me dice OK, y me levanta la interfaz tun pero cuando hago un ping a los host que tengo en la red del server openVPN no alcanza y desaparece la interfaz tun.

    Si mas dejo el Link de mega con imágenes y archivos de configuración

    «https://mega.co.nz/#F!WRFzlKwK!BBCH3VTMGliXC5XA3TApxA»

  47. excelente explicación me ayudo bastante, pero tengo otro problema aun mayor, debo implementar tambien el openvpn con ipsec, tienes alguna idea de como hacerlo

    1. Andres

      Openvpn no es compatible con Ipsec. Ipsec es un protocolo y Openvpn es otro diferente. Si quieres implentar un VPN con Ipsec dudo que mi explicación te sirva de mucho.

      Saludos

  48. Hola Antonio guifi

    Comenta la línea del plugin para autenticar el usuario en el server.conf y haz un /etc/init.d/openvpn restart. después haz un ifconfig y debería volverte a aparecer. Yo al menos en Debian 8 me ha funcionado.

    Saludos

  49. Hola increíble tu post… felicidades

    Tengo una pregunta. Si monto el servidor y creo usuarios, por ejemplo uno para usar el Internet de casa…
    que posibilidades tengo de conectarme con android solo con datos móviles sin acceso a Internet.

    ¿se lograría conectar?, algo he leído de los protocolos que usan las empresas móviles como por ejemplo que sus puertos están cerrados y no se lograría conectar con el servidor, pero si una usaría puertos como: UDP si no me equivoco ¿se podría establecer la conexión?

    Así al fin podría utilizar el Internet de casa en mi celular y no pagar de mas por Internet que a mi parecer debería ser gratis.

    De antemano muchas gracias! saludos…

    1. Hola Diego

      Que yo sepa no se puede hacer lo que quieres hacer, y si se puede realizar yo no se como hacerlo.

      No estoy de acuerdo en que Internet tenga que ser gratis. Quizás debería tener un precio más razonable… pero si fuera gratis no se podría mantener ni mejorar la infraestructura.

      Saludos

  50. Hola joan

    Muchas gracias por tu aporte la única duda que tengo es que para implementar openvpn en un server Centos6.4, algunos comandos no son los mismos a la hora de configurar. Tengo una guía para repositorios , logre instalar , pero configure mal las llaves y los certificados, ¿cómo se pueden borrar??

    Estudio y mi proyecto de fin de ciclo es implementar un VPN , cualquier ayuda me vendría de perlas.

    Gracias, Saludos desde Lima Perú

    1. Hola David

      Desafortunadamente no he usado nunca Centos y YUM tampoco me es familiar y no es de mi agrado. Por lo tanto poco te podré ayudar. Te aconsejo que busques una guía de equivalencia de comandos para hacer un nuevo intento.

      En el post hay con detalle la ubicación donde se guardan cada una de las llaves. Por lo tanto vas donde están y las borras. Una vez borradas empiezas de nuevo.

      Saludos

  51. Hola Joan

    Me gusta mucho tu trabajo , y le pones mucho esfuerzo a tus explicaciones , en este magnifico tutorial , tengo alguna duda.

    ¿Cuando hablas del interfaz «tun» , te refieres a un interfaz eth?

    Tengo un CentOS 7 en VMWare y los interfaces son ens ( ens33,ens37 ) ens37 es la que conecta a internet , y cuando llegas al apartado de Configurar Iptables para el enrutamiento de peticiones no se si ese tun0 es un adaptador creado por el túnel o es una interfaz del servidor. Te agradecería mucho una pequeña aclaración sobre esto. Gracias y un saludo.

    1. hola Jorge

      La interfaz «tun» (Network tunel) no tiene nada que ver con una interfaz eth0. La interfaz tun es un dispositivo punto a punto virtual.

  52. Me Gusta mucho el tutorial, esta muy bueno.

    Me gustaria saber si es posible , creando mi propio servidor VPN, conectarlo a los servidores de USA. Me interesa mucho mantener una IP de USA mientras trabajo.

    1. Hola Miguel

      Si te creas tu propia VPN no puedes tener una IP de otros país. Solo puedes tener una IP de tu país.

      Si te interesa una IP de USA deberás contratar un servicio VPN externo. También tienes la opción de usar uno gratuito.

      Saludos

  53. Muchas gracias por tu tutorial y toda la información, me resulto de mucha utilidad.

    :)

    Saludos.

  54. Hola, muy buenas.

    Tengo una Raspberry Pi 2 B y por ahora bien excepto al llegar al punto de reiniciar el dnsmaq, me aparece un error que no es el que comentas en tu tutorial.

    Al hacer el «/etc/init.d/dnsmasq restart» me aparece lo siguiente:

    […] Restarting dnsmasq (via systemctl): dnsmasq.serviceJob for dnsmasq.seails. FAILED!

    Saludos y gracias!

    P.D: El tutorial en si, es impresionante, todo muy detallado.

  55. Hello Joan,

    Todo muy claro, pero estoy construyendo mi servidor para autenticación con token RSA (tengo un servidor RSA Manager) y dividiendo en dos etapas el proceso todo funciona la autenticación manual a traves del acetest con mi usuario y token rsa hacia el servidor y la autenticación local vpn… pero tengo problemas para realizar la autenticación con mi token… ¿Algún consejo?

    Gracias

    Ricardo.

  56. Hola Joan,

    Agradezco tu blog en los novatos que como yo empezamos. Quisiera consultarte en mi caso estoy intentando configurar el openvpn para un vps, en mi caso un debian 8.

    He seguido todos tus pasos indicados, y todo me ha ido perfecto. Pero aun no lo he probado ya que antes quiero entender cada cosa.

    Tan solo consultarte en el caso de los VPS, si hago un ifconfig me aparecen los siguientes nics

    – lo (que apunta a 127.0.1.1) el localhost
    – venet0 (que apunta 127.0.0.2) entiendo que seria como un localhost2
    – venet0:0 (que apunta a la ip publica de mi vps)

    entiendo que tendría que rectificar el apartado iptables en vez de indicar eth0 en mi caso seria venet0:0 ?

    gracias por la respuesta y prosperidad para todos

  57. Simplemente agradecer este artículo, me ha servido de mucho y me ha hecho entender cosas, que para un becario como yo, ha hecho posible que lleve a cabo mi tarea.

    Lo agradezco de verdad.

    Un saludo!

    1. De nada. Me alegro que te haya sido de utilidad y ahora puedas disfrutar de tu propio servidor.

      Saludos

  58. Hola amigo,

    gracias por el blog! esta muy bien explicado, y tengo una pregunta, es necesario la configuración del router para que funcione la VPN? es decir, el servidor VPN lo tengo en un Debian virtualizado, y quiero conectarme a la VPN con mi computadora física, no se si se pueda hacer sin la necesidad de modificar el router de mi casa.

    Saludos.

    1. Hola Rocky

      Si pretendes conectarte fuera de tu red local sí. Si te quieres conectar dentro de tu red local no es necesario. De hecho si lees el post ya lo pone que tienes que modificar la configuración de tu Router.

      Saludos

      1. Gracias

        chequé lo de la configuración, estoy haciendo unas pruebas fuera de casa y no puedo acceder a mi router, entonces al momento de conectarme desde mi windows al servidor VPN, en el cliente VPN me aparece un mensaje que dice «connecting to client has failed», por eso preguntaba si era necesario la configuración del router, ya me has respondido que no en red local, entonces, me podrías orientar acerca de por qué no podría estar funcionando?

        Saludos de nuevo.

        1. Hola

          Tienes todas las instrucciones para realizar el 100% de pasos en el tutorial.

          Por el mensaje puede ser tema de configuración del router, de firewall, que el cliente esté mal configurado o también puede ser que no tengas tu máquina virtual integrada en tu red local. Más no te puedo decir.

          Saludos

        2. En general una máquina virtual si no especificas lo contrario, no está en tu red local y no puedes acceder a ella desde tu equipo físico. Si lo especificas, entonces si. Prueba a ver si eres capaz de conectar a tu debian virtualizado desde la máquina física con SSH, por ejemplo, para comprobar que tienes conectividad entre la máquina física y la virtual.

  59. Rocky realiza un ping desde tu maquina fisica a la maquina virtual y ve que respuesta obtienes.

  60. Saludos.

    Quiero tener un servidor usando la vpn pero también un servidor para respaldos usando RSYNC, pero alli tengo un problema no encuentro un cliente para windows. (encontré acrosync que es muy bueno pero es de paga) alguna idea para crear un servidor de respaldo de información con clientes windows (varios clientes). gracias

  61. Buenos dias a todos, llevo pegandome con este tema ya varias semanas y estoy un poco desesperado.
    Os explico mi problema, tengo un servidor donde tengo instalado el servidor de VPN con dos tarjetas de red que son: red1-intranet y donde tengo instalado el clienteVPN, y red2-lan (red interna conectada a un switch donde veo mas equipos).

    Desde el servidor VPN hago ping a cualquiera de las dos redes y responde, pero una vez creada la vpn con el cliente y todo ok, si desde el ordenador del cliente quiero acceder algun equipo de la lan no llego.

    El server esta en un windows 10.

    Gracias

  62. Saludos amigo tengo una pregunta

    bajo que protocolos o puentes se configura openvpn en linux por favor ayúdame estoy confundido

  63. Le quite este parametro en debian 8 y funciono plugin /usr/lib/openvpn/openvpn-auth-pam.so /etc/pam.d/login muy buena guía saludos desde argentina!!

  64. Hola!

    Muchas gracias por tu post, gracias a ti pude configurar por primera vez un túnel VPN, ¡todo está muy bien explicado! Solamente tuve que ajustar mi firewall al final. Ahora sólo tengo una pregunta, y es que quiero configurar un segundo cliente VPN, a la hora de correr ./build-key dice que el fichero no existe, ¿qué debo hacer? ¿qué me está faltando?

  65. Muchas gracias por tu post, es excelente. Pero tengo un problema, no se si podras ayudarme, pero no logro habilitar la navegacion en internet de los clientes que se conecten a la VPN. He colocado las reglas para permitir el trafico, pero no hay caso.
    Las reglas que coloque son las mismas, pero bajos las condiciones del servidor que he montado:

    iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
    iptables -A INPUT -p udp -i eth0 --dport 1194 -j ACCEPT
    iptables -A FORWARD -i eth0 - tun 0 -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A FORWARD -s 10.8.0.0/30 -o eth0 -j ACCEPT
    iptables -t nat -A POSTROUTING -s 10.8.0.0/30 -o eth0 -j MASQUERADE

    He aplicado esas reglas. La red Internet entrecomillas del servidor es la 192.168.1.0/24. Otro detalle, los clientes VPN en vez de conectarse con mascara 24 se conectan con mascara 30 (255.255.255.252).
    Si alguien podría ayudarme con la configuración de las reglas se lo agradecería bastante.

    Saludos

    1. Hola

      Es normal que se conecte a la interfaz 255.255.255.252. Seguramente en la configuración del servidor así lo has configurado. Además en las reglas de iptables usas 10.8.0.0/30 que equivale a la máscara de subred que mencionas.

      Igual en iptables deberías usar 10.8.0.0/24.

      Saludos

      1. Hola Joan,

        Muy bueno el artículo, estoy con un problema similar que creo es de este post, he realizado la conexión que segun los logs del server se ve la ip publica y la ip interna o sea de la LAN, el tema es que no responde al comando ping desde el lado cliente y desde el lado server.

        Uso mascara 24, el único cambio que hice en iptables es reemplazar eth0 por wlan0 que es la interface que usa el equipo para conectarse al router y nada mas.

        Desde ya agradecido por tu repuesta.

  66. Muy buen post. Solo tengo una consulta, como sabe el cliente vpn remoto la IP publica del serverVPN si no tenemos la posibilidad de tener una ip pública fija en el server VPN.

    Para ser más específico, ¿donde se le dice al cliente cuál es la dirección IP del serverVPN?

    1. Hola

      Lo puedes hacer mediante un servicio de direccionamiento DNS como NO-IP o Ducks DNS. De esta forma up IP se asocia a un dominio. Si la IP pública cambia el cliente de NO-IP o Duck DNS refresca el dominio.

      Si lees el artículo encontrarás información.

      Saludos

  67. Hola:

    Te cuento que ya pude solucionar el problema de la falta de ping en el equipo que habia configurado con IP estática. El error estaba en el configurador del router ya que ahi puse la ip fija para esa PC en vez de hacerlo en el network manager.

    Ahora empece de nuevo y con una nueva instalación de Linux Mint 19 que ya viene con openvpn y openssl instalado el problema es que al ejecutar source ./vars me tira un mensaje de que el archivo openssl.cnf no esta en el directorio /etc/openvpn/easy-rsa. Como se corrigue esto si en ese directorio hay tres archivos con versiones diferentes que son la openssl-0.9.6.cnf la 0.9.8 y la 1.0.0.0 ?

    Pregunto porque la version instalada de openssl es la 1.1.1

    Espero repuesta por favor ! desde ya muchas gracias.

Dejar un comentario

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.