Configurar OpenVPN en OpenWrt


Como el router de la casa es un dispositivo que está encendido 24×7,  esto lo hace un lugar idóneo para configurar un servidor de VPN. En mi caso tengo instalado OpenWrt en mi router TP-LINK TL-WR1043ND (para instalarlo puedes consultar el artículo de Instalación de OpenWrt en TP-LINK TL-WR1043ND). Este el artículo está redactado de forma general y describe cómo configurar OpenVPN en OpenWrt para cualquier modelo de router que tengas.

Instalación de OpenVPN en OpenWrt

En el router solo instalaremos el paquete de OpenVPN:

opkg install openvpn

Certificados (en el PC)

Los certificados del cliente y el servidor lo realizaremos en un PC con Linux, más en concreto con Debian. La idea de esto es evitar instalar software en el router ya que ocupa espacio en la limitada rom. Para obtener lo necesario instalamos el paquete openvpn de los repositorios:

aptitude install openvpn
  • Crear el directorio de trabajo y los archivo base a usar:
mkdir /etc/openvpn/easy-rsa/
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
  • Editar  el archivo /etc/openvpn/easy-rsa/vars, el cual permitirá crear un certificado único usando los valores proporcionados:
export KEY_COUNTRY="VE" 
export KEY_PROVINCE="DC" 
export KEY_CITY="Caracas" 
export KEY_ORG="Mi organización" 
export KEY_EMAIL="micorre@dominio.org"
  • Ir a el directorio de trabajo y cargar el archivo que editamos:
cd /etc/openvpn/easy-rsa/
source vars

Ahora pasamos a crear los certificados del servidor y los clientes.

Certificados del servidor

Para crear los certificados del servidor se debe realizar los siguientes pasos:

./clean-all
./build-dh
./pkitool --initca
./pkitool --server server
cd keys
openvpn --genkey --secret ta.key

Certificados de los clientes

Para generar el certificad odel cliente se debe usar basta con hacer:

cd /etc/openvpn/easy-rsa/
source vars
./pkitool hostname

Donde hostname es el nombre de la máquina donde se instalará el certificado y las llaves (componente aleatorio).

Configuración de la VPN

Ahora veremos cómo configurar la VPN en tanto en el servidor como en los clientes.

Configuración del servidor (en el router)

  • Copiar los certificados generados para el servidor en el router:
scp server.crt server.key ca.crt dh1024.pem ta.key root@192.168.1.1:/etc/openvpn/

Donde 192.168.1.1 es la dirección IP del router de este ejemplo.

  • Aunque tengamos creado un archivo de configuración de forma similar en otro servidor OpenVPN, es mejor seguir el formato propuesto por la gente de OpenWrt y adaptarlo a nuestras necesidades. En ese sentido se debe editar el archivo /etc/config/openvpn con los siguientes valores (por razones de espacio solo coloco las líneas no comentadas).
config openvpn sample_server
    option enable 1
    option port 1194
    option proto udp
    option dev tun
    option ca /etc/openvpn/ca.crt
    option cert /etc/openvpn/server.crt
    option key /etc/openvpn/server.key
    option dh /etc/openvpn/dh1024.pem
    option server "10.8.0.0 255.255.255.0"
    option ifconfig_pool_persist /tmp/ipp.txt
    option client_to_client 1
    option keepalive "10 120"
    option tls_auth "/etc/openvpn/ta.key 0"
    option comp_lzo 1
    option persist_key 1
    option persist_tun 1
    option status /tmp/openvpn-status.log
    option verb 3

Configuración de los clientes (en los PCs)

  • Copiar los certificados y llaves generados para cada cliente, por ejemplo la máquina hostname, como se explica a continuación:
/etc/openvpn/easy-rsa/keys/ca.crt
/etc/openvpn/easy-rsa/keys/hostname.crt
/etc/openvpn/easy-rsa/keys/hostname.key
/etc/openvpn/easy-rsa/keys/ta.key
  • Si no se ha instalado OpenVPN en los clientes se debe proceder a hacerlo:
aptitude install openvpn
  • Copiar el archivo ejemplo de configuración del cliente:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/
  • Editar el archivo copiado con los siguientes valores:
client 
dev tun 
proto udp 
remote 192.168.1.30 1194
resolv-retry infinite 
nobind 
persist-key 
persist-tun 
ca /mnt/datos/OpenVpn/easy-rsa/keys/ca.crt 
cert /mnt/datos/OpenVpn/easy-rsa/keys/hostname.crt 
key /mnt/datos/OpenVpn/easy-rsa/keys/hostname.key 
ns-cert-type server 
tls-auth /mnt/datos/OpenVpn/easy-rsa/keys/ta.key 1 
comp-lzo 
verb 3

En la directiva remote se usó una dirección IP fija, pero puedes configurar un nombre de dominio dinámico en dyndns o no-ip y colocar el dominio en vez de una dirección dinámica o privada.

Habilitar el servicio

Ahora tanto del lado del servidor (OpenWrt) como de los clientes (PCs) se debe habilitar el servicio OpenVPN. Para cada caso se tiene:

Habilitar el servicio en el servidor (en el router)

Ejecutar lo siguiente en OpenWrt:

/etc/init.d/openvpn enable
/etc/init.d/openvpn start

Habilitar el servicio en los clientes (en los PCs)

Ahora se debe habilitar el servicio OpenVPN en los clientes. En general dependerá de la distribución que se tenga, pero para habilitar el servicio en Debian puede hacerse:

update-rc.d openvpn defaults
/etc/init.d/openvpn start

Luego de esto el servidor una interfaz tun con la dirección 10.8.01, y los clientes otra interfaz con alguna dirección como la 10.8.0.x.

Referencias


,

  1. #1 by Luis Gallardo on 12/07/2014 - 10:29

    @Javier Mira los procesos. Deberías tener uno que diga dns. Saludos!

  2. #2 by Javier on 12/07/2014 - 6:25

    Hola Luis. Enhorabuena por el articulo. Yo tambien estoy montando vpn pero en mi caso en el pc.

    Tengo configurado en openwrt el servicio dns, pero realmente no se si el script se actualiza… y funciona..

    Estando en luci ¿que tengo que hacer o donde he de mirar para asegurarme de ello? Se que existe el comando grep pero no se como abrir una consola o terminal..

    Gracias

  3. #3 by Luis Gallardo on 29/04/2014 - 2:06

    @Fabian siempre vas a necesitar el plan de datos para usar Internet, ya que la VPN sale por Intranet. La diferencia es que va cifrada. Ahora, si tu versión de Android no soporta VPN, puedes buscar aplicaciones como OpenVPN Connect.

    Saludos!

  4. #4 by Fabian on 29/04/2014 - 12:38

    Buenas tardes, necesito configurar open vpn en mi androi que se conecta a mi servidor vpn no se como configuraralo mediante el archivo .ovpn necesito esa configuración no se como hacerla, que por medio de la red 3g se conecte sin necesidad de pagar plan de datos y compartir el Internet de mi casa a las conexiones entrantes, yo me puedo conectar a mi vpn por la opción de android pero que se conecte sin saldo seria de mucha ayuda si uested me puede colaborar gracias.

  5. #5 by Luis Gallardo on 16/04/2013 - 9:19

    @Boom you can use DynDns, because it will solve to an IP address. You only need to have acess to port 1194. Best regards!

  6. #6 by Boon on 16/04/2013 - 1:31

    Thank you for the wonderful guide on OpenVPN with OpenWrt. Appreciate if you can help me with this.

    1. To use OpenVPN do you need Static IP from ISP?
    2. If ISP cannot provide Static IP, is it okay to use DynDNS?

  7. #7 by Luis Gallardo on 02/08/2012 - 2:01

    @ali just follow the article as explained. Cheers!

  8. #8 by ali on 02/08/2012 - 3:26

    Hi i am using overplayvpn service to bypass my ISP with DD-wrt Router i found it not stable how can i intstall openvpn on my router using openwrt firmware and connect to any von service provider if you know please help

  9. #9 by Luis Gallardo on 01/10/2011 - 9:17

    @Open you are welcome. Cheers!

  10. #10 by Open VPN on 01/10/2011 - 7:24

    Thanks for this wonderful post. Admiring the time and effort you put into your blog and detailed information you offer.

(No será publicado)