El teletrabajo y las necesidades de conexión remota aumentan. Veremos como configurar una VPN con Wireguard. Explicaremos brevemente qué es una VPN. Configuraremos Wireguard sin necesidad de usar scripts como pivpn. Vamos a configurar Wireguard en Windows, Linux, macOS, Android e IOS. Ya seas particular, profesional de la ciberseguridad o una empresa, este tutorial puede ser de tu interés. Intentaremos explicar como implementar el servicio con el menor número de detalles técnicos posible. Os adelantamos que va a ser más rápido y sencillo que por ejemplo con OpenVPN. Por último añadimos conclusiones además de la solución a problemas habituales. Actualmente es una guía para configurar el Servidor y los clientes con cualquier sistema operativo.
¿Qué es una VPN?
Una red privada virtual (RPV) (en inglés, Virtual Private Network, VPN) es una tecnología de red de ordenadores que permite una extensión segura de la red de área local (LAN) sobre una red pública o no controlada como Internet. Permite que el ordenador en la red envíe y reciba datos sobre redes compartidas o públicas como si fuera una red privada, con toda la funcionalidad, seguridad y políticas de gestión de una red privada. Esto se realiza estableciendo una conexión virtual punto a punto mediante el uso de conexiones dedicadas, cifrado o la combinación de ambos métodos.
¿Para que sirve una VPN?
Ejemplos comunes son la posibilidad de conectar dos o más sucursales de una empresa utilizando como vínculo Internet, permitir a los miembros del equipo de soporte técnico la conexión desde su casa al centro de cómputo o bien que un usuario pueda acceder a su equipo doméstico desde un sitio remoto, como por ejemplo un hotel. Todo ello utilizando la infraestructura de Internet.
La conexión VPN a través de Internet es técnicamente una unión wide area network (WAN) entre los sitios, pero al usuario le parece como si fuera un enlace privado: de allí la designación virtual private network.
¿Qué es Wireguard?
WireGuard es una VPN extremadamente simple pero rápida y moderna que utiliza criptografía de última generación. Su objetivo es ser más rápida, más simple, más ágil y más útil que IPsec. Tiene la intención de tener un rendimiento considerablemente mayor que OpenVPN. WireGuard está diseñado como una VPN de propósito general para ejecutarse en interfaces integradas y supercomputadoras por igual, aptas para muchas circunstancias diferentes. Lanzado inicialmente para el kernel de Linux, ahora es multiplataforma (Windows, macOS, BSD, iOS, Android) y se puede implementar ampliamente. Actualmente se encuentra en un gran desarrollo, pero ya podría considerarse la solución VPN más segura, fácil de usar y más simple de la industria.
Su configuración, si la comparamos con otros productos similares, es realmente simple, similar a lo que sería configurar SSH. La conexión se establece mediante un intercambio de llaves públicas entre el servidor y el cliente. Solo un cliente que tenga su clave pública en el archivo de configuración del servidor puede conectarse.
WireGuard se encarga de configurar las interfaces de red, como por ejemplo wg0 o wg1, que se comportan de manera similar a la interfaz más típica eth0. Esto hace posible configurar y administrar interfaces WireGuard utilizando herramientas comunes como ifconfig
e ip
.
Configurar WireGuard con GUI
Características
- Todo en uno: WireGuard + Web UI
- Fácil instalación, uso sencillo
- Enumere, cree, elimine, habilite y deshabilite clientes
- Muestra el código QR de un cliente
- Descarga el archivo de configuración de un cliente
- Estadísticas para qué clientes están conectados
- Soporte Gravatar
Descargar WireGuard GUI
Configurar una VPN con Wireguard
Partimos de la base que tenéis un servidor (ya sea VPS, Raspberry Pi, etc) en el que vamos a realizar la instalación de Wireguard. Este servidor contará con una distribución basada en Debian y es el que vamos a utilizar para configurar una VPN con Wireguard.
Desde el kernel 5.4 Wireguard se encuentra en los repositorios de Linux en su versión estable.
Concretamente en la versión 20.04 de Ubuntu ya disponemos de este
kernel, de todas maneras la podemos instalar en su versión inestable en
casi cualquier distribución basada en Debian.
Instalando Wireguard en el servidor
apt install wireguard
A continuación, habilitamos los repositorios EPEL y PowerTools:
sudo dnf install epel-release
sudo dnf install dnf-plugins-core
sudo dnf config-manager --set-enabled powertools
Para a continuación habilitar el repositorio de Wireguard:
sudo dnf copr enable jdoss/wireguard
sudo dnf install wireguard-dkms wireguard-tools
Configurando la interfaz del servidor
Ya con Wireguard instalado procederemos a preparar la interfaz. Para ello utilizando el comando cd nos moveremos a la siguiente ruta:
cd /etc/wireguard/
umask 077
wg genkey | tee servidor_private.key | wg pubkey > servidor_public.key
chmod 600 -R ../wireguard/
touch wg0.conf
cat servidor_private.key >> wg0.conf
Editando el archivo wg0.conf
nano wg0.conf
[Interface]Address = 10.0.0.1PrivateKey = Aquí va vuestra clave privadaListenPort = 51820PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEPostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
Explicación paso a paso del apartado [Interface]
- “Address” es la dirección en la VPN, le podéis dar la que queráis siempre y cuando no esté ocupada. Esta dirección es la que crea la red VPN, os sirve la que yo tengo perfectamente. Cada cliente deberá tener una distinta es decir, si el servidor es la 10.0.0.1 el cliente será la 10.0.0.2.
- “PrivateKey” es vuestra clave privada, recordar que estaba copiada y pegada previamente.
- “ListenPort” es el puerto donde va a trabajar Wireguard. Importante, por defecto 51820 UDP es el puerto en el que trabaja esta VPN, pero puede ser cualquier otro. Deberéis abrirlo en vuestro módem para que el servicio pueda funcionar.
- “PostUp y PostDown” son las reglas del firewall. Sólo las necesitáis si tenéis reglas Iptables (lo lógico es que sí). Podéis copiar y pegar éstas pero deberéis conocer la interfaz, es decir la mía es eth0 pero la vuestra puede tener otro nombre. Lo podéis consultar de manera sencilla desde vuestra terminal con el comando ifconfig.
Con nuestro archivo ya editado con nano, presionamos Ctrl O para guardarlo y Ctrl X para cerrarlo. Vamos a activar Wireguard para que inicie con el sistema:
Ctrl X para cerrarlo. Vamos a activar Wireguard para que inicie con el sistema:
systemctl enable wg-quick@wg0
Arrancamos el servicio, comprobamos que esté activo y que se ha creado la interfaz (primero una orden y luego la otra):
systemctl start wg-quick@wg0
systemctl status wg-quick@wg0
Apunte importante sobre Forwarding.
Cuidado con esto porque nos puede robar tiempo. Necesitamos tener habilitado el forwarding:
sysctl -w net.ipv4.ip_forward=1
En caso de utilizar el gestor de cortafuegos UFW habilitamos los puertos de esta manera:
ufw allow 22/tcp
ufw allow 51820/udp
ufw enable
Este apunte es importante para poder tener salida a internet. Si no fuera así una vez montado el servicio, conviene revisar la ruta /etc/sysctl.d y el archivo que se llama 99-sysctl.conf. Lo abriremos con nano y buscaremos las siguientes líneas:
# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1
Observar que en inglés pone “Elimine el comentario de la siguiente línea para habilitar el reenvío de paquetes para IPv4“. Simplemente borrarremos el # de la línea que pone net.ipv4.ip_forward=1 guardamos con Ctrl O y salimos. Ya deberíamos tener salida a internet.
Configurar cliente Wireguard en Windows
Wireguard es multiplataforma. Funciona en Linux, Windows, MacOS, Android e IOS. Os voy a enseñar como configurar todos los dispositivos como clientes. Veamos como configuramos un cliente Wireguard en Windows 10.
Desde nuestro PC Windows, nos vamos a la web de Wireguard y descargamos el programa para Windows. Lo instalamos y le damos permisos de administrador. A continuación en Add Tunnel presionamos sobre Add empty tunnel y rellenamos los datos tal y como salen en la imágenes. Las claves pública y privada ya nos las autogenera el propio programa.
- Hacemos click e “Add Tunnel” y seguidamente “Add empty tunnel”
- Rellenaremos los datos como en la imagen. Importante las claves pública y privada las autogenera el programa.
Configurando el servidor para añadir el cliente Windows.
Nuevamente dentro de nuestro servidor Linux y en la ruta /etc/wireguard/ vamos a modificar el archivo wg0.conf. Lo haremos así:
nano wg0.conf
Añadimos debajo de Interface el apartado Peer y queda de esta manera:
[Interface]
Address = 10.0.0.1
PrivateKey = Aquí va vuestra clave privada
ListenPort = 51820
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
Publickey = LA CLAVE PÚBLICA QUE GENERÓ TU CLIENTE WINDOWS
AllowedIPs =10.0.0.2/32
PersistentKeepAlive = 25
Hemos añadido el peer (nuestro cliente) con su clave pública generada previamente en el cliente windows (recordar que nos la generaba automáticamente cuando añadiamos el túnel). Tenemos también la IP 10.0.0.2 que corresponde con el cliente. Por último la línea PersistentKeepAlive = 25, es para que envíe un paquete cada 25 segundos, que es lo que recomiendan desde Wireguard.
Reiniciamos el servicio y comprobamos que se ha creado el cliente:
systemctl restart wg-quick@wg0
Una vez en el cliente Windows, le daremos al botón “Activate” y ya estaría listo.
Configurar una VPN con Wireguard en IOS y Android
Wireguard puede tener como clientes smartphones y teléfonos móviles que tengan como sistema operativo IOS y Android. Os mostramos como configurarlos.
Desde la consola de comandos de nuestro servidor, una vez escalado privilegios como usuario root nos dirijimos a la ruta /etc/wireguard. Recordar que para eso utilizamos la orden cd /etc/wireguard.
Vamos a crear un directorio para los clientes IOS y Android. Nos moveremos dentro de esa carpeta:
mkdir clientes_moviles
cd clientes_moviles
Para el tutorial en nuestro caso vamos a utilizar un sólo dispositivo móvil, así que no voy a generar más carpetas. Vosotros si queréis ser ordenados podéis generar una carpeta para cada teléfono móvil que queráis utilizar como cliente.
Generamos las claves pública y privada del cliente móvil:
wg genkey | tee clientemovil_private.key | wg pubkey > clientemovil_public.key
Creamos un fichero de configuración para el cliente móvil:
touch clientemovil.conf
Enviamos la clave privada de nuestro cliente móvil al archivo de configuración y además la clave pública de nuestro servidor con los siguientes comandos:
cat clientemovil_private.key > clientemovil.conf
cat ../../servidor_public.key >> clientemovil.conf
Ahora con nano clientemovil.conf vamos a editar el archivo de configuración. Recordar que la primera línea que tenemos dentro del archivo es la clave privada del cliente movil. La segunda línea es la clave pública de nuestro servidor. Con los anteriores comandos los hemos copiado y por eso están dentro. Ahora dejamos el archivo de esta manera:
[Interface]
Address = 10.0.0.4
PrivateKey = LA CLAVE PRIVADA DE TU CLIENTE MÓVIL
ListenPort = 51820
[Peer]
Publickey = LA CLAVE PÚBLICA DE TU SERVIDOR
Endpoint = TU IP PÚBLICA:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepAlive = 25
Configurar una VPN con Wireguard, añadiendo el cliente móvil al servidor.
Ahora vamos a por el archivo de configuración del servidor y lo que vamos a hacer es copiar dentro la clave pública del cliente móvil. Tener cuidado de poner bien este comando, que podéis borrar el contenido del archivo de configuración del servidor:
cat clientemovil_publica.key >> /etc/wireguard/wg0.conf
Ahora editamos con nano el archivo de configuración del servidor:
nano /etc/wireguard/wg0.conf
Al final del archivo estará la clave pública de nuestro cliente movil, dejamos el archivo de configuración de esta manera:
[Interface]
Address = 10.0.0.1
PrivateKey = Aquí va vuestra clave privada
ListenPort = 51820
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
PublicKey = LA CLAVE PÚBLICA QUE GENERÓ TU CLIENTE WINDOWS
AllowedIPs = 10.0.0.2/32
PersistentKeepAlive = 25
[Peer]
PublicKey = LA CLAVE PÚBLICA DE TU CLIENTE LINUX
AllowedIPs = 10.0.0.3/32
PersistentKeepAlive = 25
[Peer]
PublicKey = LA CLAVE PÚBLICA DE TU CLIENTE MÓVIL
AllowedIPs = 10.0.0.4/32
PersistentKeepAlive = 25
Reiniciamos Wireguard y comprobamos que el cliente móvil esté permitido:
systemctl restart wg-quick@wg0
Generando código QR con Qrencode.
Qrencode es un programa que nos permite generar un código QR desde la línea de comandos. Lo instalamos de esta forma:
apt install qrencode
Generamos nuestro código QR para escanear con nuestro dispositivo Android o IOS.
qrencode -t ansiutf8 < clientemovil.conf
Wireguard en el Smartphone
Desde App Store en IOS o Play Store en el caso de Android, descargamos la aplicación de Wireguard. En ambos sistemas operativos disponemos de un botón “+”. Pulsamos ese botón volvemos a presionar sobre Escanear desde código QR, o Crear desde código QR dependiendo del S.O.
Le damos un nombre a nuestro túnel y si todo ha ido bien, tenemos listo nuestro cliente móvil IOS o Android con su VPN Wireguard.
https://enclaveinformatico.com/configurar-una-vpn-con-wireguard/
grande
ResponderEliminarmuchas gracias por tus explicaciones.
ResponderEliminarEstoy intentando conectar desde un PC ubuntu a un servidor debian. y no veo la forma de hacer un cliente wireguard linux.
mi idea mas adelante es lanzar copias de seguridad desde el pc Ubuntu al Servidor exterior debian.
mucha gracias.
Francisco