LinuxParty

NUESTRO SITIO necesita la publicidad para costear hosting y el dominio. Por favor considera deshabilitar tu AdBlock en nuestro sitio. También puedes hacernos una donación entrando en linuxparty.es, en la columna de la derecha.
Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado
 

OpenVPN nos permite de forma gratuita crear una red virtual privada (Virtual Private Network ) desde por ejemplo un smartphone hasta nuestra red privada de casa.Podemos aprender un poco mas sobre VPN en estas entradas.

Descargar e instalar OpenVPN

# apt-get install openssl openvpn

Crear CA

Para firmar los certificados, tanto el que se creará para el servidor como para cualquier dispositivo que quiera conectar a la VPN, será necesario crear una autoridad certificadora.

La forma mas sencilla de crear una PKI (Public Key Infrastructure)  es mediante easy-rsa:

En caso de que no se haya instalado con OpenVPN lo haremos nosotros:

# apt-get install easy-rsa
# make-cadir /etc/openvpn/easy-rsa
# cd /etc/openvpn/easy-rsa
# source ./vars

Lo siguiente solo es necesario como precaución, y lo que hace es borrar todo certificado existente. NO deberá de ejecutarse si no hemos instalado easy-rsa recientemente y sospechamos que pueden existir otros certificados generados anteriormente

# ./clean-all

Ahora generamos los parámetros Diffie Hellman:

# ./build-dh

Creamos la CA:

# ./build-ca

Los dos comandos anteriores deberán de haber generado los siguientes archivos bajo el directorio /etc/openvpn/easy-rsa/keys:

  • dh2048.pem: contiene los parámetros Diffie Hallman
  • ca.crt: certificado público de la entidad certificadora
  • ca.key: cable privada de la autoridad certificadora

Nota: los archivos .key deben de tener permisos restrictivos (-r——– root:root) ya que contienen la clave privada con la que se cifran las comunicaciones.

Crear certificados

A continuación se van a crear certificados para todos los servidores/dispositivos/hosts que vayan a mantener comunicaciones mediante VPN. En este ejemplo solo va haber un servidor OpenVPN (el cual tendrá su respectivo certificado) y un cliente.

Certificado servidor:

# ./build-key-server <nombre_del_servidor>

Durante la creación del certificado (tanto para el del servidor como para el de los clientes) se realizarán una serie de preguntas que podemos modificar desde el archivo ./vars

Nota: si realizamos cualquier modificación en el archivo vars deberemos de volver a ejecutar el comando source ./vars

Una vez generado, aparecerán sus respectivos archivos bajo el directorio keys/

  • <nombre_del_servidor>.crt
  • <nombre_del_servidor>.key

Certificado cliente:

# ./build-key <hostname_dispositivo_cliente>

En realidad podemos introducir cualquier otro nombre, pero sin duda como mejor se identifica es así.

Esto igualmente creará sus respectivos archivos.

Crear archivo de configuración cliente

Ya tengamos un dispositivo Android o un sistema Windows o Linux, deberemos de crear un archivo de configuración para el cliente.

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

Nota: si el archivo de configuración va a ir destinado a un dispositivo Android, deberemos de cambiar la extensión .conf por .ovpn

# vi <hostname_dispositivo_cliente>.conf
client
dev tun
proto udp
remote my-server-1 1194
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
ca ca.crt
cert <hostname_dispositivo>.crt
key <hostname_dispositivo>.key
ns-cert-type server
comp-lzo
verb 3

Nota:  el valor my-server-1 11194 deberemos de cambiarlo por nuestra IP pública o fqdn y si estamos utilizando Windows la interfaz será dev tap

Donde ubicar cada archivo de certificado

En realidad aún falta lo mas importante, que evidentemente es configurar el servidor, pero si estamos siguiendo estos pasos, vamos mejor a situar cada certificado y archivo generados hasta el momento en su sitio.

En el directorio /etc/openvpn del servidor deberán de estar:

  • dh2048.pem
  • ca.crt
  • <hostname_server>.crt
  • <hostname_server>.key

En el directorio /etc/openvpn del cliente (Linux):

Deberemos de transferir los archivos que abajo se citan desde el servidor en el que hemos generado los certificados y el archivo de configuración (habitualmente el propio servidor OpenVPN), hasta el cliente (scp, ftp, USB…).

  • ca.crt
  • <hostname_dispositivo>.crt
  • <hostname_dispositivo>.key
  • <hostname_dispositivo>.conf

Si el dispositivo es por ejemplo un Andriod deberemos de modificar los parámetros ca, cert y key del archivo de configuración, indicando la ruta en el que hemos transferido los archivos, normalmente algo parecido a /sdcard/memory0/Documents/…

Importante: deberemos de realizar todos los pasos desde el apartado “Crear certificados/Certificado cliente” hasta aquí, para cualquier dispositivo extra que quiera conectar con el servidor.

Configurar el servidor OpenVPN

Hasta ahora esta todo prácticamente preparado para una vez configurado los parámetros de configuración del servidor, iniciemos el servicio y la conexión este lista.

# cd /etc/openvpn
# cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz .
# unzip server.conf.gz .
# vi server.conf
local 192.168.1.4    // IP interna del servidor OpenVPN
port 1194
proto udp
dev tun
topology subnet
ca ca.crt
cert <hostname_server>.crt
key <hostname_server>.key
dh dh2048.pem
server 10.8.0.0 255.255.255.0    // network y mask túnel
ifconfig-pool-persist ipp.txt
push "route 192.168.1.0 255.255.255.0"    // network y mask a la que queremos acceder desde el exterior
keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log-append openvpn.log
verb 3

Configurar forwarding

Para que el sistema sea capaz de reenviar los paquetes de la interfaz tun0 o tap0 a eth0 deberemos de habilitar el forwarding en el sistema:

# vi /etc/sysctl.conf
net.ipv4.ip_forward=1
# sysctl -p /etc/sysctl.conf

Nota: para que el sistema sepa que hacer con los paquetes que llegan por la interfaz túnel, es necesario crear una ruta estática con el comando route add, pero no preocuparos porque esto ya lo hace OpenVPN al iniciarse.

Port forwarding

Dependiendo del router de nuestro proveedor la habilitación de los puertos será de una forma u otra pero normalmente esta opción se encuentra en la pestaña “port forwarding” o similar.

Lo primero es acceder a nuestro router por la IP 192.168.1.1, introducir el usuario y contraseña del router y buscar la pestaña anterior. Si es necesario buscar en la red el manual de como hacerlo para vuestro router específico.

En definitiva lo que se quiere hacer es avisar al router de que todos los paquetes que vayan con destino al puerto 1194 desde el exterior (Internet) se reenvíen al host 192.168.1.4 (en nuestro caso es esta la IP del servidor OpenVPN) por el puerto 1194.

A continuación dejo un screenshot de esta configuración en un router de Jazztel (en mi caso estoy utilizando la ip 192.168.1.50):

Configurar IPtables

Si tenemos activo el cortafuego de Linux IPtables en el servidor, deberemos de crear algunas reglas para que el tráfico sea debidamente enrutado, de lo contrario no será necesario:

# 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

Cuando reiniciemos estas reglas desaparecerán. Existen diferentes formas de hacer que persistan o se creen al inicio, aquí solo vamos a comentar una de las posibles válidas, y es meter estas reglas en el archivo /etc/rc.local antes de la línea exit 0 para que cuando el servidor se reinicie se ejecuten estas tres reglas al inicio:

# vi /etc/rc.local
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

exit0

Configurar UFW

Si tenemos activo el cortafuego de UFW en el servidor VPN, deberemos de crear algunas reglas para que el tráfico sea debidamente enrutado, de lo contrario no será necesario:

# ufw allow ssh

# ufw allow 1194/udp

# vim /etc/default/ufw

DEFAULT_FORWARD_POLICY="ACCEPT"

# vim /etc/ufw/before.rules
#
 rules.before
 #
 Rules that should be run before the ufw command line added rules. Custom
 rules should be added to one of these chains:
 ufw-before-input
 ufw-before-output
 ufw-before-forward
 #
 START OPENVPN RULES
 NAT table rules
 *nat
 :POSTROUTING ACCEPT [0:0] 
 Allow traffic from OpenVPN client to ens3
 -A POSTROUTING -s 10.8.0.0/8 -o ens3 -j MASQUERADE
 COMMIT
 END OPENVPN RULES
 Don't delete these required lines, otherwise there will be errors
 *filter

# ufw enable

# ufw status
Status: active To        Action      From --                  ------      ---- 22 
ALLOW Anywhere 1194/udp
ALLOW Anywhere 22 (v6)
ALLOW Anywhere (v6) 1194/udp (v6)
ALLOW Anywhere (v6)

Activar los servicios

Una vez realizado todo, es el momento de iniciar OpenVPN:

Si el sistema en el que trabajamos utiliza SysV:

# service openvpn start

Si por el contrario utiliza Systemd:

# systemctl start openvpn@server

IP dinámica y configuración del cliente

En las siguientes entradas veremos como configurar el lado del cliente para iniciar conexión, y como establecer un servicio noIP para que aunque nuestra IP pública cambie (IP dinámica) podamos seguir conectándonos a través de un fqdn.

Pin It

Escribir un comentario


Código de seguridad
Refescar



Redes:



 

Suscribete / Newsletter

Suscribete a nuestras Newsletter y periódicamente recibirás un resumen de las noticias publicadas.

Donar a LinuxParty

Probablemente te niegues, pero.. ¿Podrías ayudarnos con una donación?


Tutorial de Linux

Filtro por Categorías