OpenVPN es un cliente/servidor VPN (red privada virtual) multiplataforma. Es compatible con sistemas operativos Microsoft Windows, GNU/Linux, macOS e incluso tiene aplicaciones gratuitas para Android y iOS. Otro punto fuerte de OpenVPN es que algunos fabricantes de routers lo están incorporando en sus equipos, por lo que tendremos la posibilidad de configurar un servidor OpenVPN en nuestro router. Otro aspecto destacable es que por ejemplo sistemas operativos orientados a cortafuegos también lo incorporan, PFsense y OPNSense son dos distribuciones muy recomendables para utilizar OpenVPN y el resto de sus opciones de configuración.

¿Para qué me puede servir crear un servidor OpenVPN?

Si creamos un servidor OpenVPN en nuestro hogar, nos puede servir para conectarnos a Internet de una manera segura desde cualquier red ya sea cableada o WiFi, con cifrado WEP/WPA o sin cifrar. Todo el tráfico irá cifrado a través de un túnel desde nuestro ordenador donde nos conectemos, hasta nuestra casa y desde allí saldrá a Internet, es como estar en nuestro hogar. Debemos tener en cuenta varios factores, como tener una buena velocidad de subida (30Mbps o superior), y tener en nuestro hogar una dirección IP pública. Al montar un servidor OpenVPN en nuestro hogar, también podremos acceder a todos y cada uno de los recursos compartidos que tengamos, como servidores Samba, FTP e incluso acceder a la impresora.

OpenVPN utiliza un conjunto de protocolos SSL/TLS que trabajan en la capa de transporte, y tenemos dos tipos de funcionamiento:

  • TUN: El controlador TUN emula un dispositivo punto a punto, es utilizado para crear túneles virtuales operando con el protocolo IP. De esta forma se puede encapsular todos los paquetes que se transporten a través de él como datagramas TCP o UDP (más adelante veréis que escogemos UDP en lugar de TCP, y preguntaréis que por qué ya que TCP es conectivo, fiable y orientado a conexión). Las máquinas que queden detrás de cada uno de los extremos del enlace pertenecerán a subredes diferentes.
  • TAP: Simula una interfaz de red Ethernet, más comúnmente conocido como modo puente o bridge, estos túneles virtuales encapsulan directamente paquetes ethernet. Esta situación permite empaquetar entramados diferentes al IP. Las máquinas situadas detrás de cada uno de los extremos del enlace pueden operar como parte de la misma subred (si se utiliza el protocolo IP). El modo de funcionamiento puente es particularmente útil para enlazar usuarios remotos, ya que éstos pueden conectarse a un mismo servidor y virtualmente formar parte de la red principal.

En el manual utilizaremos TUN y veremos cómo creamos una subred virtual 10.8.0.0/24 donde estarán los clientes OpenVPN cuando se conecten.

En este manual os voy a explicar cómo hacerlo en GNU/Linux (en Debian 9), aunque en esencia, es lo mismo para Windows, únicamente cambian los comandos en la consola (cmd.exe), los certificados y las llaves, son los mismos para los dos, es decir, puedes crear TODO en GNU/Linux y luego pasarlo a Windows para usarlo (ya sea cliente o servidor), únicamente deberás cambiar la extensión del cliente/servidor .conf por .ovpn

En este manual os voy a enseñar como realizar una configuración de OpenVPN muy segura, personalizando los algoritmos de cifrado simétrico, asimétrico y de hash. De esta forma, podremos tener el mejor cifrado posible de las comunicaciones.

Resumen de la criptografía a utilizar

  • Usaremos el cifrado asimétrico RSA de 4096 bits para crear la Autoridad de Certificación, los certificados del servidor y también los certificados de los clientes.
  • El algoritmo de clave simétrica será AES-256-GCM, el más seguro actualmente y que se ha incorporado la compatibilidad en OpenVPN 2.4. Si tu versión de OpenVPN no es esta, deberás utilizar AES-256-CBC por ejemplo. Si quieres comprobar si tu servidor o cliente soporta este tipo de cifrado, deberás poner en consola “openvpn –show-ciphers”. Os recomendamos leer nuestro artículo sobre OpenVPN 2.4 y AEAD para conocer qué diferencias hay:
  • El algoritmo hash que utilizaremos será SHA512, aunque no se usará ni en el canal de control (porque usaremos TLS 1.2 como ya veréis) ni tampoco en el canal de datos si usamos GCM (con CBC sí se usaría para dotar a la comunicación de integridad). Si quieres comprobar si tu servidor o cliente soporta esto, deberás poner en consola “openvpn –show-digests”
  • El canal de control lo configuraremos con TLS 1.2 y la máxima seguridad posible: TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384. Si quieres comprobar si tu servidor o cliente soporta este tipo de cifrado, deberás poner en consola “openvpn –show-tls”.

Adicionalmente a estas medidas de seguridad, incluiremos una firma HMAC adicional para la primera negociación de TLS, de esta forma, protegeremos el sistema de posibles ataques de denegación de servicio, de ataques UDP Port Flooding y también de ataques TCP SYN. Al conectarnos al servidor, si el cliente no posee la firma HMAC correcta será bloqueado. En versiones anteriores de OpenVPN 2.4 la directiva era tls-auth, que se encargaba únicamente de la autenticación de una clave precompartida generada por el propio OpenVPN. Ahora en versiones superiores a OpenVPN 2.4 se llama tls-crypt, la principal diferencia es que además de autenticar, también cifra el canal para que nadie sea capaz de capturar dicha clave precompartida. La configuración es muy similar, la generación de la clave es exactamente igual en ambas.

Por último, utilizaremos el protocolo UDP en lugar de TCP porque es más fuerte frente a ataques de denegación de servicio, debemos recordar que UDP es no conectivo, no fiable y no orientado a conexión. No obstante, podremos usar TCP sin ningún problema para dotar a la VPN de todos los beneficios de este protocolo.

Paso 1: Instalar OpenVPN y descargar Easy-RSA 3

Lo primero que tenemos que hacer es instalar OpenVPN en nuestro equipo, ya sea con Windows o Linux. Si utilizas Windows debes irte a la página web oficial de descargas de OpenVPN y en el asistente de instalación instalar todo. Si usas un sistema operativo como Debian (nosotros usaremos Debian 9 durante todo el manual), tendrás que introducir el siguiente comando:

sudo apt update

sudo apt install openvpn

Una vez instalado, deberemos descargarnos el paquete de software Easy-RSA 3, este paquete de software sirve para la creación de los certificados digitales de forma fácil y rápida. Podremos modificar la longitud de la clave, el tipo de clave, si queremos poner una contraseña a las llaves privadas etc. En la página web oficial del proyecto Easy-RSA 3 de GitHub tenéis toda la información y la posibilidad de descargarnos un .zip con todo.

Si estás en un sistema Linux, os recomendamos utilizar la orden wget para descargarnos el .zip:

wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.3/EasyRSA-3.0.3.zip

A continuación, deberemos descomprimir este archivo descargado e introducirnos dentro de la carpeta para empezar a configurar el archivo vars.

unzip EasyRSA-3.0.3.zip

Paso 2: Configurar “vars” de Easy-RSA 3

El fichero vars.example es el centro de toda la configuración de los certificados, es donde deberemos definir si queremos crear certificados de 2048 bits, 4096 bits o superior, asimismo también nos va a permitir firmar los certificados con SHA256 o con SHA512 entre otros. Es decir, debemos configurar este archivo de configuración correctamente para posteriormente crear los certificados digitales.

Lo primero que debemos hacer es copiar el archivo vars.example en la misma carpeta con nombre “vars”, si no lo tenemos con este nombre “vars” no actuará. También tenemos la posibilidad de renombrar el archivo vars.example en “vars”, pero os recomendamos mejor hacer una copia de seguridad por si elimináis algo y luego no os funciona.

Nos colocamos en la carpeta principal de Easy-RSA3 y copiamos el archivo de esta forma:

cp vars.example vars

Una vez que ya tenemos el archivo “vars”, debemos editarlo con cualquier editor de archivos vía consola o interfaz gráfica, nosotros usaremos nano debido a su facilidad. En el siguiente fichero de configuración de “vars” podéis ver cómo quedaría con RSA de 4096 bits, firmado con SHA256 y los datos de la “organización”. En el propio fichero están los comentarios originales en inglés, y en castellano he puesto los mios para facilitar la localización de qué hay que modificar.

# Easy-RSA 3 parameter settings

# NOTE: If you installed Easy-RSA from your distro’s package manager, don’t edit
# this file in place — instead, you should copy the entire easy-rsa directory
# to another location so future upgrades don’t wipe out your changes.

# HOW TO USE THIS FILE
#
# vars.example contains built-in examples to Easy-RSA settings. You MUST name
# this file ‘vars’ if you want it to be used as a configuration file. If you do
# not, it WILL NOT be automatically read when you call easyrsa commands.
#
# It is not necessary to use this config file unless you wish to change
# operational defaults. These defaults should be fine for many uses without the
# need to copy and edit the ‘vars’ file.
#
# All of the editable settings are shown commented and start with the command
# ‘set_var’ — this means any set_var command that is uncommented has been
# modified by the user. If you’re happy with a default, there is no need to
# define the value to its default.

