WireGuard (II): Crear un cliente
En una entrada anterior expliqué qué es y cómo instalar de manera sencilla WireGuard en nuestro servidor. En esta entrada veremos cómo crear un cliente para poder conectarnos a nuestra VPN de manera remota.
Para esta entrada daremos por sentado que nuestro WireGuard ha sido instalado a través de PiVPN, como cuento en mi anterior entrada.
Partiremos de un servidor de WireGuard instalado gracias a Multipass (ya os hablaré de ello, lo estoy preparando 😊). Éste tiene configurado el puerto por defecto de WireGuard: el 51820
. Como podéis ver, el servidor se encuentra escuchando ya en la red local y en su propia red de VPN:
wireguard Running 192.168.64.5 Ubuntu 20.04 LTS
10.6.0.1
Clientes para WireGuard
Hoy en día hay aplicaciones para conectarse a un servidor WireGuard para todas las plataformas y de todos los gustos. Personalmente, me gusta usar los clientes oficiales siempre que puedo, pero dejo a vuestra elección que uséis el que más os guste.
Dar de alta un cliente nuevo
Lo bueno de usar PiVPN es que se nos facilita muchísimo el control de nuestro servidor VPN. De hecho, al ejecutar el comando pivpn --help
, veremos todas las opciones de que disponemos, y que son más que suficientes para su gestión.
::: Control all PiVPN specific functions!
:::
::: Usage: pivpn <command> [option]
:::
::: Commands:
::: -a, add Create a client conf profile
::: -c, clients List any connected clients to the server
::: -d, debug Start a debugging session if having trouble
::: -l, list List all clients
::: -qr, qrcode Show the qrcode of a client for use with the mobile app
::: -r, remove Remove a client
::: -off, off Disable a user
::: -on, on Enable a user
::: -h, help Show this help dialog
::: -u, uninstall Uninstall pivpn from your system!
::: -up, update Updates PiVPN Scripts
::: -bk, backup Backup VPN configs and user profiles
Así pues, para dar de alta un cliente nuevo, bastará con usar el comando pivpn -a
, y, tras introducir un nombre para él, automáticamente se nos creará la configuración necesaria:
ubuntu@wireguard:~$ pivpn -a
Enter a Name for the Client: Android
::: Client Keys generated
::: Client config generated
::: Updated server config
::: WireGuard reloaded
======================================================================
::: Done! Android.conf successfully created!
::: Android.conf was copied to /home/ubuntu/configs for easy transfer.
::: Please use this profile only on one device and create additional
::: profiles for other devices. You can also use pivpn -qr
::: to generate a QR Code you can scan with the mobile app.
======================================================================
Una vez dado de alta un cliente nuevo, su configuración se encontrará en la carpeta configs
del usuario que hayamos configurado en la instalación del servidor, en mi caso /home/ubuntu/configs
. Allí, veremos que tenemos un fichero de configuración llamado como nuestro cliente: Android.conf
. Su contenido será similar a:
[Interface]
PrivateKey = uJN/8P3R51fqWy+N8kzBIYIAEIKyK7bPA1ZwnVCKn0o=
Address = 10.6.0.2/24
DNS = 94.140.14.14, 94.140.15.15
[Peer]
PublicKey = GE65qUx+HUu6ED4tYsS95YtAxMwu5RJfvwP2SHZqbV0=
PresharedKey = f/mnQhyhrcraLXJJPAx3XOQMBKmSB0VXrK4Xa/9YaEk=
Endpoint = 192.168.64.5:51820
AllowedIPs = 0.0.0.0/0, ::0/0
Como veis, es un fichero muy sencillo. En el apartado Interface tenemos la clave que usará el cliente, la dirección IP que tomará al conectarse a nuestro servidor VPN y las direcciones DNS que usará (por si no las conocéis, para el ejemplo estoy usando los servidores de AdGuard DNS, que sirven para filtrar anuncios y bloquear rastreos... ¡Da para una entrada nueva! 📝).
En el apartado de Peer, tenemos la clave pública de nuestro servidor, así como su PresharedKey. Además, vemos un Endpoint y las direcciones IP permitidas, que en nuestro ejemplo son todas (ya que querremos conectarnos desde cualquier sitio). En este apartado. deberemos modificar el Endpoint poniendo, o bien nuestra IP pública del servidor (si ésta es fija), o bien nuestra dirección DDNS. Por ejemplo: En mi casa mi servidor VPN está en una RaspberryPi, pero obviamente, no tengo IP pública estática, con lo que hago uso de DuckDNS para poder tenerlo siempre localizado. Así, deberé reemplazar 192.168.64.5:51820
por midominio.duckdns.org:51820
. Es importante recordar que el puerto debe ser abierto en nuestro router si queremos poder conectarnos desde fuera.
Una vez hemos hecho la modificación en nuestro fichero de configuración del cliente, deberemos enviarlo al dispositivo cliente (por Bluetooth, por SFTP, Airdrop... lo que queramos, pero que sea seguro y, a ser posible, sin intermediarios) y allí importarlo en la aplicación (en el caso de MacOS, por ejemplo, mediante la opción Importar túneles desde archivo).
Sin embargo, como podéis ver más arriba, tenemos una opción mucho más cómoda para dispositivos móviles. Si hemos instalado la aplicación oficial de WireGuard (en otras no sé, pero supongo que también estará), veremos que tenemos la opción de importar la configuración mediante un código QR. Pero... ¿cómo podemos hacer esto? Pues de manera tan sencilla como usar el comando pivpn -qr
. A continuación seleccionamos el cliente que queremos y ¡listo!. Veremos cómo se nos genera un código QR que podremos usar desde el móvil directamente:
ubuntu@wireguard:~/configs$ pivpn -qr
:: Client list ::
1) Android
Please enter the Index/Name of the Client to show: 1
::: Showing client Android below
=====================================================================
█████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████
████ ▄▄▄▄▄ ██▄██ ▄▄█▀▄▀▄▀ ▄ ▀█▄█ ▄▄ ▄█ ███ █▄▄▄███ ██ █ █ ▄▄▄▄▄ ████
████ █ █ █▀█▀███▀▀▄███▀ █▀▀ ▄▄█▀▄▀▄▄ ▄▀▀▄▀▀ ▄▀▄▄█ █ ▄ █ █ █ ████
████ █▄▄▄█ █▄ █ ▄ ▀█▄▀▄▀▄▀██▄▀█ ▄▄▄ ▄▄█▀█▄▄▄ ▀▀▀█▀▄▀█ ▄██ █▄▄▄█ ████
████▄▄▄▄▄▄▄█▄▀▄▀▄▀ █ ▀ █ ▀▄█▄▀▄▀ █▄█ █ █▄█ ▀▄▀▄█▄█ █ █▄█▄█▄▄▄▄▄▄▄████
████ ▀▀▀▄▄▄█ ▀ █▀ █▀ ▀█ ▄█▀█ ▀ ▄ ▄▀ ▄ ▄ ███▀▄██ ▀█▀▀█▄▀▀█▄ ▀█▀████
█████ ▄ ▀▀▄ ▀▀█▀▄▀▄▄▄▀ ▀ ▄ ███▀▀▄▄▀ ██ █▀█ ▀▀▀▀ █▀█▄▄▄█▄▀▀▄▀▀█ ▄████
█████▄▄ ▀▄▄▀▄▀██ ██▄██▄▄ █ ▀ ▀▄█▄█ ▄▄▀█▄▀█▀▄▄█▀ █▀▄▀ █▄█▄ ▄ ▄█████
████▀ █▄ ▀▄▀▀▀█▀▀▀▀█ ▀█▄▀▄▀▀█▀▄▀▀▄▄▀▄▄█▀▄▀ ▄██▀ ▀▀▄▀▄ ▄ ██▀█ ▄█▄████
████▄ ▀█▄▄█▀▄▄█▀█████▀█▀█ ▀█▀▄▄▀ ▀█▀▄ ▀▄ █▄█▀ ▀█ ▄ ▀█▄█▀ ▄▀██████
████ ▄ █▀█▄█▀▀▄ ▀▀▀█▄▄▄▄▀ █ ▄ █▄▀ █▄██ █▀▀▄█ ▄▄▀██ ██▄▀▄▀ █▀█ ▀████
████▄ ▄▄ ▀▄ ▄▀▀█▄▀▄▀▄▀█▀█▀ ▀█ █▄█ █ █▄▄ ▀█▀▄▄▀ ▀█▀█ █▄▄▄█████▀▀████
████ █▀▀▄ ▀█▄▄ ▄██▄▄█ ▀ ██▀▀██▄▄█ ██▀▀▄▄ ▄▀▀█▄▄█▄▀▀█▄█▄█ █▀▀█▀▀████
████▄██▀▄█▄▀██ ▄▄ ▀▄▀█▀█▄▄▀█▀█ █▀▄█▄█ █▄▄▀▀ █▀▀▄▄▀██ ███▀ █ ▄█ ▀████
████ ▀▄▀█▀▄█▀ ▀▀▀▄▄█ ▄ ▄▀▄▄█▀█▀▄█▄█▀ ▄▀▄██▀▄ ▄▀▄▀█ █▄█ █ ▀█▀█▀▀ ▄████
█████ ██ ▄▄▄ ██▄ █▀▄▄▄▄█ █▀▀▄██ ▄▄▄ █▄▀▄ ▄ ▄█ ▀▀█ ▄▀█ █ ▄▄▄ █▀▄▀████
█████ ▄ █▄█ ▀ ▀▄ ██ ▀▄▀▄▄▀▀ ▀▄ █▄█ ▄█ █▄█ ▄▄▄▄█ ▄▄█ █ █▄█ █▀ ▄████
████▀███ ▄▄ ▀ ▀██▀ █▀█ ▀▄▀█▄▄ ▄▄ ▄ ▄▄▀▄ ▀▄█ ▀█▄█▀▄ █▄▄ ▄ ▄▄█▀████
████▄▀██▄ ▄▄▀▀█▄▄ ▄ ▀▄▄█ ▄ █▀▀█▀ ▀█▄▀▀ ▄█▄██▄▀▀▄ █▀▄██▄▄ ▀▀ ▀████
████ ██ ▄ ▀▄ ▄▀▄ ▀███ ▄▄▄▄ ▀▄█▀█▄█ █ ██▄████ ▄█▄▄▀ ▀ █ ▀ ▀████
█████ ▀█▄ ▄▀ █ ▀█ ▀▄ ▀ ▄ ▄██▀▀ ▀▀▀▄▄▀█▀██▄██▄ ▄█▀█▀██▀▄███ █ ████
████ █ █▀▄██▀▄█▀▄▄▄ ▀ ▀▀▄▄█ ██▄▀▄ █▄ ▄ ▄▄█ ▀▀ ▄██▀▄▄ █ ▄▀▄▀██▄█ ████
█████▀ ▄██▄█▄ ▄▀█▀▀█▄█ ▀▄ █▄ ▄▄█ █ ▄▄ ▄█▄▄▄▄▀ ▄ ▄▄▄▀█▀█▀▀▄▀▄█▄█ ████
████▀▄ ▀█▄▄█ ▄▄█ █▀▀ ▄▄█▀▀ ▀▀█▀▄▀ ▄██ ▀▄ ▀█▀ ██ ▀ ▄▀ ▀▀▄ █ █ ████
█████▄███▄▄▄▀▄▄▄▀██▀██▄█ █ ██▀▄▄▄▀▄██▄ █▀ ▄ █▄ ▀█▄█▀███ ▄▄▄ █▄▄▄█████
█████ ▄ ▀▀▄ ▀▄▄ ▄█ █▄▄▄ ██▀▄▄▄ ▄ █ ▀█ ▀█▀ █▀█▄▄▄▀ █ ▄▄▄ ▄█▄ ▀████
████▀▀ ▄ ▄▄▄▄▄█▀█ ▀█▀█▄▄▄█▄▄ ▀▄ ▀▀ ▀█▄▀█▀▄▄ ▀█▄█▄█▄█ ▄▀▄▄█ █ ▀██████
████▄▄▄▄██▄▄ █▀▀██▄▄ ▀▄ ▀▄▄▄▄█ ▄▄▄ ▀▀▀▀ █ ▄ ▄▄ ██▀▄ ▄ ▄▄▄ ▀███████
████ ▄▄▄▄▄ █ ▀ ▀ █ ██▄▄▄▀█ ▄▀ █▄█ ▄▀▄▄██ ▄▄ █ █▄ ▀ █ █▄█ ▄ ████
████ █ █ ██▀▀ ▄▄▄ ▄▀▄▀▄▄▀█ ▄▄▄ ▄▀▀▀ █ ▄█ ▀▀▀███▀ ▄ ▄▄▄ ▄▄▄▀████
████ █▄▄▄█ █▀█ ▀ █▄ █▄▄█ ▄ ▀█ ▀█▄▀██▀▀██ ▄ ▄█ ▄ █▄█▄▀▀██ ▄██ ████
████▄▄▄▄▄▄▄█▄█▄▄███▄██▄▄██▄█▄█▄█▄██▄███▄████▄█▄█▄█▄███▄▄██▄▄█▄▄█▄████
█████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████
=====================================================================
Dar de baja un cliente
Supongamos que nuestro dispositivo móvil ya no nos hace falta más, lo hemos cambiado por otro mejor, lo hemos perdido, nos lo han robado... Sea lo que sea, y queremos, por seguridad, dar de baja ese cliente. Será tan sencillo como usar el comando pivpn -r
y listo.
Eliminar un cliente supone borrar su configuración por completo, por lo que si lo queremos volver a usar, habrá que dar de alta un cliente nuevo.
ubuntu@wireguard:~/configs$ pivpn -r
:: Client list ::
1) Android
2) MovilViejo
Please enter the Index/Name of the Client to be removed from the list above: 2
Do you really want to delete MovilViejo? [y/N] y
::: Updated server config
::: Client config for MovilViejo removed
::: Client Keys for MovilViejo removed
::: Successfully deleted MovilViejo
::: WireGuard reloaded
Habilitar o deshabilitar un cliente
En lugar de eliminarlo por completo, también podemos deshabilitar de manera temporal un usuario o un dispositivo. Para ello, usaremos el comando pivpn -off
y automáticamente ese cliente no podrá conectarse a nuestro servidor hasta que volvamos a habilitarlo, mediante el comando pivpn -on
.
Ver los clientes conectados
Para ver el listado de clientes que tenemos registrados y los que, actualmente, están conectados a nuestro servidor, podemos hacer uso de los comandos pivpn -l
y pivpn -c
, respectivamente:
ubuntu@wireguard:~/configs$ pivpn -l
::: Clients Summary :::
Client Public key Creation date
Android QbsCOfEhnkhFtoggYrrlZ09X5gKvR8l/S8OxcO1bEh4= 19 Feb 2022, 20:55, CET
MovilViejo IcEcohcd1EGBeYQV+QgJfND+S4TB4UPjepldxoV6pjE= 19 Feb 2022, 21:27, CET
::: Disabled clients :::
[disabled] MovilViejo
ubuntu@wireguard:~/configs$ pivpn -c
::: Connected Clients List :::
Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen
Android (none) 10.6.0.2 0B 0B (not yet)
::: Disabled clients :::
[disabled] MovilViejo
Crear copias de seguridad de clientes y configuración
Por último, es útil tener una copia de seguridad de nuestros clientes , sus claves públicas y privadas, y de la configuración del servidor, ya que en caso de necesitar realizar una reinstalación o mover todo a un nuevo servidor, no querremos volver a configurar todo desde 0 y dar de alta todos los clientes de nuevo, ¿no?
Para hacer un backup de todo esto, PiVPN nos lo pone bastante fácil. Bastará con usar el comando pivpn -bk
y automáticamente nos creará un ZIP con todo lo necesario para una migración de nuestro servidor VPN.
ubuntu@wireguard:~/configs$ pivpn -bk
Backup created in /home/ubuntu/pivpnbackup/20220219-213035-pivpnwgbackup.tgz
To restore the backup, follow instructions at:
https://docs.pivpn.io/wireguard/#migrating-pivpn-wireguard
Si accedemos a la ruta que nos muestra y descomprimimos dicho ZIP (que, por cierto, se genera para el usuario root
, por temas de seguridad), veremos que contiene lo siguiente:
ubuntu@wireguard:~/pivpnbackup$ sudo tar xvzf 20220219-213035-pivpnwgbackup.tgz
etc/wireguard/
etc/wireguard/keys/
etc/wireguard/keys/Android_pub
etc/wireguard/keys/server_priv
etc/wireguard/keys/Android_priv
etc/wireguard/keys/Android_psk
etc/wireguard/keys/server_pub
etc/wireguard/configs/
etc/wireguard/configs/clients.txt
etc/wireguard/configs/Android.conf
etc/wireguard/wg0.conf
home/ubuntu/configs/
home/ubuntu/configs/Android.conf
Como podéis ver, están tanto las configuraciones del servidor de WireGuard (claves privadas, claves públicas de los peer, configuración del servidor en sí...) como las configuraciones de los clientes, cada una dentro de su directorio original. De forma que nos es muy sencillo migrar todo a un servidor nuevo sin necesidad de configurar todo de nuevo 😀.
¡Y hasta aquí la segunda parte del tutorial! Espero que os sea muy útil y si tenéis alguna duda, no dudéis en dejar un comentario o contactarme por cualquiera de las vías que tengo publicadas, que os responderé encantado (si tardo no os preocupéis, lo hago en cuanto puedo).
Si te ha gustado la entrada, o te ha sido útil y quieres ayudarme a pagar los gastos que conlleva el servidor y mantener así el blog libre completamente de anuncios, puedes hacer una donación en Bitcoin en la siguiente dirección: