#282 - WireGuard: el VPN más moderno

DoH 10 de feb. de 2020
  • 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í)


[email protected]:~ $ 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

[email protected]:~ $ 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


[email protected]:~ $ 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

[email protected]:~ $ 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.

[email protected]:~ $ 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

[email protected]:~ $ cd /etc
[email protected]:/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.

[email protected]:/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:

[email protected]:~ $ sudo reboot
Connection to raspberrypi.local closed by remote host.
Connection to raspberrypi.local closed.
...
[email protected]:~$ ssh [email protected]
...
...
[email protected]:~ $ 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)

[email protected]:~ $ sudo apt-get install git qrencode
[email protected]:~ $ 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:

[email protected]:~ $ cd wg_config
[email protected]:~/wg_config $ wg genkey | tee server_private.key | wg pubkey > server_public.key
[email protected]:~/wg_config $ cat server_private.key
aA+iKGr4y/j604LtNT+MQJ76Pvz5Q5E+qQBLW40wXnY=
[email protected]:~/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:

[email protected]:~/wg_config $ cp wg.def.sample wg.def
[email protected]:~/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:

[email protected]:~/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:

[email protected]:~/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 :

[email protected]:~/ip a

Creamos un fichero de configuración nuevo:

[email protected]:~/wg_config $ cd ..
[email protected]:~ $ 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:

[email protected]
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

[email protected]:~ $ 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 :

[email protected]:~ $ sudo systemctl status [email protected][email protected] - WireGuard via wg-quick(8) for wg0
   Loaded: loaded (/lib/systemd/system/[email protected]; 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.
  
[email protected]:~ $ sudo wg
interface: wg0
  listening port: 54130

Añadimos el primer “usuario” (iphone por ejemplo:

[email protected]:~ $ cd wg_config
[email protected]:~/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”

[email protected]:~/wg_config $ sudo ./user.sh -d iphone7

Para explorar el directorio de usuarios:

[email protected]:~/wg_config $ cd users/client1/
[email protected]:~/wg_config $ ls
client1.png  client.conf  privatekey  publickey
[email protected]:~/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:

[email protected]:~/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?).
[email protected]:~/wg_config $ sudo wg-quick up wg0

Para que al reiniciar nuestra Rasp el servicio se levante :

[email protected]:~/wg_config $ sudo systemctl enable [email protected]
Created symlink /etc/systemd/system/multi-user.target.wants/[email protected] → /lib/systemd/system/[email protected]

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 [email protected] !


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 2x100 con todos los programas y notas:
Bateria2x100

Etiquetas

¡Genial! Te has suscrito con éxito.
¡Genial! Ahora, completa el checkout para tener acceso completo.
¡Bienvenido de nuevo! Has iniciado sesión con éxito.
Éxito! Su cuenta está totalmente activada, ahora tienes acceso a todo el contenido.