# NOTES FOR WINDOWS USERS
#
# Paths for Windows *MUST* use forward slashes, or optionally double-esscaped
# backslashes (single forward slashes are recommended.) This means your path to
# the openssl binary might look like this:
# “C:/Program Files/OpenSSL-Win32/bin/openssl.exe”

# A little housekeeping: DON’T EDIT THIS SECTION
#
# Easy-RSA 3.x doesn’t source into the environment directly.
# Complain if a user tries to do this:
if [ -z “$EASYRSA_CALLER” ]; then
echo “You appear to be sourcing an Easy-RSA ‘vars’ file.” >&2
echo “This is no longer necessary and is disallowed. See the section called” >&2
echo “‘How to use this file’ near the top comments for more details.” >&2
return 1
fi

# DO YOUR EDITS BELOW THIS POINT

# This variable should point to the top level of the easy-rsa tree. By default,
# this is taken to be the directory you are currently in.

#set_var EASYRSA “$PWD”

# If your OpenSSL command is not in the system PATH, you will need to define the
# path to it here. Normally this means a full path to the executable, otherwise
# you could have left it undefined here and the shown default would be used.
#
# Windows users, remember to use paths with forward-slashes (or escaped
# back-slashes.) Windows users should declare the full path to the openssl
# binary here if it is not in their system PATH.

#set_var EASYRSA_OPENSSL “openssl”
#
# This sample is in Windows syntax — edit it for your path if not using PATH:
#set_var EASYRSA_OPENSSL “C:/Program Files/OpenSSL-Win32/bin/openssl.exe”

# Edit this variable to point to your soon-to-be-created key directory.
#
# WARNING: init-pki will do a rm -rf on this directory so make sure you define
# it correctly! (Interactive mode will prompt before acting.)

#POR DEFECTO SE USARA ESTE DIRECTORIO CUANDO CREEMOS LOS CERTIFICADOS, PODREMOS CAMBIARLO POR LO QUE NOSOTROS QUERAMOS.

#set_var EASYRSA_PKI “$EASYRSA/pki”

# Define X509 DN mode.
# This is used to adjust what elements are included in the Subject field as the DN
# (this is the “Distinguished Name.”)
# Note that in cn_only mode the Organizational fields further below aren’t used.
#
# Choices are:
# cn_only – use just a CN value
# org – use the “traditional” Country/Province/City/Org/OU/email/CN format

#SELECCIONAMOS ORG QUE ES EL FORMATO TRADICIONAL DE LOS CERTIFICADOS DIGITALES, AUNQUE TAMBIEN PODREMOS USAR UNICAMENTE EL DN

set_var EASYRSA_DN “org”

# Organizational fields (used with ‘org’ mode and ignored in ‘cn_only’ mode.)
# These are the default values for fields which will be placed in the
# certificate. Don’t leave any of these fields blank, although interactively
# you may omit any specific field by typing the “.” symbol (not valid for
# email.)

#PONEMOS TODOS LOS DATOS DEL CERTIFICADO, AL GENERARLO ESTOS SERAN LOS VALORES PREDETERMINADOS (PODREMOS CAMBIARLOS SIN PROBLEMAS)

set_var EASYRSA_REQ_COUNTRY “ES”
set_var EASYRSA_REQ_PROVINCE “Guadalajara”
set_var EASYRSA_REQ_CITY “Guadalajara”
set_var EASYRSA_REQ_ORG “RedesZone”
set_var EASYRSA_REQ_EMAIL “webmaster@redeszone.net”
set_var EASYRSA_REQ_OU “RedesZoneTeam”

# Choose a size in bits for your keypairs. The recommended value is 2048. Using
# 2048-bit keys is considered more than sufficient for many years into the
# future. Larger keysizes will slow down TLS negotiation and make key/DH param
# generation take much longer. Values up to 4096 should be accepted by most
# software. Only used when the crypto alg is rsa (see below.)

#CONFIGURAMOS RSA DE 4096 BITS, HOY EN DIA COMPATIBLE CON TODOS LOS SOFTWARE
set_var EASYRSA_KEY_SIZE 4096

# The default crypto mode is rsa; ec can enable elliptic curve support.
# Note that not all software supports ECC, so use care when enabling it.
# Choices for crypto alg are: (each in lower-case)
# * rsa
# * ec

#USAMOS ALGORITMO RSA Y NO DE CURVAS ELIPTICAS, YA QUE ES POSIBLE QUE ALGUNOS SOFTWARE NO LO SOPORTEN.
set_var EASYRSA_ALGO rsa

# Define the named curve, used in ec mode only:

#set_var EASYRSA_CURVE secp384r1

# CONFIGURACION DE LA EXPIRACION DE LA AUTORIDAD DE CERTIFICACION, POR DEFECTO

#set_var EASYRSA_CA_EXPIRE 3650

# CONFIGURACION DE LA EXPIRACION DE LA AUTORIDAD DE LOS CERTIFICADOS, POR DEFECTO

#set_var EASYRSA_CERT_EXPIRE 3650

# How many days until the next CRL publish date? Note that the CRL can still be
# parsed after this timeframe passes. It is only used for an expected next
# publication date.

#set_var EASYRSA_CRL_DAYS 180

# Support deprecated “Netscape” extensions? (choices “yes” or “no”.) The default
# is “no” to discourage use of deprecated extensions. If you require this
# feature to use with –ns-cert-type, set this to “yes” here. This support
# should be replaced with the more modern –remote-cert-tls feature. If you do
# not use –ns-cert-type in your configs, it is safe (and recommended) to leave
# this defined to “no”. When set to “yes”, server-signed certs get the
# nsCertType=server attribute, and also get any NS_COMMENT defined below in the
# nsComment field.

# VALOR POR DEFECTO PORQUE HOY EN DIA YA SOPORTA TODAS LAS ULTIMAS VERSIONES –REMOTE-CERT-TLS
#set_var EASYRSA_NS_SUPPORT “no”

# When NS_SUPPORT is set to “yes”, this field is added as the nsComment field.
# Set this blank to omit it. With NS_SUPPORT set to “no” this field is ignored.

#set_var EASYRSA_NS_COMMENT “Easy-RSA Generated Certificate”

# A temp file used to stage cert extensions during signing. The default should
# be fine for most users; however, some users might want an alternative under a
# RAM-based FS, such as /dev/shm or /tmp on some systems.

#set_var EASYRSA_TEMP_FILE “$EASYRSA_PKI/extensions.temp”

# !!
# NOTE: ADVANCED OPTIONS BELOW THIS POINT
# PLAY WITH THEM AT YOUR OWN RISK
# !!

# Broken shell command aliases: If you have a largely broken shell that is
# missing any of these POSIX-required commands used by Easy-RSA, you will need
# to define an alias to the proper path for the command. The symptom will be
# some form of a ‘command not found’ error from your shell. This means your
# shell is BROKEN, but you can hack around it here if you really need. These
# shown values are not defaults: it is up to you to know what you’re doing if
# you touch these.
#
#alias awk=”/alt/bin/awk”
#alias cat=”/alt/bin/cat”

# X509 extensions directory:
# If you want to customize the X509 extensions used, set the directory to look
# for extensions here. Each cert type you sign must have a matching filename,
# and an optional file named ‘COMMON’ is included first when present. Note that
# when undefined here, default behaviour is to look in $EASYRSA_PKI first, then
# fallback to $EASYRSA for the ‘x509-types’ dir. You may override this
# detection with an explicit dir here.
#
#set_var EASYRSA_EXT_DIR “$EASYRSA/x509-types”

# OpenSSL config file:
# If you need to use a specific openssl config file, you can reference it here.
# Normally this file is auto-detected from a file named openssl-1.0.cnf from the
# EASYRSA_PKI or EASYRSA dir (in that order.) NOTE that this file is Easy-RSA
# specific and you cannot just use a standard config file, so this is an
# advanced feature.

#set_var EASYRSA_SSL_CONF “$EASYRSA/openssl-1.0.cnf”

# Default CN:
# This is best left alone. Interactively you will set this manually, and BATCH
# callers are expected to set this themselves.

# EL COMMON NAME O CN DEBE SER SIEMPRE UNICO POR CADA CERTIFICADO CREADO, POR TANTO ES LO UNICO QUE DEBEMOS CAMBIAR EN EL ASISTENTE
#set_var EASYRSA_REQ_CN “ChangeMe”

# Cryptographic digest to use.
# Do not change this default unless you understand the security implications.
# Valid choices include: md5, sha1, sha256, sha224, sha384, sha512

# UTILIZAR HOY EN DIA SHA256 ES SEGURO, POR TANTO USAREMOS ESTE.
set_var EASYRSA_DIGEST “sha256”

# Batch mode. Leave this disabled unless you intend to call Easy-RSA explicitly
# in batch mode without any user input, confirmation on dangerous operations,
# or most output. Setting this to any non-blank string enables batch mode.

