¬° Por favor active Javascript! / Please turn on Javascript!
Incidencias y resolución de problemas de aplicaciones (Gratuitas o con licencias originales)
Avatar de Usuario
Cazador
Colaborador
Mensajes: 1617
Registrado: 16 Abril 2015, 19:16
C. Prof.: Analista de Sistemas
Contactar:

Instalación y configuración de OpenVPN Server en Raspberry Pi (OSMC / KODI)

Mensajepor Cazador » 26 Septiembre 2015, 11:27

Imagen

Una de las características que nos ofrecen las Raspberry Pi, es la de poder instalar multitud de aplicaciones o software. Una de las más interesantes es la aplicación OpenVPN, que nos permite crear una conexión de red privada con cifrado para conectarnos desde varios clientes (windows, Linux o android) a nuestra red interna desde cualquier ubicación con total seguridad.

En este peque√Īo tutorial que os hemos elaborado os detallamos el procedimiento a seguir, paso a paso, para ponder configuraros vuestra propia red privada.

Hemos partido de la base de que ya contáis con un software instalado en vuestra raspberry tipo servidor multimedia o smart tv como es OSCM o KODI. En la ultima versión de este software no deberíais tener problemas para hacer funcionar el servicio de OpenVPN en pocos minutos.

Servidor OpenVPN

Instalación OpenVPN

Imagen

El comando de instalación que descargara los programas y archivos necesarios para poder tener el servicio en nuestra raspberry

Código: Seleccionar todo

sudo apt-get install openvpn openssl


Preparación de los ficheros de configuración

Nos ubicamos en la carpeta por defecto que nos genera la instalación para preparar el fichero de configuración del servidor server.conf y generar los ficheros necesarios

Código: Seleccionar todo

cd /etc/openvpn/
mkdir /etc/openvpn/certs


Crear una autoridad certificadora (CA) y generar certificados autofirmados por nuestra CA

OpenVPN se basa en OpenSSL que pemirte utilizar la criptograf√≠a SSL/TLS. En nuestro caso vamos a configurar un certificado con el est√°ndar X.509 basado en infraestructura de clave p√ļblica.

Los ficheros que vamos a necesitar y generar son los siguientes:

ca.crt : Este es el certificado p√ļblico de la CA (Autoridad certificadora) . Este fichero debe encontrarse tanto en el servidor como en el cliente que vayamos a utilizar.
server.crt y server.key : Estos dos ficheros son el Certificado p√ļblico y el privado respectivamente que tienen que estar en el servidor.
dh1024.pem : Los parámetros Diffie-Hellman que se ubicarán sólo en la carpeta de OpenVPN del servidor

El fichero que se encuentra en /etc/ssl/openssl.cnf es el que se utilizará por defecto para generar las claves de la entidad certificadora raíz cuando usemos el comando openssl.

Revisar que se encuentran las variables bien definidas el fichero /etc/ssl/openssl.cnf , prestando atención a las siguientes: dir = . y certificate = $dir/ca.crt

Código: Seleccionar todo

vi /usr/lib/ssl/openssl.cnf


Código: Seleccionar todo

[ CA_default ]

dir             = .             # Where everything is kept
certs           = $dir/certs            # Where the issued certs are kept
crl_dir         = $dir/crl              # Where the issued crl are kept
database        = $dir/index.txt        # database index file.
#unique_subject = no                    # Set to 'no' to allow creation of
                                        # several ctificates with same subject.
new_certs_dir   = $dir/newcerts         # default place for new certs.

certificate     = $dir/ca.crt   # The CA certificate
serial          = $dir/serial           # The current serial number
crlnumber       = $dir/crlnumber        # the current crl number
                                        # must be commented out to leave a V1 CRL
crl             = $dir/crl.pem          # The current CRL
private_key     = $dir/private/cakey.pem# The private key
RANDFILE        = $dir/private/.rand    # private random number file

x509_extensions = usr_cert              # The extentions to add to the cert



Generamos el certificado raíz de la entidad certificadora

El siguiente comando nos generara dos fichero necesarios siguientes:
- Una clave privada ( private key ) en private/cakey.pem
- una Certificado CA raiz ( root CA certificate) en el fichero ca.crt

