?>/script>'; } ?> [Mini guía] fácil para conectar openwrt a un servidor vpn externo Widgets Magazine

Autor Tema: [Mini guía] fácil para conectar openwrt a un servidor vpn externo  (Leído 6534 veces)

0 Usuarios y 1 Visitante están viendo este tema.

peperfus

  • Visitante
TUTORIAL de novato a novato  ;D

Objetivo: Conectar nuestro router openwrt en modo cliente a un servidor externo de una empresa de servicios vpn en Internet (normalmente de pago, aunque también los hay gratuitos por ahí (por ejemplo vpnbook)) y conseguir que los cacharros conectados a él naveguen a través de vpn de forma transparente.

Pongo la guía de cómo lo he conseguido; con la configuración manual mínima (usando el archivo de config proporcionado por el servidor). Esta guía usa tanto ssh como luci.

Desde SSH: (O bien desde luci, system, software . . .)
1) Instalar openvpn-openssl:
Código: [Seleccionar]
opkg update
opkg install openvpn-openssl

2) Solicitar y/o descargar los archivos de autenticación de la empresa del servicio vpn. Normalmente suelen ser:
  • El ca.crt (Autoridad Certificadora)
  • La key (clave pública del servidor vpn)
  • Y (en su caso), una key (clave privada) nuestra que también nos dará la empresa vpn
Yo en mi caso uso los archivos "ca.crt", "Wdc.key" y "userpass.txt" donde van mi login y password en texto plano, ya que en vez de identificarme por archivo key, lo hago con user y password; y también el archivo de configuración de conexión, donde están los parámetros de configuración que necesita nuestro cliente openvpn para conectarse a su servidor: por ejemplo: "Spain-tcp.ovpn". Pues bien:
Copiar dichos archivos de autenticación y configuración proporcionados por la empresa del vpn a /etc/openvpn. Esto se puede hacer fácilmente usando por ejemplo winscp desde windows o bien con el comando scp desde linux.

3) Modificar el archivo de configuración .ovpn (si es necesario) para pequeños ajustes. Yo, por ejemplo, tuve que indicarle el nombre del archivo de user y password. Además, también le puse verb 3 y log /tmp/vpn.log.
Mi archivo .ovpn:
Código: [Seleccionar]
client
dev tun
proto tcp
remote <servidorvpn> <puerto> <-- aquí va el servidor vpn al que conectaremos
persist-key
persist-tun
ca ca.crt <-- archivo ca
tls-auth Wdc.key 1 <-- archivo key (nos los da la empresa del servicio vpn)
cipher AES-256-CBC
comp-lzo
verb 3 <-- indica el nivel de log.
log /tmp/vpn.log <-- archivo donde guardamos el log, para comprobar estado de conexión o ver si hay algún problema
mute 20
route-method exe
route-delay 2
route 0.0.0.0 0.0.0.0
float
auth-user-pass userpass.txt <-- Esto lo añadí. Depende del tipo de autenticación, si usas user/password o archivo key
auth-retry interact
ifconfig-nowarn

¡¡Paciencia!!. NO conectar todavía.

Ahora nos vamos a LUCI para configurar el firewall de la vpn. Esto es MUY IMPORTANTE, para evitar ataques desde la vpn. Copio y pego un cacho de otro tutorial que me ayudó bastante, aunque está en inglés pero se entiende bien:

OJO:
Asegurarse de que la interfaz (el "dev") configurado en el firewall sea EXACTAMENTE EL MISMO que el que usa el archivo .ovpn para conectar. Si no es el mismo, el firewall no tendrá efecto y estaremos expuestos a ataques de seguridad...

4) Go to Network → Interfaces, and click Add new interface…
     Enter the following data:

Name of the new interface: VPN
Protocol of the new interface: Unmanaged
Cover the following interface: Custom Interface: tun0

and click Submit.

Navigate to the Advanced Settings tab. Enable the checkbox for Bring up on boot, and disable it for Use built-in IPv6-management.

Click Save.

Navigate to the Firewall Settings tab.

In the Create / Assign firewall-zone - unspecified -or- create: field, type the zone name – VPN_FW.

Click Save & Apply.

Go to Network → Firewall, and click Edit to the right of VPN_FW.

In the General Settings tab, select the following settings:

Input: reject
Output: accept
Forward: reject
Masquerading – checked
MSS clamping – checked
Covered networks – checked VPN

In the Inter-Zone Forwarding section, set the checkbox for Allow forward from source zones: lan.

Click Save & Apply.

OJO, repito: Fijarse bien en que el dev de conexión (tun) debe coincidir con el interfaz del firewall. Si el archivo .ovpn especifica otro tun (por ejemplo tun3), modificarlo a tun0 (en el archivo) para que use el del firewall, de lo contrario, estaremos desprotegidos.

