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
IP de Multipass donde estΓ‘ WireGuard alojado 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
Comandos de PiVPN 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.
======================================================================
CreaciΓ³n de un nuevo cliente 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
ConfiguraciΓ³n del cliente Android.conf 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
=====================================================================
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββ βββββ βββββ ββββββββ β ββββ ββ ββ βββ βββββββ ββ β β βββββ ββββ
ββββ β β ββββββββββββββ βββ ββββββββ ββββββ βββββ β β β β β ββββ
ββββ βββββ ββ β β βββββββββββββ βββ ββββββββ ββββββββ βββ βββββ ββββ
ββββββββββββββββββ β β β βββββββ βββ β βββ βββββββ β ββββββββββββββββ
ββββ βββββββ β ββ ββ ββ ββββ β β ββ β β βββββββ ββββββββββ βββββββ
βββββ β βββ ββββββββββ β β ββββββββ ββ βββ ββββ ββββββββββββββ βββββ
βββββββ ββββββββ βββββββ β β βββββ ββββββββββββ ββββ ββββ β ββββββ
βββββ ββ βββββββββββ βββββββββββββββββββββ ββββ βββββ β ββββ βββββββ
βββββ βββββββββββββββββββ ββββββ ββββ ββ ββββ ββ β βββββ ββββββββ
ββββ β ββββββββ βββββββββ β β βββ ββββ βββββ βββββ ββββββ βββ βββββ
βββββ ββ ββ ββββββββββββββ ββ βββ β βββ ββββββ ββββ βββββββββββββββ
ββββ ββββ ββββ ββββββ β βββββββββ ββββββ βββββββββββββββ ββββββββββ
ββββββββββββββ ββ ββββββββββββ ββββββ βββββ ββββββββ ββββ β ββ βββββ
ββββ ββββββββ ββββββ β βββββββββββββ βββββββ βββββ βββ β ββββββ βββββ
βββββ ββ βββ βββ βββββββ ββββββ βββ ββββ β ββ βββ βββ β βββ ββββββββ
βββββ β βββ β ββ ββ βββββββ ββ βββ ββ βββ βββββ βββ β βββ ββ βββββ
ββββββββ ββ β ββββ βββ ββββββ ββ β ββββ βββ ββββββ βββ β ββββββββ
βββββββββ βββββββ β ββββ β βββββ βββββ βββββββββ βββββββ ββ βββββ
ββββ ββ β ββ βββ ββββ ββββ βββββββ β βββββββ βββββ β β β βββββ
βββββ βββ ββ β ββ ββ β β βββββ ββββββββββββββ ββββββββββββ β ββββ
ββββ β ββββββββββββ β βββββ βββββ ββ β βββ ββ ββββββ β ββββββββ ββββ
ββββββ ββββββ ββββββββ ββ ββ βββ β ββ βββββββ β βββββββββββββββ ββββ
ββββββ βββββ βββ βββ βββββ ββββββ βββ ββ βββ ββ β ββ βββ β β ββββ
ββββββββββββββββββββββββ β βββββββββββ ββ β ββ ββββββββ βββ βββββββββ
βββββ β βββ βββ ββ ββββ ββββββ β β ββ βββ βββββββ β βββ βββ βββββ
ββββββ β ββββββββ ββββββββββ ββ ββ ββββββββ ββββββββ βββββ β βββββββ
ββββββββββββ βββββββ ββ ββββββ βββ ββββ β β ββ ββββ β βββ ββββββββ
ββββ βββββ β β β β βββββββ ββ βββ ββββββ ββ β ββ β β βββ β ββββ
ββββ β β ββββ βββ ββββββββ βββ ββββ β ββ βββββββ β βββ ββββββββ
ββββ βββββ βββ β ββ ββββ β ββ ββββββββββ β ββ β ββββββββ βββ ββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
=====================================================================
CΓ³digo QR generado para nuestro cliente Android 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
Eliminando un cliente de nuestro servidor VPN 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
Listado de clientes activos e inactivos 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
Listado de clientes conectados en ese momento o ΓΊltima hora de conexiΓ³n 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
CreaciΓ³n de la copia de seguridad de nuestro servidor 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
Contenido de nuestro fichero de backup 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: