#282 – WireGuard: el VPN más moderno

  • Status Servicios PLEX
  • Guardar mails con Spark como tareas en Things , abandoné “posponer mensaje”
  • Secure Shellfish
  • Recomendación de uno de los mejores podcasts de Tecnología (bajo mi punto de vista)

“Sobre la marcha”

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:

  1. Xeovo
  2. Discusion en Reddit
  3. Restore Privacy
  4. VPNPranks

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


Tarjeta Curve ya está en Apple Pay !

Mi código para que os regalen 5 libras a ti y 5 para mi !

D6AP2ALE

Sed buenos !


Te dejo mi enlace de afiliado por si haces una compra en Amazon y quieres ayudarme a financiar este podcast.
Gracias por adelantado

https://amzn.to/2l4uWDR


Métodos de contacto:

Sígueme en Twitter:
@bateria2x100

Web de Batería 2×100 con todos los programas y notas:
Bateria2x100