Ahora volvemos al SSH, vamos a hacer unos scripts para conectar, desconectar y ver el estado (log):
5) Todos ellos, ponerlos en el directorio /root/vpn (o donde queráis...).
Script conectar.sh. Admite un parámetro que sería el nombre del archivo .ovpn. Sin parámetros, muestra lista de archivos de conexión. Esto viene muy bien para usarlo con la extensión de luci "luci-app-commands"
Código: [Seleccionar]
if [ $# -ne 0 ]; then
  # Por si acaso se nos ha olvidado desconectar una conexion previa:
  pkill -SIGTERM -f 'openvpn'
  sleep 3
  touch  /tmp/vpn.log
  openvpn --cd /etc/openvpn --daemon --config /etc/openvpn/$1
else
  echo Requiere archivo de config .ovpn
  ls /etc/openvpn
fi
Script desconectar.sh:
Código: [Seleccionar]
# La opcion -c muestra el num de procesos matados con ese nombre. No deberia ser superior a 1.
pkill -SIGTERM -f 'openvpn' -c
Nota: El comando pkill no viene de serie. Hay que instalarlo con opkg install procps-ng-pkill (ssh), o bien desde luci (System --> Software ....)
Script estado.sh:
Código: [Seleccionar]
if [ -f /tmp/vpn.log ]; then
  cat /tmp/vpn.log
fi

Una vez que tenemos hecho esto, queda probarlo.
Damos permisos de ejecución a los scripts:
Código: [Seleccionar]
chmod 740 *.shY ejecutar:
Código: [Seleccionar]
./conectar.sh <archivo.ovpn>Esperar 10 segundos y comprobar el log:
Código: [Seleccionar]
./estado.sh
Configuración ahora de un cacharro: Ponerle la ip de la puerta de enlace, en vez del router principal de casa, la del router openwrt. Y la DNS también, al mismo router openwrt que se conecta a vpn, o bien dejarlas estáticas a algún buen servidor dns conocido.
Y con eso ya debería ser suficiente. Por lo menos a mí me funciona así.

Como comprobar si estamos conectados...
3 formas:
  • Ejecutando el comando estado.sh: Si pone "Initialization Sequence Completed", lo estamos.
  • Desde luci, entrar en Network, Interfaces. Si los numeritos del tráfico de la interfaz vpn se mueven... es por algo
  • Desde un navegador web conectado al router (como gateway), entrar en showip.net

Consideraciones importantes de seguridad:
  • No olvidar configurar el firewall, además de comprobar y asegurarse de que la interfaz (device) usada por la vpn (normalmente tun, tun0, tun1, tun2...) debe ser la misma que la configurada en el firewall.
  • Asignar a la instancia de dropbear (el servidor ssh) de openwrt que sólo escuche por la interfaz lan. Esto se hace en luci --> System --> Administration.
  • Asignar la interfaz de escucha del servidor de luci, cambiarla de 0.0.0.0 a la ip de la interfaz lan, editando el archivo /etc/config/uhttpd, tal como explica en https://wiki.openwrt.org/doc/uci/uhttpd, sección "Securing uHTTPd"
  • Asignar DNS estáticas en los cacharros (hosts, clientes, o como queráis llamarlos) conectados a la vpn. Por ejemplo, yo suelo usar las de OpenDNS: 208.67.222.222 y 208.67.220.220

Otra cosa chula que se puede hacer es configurar algún led de status libre del router para que se encienda y se apague según conectamos y desconectamos a la vpn. Esto se puede hacer desde luci, en System -> LED Configuration. (Hay que estar conectado a la vpn para que nos deje seleccionar tun0) Mola :).

Bueno, un saludo y espero que esto le sirva a alguien tanto como me ha servido a mí, o al menos ayude en algo.

PD: Si alguien que entienda más y mejor ve algún fallo, etc.... comentar.

PD: Como curiosidad extraña, como efecto secundario, después de desconectar de la vpn, se me inutilizan los puertos 1 y 2 del switch. Ni idea del motivo. No queda más que reiniciar el router para arreglarlo. ¿Alguien más ha tenido este efecto secundario?

Nota: Este howto ha sido probado con éxito en LEDE 17.
En Chaos Calmer (15), hay ligeras variaciones, por ejemplo en el comando pkill (instalación y uso)

Script que puede ser de utilidad para agilizar la adecuación de muchos archivos .ovpn (muchos países, por ejemplo):
Código: [Seleccionar]
#!/bin/sh

# Eliminar el maldito ^M de fin de linea:
sed -i 's/\r//g' ./*
# Anyadir log:
sed -i '1ilog /tmp/vpn.log' ./*.ovpn
# Y las sustituciones:
sed -i -- 's/verb 1/verb 3/g' ./*.ovpn
sed -i -- 's/dev tun/dev tun0/g' ./*.ovpn
sed -i -- 's/auth-user-pass/auth-user-pass userpass.txt/g' ./*.ovpn

En construcción...
« Última modificación: 05-02-2018, 00:31 (Lunes) por peperfus »

Desconectado drvalium

  • *******
  • Mensajes: 17370
  • Misántropo
Re: Mini guía fácil para conectar openwrt a un servidor vpn de pago.
« Respuesta #1 en: 21-03-2017, 12:23 (Martes) »
hi

Gracias por compartir la solución ;)

peperfus

  • Visitante
Re: Mini guía fácil para conectar openwrt a un servidor vpn externo.
« Respuesta #2 en: 21-03-2017, 13:08 (Martes) »
Un placer

A ver si alguien más lo prueba y puede comprobar que le funciona ok también.

Desconectado jar229

  • Moderador
  • *
  • Mensajes: 4607
Re: [Mini guía] fácil para conectar openwrt a un servidor vpn externo.
« Respuesta #3 en: 25-03-2017, 23:41 (Sábado) »
Interesante  >:( >:(

Le pongo 'chicheta'  ;)

peperfus

  • Visitante
Re: [Mini guía] fácil para conectar openwrt a un servidor vpn externo
« Respuesta #4 en: 07-02-2018, 00:18 (Miércoles) »
Aquí pongo un ZIP con todos los archivos de configuración que uso para conectarme a mi cuenta de PureVPN.

Por si alguien los quiere utilizar para referencia, o para ver cómo se hace tal u otra cosa.
Evidementemente, falta el usuario y contraseña, que deben ir en el archivo userpass.txt

https://mega.nz/#!WhwwDZjQ!gUOdscE1p7e3lwodMSOewFE367xlT7iu8ZRqoOMtJmM
« Última modificación: 07-02-2018, 00:21 (Miércoles) por peperfus »