Instalando WireGuard + DuckDNS en RaspberryPi 3
En este artículo, se procederá a instalar y configurar un servicio DDNS (DNS Dinámico) para el cuál se utilizará DuckDNS y un servidor VPN de WireGuard en una Raspberry Pi 3.
¿Qué es DDNS?
La nomenclatura “dynamic DNS” (DynDNS) hace referencia a Dynamic Domain Name System (sistema dinámico de nombres de dominio), también conocido por su abreviatura DDNS y sirve de ayuda a la hora de reenviar las direcciones IP de tu red doméstica, que cambian constantemente, a un nombre de dominio fijo.
¿Qué es DuckDNS?
Duck DNS es un servicio gratuito que se encarga de dirigir direcciones IP a subdominios del tipo duckdns.org. La intención es disponer de nombres fácilmente recordables y tener un servicio DDNS con conexión externa.
¿Qué es Wireguard?
WireGuard es una red privada virtual (VPN) centrada en la seguridad y conocida por su simplicidad y facilidad de uso. Utiliza protocolos y algoritmos criptográficos probados para proteger los datos. Desarrollado originalmente para el kernel de Linux, ahora también se puede implementar en Windows, macOS, BSD, iOS y Android.
Introducción
El motivo de configurar el servicio DDNS es la de obtener una “dirección fija” a la que apuntar y el servicio de DuckDNS se encargará de redirigir todo el tráfico que le llegue hacia nuestra red (desde la que se esté ejecutando el cliente DDNS) y de esta manera despreocuparse de que cambie la ip pública de dicha red.
Por otra parte, para poder contar con acceso a la red interna que deseemos y poder ver y operar con los dispositivos conectados en dicha red, se instalará un servidor VPN de WireGuard para minimizar la superficie de ataque
de la red, ya que únicamente se necesitará tener expuesto a internet el puerto por el que WireGuard necesita quedar a la escucha y para poder conectarse un cliente a través de este, necesitará el archivo de configuración de cliente de WireGuard que a su vez debe encontrarse correctamente configurado en el servidor.
También podemos utilizar la VPN de WireGuard para mantener nuestras comunicaciones seguras
en caso de tener que conectarnos a alguna red Wifi “free” o ajena, sobre la que no sabemos nada sobre su seguridad (quien hay conectado, configuración del router, etc…) ya que estaremos conectados a través de un túnel cifrado hasta nuestra red de confianza, en la cual WireGuard se encargará de descifrar el tráfico, hacerlo llegar a internet y viceversa.
Instalación y configuración del servicio DDNS de DuckDNS
Accedemos a www.duckdns.org, en caso de no tener cuenta aún no importa, igualmente en la parte superior nos logueamos
con la opción que más nos guste (Twitter, Github, Redis o Google).
En la sección “domains” de la página, procedemos a crear un subdominio con el nombre que queramos y… esté disponible.
Si todo ha ido bien, podremos observar en la página un mensaje indicando que el dominio se agregó correctamente, y en la sección “domains” podremos observar el dominio creado con nuestra dirección IP pública.
Para proceder a instalar el servicio en nuestra RaspberryPi 3, en la página de DuckDNS, nos dirigimos al apartado “install” y en la parte inferior de la página, seleccionamos nuestro dominio.
Por último, en la sección “Operating System” seleccionaremos el Sistema Operativo para el cual queremos obtener los pasos a seguir para la instalación.
Marcamos la opción en “pi” y seguimos los pasos que nos indicará configuración:
Una vez finalizado los pasos indicados en la web oficial de DuckDNS, el dominio creado ya estará redirigiendo el tráfico a nuestra red y no importará que la IP de esta cambie.
Para comprobar que el DDNS funciona correctamente:
- Realizamos un “ping” desde nuestra terminal apuntando al dominio creado, el cual deberá responder con nuestra IP Pública.
- Para averiguar cuál es nuestra IP Pública, podemos dirigirnos a https://ifconfig.me donde nos mostrará nuestra IP Pública acompañada de más información sobre nuestra conexión y navegador.
- Si las IP’s de los dos pasos anteriores coinciden, significa que todo funciona correctamente y podemos proceder a la instalación de WireGuard.
Instalación de servidor VPN de WireGuard en RaspberryPi 3
Abrimos un terminal de la RaspberryPi, ya sea directamente en esta por SSH, o como queramos…
En primer lugar, actualizamos y upgradeamos la Raspberry:
sudo apt update
sudo apt upgrade
Una vez actualizada, procedemos a la instalación de los headers de la raspberry
sudo apt-get install raspberrypi-kernel-headers
Dado que el paquete de WireGuard se encuentra en los repositorios de la Raspberry, procederemos directamente a su instalación junto a una herramienta llamada ‘qrencode’, la cual utilizaremos para exportar la configuración de los clientes de la VPN a través de un QR.
sudo apt install wireguard wireguard-tools qrencode
Cuando finalice la instalación de los paquetes, podemos comprobar si WireGuard se instaló correctamente ejecutando:
wg
En el caso de no obtener salida, comprobamos si el módulo se ha cargado ejecutando:
sudo modprobe wireguard
Procedemos a habilitar el PortForwarding (reenvío de puertos).
Para esto, abrimos para editar el fichero de configuración /etc/sysctl.conf
.
nano /etc/sysctl.conf
Descomentamos la línea donde dice "net.ipv4.ip_forward=1"
Guardamos el archivo y cerramos.
Ahora en este punto, debemos reiniciar la RaspberriPi
sudo reboot
Cuando la RaspberryPi inicie, Tenemos que comprobar que el IP Forwarding esté activo.
Podemos utilizar el siguiente comando para consultarlo:
sudo sysctl net.ipv4.ip_forward
La respuesta que debe retornar es 1
.
* En caso de no retornar un 1
, el IP Forwarding se encontrará inactivo y NO SE DEBE CONTINUAR con el siguiente paso hasta activarlo.
Generando configuraciones para WireGuard - Servidor y Clientes
Utilizaremos una Herramienta Online que proporciona WireGuard para generar los archivos de configuración
(Recomendable marcar la PresharedKey
).
Para esto, nos dirigimos a https://www.wireguardconfig.com donde estableceremos los parámetros para autogenerar los archivos de configuración del Servidor y Clientes de WireGuard.
Debemos establecer los siguientes parámetros:
- Puerto de escucha.
- Número de Clientes a generar.
- Endpoint (Aquí pondremos el nombre del Dominio creado en DuckDNS y el puerto de escucha).
- Marcamos la casilla de ‘Pre-Shared Keys’.
- Por último, Generamos la configuración clicando en ‘Generate Config’.
Una vez hayamos ‘generado la configuración’,
descargamos el ZIP en la Raspberry,
y extraemos los archivos contenidos en el ZIP en la carpeta /etc/wireguard
Iniciando Interfaz de Red y asignando permisos
En la RaspberryPi, vamos a iniciar nuestra nueva interfaz de red del servidor con este comando:
sudo wg-quick up wg0
Nota: Si queremos parar la interfaz en algún momento podemos ejecutar:
sudo wg-quick down wg0
Para ver su estado ejecutamos lo siguiente:
sudo wg
Si todo está bien y queremos hacer que WireGuard se ejecute automáticamente al iniciar la Raspberry, podemos habilitarlo con este comando:
sudo su
systemctl enable wg-quick@wg0
Procedemos a cambiar los permisos y propietarios de las carpetas y archivos de WireGuard.
Para esta operación, nos estableceremos como usuario “root”:
sudo su
chown -R root:root /etc/wireguard/
chmod -R og-rwx /etc/wireguard/*
Por último y para asegurar de permitir el acceso a los clientes de la VPN, ejecutamos la siguiente regla de iptables:
iptables -I INPUT 1 -i wg0 -j ACCEPT
Nuestro Servidor VPN de WireGuard ya estará listo para recibir clientes!!
* No olvidar abrir el puerto correspondiente a este dispositivo en el router.
Conectar clientes a la VPN
Para conectar cualquier cliente (Móvil, PC, etc..) a nuestra VPN, tenemos que tener instalado un cliente de WireGuard en el dispositivo a utilizar.
Para conectarnos a esta debemos importar el archivo ".conf" del cliente correspondiente
en el cliente del dispositivo que queramos conectar a la VPN, configurarlo a mano, o también haciendo uso de la herramienta “qrencode”, la cual nos proporcionará un QR que podemos escanear directamente desde nuestra aplicación cliente de wireguard y directamente se conectará.
Ejemplos para listar el archivo “.conf” del “cliente1”:
- Listar la configuración del “cliente1” en QR:
qrencode -t ANSIUTF8 < /etc/wireguard/client1.conf
- Listar la configuración del “cliente1” por consola:
cat /etc/wireguard/client1.conf
Páginas de Interés:
- Página oficial de WireGuard —> https://www.wireguard.com/quickstart/
- Página oficial de DuckDNS —> https://www.duckdns.org/