#set_var EASYRSA_BATCH “”

Una vez que lo hemos modificado todo, guardamos el archivo ya que posteriormente lo vamos a utilizar con estos valores.

Paso 3: Crear la CA, los certificados para el servidor y para los clientes

Creación de la PKI y de la Autoridad de Certificación

Cuando ya tenemos el fichero “vars” configurado, procedemos a crear la Infraestructura de Clave Pública (PKI) con la siguiente orden (suponemos que seguís en el directorio principal de Easy-RSA3):

./easyrsa init-pki

root@debian9vm:/home/bron/EasyRSA-3.0.3# ./easyrsa init-pki

Note: using Easy-RSA configuration from: ./vars

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /home/bron/EasyRSA-3.0.3/pki

Una vez inicializada la PKI, debemos crear la Autoridad de Certificación (CA):

./easyrsa build-ca

Una vez ejecutado, debemos seguir el sencillo asistente de generación de CA. La contraseña que nos pide es para proteger la clave privada de la CA, algo fundamental.

root@debian9vm:/home/bron/EasyRSA-3.0.3# ./easyrsa build-ca

Note: using Easy-RSA configuration from: ./vars
Generating a 4096 bit RSA private key
…………………………………………………………………………………………………….++
…………………………………………++
writing new private key to ‘/home/bron/EasyRSA-3.0.3/pki/private/ca.key.RXM28vZXRi’
Enter PEM pass phrase:
Verifying – Enter PEM pass phrase:
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [ES]:
State or Province Name (full name) [Guadalajara]:
Locality Name (eg, city) [Guadalajara]:
Organization Name (eg, company) [RedesZone]:
Organizational Unit Name (eg, section) [RedesZoneTeam]:
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:ca-openvpn-redeszone
Email Address [webmaster@redeszone.net]:

CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/home/bron/EasyRSA-3.0.3/pki/ca.crt

Si no queremos introducir una contraseña en la clave privada de la CA, deberemos poner este comando:

./easyrsa build-ca nopass

Una vez que hemos creado la CA, deberemos crear el certificado del servidor, y los certificados de los clientes. A continuación, deberemos firmarlo con la CA.

Creación del certificado del servidor y firmarlo con la CA

A la hora de crear los certificados de servidor y clientes, podremos dotarles de una contraseña para la clave privada, no obstante, no es recomendable hacerlo en el servidor ya que cada vez que lo iniciemos, nos pedirá la contraseña para utilizarlo. Si no queremos contraseña pondremos “nopass” detrás de cada orden que veréis a continuación.

./easyrsa gen-req servidor-openvpn-redeszone nopass

La salida del terminal es la siguiente:

root@debian9vm:/home/bron/EasyRSA-3.0.3# ./easyrsa gen-req servidor-openvpn-redeszone nopass

Note: using Easy-RSA configuration from: ./vars
Generating a 4096 bit RSA private key
…………………………………………………………………………….++
…………………………………………………………………………………………………..++
writing new private key to ‘/home/bron/EasyRSA-3.0.3/pki/private/servidor-openvpn-redeszone.key.YRNDwfwain’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [ES]:
State or Province Name (full name) [Guadalajara]:
Locality Name (eg, city) [Guadalajara]:
Organization Name (eg, company) [RedesZone]:
Organizational Unit Name (eg, section) [RedesZoneTeam]:
Common Name (eg: your user, host, or server name) [servidor-openvpn-redeszone]:
Email Address [webmaster@redeszone.net]:

Keypair and certificate request completed. Your files are:
req: /home/bron/EasyRSA-3.0.3/pki/reqs/servidor-openvpn-redeszone.req
key: /home/bron/EasyRSA-3.0.3/pki/private/servidor-openvpn-redeszone.key

Una vez creado el certificado, deberemos firmarlo con la CA en modo “server”:

./easyrsa sign-req server servidor-openvpn-redeszone

root@debian9vm:/home/bron/EasyRSA-3.0.3# ./easyrsa sign-req server servidor-openvpn-redeszone

Note: using Easy-RSA configuration from: ./vars
rand: Use -help for summary.

 

You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a server certificate for 3650 days:

subject=
countryName = ES
stateOrProvinceName = Guadalajara
localityName = Guadalajara
organizationName = RedesZone
organizationalUnitName = RedesZoneTeam
commonName = servidor-openvpn-redeszone
emailAddress = webmaster@redeszone.net

 

Type the word ‘yes’ to continue, or any other input to abort.
Confirm request details: yes
./easyrsa: 644: ./easyrsa: [[: not found
Using configuration from ./openssl-1.0.cnf
Enter pass phrase for /home/bron/EasyRSA-3.0.3/pki/private/ca.key:
Can’t open /home/bron/EasyRSA-3.0.3/pki/index.txt.attr for reading, No such file or directory
139686052336896:error:02001002:system library:fopen:No such file or directory:../crypto/bio/bss_file.c:74:fopen(‘/home/bron/EasyRSA-3.0.3/pki/index.txt.attr’,’r’)
139686052336896:error:2006D080:BIO routines:BIO_new_file:no such file:../crypto/bio/bss_file.c:81:
Check that the request matches the signature
Signature ok
The Subject’s Distinguished Name is as follows
countryName :PRINTABLE:’ES’
stateOrProvinceName :ASN.1 12:’Guadalajara’
localityName :ASN.1 12:’Guadalajara’
organizationName :ASN.1 12:’RedesZone’
organizationalUnitName:ASN.1 12:’RedesZoneTeam’
commonName :ASN.1 12:’servidor-openvpn-redeszone’
emailAddress :IA5STRING:’webmaster@redeszone.net’
Certificate is to be certified until Sep 20 07:08:04 2027 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /home/bron/EasyRSA-3.0.3/pki/issued/servidor-openvpn-redeszone.crt

Y ya hemos creado el .crt que utilizaremos posteriormente en el fichero de configuración de OpenVPN.

Creación de los certificados de los clientes y firmarlos con la CA

Los pasos que veréis a continuación, los tendremos que realizar una vez POR CADA CLIENTE que vayamos a crear. Es decir, si vamos a crear 2 clientes, deberemos seguir los pasos de crear y firmar dos veces. En este parte sí es recomendable crear los certificados del cliente con contraseña, así tendremos la seguridad de que si perdemos el certificado, nadie podrá usarllo. Nosotros en el manual no vamos a introducir ninguna contraseña (pondremos nopass al final).

./easyrsa gen-req cliente1-openvpn-redeszone nopass

root@debian9vm:/home/bron/EasyRSA-3.0.3# ./easyrsa gen-req cliente1-openvpn-redeszone nopass

Note: using Easy-RSA configuration from: ./vars
Generating a 4096 bit RSA private key
……………….++
……………….++
writing new private key to ‘/home/bron/EasyRSA-3.0.3/pki/private/cliente1-openvpn-redeszone.key.LuUGngiEQy’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [ES]:
State or Province Name (full name) [Guadalajara]:
Locality Name (eg, city) [Guadalajara]:
Organization Name (eg, company) [RedesZone]:
Organizational Unit Name (eg, section) [RedesZoneTeam]:
Common Name (eg: your user, host, or server name) [cliente1-openvpn-redeszone]:
Email Address [webmaster@redeszone.net]:

Keypair and certificate request completed. Your files are:
req: /home/bron/EasyRSA-3.0.3/pki/reqs/cliente1-openvpn-redeszone.req
key: /home/bron/EasyRSA-3.0.3/pki/private/cliente1-openvpn-redeszone.key

Una vez creado, deberemos firmarlo:

./easyrsa sign-req client cliente1-openvpn-redeszone

root@debian9vm:/home/bron/EasyRSA-3.0.3# ./easyrsa sign-req client cliente1-openvpn-redeszone

Note: using Easy-RSA configuration from: ./vars
rand: Use -help for summary.

 

You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a client certificate for 3650 days:

subject=
countryName = ES
stateOrProvinceName = Guadalajara
localityName = Guadalajara
organizationName = RedesZone
organizationalUnitName = RedesZoneTeam
commonName = cliente1-openvpn-redeszone
emailAddress = webmaster@redeszone.net

 

Type the word ‘yes’ to continue, or any other input to abort.
Confirm request details: yes
./easyrsa: 644: ./easyrsa: [[: not found
Using configuration from ./openssl-1.0.cnf
Enter pass phrase for /home/bron/EasyRSA-3.0.3/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject’s Distinguished Name is as follows
countryName :PRINTABLE:’ES’
stateOrProvinceName :ASN.1 12:’Guadalajara’
localityName :ASN.1 12:’Guadalajara’
organizationName :ASN.1 12:’RedesZone’
organizationalUnitName:ASN.1 12:’RedesZoneTeam’
commonName :ASN.1 12:’cliente1-openvpn-redeszone’
emailAddress :IA5STRING:’webmaster@redeszone.net’
Certificate is to be certified until Sep 20 07:14:05 2027 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /home/bron/EasyRSA-3.0.3/pki/issued/cliente1-openvpn-redeszone.crt

Si quisiéramos crear y firmar un certificado número 2 para otro cliente, deberemos poner algo así:

./easyrsa gen-req cliente2-openvpn-redeszone nopass
./easyrsa sign-req client cliente2-openvpn-redeszone

Recordad que si queréis poner contraseña, deberemos quitar el “nopass”.

Organizar los certificados .crt y .key del servidor y clientes

Algo muy importante es organizar por carpetas los certificados del servidor y de los clientes. Los certificados de servidor y clientes están en la ruta “/pki/issued/” y las claves privadas están en “/pki/private”, la ca.crt está en la raíz de la carpeta “pki”. Debemos crear tres carpetas con el siguiente contenido (de momento):

  • servidor: ca.crt, servidor-openvpn-redeszone.crt, servidor-openvpn-redeszone.key
  • cliente1: ca.crt, cliente1-openvpn-redeszone.crt, cliente1-openvpn-redeszone.key
  • cliente2: ca.crt, cliente2-openvpn-redeszone.crt, cliente2-openvpn-redeszone.key

Paso 4: Crear los parámetros Diffie-Hellmann y la clave tls-auth (tls-crypt en sistemas nuevos)

Una vez que ya tenemos los certificados creados y firmados, debemos crear los parámetros Diffie-Hellmann para colocarlos en la carpeta del “servidor”. Para generarlos, en la ruta de la carpeta EasyRSA3 debemos ejecutar el siguiente comando:

./easyrsa gen-dh

Al usar claves de 4096 bits, es posible que la generación de estos parámetros tarde horas dependiendo de tu ordenador, así que deberás tener paciencia. Mientras hace este proceso, puedes seguir con el resto del manual para ir adelantando trabajo.

Cuando hayamos creado los parámetros Diffie-Hellmann, debemos crear la clave tls-auth (tls-crypt ahora) con nombre ta.key o el que nosotros queramos. La orden que debemos poner es la siguiente:

openvpn --genkey --secret ta.key

Esta clave ta.key deberemos colocarla en el servidor y en TODOS los clientes.

Una vez llegados hasta aquí, nuestras carpetas con los certificados deberían tener lo siguiente:

  • servidor: ca.crt, servidor-openvpn-redeszone.crt, servidor-openvpn-redeszone.key, dh.pem (Diffie-Hellmann), ta.key (tls-auth)
  • cliente1: ca.crt, cliente1-openvpn-redeszone.crt, cliente1-openvpn-redeszone.key, ta.key (tls-auth)
  • cliente2: ca.crt, cliente2-openvpn-redeszone.crt, cliente2-openvpn-redeszone.key, ta.key (tls-auth)

Si vamos a usar tls-auth en lugar de tls-crypt (porque no es compatible por ejemplo), debemos tener esto en cuenta:

En la configuración del servidor (servidor.conf o servidor.ovpn) deberemos poner:

tls-auth ta.key 0 (0 de Incoming)

En la configuración del cliente (cliente.conf o cliente.ovpn) deberemos poner:

tls-auth ta.key 1 (1 de Outgoing)

A continuación os pongo una tabla de qué es cada cosa (los nombres varían).

Tabla VPN

Cuando tengamos todo organizado en carpetas, ahora es cuando deberemos crear el archivo de configuración (.conf para sistemas Linux y .ovpn para sistemas Windows). Existen ejemplos de los ficheros de configuración en la web oficial de OpenVPN, y también en la ruta “/usr/share/doc/openvpn/examples/examples-config-files/”.

Paso 5: Configurar el servidor

La configuración del servidor OpenVPN es fundamental para dar permisos de acceso a los clientes a nuestra red local, configurar la negociación TLS. Debido a que tenemos cientos de configuraciones disponibles, nosotros os vamos a poner nuestra configuración con unos comentarios explicando cada parámetro, podéis copiar y pegar la configuración sin problemas. Recordad que para Linux debe tener extensión .conf y para Windows .ovpn.

#PUERTO A UTILIZAR POR TCP O UDP, POR DEFECTO ES 1194.
#PROTOCOLO A UTILIZAR TCP O UDP
#MODO TUNNELING
port 11949
proto udp
dev tun

#CERTIFICADOS
#SI TENEMOS EL .CONF EN LA MISMA CARPETA NO HACE FALTA METER RUTA, SOLO EL NOMBRE.
#SI ESTAN EN OTRA RUTA, DEBEREMOS METER LA RUTA DE TODOS ELLOS

ca ca.crt
cert servidor-openvpn.crt
key servidor-openvpn.key
dh dh.pem
tls-crypt ta.key

#COMPROBAMOS LOS CERTIFICADOS DE LOS CLIENTES (MAYOR SEGURIDAD)

remote-cert-tls client

#MODIFICAMOS EL CIFRADO SIMETRICO DEL CANAL DE DATOS, EL CANAL DE CONTROL TLS Y EL ALGORITMO PARA VERIFICAR LA INTEGRIDAD.
#SI USAMOS AES-256-GCM NO ES NECESARIO PONER LA DIRECTIVA AUTH YA QUE NO SE UTILIZA.

cipher AES-256-GCM
tls-cipher TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384
auth SHA512

#TOPOLOGIA DE LA RED (SE RECOMIENDA SUBNET) Y SUBRED VIRTUAL DONDE ESTARAN LOS CLIENTES.

topology subnet
server 10.8.0.0 255.255.255.0

#CONFIGURAMOS EL SERVIDOR PARA QUE LOS CLIENTES TENGAN LA MISMA IP SIEMPRE, UNA VEZ QUE SE CONECTEN.
ifconfig-pool-persist ipp.txt

#PROPORCIONAMOS AL CLIENTE ACCESO A LA RED DOMESTICA, REALIZAMOS REDIRECCION DE INTERNET Y PROPORCIONAMOS DNS DE OPENDNS.
push “route 192.168.2.0 255.255.255.0”
push “redirect-gateway def1”
push “dhcp-option DNS 208.67.222.222”
push “dhcp-option DNS 208.67.220.220”

#HABILITAMOS COMUNICACION ENTRE LOS CLIENTES, HABILITAMOS KEEPALIVE PARA SABER SI EL TUNEL SE HA CAIDO, HABILITAMOS COMPRESION Y UN MAXIMO DE 100 CLIENTES SIMULTANEAMENTE
client-to-client
keepalive 10 120
comp-lzo
max-clients 100

#SIN PERMISOS DE USUARIO EN OPENVPN, POR SEGURIDAD DEL SERVIDOR
user nobody
group nogroup

#CLAVE Y TUNEL PERSISTENTE
persist-key
persist-tun

#LOS LOGS DEL SERVIDOR EN ESE FICHERO, CONFIGURACION VERB 3 PARA LOS LOGS.
status openvpn-status.log
verb 3
explicit-exit-notify 1

La salida cuando ejecutamos “openvpn server.conf” es la siguiente, la inicialización del servidor es correcta.

root@debian9vm:/home/bron/OPENVPN/servidor# openvpn server.conf
Fri Sep 22 09:52:17 2017 OpenVPN 2.4.0 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Jun 22 2017
Fri Sep 22 09:52:17 2017 library versions: OpenSSL 1.0.2l 25 May 2017, LZO 2.08
Fri Sep 22 09:52:17 2017 Diffie-Hellman initialized with 4096 bit key
Fri Sep 22 09:52:17 2017 Outgoing Control Channel Encryption: Cipher ‘AES-256-CTR’ initialized with 256 bit key
Fri Sep 22 09:52:17 2017 Outgoing Control Channel Encryption: Using 256 bit message hash ‘SHA256’ for HMAC authentication
Fri Sep 22 09:52:17 2017 Incoming Control Channel Encryption: Cipher ‘AES-256-CTR’ initialized with 256 bit key
Fri Sep 22 09:52:17 2017 Incoming Control Channel Encryption: Using 256 bit message hash ‘SHA256′ for HMAC authentication
Fri Sep 22 09:52:17 2017 TUN/TAP device tun0 opened
Fri Sep 22 09:52:17 2017 TUN/TAP TX queue length set to 100
Fri Sep 22 09:52:17 2017 do_ifconfig, tt->did_ifconfig_ipv6_setup=0
Fri Sep 22 09:52:17 2017 /sbin/ip link set dev tun0 up mtu 1500
Fri Sep 22 09:52:17 2017 /sbin/ip addr add dev tun0 10.8.0.1/24 broadcast 10.8.0.255
Fri Sep 22 09:52:17 2017 Could not determine IPv4/IPv6 protocol. Using AF_INET
Fri Sep 22 09:52:17 2017 Socket Buffers: R=[212992->212992] S=[212992->212992]
Fri Sep 22 09:52:17 2017 UDPv4 link local (bound): [AF_INET][undef]:11949
Fri Sep 22 09:52:17 2017 UDPv4 link remote: [AF_UNSPEC]
Fri Sep 22 09:52:17 2017 GID set to nogroup
Fri Sep 22 09:52:17 2017 UID set to nobody
Fri Sep 22 09:52:17 2017 MULTI: multi_init called, r=256 v=256
Fri Sep 22 09:52:17 2017 IFCONFIG POOL: base=10.8.0.2 size=252, ipv6=0
Fri Sep 22 09:52:17 2017 ifconfig_pool_read(), in=’cliente1.openvpn,10.8.0.2’, TODO: IPv6
Fri Sep 22 09:52:17 2017 succeeded -> ifconfig_pool_set()
Fri Sep 22 09:52:17 2017 IFCONFIG POOL LIST
Fri Sep 22 09:52:17 2017 cliente1.openvpn,10.8.0.2
Fri Sep 22 09:52:17 2017 Initialization Sequence Completed

Hasta aquí hemos llegado con la configuración del servidor, ahora configuraremos los clientes.

Paso 6: Configurar el cliente (o los clientes)

A continuación, podéis ver la configuración del cliente asociada al servidor que hemos visto anteriormente. La única diferencia entre los diferentes clientes.conf es la ruta de los certificados por ejemplo. Muy importante que el cipher, tls-cipher y otros parámetros sean exactamente iguales, de lo contrario no conectará con el servidor. Recordad que para Linux debe tener extensión .conf y para Windows .ovpn.

#CONFIGURAMOS EN EL MODO CLIENTE, MODO TUN, PROTOCOLO UDP.

client
dev tun
proto udp

#ESTA DIRECTIVA ES LA DE CONEXION CON LA IP PUBLICA O DOMINIO DEL SERVIDOR OPENVPN, TAMBIEN TENEMOS QUE PONER EL MISMO PUERTO DEL SERVIDOR
remote 127.0.0.1 11949

#RESOLVER CONTINUAMENTE LA IP O DOMINIO PARA CONECTARNOS, CLAVE Y TUN PERSISTENTE COMO EL SERVIDOR.
resolv-retry infinite
nobind
persist-key
persist-tun

#RUTA DE LA CA, CERTIFICADOS DEL CLIENTE Y TA.KEY.
#SI LO TENEMOS EN LA MISMA CARPETA, NO ES NECESARIO PONER LA RUTA ENTERA.
ca ca.crt
cert cliente1.openvpn.crt
key cliente1.openvpn.key
tls-crypt ta.key

#COMPROBAR LA IDENTIDAD DEL SERVIDOR, USAR CIFRADO SIMETRICO GCM, CONFIGURACION DE TLS 1.2 Y AUTH.
remote-cert-tls server
cipher AES-256-GCM
tls-cipher TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384
auth SHA512

#HABILITAR COMPRESION Y USAR LOG DE NIVEL VERBOSE 3
comp-lzo
verb 3

La salida cuando ejecutamos “openvpn cliente1.conf” es la siguiente, la inicialización del servidor es correcta.

bron@debian9vm:~/OPENVPN/cliente1$ sudo openvpn client.conf
[sudo] password for bron:
Fri Sep 22 10:01:28 2017 OpenVPN 2.4.0 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Jun 22 2017
Fri Sep 22 10:01:28 2017 library versions: OpenSSL 1.0.2l 25 May 2017, LZO 2.08
Fri Sep 22 10:01:28 2017 Outgoing Control Channel Encryption: Cipher ‘AES-256-CTR’ initialized with 256 bit key
Fri Sep 22 10:01:28 2017 Outgoing Control Channel Encryption: Using 256 bit message hash ‘SHA256’ for HMAC authentication
Fri Sep 22 10:01:28 2017 Incoming Control Channel Encryption: Cipher ‘AES-256-CTR’ initialized with 256 bit key
Fri Sep 22 10:01:28 2017 Incoming Control Channel Encryption: Using 256 bit message hash ‘SHA256’ for HMAC authentication
Fri Sep 22 10:01:28 2017 TCP/UDP: Preserving recently used remote address: [AF_INET]127.0.0.1:11949
Fri Sep 22 10:01:28 2017 Socket Buffers: R=[212992->212992] S=[212992->212992]
Fri Sep 22 10:01:28 2017 UDP link local: (not bound)
Fri Sep 22 10:01:28 2017 UDP link remote: [AF_INET]127.0.0.1:11949
Fri Sep 22 10:01:28 2017 NOTE: UID/GID downgrade will be delayed because of –client, –pull, or –up-delay
Fri Sep 22 10:01:28 2017 TLS: Initial packet from [AF_INET]127.0.0.1:11949, sid=7ccae64c 4a4737e3
Fri Sep 22 10:01:28 2017 VERIFY OK: depth=1, C=ES, ST=Guadalajara, L=Guadalajara, O=RedesZone, OU=RedesZoneTeam, CN=ca-openvpn-redeszone, emailAddress=webmaster@redeszone.net
Fri Sep 22 10:01:28 2017 Validating certificate key usage
Fri Sep 22 10:01:28 2017 ++ Certificate has key usage 00a0, expects 00a0
Fri Sep 22 10:01:28 2017 VERIFY KU OK
Fri Sep 22 10:01:28 2017 Validating certificate extended key usage
Fri Sep 22 10:01:28 2017 ++ Certificate has EKU (str) TLS Web Server Authentication, expects TLS Web Server Authentication
Fri Sep 22 10:01:28 2017 VERIFY EKU OK
Fri Sep 22 10:01:28 2017 VERIFY OK: depth=0, C=ES, ST=Guadalajara, L=Guadalajara, O=RedesZone, OU=RedesZoneTeam, CN=servidor-openvpn-redeszone, emailAddress=webmaster@redeszone.net
Fri Sep 22 10:01:28 2017 Control Channel: TLSv1.2, cipher TLSv1/SSLv3 ECDHE-RSA-AES256-GCM-SHA384, 4096 bit RSA
Fri Sep 22 10:01:28 2017 [servidor-openvpn-redeszone] Peer Connection Initiated with [AF_INET]127.0.0.1:11949
Fri Sep 22 10:01:29 2017 SENT CONTROL [servidor-openvpn]: ‘PUSH_REQUEST’ (status=1)
Fri Sep 22 10:01:29 2017 PUSH: Received control message: ‘PUSH_REPLY,route 192.168.2.0 255.255.255.0,redirect-gateway def1,dhcp-option DNS 208.67.222.222,dhcp-option DNS 208.67.220.220,route-gateway 10.8.0.1,topology subnet,ping 10,ping-restart 120,ifconfig 10.8.0.2 255.255.255.0,peer-id 0,cipher AES-256-GCM’
Fri Sep 22 10:01:29 2017 OPTIONS IMPORT: timers and/or timeouts modified
Fri Sep 22 10:01:29 2017 OPTIONS IMPORT: –ifconfig/up options modified
Fri Sep 22 10:01:29 2017 OPTIONS IMPORT: route options modified
Fri Sep 22 10:01:29 2017 OPTIONS IMPORT: route-related options modified
Fri Sep 22 10:01:29 2017 OPTIONS IMPORT: –ip-win32 and/or –dhcp-option options modified
Fri Sep 22 10:01:29 2017 OPTIONS IMPORT: peer-id set
Fri Sep 22 10:01:29 2017 OPTIONS IMPORT: adjusting link_mtu to 1625
Fri Sep 22 10:01:29 2017 OPTIONS IMPORT: data channel crypto options modified
Fri Sep 22 10:01:29 2017 Data Channel Encrypt: Cipher ‘AES-256-GCM’ initialized with 256 bit key
Fri Sep 22 10:01:29 2017 Data Channel Decrypt: Cipher ‘AES-256-GCM’ initialized with 256 bit key
Fri Sep 22 10:01:29 2017 ROUTE: default_gateway=UNDEF
Fri Sep 22 10:01:29 2017 TUN/TAP device tun1 opened
Fri Sep 22 10:01:29 2017 TUN/TAP TX queue length set to 100
Fri Sep 22 10:01:29 2017 do_ifconfig, tt->did_ifconfig_ipv6_setup=0
Fri Sep 22 10:01:29 2017 /sbin/ip link set dev tun1 up mtu 1500
Fri Sep 22 10:01:29 2017 /sbin/ip addr add dev tun1 10.8.0.2/24 broadcast 10.8.0.255
Fri Sep 22 10:01:29 2017 NOTE: unable to redirect default gateway — Cannot read current default gateway from system
Fri Sep 22 10:01:29 2017 /sbin/ip route add 192.168.2.0/24 via 10.8.0.1
Fri Sep 22 10:01:29 2017 GID set to nogroup
Fri Sep 22 10:01:29 2017 UID set to nobody
Fri Sep 22 10:01:29 2017 Initialization Sequence Completed

Si utilizas Windows, la carpeta de los certificados con el archivo de configuración en extensión .ovpn debe estar en la ruta predeterminada de OpenVPN que es C:\Users\Bron\OpenVPN\config por defecto, aunque la podremos cambiar. Una vez realizado esto, si pinchamos click derecho sobre OpenVPN en la barra inferior derecha veremos el nombre del archivo del cliente para conectarnos satisfactoriamente.

Últimas recomendaciones de OpenVPN

Para poder tener conectividad con la red local e Internet, es necesario crear una ruta estática en el router de nuestro hogar. Con la configuración de 10.8.0.0/24 que hemos configurado en el servidor OpenVPN, deberemos crear una ruta estática con esta información:

  • IP subred: 10.8.0.0
  • Máscara: 255.255.255.0
  • Puerta de enlace: IP local donde arranquemos el servidor OpenVPN, si por ejemplo tenemos instalado en una Raspberry PI con IP 192.168.1.100, deberemos poner esta IP.

Si quieres instalar OpenVPN en el sistema operativo orientado a NAS NAS4Free, puedes leer este manual paso a paso. La creación de los certificados se haría exactamente igual, solo cambia la forma de instalación y ejecutarlo al inicio:

También puedes leer el manual para configurar un servidor OpenVPN en un NAS QNAP utilizando QVPN Service y el manual de VPN para routers de Edimax.

Esperamos que este manual os haya servido de ayuda. Si tenéis cualquier duda podéis ponernos un comentario, os recomendamos visitar el HOWTO oficial de OpenVPN donde encontraréis toda la información sobre los diferentes parámetros a utilizar. También es de muchísima ayuda el MAN PAGE de OpenVPN 2.4 donde tenéis disponible todos los parámetros.

Publicado por Sergio De Luz el 03 octubre 2010 , actualizado el 22 septiembre 2017

  • Pingback: ASUSWRT: El firmware de terceros para los routers RT-N66u y RT-AC66u()

  • Pingback: Auditorías WiFi con cifrado WEP : Todo lo que quisiste saber y nadie te dijo sobre hackear redes wifi con cifrado WEP()

  • Pingback: Las estaciones de tren de España empiezan a ofrecer Wi-Fi de pago()

  • Pingback: Los datos que circulen por el Wi-Fi público en China serán almacenados()

  • Pingback: OpenVPN en Android : Instalación y configuración de OpenVPN en Nexus S con Android Gingerbread()

  • Diego DC

    Hola, ya configuré el OpenVPN en un Windows 2003 server, me conecto desde un cliente W7, me asigna IP 10.8.0.6, es correcta, es la que está especificada, y si hago un ping al 10.8.0.1 me responde, así que tengo la mitad del problema ya resuelto: llego al server, ahora bien, necesito ahora acceder a otra subred donde este server se conecta, o sea tengo dos placas de red configuradas:

    1. Placa de internet, con el IP 192.168.1.200 (por esta entro yo desde internet)
    2. Placa de red-local con el IP (fijo) 10.20.13.6 (mask: 255.255.0.0)

    Estuve tratando de configurar sin exíto el route, lo configuré:

    push “route 10.20.13.6 255.255.255.0”

    Pero no logro que la conexión VPN ‘pase’ a la placa de la red interna

    Alguien podrá darme una mano ?

    Slds y gracias de antemano
    Diego

    • En algunos casos tienes que crear una ruta estática en el equipo para poder llegar a la otra red (a parte de lo que has hecho), y tienes que poner la subred (10.20.13.0 255.255.0.0) no la dirección IP del equipo al que quieres llegar.

  • Pingback: OpenVPN – Snom 715 – VoIP | NetVoIP()

  • Pablo

    Hola Sergio, he seguido el manual paso a paso y lo tengo funcionando, hay comunicación entre cliente y servidor.

    Pero, ¿como puedo acceder a Internet desde la VPN (y que pase todo el tráfico a través)?
    Además tampoco puedo contactar con los recursos que tengo en red.

    He probado la configuración de “push route” con mi red interna (192.168.1.0 255.255.255.0) pero no funciona.
    También he probado la opción de pasar todo el tráfico por la VPN (opción push “redirect-gateway def1 bypass-dhcp” en server.conf).
    Como también he intentado forzar (pasar al cliente, aunque dice que es para win y yo uso ubuntu) los DNS que vienen en el archivo de configuración del servidor (OpenDNS). (Por probar que no quede)

    También he intentado un par de órdenes que he encontrado por internet para forzar el paso del trafico de una interfaz a otra (sudo iptables -t nat -A POSTROUTING -s 10.8.0.1 -o eth0 -j SNAT –to-source 192.168.1.X; sudo iptables -t nat -A POSTROUTING -s 10.8.0.1 -o eth0 -j SNAT –to-source 192.168.1.1) Ese X corresponde a la IP del servidor OpenVPN.

    Te agradecería tu ayuda para intentar usar la VPN como una manera de protección al usar redes públicas o externas.
    Gracias.

    • Hola,

      ¿Qué router tienes? ¿Has creado una ruta estática para alcanzar la VPN desde la red local internet? Usa TUNNELING y con IP 10.8.0.X, en el router creas una ruta estática poniendo:

      10.8.0.0
      255.255.255.0
      (LA IP privada 192.168.1.X que te asigna el router al servidor donde lo tengas puesto).

      Cualquier duda me dices, mirate este post de cómo se hace en NAS4Free: http://www.redeszone.net/2013/11/09/openvpn-server-en-nas4free-manual-de-instalacion-y-configuracion-para-crear-un-servidor/

      • Pablo

        Hola, Sergio. Gracias por la respuesta.

        Tengo un Cisco EPC3825. He estado mirando lo de la ruta estática como pones en el artículo de NAS4Free pero no se como/donde hacerlo en mi router. He estado mirando las opciones y lo único que veo es la apertura de puertos.

        Realmente eso es lo único que me falta. Estoy usando TUN (tunnelling) y la IP es 10.8.0.X

        A ver si me puedes hechar un cable, y si no pues habrá que entrar por terminal al router.
        Gracias.

        • Bien, entonces lo tienes todo correcto y sólo faltaría hacer lo de la ruta estática. Tienes que mirar donde ponga static route, ese router lo tiene un familiar y juraría que tiene esta opción, sólo hace falta buscar, si quieres haz capturas de pantalla y te voy guiando, tiene que estar en el apartado LAN o en las opciones avanzadas.

          • Pablo

            Hola Sergio, perdona por no haber contactado antes pero estaba de viaje.

            Ahora estoy en otro router, es uno propietario de Movistar un Observa Telecom. Pero bueno eso da igual.
            Tampoco he encontrado opción alguna por la GUI que ofrece el servidor HTML (está más capado que el cisco por la intrusión de Telefonica).

            He entrado por terminal y si que tiene la opción de ruta estática, solo que me pide le indique la WAN(?).

            Esta es la orden que me da telnet: route static add
            Y ésto es lo que intento meter yo: route static add 10.8.0.0 255.255.255.0 192.168.1.70
            El listado de WAN es el que sigue: Pvc list:
            PVC:8/36
            PVC:8/35

            Si pruebo esas opciones en la WAN me dice que es erroneo.

            ¿Qué debería poner al final?
            Sigo teniendo conectividad entre cliente y servidor utilizando redes distintas (pero sin internet).

          • Haz un “ifconfig” y te saldrán varis interfaces de red, creo que con poner el final la interfaz WAN es suficiente, aunque no deberías tener que meter nada de WAN al ser una ruta estática.

            Has probado a meterte en el menú avanzado http://192.168.1.1:8000 ?

  • Pablo

    Vaya mira, no sabía nada de ese menú. De todas formas son las mismas opciones que por terminal.

    Ya he añadido la ruta estática y tampoco tengo conectividad, ni con los recursos en mi red local, ni con Internet.

    Te dejo una foto de la regla: https://www.dropbox.com/s/wfmid0orhdrlowp/rule.png?dl=0

    ¿Seguro que no hay que hacer nada más? Me refiero a los DNS y tal, pero si no hay conectividad ni a nivel de red, para arriba no hay tampoco…

    Gracias por la ayuda y disculpa por las molestias.

    • ¿Qué otras interfaces puedes poner? Es que no me cuadra mucho que sea la WAN…nunca había visto algo así, prueba la LAN.

      • Pablo

        Ya a mi tampoco me cuadra eso… Las interfaces que salen son la PVC:8/36, que es la DSL donde está la IP pública, la PVC:8/35 que me da una ip “rara” (parece de VPN, puede que sea el sistema de telegestión/carga de telefónica??).

        Te dejo otra imagen: https://www.dropbox.com/s/azhfnjo7shavd24/wan%20interfaces.png?dl=0

        La otra interfaz es para el USB (modem 3G).

        Pero creo que vamos a dejarlo para cuando vuelva al Cisco, a ver si puedo hacerlo desde allí.

        Gracias y un saludo.

        • Es la primera sí, la otra tiene pinta de ser eso, para gestión. Es que en teoría no debería pedirte la interfaz si ya pones una IP que es puerta de enlace predeterminada…no tiene lógica. En routers Cisco o seleccionas la interfaz o pones la IP, pero no ambas a la vez.

  • walle

    Hola excelente manual. Mi pregunta básicamente es que existen programas que soportan el protocolo ICMP, ahora y esto como se hace, porque con UDP y TCP me queda claro por tu manual y me ha funcionado de maravilla, pero como se haría con ICMP. Gracias, espero tu respuesta.

  • Pingback: Seguros Rsa Alicante | Articulos de Seguros CE()

  • Pingback: Firesheep : Complemento de Firefox capaz de sniffar redes. ¿Cómo estar seguros?()

  • Pablo

    Hola. Querría saber de los usuarios que están utilizando esta VPN, qué velocidades de subida y descarga estáis obteniendo.
    En mi caso estoy bastante decepcionado, ya que cuando tenía una conexión de subida de 2 mb, la tasa de transferencia solía ser de 230 kbs. En estos momentos que tengo una conexión de 20 mb de subida, la tasa de transferencia no suele sobrepasar los 600 kbs…
    Un saludo y gracias

    • ¿La velocidad de descarga de la conexión donde te conectas de cuánto es? Yo siempre tengo el máximo de mi velocidad de subida, por ejemplo el OpenVPN de un router ASUS RT-AC68U da más de 60Mbps de velocidad sin despeinarse.

  • Marcos

    Hola, tengo un problema, pero es una vez conectado. A la red a la que me conecto tiene un servidor con carpetas de red, los nombres no los resolvía correctamente, por lo que se los agregué en /etc/hosts para que los resolviera correctamente y desde el cliente poder resolver los nombre de los servidores, pero cuando quiero conectarme a una unidad de red no me resuelve el nombre y no consigue conectarse.
    ¿Alguna idea de que se me puede estar pasando por alto?

    • Necesitaría saber cómo tienes configurado el servidor OpenVPN y el cliente, así como si en el router remoto has introducido la ruta estática de la nueva subred creada por OpenVPN. En teoría no deberías tener que editar hosts ya que debe ser totalmente transparente, yo también tengo unidades de red y no he tenido que editar nada.

  • Claudia Rocio Diaz Toro

    Tengo windows 8 y me funcionaba correctamente, pro cuando se actualizo algo de windows, hace poco la OpenVPN – Open Source VPN dejo de funcionar correctamente cada rato toca desistalar el programa y instalarlo aveces funciona 3 horas o 4 sin hacer el proceso pero otra vez no dura ni una hora me pueden ayudar que pasara gracias.

    • ¿Lo has permitido en el firewall? Yo es que el servidor siempre lo tengo bajo sistema Linux que nunca falla.

  • internetcuba

    Hola!!!
    Disculpa la molestia y sobre todo la ignorancia!!!!Soy Cubano y mi experienci en Internet se larga por poco mas de 1 mes, llevo todo ese time investigando y tratando de lograr una navegacion free, pero nada. Pudiera hacerme el enorme favor de explicarme via email, paso a paso para ultraprincipiantes como puedo hacer para configurar una vpn en window xp. Gracias!!!

  • Marco Antonio Cárdenas Oliver

    Hola todo esta muy bien, pero tengo una duda en los certificados, si queremos eliminar algun certificado en especial como lo hago ya que si corro el ./clean all ba a borrar todos los certificados, como borro uno en especifico? Saludos

    • ¿Quieres borrar simplemente el certificado (eliminar y ya) o añadirlo a la lista de certificados denegados para que nadie pueda usarlo?

  • LinuxMUYfacil

    Muy buen material, recomendadisimo!!!!
    Para complementar la siguiente lista de reproducción de videos cortos muestra paso a paso como realizar el proceso de INSTALACIÓN y CONFIGURACIÓN de OpenVPN sobre un esquema de red muy comun en la industria.

    https://www.youtube.com/playlist?list=PLjw376iTKGp6LqoHyzpkF6waqY5-XL5bw

  • Marcin Balcerzyk

    Me hace falta un cliente de OpenVPN para Windows Phone10. He probado el cliente para Android y funciona.

  • carlos

    Hola. Muchas gracias por el tutorial. Luego qué tengo que hacer para sacar un terminal y acceder a la red vpn o poder interactuar con lo que hay al otro lado?

    Muchas gracias

  • Henrique

    Tengo varias dudas.

    Como parte de una evaluación de una materia que estudio en la Universidad, tengo que crear una Red Privada entre 2 computadoras; transmitir la informacion de una de ellas, ubicada en otro lugar a la que se encuentre durante la evaluacion que haga el profesor.

    Algo que no me explican es si el servidor, es decir, la computadora que se asigne con esa función, ¿comparte todo el Disco Duro? De ser asi ¿Como puedo limitarlo a una sola carpeta? Y por otra parte, una vez finalzado todo ¿Como puedo eliminar la VPN y a su vez el programa y todos los cambios que haya realizado? En verdad no se mucho de Linux, y tristemente, poco de Windows; sin embargo, el profesor exige que esta evaluacion practica se haga en Linux.

    Gracias de antemano

    • Hola,

      Para compartir archivos simplemente deberás configurar un servidor Samba o un servidor FTP, si no sabes de Linux mejor un servidor FTP porque es más sencillo de configurar y ver si realmente funciona o no. Además el servidor FTP puedes compartir fácilmente las carpetas que quieras.

      Para eliminarlo todo simplemente desinstalas openvpn, el servidor ftp y ya está…

  • Jaga

    Yo creo que este VPN es la mejor http://hideipvpn.es/

  • Jesus

    Hola Sergio.

    Seria posible contratar tus servicios?
    Estoy interesado en contratar un server y necesito ayuda con la configuración e instalación.

  • Anderson

    La explicación empieza bien, pero luego explicas las cosas incompletas dejando crear dudas al usuario. He tenido que seguir tu tutorial completando con otros tutoriales para poder seguir. Ahora me da error y desconozco el motivo. Desastroso que empieces algo tan bien y vaya decayendo y no se entienda absolutamente nada.
    No dices nada de descomprimir el archivo.conf
    Generas la clave ta.key en el directorio ../keys/ta.key y lo dejas ahi como “sobreentendido”
    No explicas que hay que instalar en el cliente ni repetir el proceso…
    En fin crítica positiva pero lo que se podría hacer en cuestion de media hora completando e investigando se han convertido en otra media hora mas por una guia falta de explicaciones.

    • Yo siempre que monto un servidor nuevo, sigo este manual hecho por mí para crear las claves criptogáficas, mira el resto de comentarios como les ha funcionado todos. Y sí lo explico, en la tabla ves que la ta.key debe estar en los clientes, y el fichero de configuración de los clientes lo tienen… no basta con hacer copy paste, hay que saber lo que se hace.

  • Raul

    Hola

    He instalado la openvpn, lega a enlazar, pero cuando hago un ping al servidor este no me contesta, que puede estar sucediendo?

    • Seguramente sea problema de enrutamiento, ¿has puesto bien las rutas?

  • Pingback: ¿Qué es una conexión VPN, para qué sirve y qué ventajas tiene? | Nuevo Titulo |()

  • Pingback: Conexión VPN, para qué sirve y qué ventajas tiene - SerWebCan()

  • Pingback: 4nonimizer te permitirá automatizar la conexión a diferentes VPN para anonimizar tu IP – SectorX()

  • jc

    Hola, buen post una pregunta deseo que los clientes vpn tengan ip fijas, se que hay que crear un archivo de configuración con el comando respectivo, dos preguntas:
    Que extensión tiene ese archivo ?
    como lo creo, por consola ?
    y en que ruta lo pongo ?
    estoy trabajando en windows
    Saludos.

  • Capitan Asco

    Hola, buenas tardes.
    Interesante y muy buen post, llevaba tiempo buscando algo así.

    Lo primero, tengo una maquina dedicada a hacer de servidor openvpn con una tarjeta de red configurada en mi lan (192.168.10.x). al hacer la conexión a la vpn, esta me asigna una ip del rango (10.8.0.x). Veo que en log que no le asigna ninguna puerta de enlace y como es lógico hago ping a algún equipo de mi lan desde un pc conectado a la vpn y no llego de ninguna forma.
    Tengo que hacer algo mas en el servidor?
    Tengo que hacer algo en el router?

    Un slaudo y gracias ante todo

    • Hola,

      Tienes que crear una ruta estática en el router con estos datos:

      red: 10.8.0.0
      mascara: 255.255.255.0
      gateway: 192.168.10.x (la de tu servidor)

      Las OpenVPN son punto a punto por defecto, podrás hacer ping a por ejemplo la 10.8.0.1 que es “el otro lado”.

      • Capitan Asco

        Buenas tardes.
        Lo primero gracias por tu respuesta.

        Ahora realiza bien la conexión (al menos eso dice), pero veo que en las propiedades del adaptador, me asigna bien la ip, la mascara, pero no le da una puerta de enlace, por lo que deduzco que no esta saliendo a través de la vpn. Ademas me fijo y se corta muy a menudo y hace la reconexión. La puerta de enlace que tendría que aparecerme seria la 10.8.0.1 o la ip del servidor de mi lan?

        Otra cosa. al hacer la conexion me salen varios warning, que no se si afectan o no. Concretamente este es mi log de conexion (he borrado datos que creo que no seria bueno que fueran publicos 🙂

        Wed Jan 25 16:05:50 2017 OpenVPN 2.4.0 x86_64-w64-mingw32 [SSL (OpenSSL)] [LZO] [LZ4] [PKCS11] [AEAD] built on Dec 27 2016
        Wed Jan 25 16:05:50 2017 Windows version 6.2 (Windows 8 or greater) 64bit
        Wed Jan 25 16:05:50 2017 library versions: OpenSSL 1.0.2i 22 Sep 2016, LZO 2.09
        Enter Management Password:
        Wed Jan 25 16:05:50 2017 MANAGEMENT: TCP Socket listening on [AF_INET]127.0.0.1:25340
        Wed Jan 25 16:05:50 2017 Need hold release from management interface, waiting…
        Wed Jan 25 16:05:51 2017 MANAGEMENT: Client connected from [AF_INET]127.0.0.1:25340
        Wed Jan 25 16:05:51 2017 MANAGEMENT: CMD ‘state on’
        Wed Jan 25 16:05:51 2017 MANAGEMENT: CMD ‘log all on’
        Wed Jan 25 16:05:51 2017 MANAGEMENT: CMD ‘hold off’
        Wed Jan 25 16:05:51 2017 MANAGEMENT: CMD ‘hold release’
        Wed Jan 25 16:05:51 2017 MANAGEMENT: >STATE:1485356751,RESOLVE,,,,,,
        Wed Jan 25 16:05:51 2017 TCP/UDP: Preserving recently used remote address: [AF_INET]IP PUBLICA:PUERTO
        Wed Jan 25 16:05:51 2017 Socket Buffers: R=[65536->65536] S=[65536->65536]
        Wed Jan 25 16:05:51 2017 UDP link local: (not bound)
        Wed Jan 25 16:05:51 2017 UDP link remote: [AF_INET]IP PUBLICA:PUERTO
        Wed Jan 25 16:05:51 2017 MANAGEMENT: >STATE:1485356751,WAIT,,,,,,
        Wed Jan 25 16:05:51 2017 MANAGEMENT: >STATE:1485356751,AUTH,,,,,,
        Wed Jan 25 16:05:51 2017 TLS: Initial packet from [AF_INET]IP PUBLICA:PUERTO, sid=1c46ec4a 4d11a456
        Wed Jan 25 16:05:51 2017 VERIFY OK: depth=1, DATOS DE CERTIFICADO
        Wed Jan 25 16:05:51 2017 Validating certificate key usage
        Wed Jan 25 16:05:51 2017 ++ Certificate has key usage 00a0, expects 00a0
        Wed Jan 25 16:05:51 2017 VERIFY KU OK
        Wed Jan 25 16:05:51 2017 Validating certificate extended key usage
        Wed Jan 25 16:05:51 2017 ++ Certificate has EKU (str) TLS Web Server Authentication, expects TLS Web Server Authentication
        Wed Jan 25 16:05:51 2017 VERIFY EKU OK
        Wed Jan 25 16:05:51 2017 VERIFY OK: depth=0, DATOS DE CERTIFICADO,
        Wed Jan 25 16:05:51 2017 WARNING: ‘link-mtu’ is used inconsistently, local=’link-mtu 1557′, remote=’link-mtu 1542′
        Wed Jan 25 16:05:51 2017 WARNING: ‘cipher’ is used inconsistently, local=’cipher AES-256-CBC’, remote=’cipher BF-CBC’
        Wed Jan 25 16:05:51 2017 WARNING: ‘keysize’ is used inconsistently, local=’keysize 256′, remote=’keysize 128′
        Wed Jan 25 16:05:51 2017 WARNING: ‘comp-lzo’ is present in remote config but missing in local config, remote=’comp-lzo’
        Wed Jan 25 16:05:51 2017 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 2048 bit RSA
        Wed Jan 25 16:05:51 2017 [NOMBRE SERVIDOR] Peer Connection Initiated with [AF_INET]IP PUBLICA:PUERTO
        Wed Jan 25 16:05:52 2017 MANAGEMENT: >STATE:1485356752,GET_CONFIG,,,,,,
        Wed Jan 25 16:05:52 2017 SENT CONTROL [NOMBRE SERVIDOR]: ‘PUSH_REQUEST’ (status=1)
        Wed Jan 25 16:05:52 2017 PUSH: Received control message: ‘PUSH_REPLY,route 10.8.0.1,topology net30,ping 10,ping-restart 120,ifconfig 10.8.0.6 10.8.0.5’
        Wed Jan 25 16:05:52 2017 OPTIONS IMPORT: timers and/or timeouts modified
        Wed Jan 25 16:05:52 2017 OPTIONS IMPORT: –ifconfig/up options modified
        Wed Jan 25 16:05:52 2017 OPTIONS IMPORT: route options modified
        Wed Jan 25 16:05:52 2017 Data Channel Encrypt: Cipher ‘AES-256-CBC’ initialized with 256 bit key
        Wed Jan 25 16:05:52 2017 Data Channel Encrypt: Using 160 bit message hash ‘SHA1’ for HMAC authentication
        Wed Jan 25 16:05:52 2017 Data Channel Decrypt: Cipher ‘AES-256-CBC’ initialized with 256 bit key
        Wed Jan 25 16:05:52 2017 Data Channel Decrypt: Using 160 bit message hash ‘SHA1’ for HMAC authentication
        Wed Jan 25 16:05:52 2017 interactive service msg_channel=548
        Wed Jan 25 16:05:52 2017 ROUTE_GATEWAY 192.168.100.1/255.255.255.0 I=4 HWADDR=MAC
        Wed Jan 25 16:05:52 2017 open_tun
        Wed Jan 25 16:05:52 2017 TAP-WIN32 device [Ethernet 2] opened: \.Global{CC026CFF-B97F-4AAB-B59D-B4C74F1E3C1A}.tap
        Wed Jan 25 16:05:52 2017 TAP-Windows Driver Version 9.21
        Wed Jan 25 16:05:52 2017 Notified TAP-Windows driver to set a DHCP IP/netmask of 10.8.0.6/255.255.255.252 on interface {CC026CFF-B97F-4AAB-B59D-B4C74F1E3C1A} [DHCP-serv: 10.8.0.5, lease-time: 31536000]
        Wed Jan 25 16:05:52 2017 Successful ARP Flush on interface [23] {CC026CFF-B97F-4AAB-B59D-B4C74F1E3C1A}
        Wed Jan 25 16:05:52 2017 do_ifconfig, tt->did_ifconfig_ipv6_setup=0
        Wed Jan 25 16:05:52 2017 MANAGEMENT: >STATE:1485356752,ASSIGN_IP,,10.8.0.6,,,,
        Wed Jan 25 16:05:57 2017 TEST ROUTES: 1/1 succeeded len=1 ret=1 a=0 u/d=up
        Wed Jan 25 16:05:57 2017 MANAGEMENT: >STATE:1485356757,ADD_ROUTES,,,,,,
        Wed Jan 25 16:05:57 2017 C:WINDOWSsystem32route.exe ADD 10.8.0.1 MASK 255.255.255.255 10.8.0.5
        Wed Jan 25 16:05:57 2017 Route addition via service succeeded
        Wed Jan 25 16:05:57 2017 Initialization Sequence Completed
        Wed Jan 25 16:05:57 2017 MANAGEMENT: >STATE:1485356757,CONNECTED,SUCCESS,10.8.0.6,IP PUBLICA:PUERTO,,

        Muchas gracias y perdón por la chapa

        • Tienes mal las configuraciones de cliente-servidor, no están igual, por eso se corta…súbeme a algún sitio tu server.ovpn y su client.ovpn quitando la IP del remote, todo lo demás déjalo tal cual (obviamente el tema de certificados también).

          ¿Dónde dices que te debería aparecer la puerta de enlace? Estás en modo TUN, únicamente ves la subred 10.8.0.0 y luego con rutas estáticas en el router, el resto de la red.

          • Capitan Asco

            Perdona por no responder antes, pero he estado muy liado.
            Este fin de semana me haré con una maquina limpia y haré la instalación desde 0 ya que he visto que ciertas rutas que indicas, no me aparecen. Si me surge algun problema te lo indico.
            Muchas gracias, un saludo

          • Capitan Asco

            Hola, buenas tardes.

            Indicarte que tal y como te dije volví a configurar todo de nuevo en una maquina limpia y nada, seguia con los problemas, esta vez con algunas rutas que no encontraba (ahora no las recuerdo). Por no seguir mareandote, busque de nuevo en internet y encontre este otro el cual seguí y me funciono bien a la primera. Si quieres compararlo con el tuyo te dejo la direccion al final, al igual que si ves que no se publique la url, como moderais antes el comentario quitarla.
            De nuevo mil gracias por tu tiempo.

            Un saludo

            https://www.digitalocean.com/community/tutorials/how-to-set-up-an-openvpn-server-on-ubuntu-14-04#step-1-—-install-and-configure-openvpn's-server-environment

          • Hola,

            El problema era que las configs de cliente y servidor no se correspondían…por eso te dije que me pegases los archivos de configuración.

Últimos análisis

Valoración RZ
9
Valoración RZ
8
Valoración RZ
8
Valoración RZ
8
Valoración RZ
8
Valoración RZ
10
Valoración RZ
8