#282 - WireGuard: el VPN más moderno
-
Guardar mails con Spark como tareas en Things , abandoné “posponer mensaje”
-
Recomendación de uno de los mejores podcasts de Tecnología (bajo mi punto de vista)
El episodio que apunta el bueno de Gabriel :
Bits por centímetro y megahertzios por kilo by sobre la marcha • A podcast on Anchor
Qué he probado:
* VPN OpenVPN
* VPN Synology
* VPN WireGuard, sin duda, el más rápido !
Algunos enlaces de interés:
Who drains more battery? WireGuard vs OpenVPN
WireGuard VPN: What You Need to Know (Still NOT Ready?)
WireGuard VPN: Instalación y configuración de servidor y clientes VPN
WireGuard
- Más rápido que IPsec y OpenVPN
- Criptografía más moderna frente a métodos más clásicos de OpenVPN (OpenVPN tiene ya 17 años de vida)
- Multiplataforma
- Más seguro
- Este software está diseñado para poder realizar roaming de manera fácil y rápida, si nuestro dispositivo cambia de redes, y lógicamente cambia de IP pública, como por ejemplo cuando pasamos de la red Wi-Fi y la red 4G/LTE de nuestro operador, la conexión VPN seguirá levantada porque se volverán a autenticar rápidamente con el servidor VPN, de tal forma que siempre estaremos conectados a la VPN.
- Pocas líneas de código -> facilita su auditoría (3700 líneas vs 600.000 de OpenVPN)
- Solo soporta protocolo UPD y no usa 443 (contra) -> El protocolo es considerado como productos WIP
Bienvenida WireGuard. Adiós OpenVPN - El atareao

El Throughput de una red es el ratio de datos exitosamente recibidos en una conexión de red. A más rate, más rápida y mejor es la conexión (al menos en teoría)
Cómo Funciona
Bienvenida WireGuard. Adiós OpenVPN - El atareao
Si tengo dos dispositivos un cliente A y un servidor B. El proceso es el siguiente :
Si quiero enviar de A a B:
- Compruebo que se corresponde con un dispositivo de la red WireGuard. En su caso lo envío siguiendo este procedimiento.
- Cifro el paquete con la clave pública de B.
- Envío el paquete cifrado al endpoint B definido por una dirección IP o hostname, y un puerto UDP.
Cuando el dispositivo llega a B :
- Como está cifrado con su clave pública del servidor, B simplemente tiene que descifrar el paquete con su clave privada.
- Una vez descifrado, comprueba quien se lo ha enviado, y si es de los dispositivos autorizados.
Consumo de Batería Respecto a OpenVPN y otras cosas a tener en cuenta.
Dejo algunos enlaces que he consultado:
Instalación en Raspberry 4 Buster
(Extraído de aquí)
pi@raspberrypi:~ $ echo "deb http://deb.debian.org/debian/ unstable main" | sudo tee --append /etc/apt/sources.list.d/unstable.list
deb http://deb.debian.org/debian/ unstable main
pi@raspberrypi:~ $ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 04EE7237B7D453EC
Executing: /tmp/apt-key-gpghome.buGYeUegil/gpg.1.sh --keyserver keyserver.ubuntu.com --recv-keys 04EE7237B7D453EC
gpg: key E0B11894F66AEC98: 13 signatures not checked due to missing keys
gpg: key E0B11894F66AEC98: public key "Debian Archive Automatic Signing Key (9/stretch) " imported
gpg: Total number processed: 1
gpg: imported: 1
pi@raspberrypi:~ $ printf 'Package: *\nPin: release a=unstable\nPin-Priority: 150\n' | sudo tee --append /etc/apt/preferences.d/limit-unstable
Package: *
Pin: release a=unstable
Pin-Priority: 150
pi@raspberrypi:~ $ sudo apt update
Hit:1 http://deb.debian.org/debian unstable InRelease
Hit:2 http://archive.raspberrypi.org/debian buster InRelease
Hit:3 http://raspbian.raspberrypi.org/raspbian buster InRelease
Reading package lists... Done
Building dependency tree
Reading state information... Done
All packages are up to date.
pi@raspberrypi:~ $ sudo apt install wireguard -y
Reading package lists... Done
DKMS: install completed.
Setting up wireguard-tools (0.0.20190702-1) ...
Setting up wireguard (0.0.20190702-1) ...
Processing triggers for man-db (2.8.5-2) ...
Activando IP Forwarding
pi@raspberrypi:~ $ cd /etc
pi@raspberrypi:/etc $ ls -l sysctl*
-rw-r--r-- 1 root root 2683 Apr 8 06:56 sysctl.conf
sysctl.d:
total 8
-rw-r--r-- 1 root root 51 Nov 26 2018 98-rpi.conf
lrwxrwxrwx 1 root root 14 Apr 8 07:51 99-sysctl.conf -> ../sysctl.conf
-rw-r--r-- 1 root root 639 May 17 2018 README.sysctl
Hay que ver /etc/sysctl.d/99-sysctl.conf es un enlace simbólico a /etc/sysctl.conf. Será suficiente editar el último para habilitar el reenvío de paquetes IP.
pi@raspberrypi:/etc $ sudo nano sysctl.conf
Y simplemente se descomenta esta línea (eliminar la # )
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
Recuerda, control X para salir ( y pulsar Y para salvar cambios claro)
Ahora hace falta rebotar la Raspberry:
pi@raspberrypi:~ $ sudo reboot
Connection to raspberrypi.local closed by remote host.
Connection to raspberrypi.local closed.
...
michel@hp:~$ ssh pi@raspberrypi.local
...
...
pi@raspberrypi:~ $ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
Instalamos User Management Script (que facilita la creación de las claves públicas y privadas) :
(extraído de aquí: User management with Wireguard User Management Script · adrianmihalko/raspberrypiwireguard Wiki · GitHub)
pi@raspberrypi:~ $ sudo apt-get install git qrencode
pi@raspberrypi:~ $ git clone https://github.com/adrianmihalko/wg_config.git
Cloning into ‘wg_config’…
remote: Enumerating objects: 17, done.
remote: Counting objects: 100% (17/17), done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 17 (delta 4), reused 10 (delta 1), pack-reused 0
Unpacking objects: 100% (17/17), done.
Para generar las Server Keys:
pi@raspberrypi:~ $ cd wg_config
pi@raspberrypi:~/wg_config $ wg genkey | tee server_private.key | wg pubkey > server_public.key
pi@raspberrypi:~/wg_config $ cat server_private.key
aA+iKGr4y/j604LtNT+MQJ76Pvz5Q5E+qQBLW40wXnY=
pi@raspberrypi:~/wg_config $ cat server_public.key
5lFoBBjeLcJWC9xqS/Kj9HVwd0tRUBX/EQWW2ZglbDs=
#Estas Keys deben copiarse ya que serán usadas posteriormente.
Editamos los parámetros de la plantilla del server:
pi@raspberrypi:~/wg_config $ cp wg.def.sample wg.def
pi@raspberrypi:~/wg_config $ nano wg.def
_INTERFACE=wg0
_VPN_NET=10.10.10.0/24
_SERVER_PORT=51820
_SERVER_LISTEN=your.publicdns.com:$_SERVER_PORT
_SERVER_PUBLIC_KEY=5lFoBBjeLcJWC9xqS/Kj9HVwd0tRUBX/EQWW2ZglbDs=
_SERVER_PRIVATE_KEY=aA+iKGr4y/j604LtNT+MQJ76Pvz5Q5E+qQBLW40wXnY=
Editamos la plantilla de los clientes:
pi@raspberrypi:~/wg_config $ nano client.conf.tpl
[Interface]
Address = $_VPN_IP
PrivateKey = $_PRIVATE_KEY
#Si quieres usar un servidor DNS
DNS = 192.168.1.10
[Peer]
PublicKey = $_SERVER_PUBLIC_KEY
AllowedIPs = 0.0.0.0/32, 192.168.1.0/24
Endpoint = $_SERVER_LISTEN
192.168.1.0/24 es la subred de la LAN que tengo en casa, si la añades, entonces puedes acceder alos distintos elementos de la red desde el cliente.
Editamos la plantilla del server:
pi@raspberrypi:~/wg_config $ nano server.conf.tpl
[Interface]
Address = $_SERVER_IP
ListenPort = $_SERVER_PORT
PrivateKey = $_SERVER_PRIVATE_KEY
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o wlan0 -j MASQUERADE
Ojo ! Cambiar wlan0 por eth0 si la rasp está conecatada por cable a la red !
Una manera de verlo es usar :
pi@raspberrypi:~/ip a
Creamos un fichero de configuración nuevo:
pi@raspberrypi:~/wg_config $ cd ..
pi@raspberrypi:~ $ sudo touch /etc/wireguard/wg0.conf
Esto solo se hace un avez, el script "User management" lo actualizará cada vez que sea usado para añadir o quitar usuarios.# Start / Stop la interface de WireGuard manualmente:
pi@
raspberrypi:~ $ sudo wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip link set mtu 1420 up dev wg0
pi@raspberrypi:~ $ sudo wg-quick down wg0
[#] ip link delete dev wg0
[#] iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERAD
Comprobar el estado del server :
pi@raspberrypi:~ $ sudo systemctl status wg-quick@wg0
● wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0
Loaded: loaded (/lib/systemd/system/wg-quick@.service; enabled; vendor preset: enabled)
Active: active (exited) since Fri 2019-03-05 16:50:49 ADT; 20min ago
Docs: man:wg-quick(8)
man:wg(8)
https://www.wireguard.com/
https://www.wireguard.com/quickstart/
https://git.zx2c4.com/WireGuard/about/src/tools/man/wg-quick.8
https://git.zx2c4.com/WireGuard/about/src/tools/man/wg.8
Process: 378 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS)
Main PID: 378 (code=exited, status=0/SUCCESS)
Jul 03 16:48:58 domo systemd[1]: Starting WireGuard via wg-quick(8) for wg0…
Jul 03 16:50:46 domo wg-quick[378]: [#] ip link add wg0 type wireguard
Jul 03 16:50:46 domo wg-quick[378]: [#] wg setconf wg0 /dev/fd/63
Jul 03 16:50:47 domo wg-quick[378]: [#] ip address add 192.168.99.1/24 dev wg0
Jul 03 16:50:47 domo wg-quick[378]: [#] ip link set mtu 1420 up dev wg0
Jul 03 16:50:49 domo systemd[1]: Started WireGuard via wg-quick(8) for wg0.
pi@raspberrypi:~ $ sudo wg
interface: wg0
listening port: 54130
Añadimos el primer “usuario” (iphone por ejemplo:
pi@raspberrypi:~ $ cd wg_config
pi@raspberrypi:~/wg_config $ sudo ./user.sh -a iphone7
[QR CODE HERE]
Ahora escaneas el código QR desde el móbil y ya está !
Para Eliminar “usuarios”
pi@raspberrypi:~/wg_config $ sudo ./user.sh -d iphone7
Para explorar el directorio de usuarios:
pi@raspberrypi:~/wg_config $ cd users/client1/
pi@raspberrypi:~/wg_config $ ls
client1.png client.conf privatekey publickey
pi@raspberrypi:~/wg_config $ cat client.conf
[Interface]
Address = 10.10.10.2/24
PrivateKey = gFSP5e8ta66tnwFOe1G4BDEikMkdfOiQ/OoYal2lv14=
[Peer]
PublicKey = 5lFoBBjeLcJWC9xqS/Kj9HVwd0tRUBX/EQWW2ZglbDs=
AllowedIPs = 10.10.10.1/32, 192.168.1.0/24
Endpoint = your.publicdns.com:51820
Reiniciamos WireGuard:
pi@raspberrypi:~/wg_config $ sudo wg-quick down wg0
[#] ip link delete dev wg0
[#] iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
iptables: Bad rule (does a matching rule exist in that chain?).
pi@raspberrypi:~/wg_config $ sudo wg-quick up wg0
Para que al reiniciar nuestra Rasp el servicio se levante :
pi@raspberrypi:~/wg_config $ sudo systemctl enable wg-quick@wg0
Created symlink /etc/systemd/system/multi-user.target.wants/wg-quick@wg0.service → /lib/systemd/system/wg-quick@.service.
Otros Links de Interés
-
Instalación en Ubuntu
WireGuard Setup Guide for iOS - Graham Stevens – Grh.am -
WireGuard Server en Synology Router
GitHub - runfalk/synology-wireguard: WireGuard support for some Synology NAS drives
Tarjeta Curve ya está en Apple Pay !
Mi código para que os regalen 5 libras a ti y 5 para mi !
D6AP2ALE
Sed buen@s !
Te dejo mi enlace de afiliado por si haces una compra en Amazon y quieres ayudarme a financiar este podcast.
Gracias por adelantado
Métodos de contacto:
Sígueme en Twitter:
@bateria2x100
Web de Batería 2x100 con todos los programas y notas:
Bateria2x100