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
- Documentación de OpenVPN en Ubuntu (en inglés)
- Guía de configuración de OpenVPN en OpenWrt (en inglés)
Leave a Comment