Código: Seleccionar todo

cd /etc/openvpn/certs
mkdir newcerts
mkdir private
openssl req -new -x509 -extensions v3_ca -keyout private/cakey.pem -out ca.crt -days 3650
touch /etc/openvpn/certs/index.txt
echo "01" > /etc/openvpn/certs/serial


NOTA: La creación de los ficheros index.txt y serial es necesaria debido a que los utiliza el script de openssl

Imagen

Si queremos comprobar los detalles del la cacert.pem creada podemos ejecutar los siguientes comandos:

Código: Seleccionar todo

openssl x509 -in ca.crt -noout -text
openssl x509 -in ca.crt -noout -dates
openssl x509 -in ca.crt -noout -purpose


Los siguientes comandos crean una carpeta donde se generaran los certificados creados en forma de ficheros generados con los datos que nos solicitará el asistente, como podéis ver en la imagen de abajo

Imagen

Una vez completado el asistente nos habr√° generado los ficheros de la entidad certificadora (CA) : ca.crt y ca.key . Estos ficheros deber√°n copiarse en la carpeta /etc/openvpn .

NOTA: Si deseamos comprobrar el certificado ca.crt generado

Código: Seleccionar todo

openssl x509 -text -noout -in ca.crt


Generamos el certificado de servidor

A continuación vamos a generar los certificados del servidor:

Código: Seleccionar todo

cd /etc/openvpn/certs
openssl req -nodes -new -extensions v3_req -keyout server.key -out server.csr
openssl ca -extensions v3_req -out server.crt -in server.csr


En este momento el asistente nos preguntara que introduzcamos la información del certificado además de una frase de paso para el certificado que se va a generar ( Enter PEM pass phrase :) y nos pedirá que la confirmemos. Posteriormente nos solicita la información adicional del certificado como se muestra en la imagen:

Imagen

A continuaci√≥n vamos a generar los certificados del cliente con una validez de 1 a√Īo (365 d√≠as) con el siguiente comando en la misma carpeta:

Código: Seleccionar todo

cd /etc/openvpn/certs
openssl req -days 365 -new  -keyout client.key -out client.csr
openssl ca -days 365 -out client.crt -in client.csr


En este momento el asistente nos preguntara por una frase de paso para el certificado que se va a generar ( Enter PEM pass phrase :) y nos pedirá que la confirmemos. Posteriormente nos solicita la información adicional del certificado como se muestra en la imagen:

Imagen

Una vez completada la información solicitada por el asistente nos habrá generado dos nuevos ficheros en la carpeta: client.csr (que contiene la solicitud de generación del certificado) y client.key (que contiene la PRIVATE KEY o clave privada).

Y por ultimo copiamos los certificados a la ubicación raíz donde tenemos el server.conf (/etc/openvpn)

Código: Seleccionar todo

cp ca.crt server.crt server.key /etc/openvpn


Generación de fichero pem de 2048 bit

El fichero dh2048.pem lo generamos con el siguiente comando (tarda unos minutos en crearse):

Código: Seleccionar todo

cd /etc/openvpn/
openssl dhparam -out dh2048.pem 2048
cp dh2048.pem /etc/openvpn


Imagen


CERTIFICADO_CLIENTE.crt (client.crt) y CERTIFICADO_CLIENTE.key (client.key): Estos dos ficheros son el Certificado p√ļblico y el certificado privado de usuario que utilizaremos en el cliente de OpenVPN. Si vamos a tener varios clientes conectados de forma simultanea es necesario contar con un par de estos certificados para cada cliente, ya que sino habr√≠a desconexiones al intentar conectarse m√°s de un usuario con el mismo certificado.

NOTA: Los ficheros de ejemplo se encuentran en la siguiente ruta /usr/share/doc/openvpn/examples


Configuración fichero server.conf

Este fichero habilita el servicio sobre el puerto TCP 1194 en modo t√ļnel y hara que escuche sobre cualquier IP

tcp 0 0 0.0.0.0:1194 0.0.0.0:* LISTEN

Código: Seleccionar todo

# OpenVPN server configuration
# (lines begining with `#' or `;' are comments)

# IP address, port, and protocol to bind
port 1194
proto tcp
dev tun

# cryptographic options (key, certificates, HMAC, cipher)
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh dh2048.pem
;tls-auth ta.key 0
;cipher AES-256-CBC

# networking options for VPN (IP range, routes, if any)
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
# push route(s)
;push "route 223.1.2.0 255.255.255.0"
# OpenVPN server as default gateway (read OpenVPN HOWTO!)
push "redirect-gateway def1"

# miscellanous options
keepalive 5 60
comp-lzo
status /var/log/openvpn-status.log
verb 3

# hardening: run as nobody in chroot jail etc.
# (directory /etc/openvpn/jail must exist)
user nobody
group nogroup
;persist-key
;persist-tun
;chroot jail

# CRL, if any (must be located in /etc/openvpn/jail)
;crl-verify crl.pem

# ROUTE THE CLIENT'S INTERNET ACCESS THROUGH THIS SERVER:^M
push "redirect-gateway def1 bypass-dhcp"
;push "remote-gateway 10.8.0.1"
push "dhcp-option DNS 8.8.8.8"
push "route 192.168.1.0 255.255.255.0"




Creación de reglas y apertura de puertos en el router

Comando para habilitar el reenvió en la red IP

Código: Seleccionar todo

sysctl -w net.ipv4.ip_forward=1


Reglas iptables necesarias para que encamine el trafico a vuestra red interna (Si tenéis una red 192.168.1.0 y la IP interna de vuestra raspberry es 192.168.1.10 el comando seria)

Código: Seleccionar todo

 iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 192.168.1.10
 iptables-apply
 iptables-save
 


Comprobación de que la regla se encuentra aplicada:

Código: Seleccionar todo

 iptables -t nat -L


NOTA: en la carpeta de ejemplo existe un script que habilita reglas adicionales por si estas os serían necesarias: /usr/share/doc/openvpn/examples/sample-config-files/firewall.sh


Habilitamos el servicio para que forme parte del sistema:

Código: Seleccionar todo

systemctl enable openvpn


Arrancamos el servicio:

Código: Seleccionar todo

service openvpn start


NOTA: Es importante que tengáis una IP FIJA establecida en vuestro dispositivo raspberry para poder NATEAR el puerto TCP 1194 y se pueda realizar la conexión desde el exterior.

Cliente OpenVPN

Fichero de configuración de cliente OpenVPN

Renombrar el fichero como client.ovpn en Windows, y como client.conf si vais a conectaros en Linux.

Las líneas a personalizar en el fichero son las siguientes:

remote TUSERVIDOR.ipdinamica.es 1194 - Indicando el nombre o alias del servidor y el puerto de conexión (en este caso he escogido que vaya sobre TCP)
ca ca.crt
cert CERTIFICADO_CLIENTE.crt
key CLAVE_CERTIFICADO_CLIENTE.key

Estos tres ficheros deben ser creados como se indican anteriormente (ver im√°genes y pasos)

El fichero debe de contener lo siguiente:

Código: Seleccionar todo

##############################################
# Sample client-side OpenVPN 2.0 config file #
# for connecting to multi-client server.     #
#                                            #
# This configuration can be used by multiple #
# clients, however each client should have   #
# its own cert and key files.                #
#                                            #
# On Windows, you might want to rename this  #
# file so it has a .ovpn extension           #
##############################################

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

# Use the same setting as you are using on
# the server.
# On most systems, the VPN will not function
# unless you partially or fully disable
# the firewall for the TUN/TAP interface.
;dev tap
dev tun

# Windows needs the TAP-Windows adapter name
# from the Network Connections panel
# if you have more than one.  On XP SP2,
# you may need to disable the firewall
# for the TAP adapter.
;dev-node MyTap

# Are we connecting to a TCP or
# UDP server?  Use the same setting as
# on the server.
proto tcp
;proto udp

# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote TUSERVIDOR.ipdinamica.es 1194

# Choose a random host from the remote
# list for load-balancing.  Otherwise
# try hosts in the order specified.
;remote-random

# Keep trying indefinitely to resolve the
# host name of the OpenVPN server.  Very useful
# on machines which are not permanently connected
# to the internet such as laptops.
resolv-retry infinite

# Most clients don't need to bind to
# a specific local port number.
nobind

# Downgrade privileges after initialization (non-Windows only)
;user nobody
;group nobody

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

# If you are connecting through an
# HTTP proxy to reach the actual OpenVPN
# server, put the proxy server/IP and
# port number here.  See the man page
# if your proxy server requires
# authentication.
;http-proxy-retry # retry on connection failures
;http-proxy [proxy server] [proxy port #]

# Wireless networks often produce a lot
# of duplicate packets.  Set this flag
# to silence duplicate packet warnings.
;mute-replay-warnings

# SSL/TLS parms.
# See the server config file for more
# description.  It's best to use
# a separate .crt/.key file pair
# for each client.  A single ca
# file can be used for all clients.
ca ca.crt
cert CERTIFICADO_CLIENTE.crt
key CERTIFICADO_CLIENTE.key

# Verify server certificate by checking
# that the certicate has the nsCertType
# field set to "server".  This is an
# important precaution to protect against
# a potential attack discussed here:
#  http://openvpn.net/howto.html#mitm
#
# To use this feature, you will need to generate
# your server certificates with the nsCertType
# field set to "server".  The build-key-server
# script in the easy-rsa folder will do this.
;ns-cert-type server

# If a tls-auth key is used on the server
# then every client must also have the key.
;tls-auth ta.key 1

# Select a cryptographic cipher.
# If the cipher option is used on the server
# then you must also specify it here.
;cipher x

# Enable compression on the VPN link.
# Don't enable this unless it is also
# enabled in the server config file.
comp-lzo

# Set log file verbosity.
verb 3

# Silence repeating messages
;mute 20


Esto son los ficheros resultantes que deberíamos tener en la carpeta /etc/openvpn para que nos funcione:

Imagen

Y en este punto ya deber√≠amos de tener todo lo necesario para poder hacer funcionar nuestro servidor de OpenVPN. Si ten√©is alguna duda al respecto pod√©is dejarla en este mismo POST. Que os sea √ļtil :)



Información adicional

Cliente para Android - OpenVPN Connect

Para poder conectaros desde vuestro dispositivo móvil con android tan solo necesitáis copiaros los ficheros de cliente que os genereis en vuestro dispositivo junto con el fichero de configuración del cliente en la misma carpeta.

Imagen

Abr√≠s la aplicaci√≥n, ejecut√°is el asistente de importaci√≥n IMPORT (Import Profile from SD card) y eleg√≠s el fichero client.conf o client.opvn, seg√ļn le hay√°is llamado.

Enlace Play Store: https://play.google.com/store/apps/details?id=net.openvpn.openvpn

Cliente para Windows

El cliente se instala por defecto en la carpeta C:\Program FIles\OpenVPN y dentro de la carpeta config es donde teneis que ubicar los ficheros generados para el cliente junto con el fichero client.ovpn, con la configuración de la conexión a vuestro servidor y el fichero ca.crt de vuestra entidad certificadora.

Imagen

Imagen

Descarga clientes: https://openvpn.net/index.php/open-sour ... loads.html

NOTA: Puede que sea necesario ejecutar el cliente OpenVPN en Windows con permisos de administrador o no podr√° en muchos casos crear las routas necesarias para encaminar vuestro trafico de red.

Revocación de certificados

NOTA: para revocar un certificado generado usaríamos los siguientes comandos

Código: Seleccionar todo

cd /etc/openvpn/certs
openssl ca -revoke certificate.crt
openssl ca -gencrl -out crl.pem
cat ca.crt crl.pem > revoke-test.pem
openssl verify -CAfile revoke-test.pem -crl_check certificate.crt
Redactor de ELSATE.com. Aficionado de la Tecnolog√≠a, los Videojuegos, la M√ļsica Electr√≥nica y el Deporte.



M√ĀS NOTICIAS



Volver a ‚ÄúGeneral‚ÄĚ

¬ŅQui√©n est√° conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron