Crear un servidor VPN en una Raspberry Pi

Uno de los primeros proyectos que hice con una Raspberry Pi fue crear un servidor VPN para poder acceder a mi red doméstica y navegar tranquilamente desde conexiones públicas. O, para cuando viajo a países como China, en los que el acceso a ciertas páginas está bloqueado, poder navegar tranquilamente.

Tengo una Raspberry Pi 2 permanentemente encendida, con una distribución OpenElec para usar Kodi al ver la televisión. Quería utilizar esta máquina como servidor VPN, pero tras investigar mucho he decidido desistir por los muchos problemas que tiene el emplear una distribución no completa como es OpenElec. Así que mejor lo hago en otra Raspberry exclusiva (una B), con una distribución decente, como es Raspbian.

Hay miles de tutoriales por internet sobre cómo hacer esto. Yo voy a seguir fundamentalmente este en dos partes, que me parece maravilloso (aunque hay varias cosas que han cambiado con las nuevas versiones de OpenVPN y no se puede seguir tal cual):

Building A Raspberry Pi VPN Part One: How And Why To Build A Server
Building A Raspberry Pi VPN Part Two: Creating An Encrypted Client Side

Configuraré mi portátil del trabajo (Windows), mi portátil personal (Mac) y mi iPhone para poder acceder a la VPN.

Pasos previos

Instalo Raspbian, cambio la contraseña, compruebo que puedo acceder a la Raspberry Pi por SSH, desde otro ordenador conectado a la misma red local. Y actualizo todo con sudo apt-get update y sudo apt-get upgrade.

También tengo que asegurarme de que la Raspberry Pi tiene asignada una IP estática dentro de la red local, o bien a mano (ver esta entrada) o en mi router. Hecho (no explico cómo hacerlo por el router porque en cada router se hace de una forma, aunque todos son similares). Supongamos que es la 192.168.1.45.

También seguramente necesite un servidor dns dinámico como no-ip.com, para poder acceder desde cualquier sitio al servidor, que seguramente tenga una IP dinámica. Puedo hacerlo siguiendo las instrucción ques expliqué en esta entrada.

Una cosa más en el router: debo hacer que todo paquete que llegue al puerto 1194 UDP sea dirigido a mi Raspberry Pi. Hecho (tampoco lo explico, si tienes dudas, googlea tu modelo de router).

Instalando OpenVPN

Instalo OpenVPN:

sudo apt-get install openvpn easy-rsa

 

Se me instala la versión 2.3.4.

Voy a generar las claves RSA. Empiezo por darme permiso de supersusuario, para no tener que andar haciendo sudo todo el rato:

sudo -s

 

Vamos a emplear easy-rsa.

Y ahora:

mkdir /etc/openvpn/easy-rsa
cp /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/
cd /etc/openvpn/easy-rsa
nano /etc/openvpn/easy-rsa/vars

 

Busco dentro del fichero /etc/openvpn/easy-rsa/vars la línea que dice export EASY_RSA="`pwd`" y lo cambio por:

export EASY_RSA=”/etc/openvpn/easy-rsa” 

 

Y ahora genero los certificados, ejecutando los siguientes comandos:

source ./vars
./clean-all
./build-ca

 

¡Ojo! Si no es la primera vez que seguimos estos pasos es posible que ya tengamos algunos certificados generados en el directorio /etc/openvpn/easy-rsa. En este caso, NO debemos ejecutar el comando ./clean-all

Al ejecutar ./build-ca saltarán una serie de preguntas (Country name, State or Province Name, Locality Name, Organization Name, Organizational Unit Name, Common Name, Name), que yo prefiero no rellenar y dejo los valores por defecto, pulsando Enter.

Ahora definimos el nombre del servidor, en mi caso raspivpn:

./build-key-server raspivpn

 

Nuevamente, nos pedirá rellenar una serie de nombres, que dejo en sus valores por defecto, fijándome que el Common Name que me ofrece por defecto y apruebo es el que di al servidor, raspivpn. El Challenge Pasword lo dejo en blanco, y cuando me pregunte “Sign the certificate? [y/n]”, pues diré que sí (y), naturalmente.

Con esto ya tenemos configurado el servidor. Ahora nos queda generar las claves de los clientes y configurarlos.

Creo un certificado para cada usuario:

./build-key-pass usuario1
./build-key-pass usuario2
./build-key-pass usuario3
./build-key-pass usuario4
./build-key-pass usuario5
...

 

Introduzco la contraseña que quiero tenga cuando dice “Enter PEM pass phrase”, y el resto de opciones por defecto.

Y ahora encriptamos las llaves con des3:

openssl rsa -in usuario1.key -des3 -out usuario1.3des.key
openssl rsa -in usuario2.key -des3 -out usuario2.3des.key
openssl rsa -in usuario3.key -des3 -out usuario3.3des.key
openssl rsa -in usuario4.key -des3 -out usuario4.3des.key
openssl rsa -in usuario5.key -des3 -out usuario5.3des.key

 

E introducimos una nueva contraseña (o la misma).

Volvemos al directorio de easy-rsa:

cd /etc/openvpn/easy-rsa/ 

 

Ahora generamos el intercambio de llaves Diffie-Hellman. Esto puede tardar (en mi caso, una hora y cuarto, porque dejé la opción por defecto de encriptación 2048 bit):

./build-dh

 

Y la protección contra un ataque de DoS, generando una llave HMAC estática:

openvpn --genkey --secret keys/ta.key

 

Ya está todo instalado y creado. Falta configurar OpenVPN. Para ello vamos a crear un fichero /etc/openvpn/server.conf con el contenido de este archivo.

nano /etc/openvpn/server.conf

 

Más adelante he descubierto que OpenVPN no arranca tras reiniciar el servidor. Investigando, he llegado a que hay que comentar la primera línea de este fichero: # local 192.168.1.45. Entonces, en mi caso, lo dejo así:

#local 192.168.1.45 # SWAP THIS NUMBER WITH YOUR RASPBERRY PI IP ADDRESS
dev tun
proto udp #Some people prefer to use tcp. Don't change it if you don't know.
port 1194
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/raspivpn.crt # SWAP WITH YOUR CRT NAME
key /etc/openvpn/easy-rsa/keys/raspivpn.key # SWAP WITH YOUR KEY NAME
dh /etc/openvpn/easy-rsa/keys/dh2048.pem # If you changed to 2048, change that here!
server 10.8.0.0 255.255.255.0
# server and remote endpoints
ifconfig 10.8.0.1 10.8.0.2
# Add route to Client routing table for the OpenVPN Server
push "route 10.8.0.1 255.255.255.255"
# Add route to Client routing table for the OpenVPN Subnet
push "route 10.8.0.0 255.255.255.0"
# your local subnet
push "route 192.168.1.45 255.255.255.0" # SWAP THE IP NUMBER WITH YOUR RASPBERRY PI IP ADDRESS
# Set primary domain name server address to the SOHO Router
# If your router does not do DNS, you can use Google DNS 8.8.8.8
push "dhcp-option DNS 192.168.1.1" # This should already match your router address and not need to be changed.
# Override the Client default gateway by using 0.0.0.0/1 and
# 128.0.0.0/1 rather than 0.0.0.0/0. This has the benefit of
# overriding but not wiping out the original default gateway.
push "redirect-gateway def1"
client-to-client
duplicate-cn
keepalive 10 120
tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0
cipher AES-128-CBC
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn-status.log 20
log /var/log/openvpn.log
verb 1

 

Otra cosa, tenemos que redirigir el tráfico de internet, ya que Raspbian por defecto no lo hace. Para ello editamos el siguiente fichero:

nano /etc/sysctl.conf

 

Buscamos la línea donde dice:

# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1

 

Y lo descomentamos:

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

 

Aplicamos los cambios con el siguiente comando:

sysctl -p

 

Ahora queda desbloquear OpenVPN en el firewall, y además hacer que se haga en cada reinicio, ya que las excepciones del cortafuegos no se quedan grabadas. Para ello creamos este pequeño script:

nano /etc/firewall-openvpn-rules.sh

 

Y dentro del fichero escribimos lo siguiente:

#!/bin/sh
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 192.168.1.45

 

Grabamos y salimos. Ahora toca darle permisos de ejecución a este fichero, y cambiarle el usuario a root:

chmod 700 /etc/firewall-openvpn-rules.sh 
chown root /etc/firewall-openvpn-rules.sh

 

En las versiones anteriores de Raspbian, bastaba con editar el fichero /etc/network/interfaces:

nano /etc/network/interfaces

 

buscar la línea:

iface eth0 inet manual

 

y debajo de ella, con un sangrado, añadir:

    pre-up /etc/firewall-openvpn-rules.sh

 

Pero si se tiene Raspbian Jessie o superior, hay que añadir además “auto eth0” en la línea anterior, de forma que finalmente debe quedar así:

auto eth0
iface eth0 inet manual
   pre-up /etc/firewall-openvpn-rules.sh

 

Con esto ya garantizamos que tras cada reinicio se abre el Firewall para OpenVPN. Así que reiniciamos la Raspberry Pi:

reboot

 

Configurando el cliente

Ya tenemos el servidor VPN en marcha. Ahora vamos a configurar los clientes.

Pero seguimos todavía en el servidor. Vamos a crear los ficheros de configuración que instalaremos en los clientes.

Creamos un fichero:

nano /etc/openvpn/easy-rsa/keys/Default.txt

Y copiamos lo siguiente:

client
dev tun
proto udp
remote TU-SERVIDOR-AQUI 1194
resolv-retry infinite
nobind
persist-key
persist-tun
mute-replay-warnings
ns-cert-type server
key-direction 1
cipher AES-128-CBC
comp-lzo
verb 1
mute 20 

Donde dice TU-SERVIDOR-AQUI pondremos la dirección pública de nuestro servidor. Puede ser una IP, o un nombre como mi.servidorVPN.com. Lo más probable es que aquí pongas una dirección de dominio dinámico gratuita como las que ofrece no-ip.com, que expliqué cómo se hace en otro post.

Ahora para generar los ficheros de configuración de cada cliente descargamos este pequeño script maravilloso aquí, y copiamos su contenido en un fichero en /etc/openvpn/easy-rsa/keys/MakeOVPN.sh (he corregido dos cosas menores):

#!/bin/bash 
 
# Default Variable Declarations 
DEFAULT="Default.txt" 
FILEEXT=".ovpn" 
CRT=".crt" 
KEY=".3des.key" 
CA="ca.crt" 
TA="ta.key" 
 
#Ask for a Client name 
echo "Please enter an existing Client Name:"
read NAME 
 
 
#1st Verify that client’s Public Key Exists 
if [ ! -f $NAME$CRT ]; then 
 echo "[ERROR]: Client Public Key Certificate not found: $NAME$CRT" 
 exit 
fi 
echo "Client’s cert found: $NAME$CR" 
 
 
#Then, verify that there is a private key for that client 
if [ ! -f $NAME$KEY ]; then 
 echo "[ERROR]: Client 3des Private Key not found: $NAME$KEY" 
 exit 
fi 
echo "Client’s Private Key found: $NAME$KEY"

#Confirm the CA public key exists 
if [ ! -f $CA ]; then 
 echo "[ERROR]: CA Public Key not found: $CA" 
 exit 
fi 
echo "CA public Key found: $CA" 

#Confirm the tls-auth ta key file exists 
if [ ! -f $TA ]; then 
 echo "[ERROR]: tls-auth Key not found: $TA" 
 exit 
fi 
echo "tls-auth Private Key found: $TA" 
 
#Ready to make a new .opvn file - Start by populating with the default file 
cat $DEFAULT > $NAME$FILEEXT 
 
#Now, append the CA Public Cert 
echo "" >> $NAME$FILEEXT 
cat $CA >> $NAME$FILEEXT 
echo "" >> $NAME$FILEEXT

#Next append the client Public Cert 
echo "" >> $NAME$FILEEXT 
cat $NAME$CRT | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' >> $NAME$FILEEXT 
echo "" >> $NAME$FILEEXT 
 
#Then, append the client Private Key 
echo "" >> $NAME$FILEEXT 
cat $NAME$KEY >> $NAME$FILEEXT 
echo "" >> $NAME$FILEEXT 
 
#Finally, append the TA Private Key 
echo "" >> $NAME$FILEEXT 
cat $TA >> $NAME$FILEEXT 
echo "" >> $NAME$FILEEXT 
 
echo "Done! $NAME$FILEEXT Successfully Created."

#Script written by Eric Jodoin
#No newline at end of file

 

Damos permiso de ejecución al script:

cd /etc/openvpn/easy-rsa/keys/
chmod 700 MakeOVPN.sh

 

Y ejecutamos el script:

./MakeOVPN.sh

 

Nos pide el nombre del cliente. Introduzco usuario1, trabaja un poco y crea el fichero usuario1.ovpn. Repito con el resto de usuarios.

De esta forma se me generan unos ficheros usuario1.ovpn, usuario2.ovpn, etc. que son los que cargaré a continuación en los clientes.

Basta con cargar el fichero .ovpn, introducir la contraseña, y listo.

Lo he probado de forma exitosa en:

iPhone, con OpenVPN.
Mac, con TunnelBlick
Windows, con OpenVPN Connect

Me consta que OpenVPN Connect también funciona en Android, pero no lo he probado.

Referencias

Raspberry Pi Powered OpenVPN – Server

44 pensamientos en “Crear un servidor VPN en una Raspberry Pi

  1. Muchas gracias por compartir toda esta información, muy bien explicada incluso para los que no tenemos mucha idea.
    Me ha funcionado salvo por un pequeño detalle en el script:
    He tenido que cambiar el operador > por el >, si no me daba error.

    Un saludo

  2. Hola, me podrías decir que versión de debian utilizas en este tutorial? Por cierto un increíble tutorial.

    • Muchas gracias; simplemente he recopilado y probado cosas que han hecho otros por internet. La distribución en la que instalé todo esto es en Raspbian Jessie.

  3. Muchas gracias por toda esta desinteresada explicación para los que no sabemos. He podido seguirlo hasta la generación del archivo ovpn mediante el script ya que me salta el siguiente error:
    ./MakeOVPN.sh: line 46: gt: command not found

    ¿Sabrías por que motivo puede suceder esto? No lo he hecho sobre Raspbian, sino sobre Xbian 1.0 RC 2

    Gracias

    • El error es mío. Al mostrar el contenido del fichero aparecía “>” en vez del símbolo “mayor que”, “>”. Ya lo he corregido; ahora debería funcionar.
      Un saludo.

  4. Hola! En primer lugar gracias por la información, es muy útil para todos los que “cacharreamos” con estas cosas.

    En segundo lugar, he configurado todo y conecta a la VPN sin problema. Sin embargo luego no tengo salida a Internet. ¿Alguna idea de por donde podría estar haciendo algo mal?

    Gracias!

    • Gracias, Héctor.
      Comprueba que has descomentado net.ipv4.ip_forward=1 en el archivo /etc/sysctl.conf, y que añadiste correctamente las reglas en el cortafuegos, y especialmente que se aplican esas reglas tras cada reinicio (en el post explico que depende de la versión de Raspbian que tengas)…
      A ver si con eso se resuelve.
      Un saludo,
      Carlos

    • Estoy en las mismas… no puedo hacer ping de una red a otra. He comprobado el enrutamiento:

      # Uncomment the next line to enable packet forwarding for IPv4
      net.ipv4.ip_forward=1

      Y las reglas de iptables:

      :~ $ sudo iptables -L
      Chain INPUT (policy ACCEPT)
      target prot opt source destination

      Chain FORWARD (policy ACCEPT)
      target prot opt source destination
      ACCEPT all — anywhere anywhere state RELATED,ESTABLISHED
      ACCEPT all — 10.8.0.0/24 anywhere
      ACCEPT all — anywhere anywhere state RELATED,ESTABLISHED
      ACCEPT all — anywhere anywhere

      Chain OUTPUT (policy ACCEPT)
      target prot opt source destination

      Y sigo sin poder salir a internet. ¿Sabes por dónde puedo seguir? Muchas gracias por adelantado y por tu blog, lo tengo como guía de cabecera.

  5. Hola, gracias por el tutorial.
    Hago todos los pasos correctamente, he revisado varias veces los archivos y no hay manera de que ningún cliente se conecte. Tampoco sé si funciona como toca el servidor. Tengo el puerto correctamente direccionado, además uso la raspberry como servidor web sin ningún problema. Alguna idea? :/

    Gracias

    • Hola, Jaume:
      ¿Puede ser que la red en la que estés, o tu ISP, tenga bloqueado el puerto 1194? Algunas empresas y redes WiFi públicas lo tienen así. En algún momento actualizaré el post para salvar este obstáculo…
      Carlos

      • Yo también tuve el mismo problema y revisando el log encontré el problema:

        “TLS Error: cannot locate HMAC in incoming packet”

        Se arregló comentando esta línea en el archivo server.conf

        # tls-auth /etc/openvpn/pki/ta.key

    • Copia el script MakeOVPN.sh desde github https://gist.github.com/laurenorsini/10013430, ya que aqui esta mal escrito. Acuerdate de comentar con # en vez de / la ultima linea ya que sino te dara error al ejecutar. y vuelve a generar los .ovpn

      Despues de 4 dias peleandome con openvpn para que funcionara con los DNS del pi-hole, este es mi server.conf

      mode server
      dev tun
      proto udp
      port 1194
      ca /etc/openvpn/easy-rsa/keys/ca.crt
      cert /etc/openvpn/easy-rsa/keys/rvpn.crt
      key /etc/openvpn/easy-rsa/keys/rvpn.key
      dh /etc/openvpn/easy-rsa/keys/dh2048.pem
      tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0
      key-direction 0
      user nobody
      group nogroup
      topology subnet
      server 10.8.0.0 255.255.255.0
      route 10.8.0.0 255.255.255.0
      push “route #.#.#.0 255.255.255.0” #Aqui va tu subnet ej. si tu ip es
      # 192.168.1.loquesea = 192.168.1.0
      push “dhcp-option DNS #.#.#.#” #ip de tu router
      push “redirect-gateway” #Opcional obliga a redirigir el 100% del trafico a # traves de tu raspberry
      keepalive 5 30
      sndbuf 0
      rcvbuf 0
      persist-tun
      persist-key
      comp-lzo #Debe figurar en Default.txt para generar los .ovpn
      client-to-client
      cipher AES-128-CBC #el chipher debe ser igual en Default.txt
      status /var/log/openvpn-status.log 20
      log /var/log/openvpn.log
      verb 3

  6. Hola,
    Despues de seguir tu tutorial openvpn cliente me da el siguiente error;
    Options error: Unrecognized option or missing parameter(s) in usuario1.ovpn:17: —BEGIN (2.3.12)
    Es como si el fichero ovpn no fuera correcto.
    Lo estoy probando desde windows 10.
    Saludos

  7. Lo he intentado dos o tres veces, he configurado todo tal y como está en el POST modificando IP’s y nada.. No me conecta, solo hay que meter en config el fichero .ovpn? O tengo que meter el CA y todo lo demás? Gracias.

    • Sólo es necesario en archivo .opvn
      En mi caso el problema era que openvpn en el PC se quedaba esperando respuesta del servidor.
      La solución es que no estaba arrancado el servidor. Una vez creado el server.conf y desbloqueado el firewall hay que arrancar el servicio.
      [root@servidorvpn]# openvpn –config /etc/openvpn/server.conf
      Para que sea permanente, y que tras reiniciar el servicio siga activo, he añadido esa línea en /etc/rc.local.
      [root@servidorvpn]# nano /etc/rc.local
      quedaría algo asi:

      #!/bin/sh -e
      #
      # rc.local
      #
      # This script is executed at the end of each multiuser runlevel.
      # Make sure that the script will “exit 0” on success or any other
      # value on error.
      #
      # In order to enable or disable this script just change the execution
      # bits.
      #
      # By default this script does nothing.
      openvpn –config /etc/openvpn/server.conf
      exit 0

  8. Esta aplicación de vpn, se puede obtener una ip estática para el cliente, esto debido que estoy usando webvpn de cisco, y como cliente un raspberry con openconect client pero no he podido encontrar la forma de poder obtener una ip estática en el raspberry, no se si en openvpn se puede modificar este parámetro.

  9. Hola Carlini,
    He tenido que cambiar export EASY_RSA=”/etc/openvpn/easy-rsa” por export EASY_RSA=/etc/openvpn/easy-rsa eliminando ” ” o de lo contrario me da errores al ejecutar los siguientes comandos:

    source ./vars
    ./clean-all
    ./build-ca

    Un saludo y gracias por el tuto!

  10. Hola Carlos!

    Fantástico tutorial. Todo me ha ido saliendo a la primera hasta que he intentado configurar openVPN en iOS 10.1.1. No sé porqué, a pesar de instalar los .crt, OpenVPN me dice que no tiene certificados prensentes. Por lo que no puedo conectarme. Lo he intentado generando el crt en formato p12, pero al instalarlo en iOS me pide la contraseña y me dice que es incorrecta (por testear he puesto en todos los sitios la misma para evitar confusión).

    He estado mirando por foros y no logro encontrar la solución.

    Se te ocurre algo?

    Muchísimas gracias!
    Iñaki

  11. Hola.
    Muchas gracias por el artículo…lo he podido seguir perfectamente a pesar de no estar muy familiarizado con estos temas. Tengo un problema de todas formas al lanzar la conexión. Por lo que veo en el log de la conexión, me salta este error:
    Options error: Unrecognized option or missing parameter(s) in usuario2.ovpn:17: —BEGIN (2.3.13)
    Use –help for more information.
    ¿Alguna idea de qué puede haberme fallado?
    Gracias adelantadas.
    Jorge

  12. Buenas, todo bien, explicado para tontos como yo pero me da un error al configurar los clientes “Client 3des Private Key not fount: usuario1.3des.key” y así con todos, sabrías decirme x q me falla si he seguido todos los pasos??, Gracias

    • Hola tocayo, eso sucede por que no estas en el directorio adecuado:
      desde la ruta donde te encuentras teclea:
      cd keys
      y te quedaras en:
      root@servervpn:/etc/openvpn/easy-rsa/keys#
      ahora ya puedes encriptar las llaves con des3

    • Hola,

      En lugar de:

      openssl rsa -in usuario1.key -des3 -out usuario1.3des.key

      Debería ser (hay que señalar que está en la carpeta keys/ o mejor aún /etc/openvpn/easy-rsa/keys/ ):

      openssl rsa -in keys/usuario1.key -des3 -out keys/usuario1.3des.key

  13. A mi me da el siguiente fallo cuando intento codificar los usuarios con des3
    Error opening Private Key usuario1.key
    3069527248:error:02001002:system library:fopen:No such file or directory:bss_file.c:398:fopen(‘usuario1.key’,’r’)
    3069527248:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:
    unable to load Private Key

    alguien sabe porque pasa esto? gracias!

  14. Buenos días,

    Muchas gracias por el manual, me ha sido de gran ayuda. Lo tengo funcionando desde hace varias semanas y funciona perfecto.

    Tengo que crear nuevos usuarios para acceder por VPN,

    ¿me podrías dar los pasos a seguir para añadir nuevos usuarios sin fastidiar los que ya hay configurados?

  15. Hola!

    Os dejo un par de puntualiaciones sobre esta maravillosa guia!

    El fichero conf sustituir esta linea:
    push “route 192.168.1.45 255.255.255.0” # SWAP THE IP NUMBER WITH YOUR RASPBERRY PI IP ADDRESS
    Por esta otra:
    push “route 192.168.1.45 255.255.255.255” # SWAP THE IP NUMBER WITH YOUR RASPBERRY PI IP ADDRESS

    Tambien os dejo una moficacion del script de creacion del fichero de configuracion del cliente, ya que las ultimas versiones de cliente necesitan que cada certificado esta identificado.

    Debeis cambiar este trozo de codigo

    #Ready to make a new .opvn file – Start by populating with the default file
    cat $DEFAULT > $NAME$FILEEXT

    #Now, append the CA Public Cert
    echo “” >> $NAME$FILEEXT
    echo “” >> $NAME$FILEEXT
    cat $CA >> $NAME$FILEEXT
    echo “” >> $NAME$FILEEXT
    echo “” >> $NAME$FILEEXT

    #Next append the client Public Cert
    echo “” >> $NAME$FILEEXT
    echo “” >> $NAME$FILEEXT
    cat $NAME$CRT | sed -ne ‘/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p’ >> $NAME$FILEEXT
    echo “” >> $NAME$FILEEXT
    echo “” >> $NAME$FILEEXT

    #Then, append the client Private Key
    echo “” >> $NAME$FILEEXT
    echo “” >> $NAME$FILEEXT
    cat $NAME$KEY >> $NAME$FILEEXT
    echo “” >> $NAME$FILEEXT
    echo “” >> $NAME$FILEEXT

    #Finally, append the TA Private Key
    echo “” >> $NAME$FILEEXT
    echo “” >> $NAME$FILEEXT
    cat $TA >> $NAME$FILEEXT
    echo “” >> $NAME$FILEEXT
    echo “” >> $NAME$FILEEXT

    echo “Done! $NAME$FILEEXT Successfully Created.”

  16. En mi conmentario anterior faltan caranteres, se haneliminado al publicar, seguramente porque son caracteres html.

    Es importante incluirnentre simbolos de mayor y menor que los campos
    ca
    /ca
    cert
    /cert
    key
    /key
    tls-auth
    /tls-auth
    Al principio y final de cada bloque cerrando cada uno con el caranter /

  17. Hola Carlos!!! Primero, muchas gracias por él tutoríal!!, lo he configurado un par de veces En un iPhone y siempre me dice el siguiente error:”OpenVPNerror: PolarSSL: ca certifícate is undefined” alguna idea de porque puede ser?? .
    Muchas gracias de antemano

    • Es justo por lo que te pongo en mis comentarios, debes indicar el inicio y final de cada bloque del certificado

      • Me dice exactamente los mismo en un Android.

        ¿A qué te refieres con “debes indicar el inicio y final de cada bloque del certificado”?

        Un saludo.

  18. También me aparece el error de Unrecognized option or missing parameter en la linea 17 del archivo .ovpn .
    Seguramente sea una error en el script de creación por la actualización del cliente de windows como dice Jesús en su comentario.

    No se si alguien puede poner el script completo de creación del .ovpn modificado en algún lugar que no modifique los signos como en pastebin.

  19. Hola Carlos al iniciar la raspberry me saltan estos dos errores. Yo he utilizado wlan0 pero todo eso ya lo he correjido :
    – Failed to start openvpn connection to server .
    -Failed to start LSB: start daemon at boot time.

  20. Muchas gracias por el tutorial. Me ha servido para “desengrasar” algunas cosas que estaban para mi muy oxidadas.
    Mo me funcionó a la primera. No me daba error en la instalación pero no funcionaba, solo me di cuenta que en android me daba error del certificado. Leyendo los comentarios, instalé de nuevo y seguía pasando lo mismo hasta que ley los comentarios y bajé el scrip MakeOVPN.sh del enlace de gitub, instalé de nuevo a partir de ese paso y generé los usuarios, los instalé en los programas que indicas tanto en android, windows 10, y en Mac OSX y funciona perfectamente. Por supuesto he abierto y configurado una cuenta en no-ip y he abierto de puerto UDP correspondiente en el router de fibra óptica.
    De nuevo mucha gracias por el tutorial.

  21. Para los que no les funcione en dispositivos móviles hay que hacer un paso mas, porque al crearse el archivo .ovpn no se añaden automáticamente las marcas , , , , , , y .las aplicaciones móviles no lo reconocen automáticamente y nunca llegan a conectar. Si tenéis este problema observad como debería ser un archivo .ovpn, editáis el vuestro y añadid las marcas.

  22. Una pregunta:
    Alguien me podría decir si se puede conectar desde China actualmente.
    Es que me va a hacer falta dentro de poco y he leido que puede haber problemas con OpenVPN.

  23. Hola, muy bueno el articulo pero tengo un problema cuando ejecuto el source ./vars:
    pi@raspberrypi:/etc/openvpn/easy-rsa $ source ./vars
    -bash: ”/etc/openvpn/easy-rsa”/whichopensslcnf: No such file or directory
    NOTE: If you run ./clean-all, I will be doing a rm -rf on ”/etc/openvpn/easy-rsa”/keys
    pi@raspberrypi:/etc/openvpn/easy-rsa $ ./clean-all
    mkdir: cannot create directory ‘”/etc/openvpn/easy-rsa”/keys’: No such file or directory
    pi@raspberrypi:/etc/openvpn/easy-rsa $ ./build-ca
    ./build-ca: 8: ./build-ca: ”/etc/openvpn/easy-rsa”/pkitool: not found
    pi@raspberrypi:/etc/openvpn/easy-rsa $

  24. Hola a todos, estoy siguiendo los pasos y cuando edito /etc/network/interaces yo no tengo la linea “iface eth0 inet manual” sino que tengo “iface eth0 inet manual static” seguida de la direccionIP, netmask, puerta de enlaice etc. ya que tengo una direccion estática en la Raspberry, que debería hacer?

Deja un comentario

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