OpenVPN: Configurar Servidor

openvpn logo

En la entrada de hoy vamos a ver como configurar un servidor OpenVPN. Una VPN ( Red Privada Virtual), es una extensión de una red local que permite conectar localizaciones remotas de manera segura, de tal forma que una vez conectados a nuestra VPN podremos navegar por internet, o acceder a los recursos compartidos de nuestra red local, de la misma forma que si nuestro dispositivo estuviese físicamente conectado a nuestra LAN.

Requisitos previos:

Como requisito previo comentar que necesitaremos una ip pública accesible desde internet. Si disponemos de una ip pública estática, no tendremos problema, el cliente se conectará directamente a esa ip. Si no disponemos de ip estática, podemos echar mano de un servicio de redirección DNS dinámico , como puede ser el que ofrece de forma gratuita www.noip.com . En el post “Servidor web con moodle, publicar sitio en internet” ya expliqué como configurar este servicio, por lo que podéis echarle un ojo ya que será necesario para la realización de este tutorial.

Todos los comandos los vamos a ejecutar como root, así que por comodidad nos cambiamos a usuario root:

$ sudo -s

Comenzamos instalando los paquetes openvpn y easy-rsa:

# apt-get install openvpn easy-rsa

Configurar Autoridad de Certificación

Lo primero que vamos a hacer es crear nuestra autoridad de certificación para poder emitir todos los certificados y claves necesarios. Con el siguiente comando crearemos la carpeta y obtendremos los scripts que necesitaremos a la hora de generar las claves:

# make-cadir /etc/openvpn/easy-rsa

Entramos en la carpeta /etc/openvpn/easy-rsa:

# cd /etc/openvpn/easy-rsa/

En la siguiente captura vemos el contenido de la carpeta easy-rsa:

contenido easy-rsa

Ahora vamos a editar el fichero “vars” y modificamos lo que se lista a continuación ajustándolo a nuestro entorno:

export KEY_COUNTRY=”codigo del pais”
export KEY_PROVINCE=”codigo de provincia”
export KEY_CITY=”ciudad”
export KEY_ORG=”organizacion”
export KEY_EMAIL=”direccion de email”
export KEY_OU=”departamento”
export KEY_CN=”nombre del servidor”
export KEY_ALTNAMES=”algo, lo que queramos”

Editamos el fichero con el siguiente comando:

# nano vars

En la siguiente captura vemos como ha quedado en mi caso particular:

vars

Ahora vamos a crear el certificado y clave de nuestra autoridad de certificación. Para ello, tomamos como origen el fichero vars que acabamos de editar:

# source vars 

Con el siguiente comando se borrarían las claves existentes en la carpeta keys, en nuestro caso no hay ninguna aún pero podemos ejecutarlo igualmente:

# ./clean-all

Ahora generamos el certificado y clave de nuestra autoridad de certificación:

# ./build-ca 

Nos hará una serie de preguntas que nosotros responderemos con la opción por defecto, puesto que es lo que hemos modificado en el fichero vars. Podemos verlo en la siguiente captura:

autoridad certificadora

Y creamos los parámetros Diffie Hellman para el servidor:

# ./build-dh
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
.......................+................................................+.............................+.....................+....................................+......+........................+....................+............++*++*

Crear certificado y clave del servidor

Para crear el certificado y clave del servidor utilizamos el siguiente comando(donde “openvpn” hay que sustituirlo por el nombre de vuestro servidor):

# ./build-key-server openvpn

De la misma forma que antes, nos hará una serie de preguntas que contestaremos con la opción por defecto e indicamos que “sí” cuando nos pregunte si queremos firmar el certificado. Lo vemos en la captura:
certificado del servidor

Crear certificado y clave del cliente

Para crear el certificado y clave del cliente utilizamos el siguiente comando(donde “albertovpn” hay que sustituirlo por el nombre de vuestro cliente):

# ./build-key albertovpn

Igual que con el resto de certificados, respondemos las preguntas con la opción por defecto y volvemos a indicar que “si”, cuando pregunte si queremos firmar el certificado. Lo vemos en la captura:
certificado del cliente

Todos los certificados y claves que hemos ido generando están en el directorio “/etc/openvpn/easy-rsa/keys”. Podemos ver el contenido en la siguiente captura:

Directorio keys

Configurar el servidor:

Existe un fichero de ejemplo que podemos usar como plantilla a la hora de configurar el servidor OpenVPN. Para copiar los ficheros de ejemplo lo hacemos de la siguiente manera:

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

Una vez tenemos copiado el archivo en la carpeta “/etc/openvpn”, lo descomprimimos:

# gunzip server.conf.gz

Y editamos el fichero “server.conf”:

# nano server.conf

Vemos que tenemos muchos apartados que configurar. En mi caso yo lo he dejado como sigue, podéis tomarlo como ejemplo:

#Puerto de escucha
port 1194

#tipo protocolo udp
proto udp

#Dispositivo virtual en el que se creará el tunel
dev tun

#Ubicación de los certificados y claves del servidor
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/openvpn.crt
key /etc/openvpn/easy-rsa/keys/openvpn.key

# Ubicación de los parametros Diffie hellman
dh /etc/openvpn/easy-rsa/keys/dh2048.pem

#El servidor tomará la ip 10.8.0.1
#A los clientes se les asignará una ip dentro de esa red
server 10.8.0.0 255.255.255.0

#registramos las ip de los clientes conectados
ifconfig-pool-persist ipp.txt

# Permitimos alcanzar la red local
# a través del tunel
push "route 192.168.1.0 255.255.255.0"

#Redirigimos todo el tráfico a través de la VPN
push "redirect-gateway def1 bypass-dhcp"

# Servidores DNS que usaremos (opendns.com).
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

# ping cada 10 seg
# tras 120 seg sin respuesta
#se considera el par caido
keepalive 10 120

# Tipo de cifrado.
cipher AES-128-CBC   # AES

# habilitamos compresión
comp-lzo

# numero máximo de conexiones
max-clients 10

# limitamos permisos
user nobody
group nogroup
# 
persist-key
persist-tun

#Habilitamos logs
status openvpn-status.log
log openvpn.log

# nivel detalle de logs
verb 3

Configurar el cliente:

De la misma manera que hemos configurado el servidor, ahora toca configurar el cliente. Podemos utilizar como plantilla el fichero de ejemplo. Para ello copiamos el fichero “client.conf” a “/etc/openvpn”:

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

Editamos el fichero “client.conf”:

#nano client.conf

Aquí dejo cómo lo he dejado yo, para que lo toméis como ejemplo:

# Specify that we are a client and that we
# will be pulling certain config file directives
# from the server.
client

#dispositivo tunel (como en el server)
dev tun

#tipo protocolo udp (como en el server)
proto udp

#servidor remoto y puerto (host no-ip)
remote prueba.ddns.net 1194 #este es el host configurado en noip

#se intentará resolver de forma indefinida 
#el nombre del server
resolv-retry infinite

# Los clientes no necesitan usar un puerto especifico.
nobind

# Reducimos permisos
user nobody
group nogroup

# Try to preserve some state across restarts.
persist-key
persist-tun

# ubicación de certificados y claves del cliente
ca ca.crt
cert albertovpn.crt
key albertovpn.key


# Tipo de certifiado aceptado
ns-cert-type server

# tipo de cifrado (como en el server)
cipher AES-128-CBC
# Habilitamos compresión (como en el server)
comp-lzo

# Nivel de detalle del log
verb 3

El apartado remote prueba.ddns.net 1194, es donde estamos indicando al cliente donde tiene que conectarse. Si dispusiésemos de  una ip pública estática la pondríamos aquí. Como yo no dispongo de ip pública estática en mi casa, lo he configurado mediante el servicio de redirección DNS dinámico gratuito que ofrece noip. Como ya os he comentado al principio del post, esto ya lo expliqué aquí.

Habilitar IP Forward y NAT

Para habilitar el ip forward editamos el fichero “/etc/sysctl.conf”:

# nano /etc/sysctl.conf

Y descomentamos la siguiente linea:

net.ipv4.ip_forward=1

Por último tenemos que crear una nueva regla NAT en el firewall. Para ello editamos el fichero “/etc/rc.local”

# nano /etc/rc.local

Y ponemos la siguiente línea:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Por último abrimos el puerto 1194 en nuestro router si fuese necesario:
abrir puerto router
Y con esto tenemos todo lo necesario para conectarnos a nuestra VPN. En el siguiente post, veremos cómo conectarnos desde un dispositivo Android.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s




TELDAT CTI
VCA-DCV
JNCIA
CCNA

Introduce tu correo electrónico y recibe todas las actualizaciones

Únete a otros 146 seguidores

octubre 2015
L M X J V S D
« Ago   Dic »
 1234
567891011
12131415161718
19202122232425
262728293031  

Actualizaciones de Twitter

Blog Stats

  • 422,701 Visitas
Creative Commons

A %d blogueros les gusta esto: