Wireguard es un VPN moderno, seguro y ultra rápido que funciona en una multitud de sistemas operativos y que opera especialmente bien con el kernel de linux.
De manera general nos da conexiones mucho mas rápidas que las de OpenVPN y es ademas mucho mas facil de configurar
El primer paso que debemos dar es instalar wireguard, recuerda que debes tener el wireguard instalado tanto en el servidor como en el cliente. El proceso para instalar es sencillo pero es dependiente de tu sistema operativo y en cada uno se instala de forma diferente:
Descargar la utilidad de wireguard desde el enlace oficial
Para la instalación en MacOS solo debemos descargar la aplicación desde la App Store, puedes buscarla directamente o ir al link de descarga, Si tienes MacPorts o Homebrew también puedes instalar con esos métodos con:
$ brew install wireguard-tools
$ port install wireguard-tools
Descargar en la PlayStore Descargar en F-Droid Pero si usas termux también puedes descargarlo con:
$ pkg install wireguard-tools
OpenBSD:
$ doas pkg install wireguard-tools
FreeBSD:
$ doas pkg_add wireguard-tools
Arch:
$ sudo pacman -S wireguard-tools
Debian:
$ sudo apt install wireguard
Fedora:
$ sudo dnf install wireguard-tools
Gentoo:
$ doas emerge wireguard-tools
En la pagina oficial se listan las instalaciones para: Mageia, SUSE, Slackware, Alpine, Exherbo, NixOs, Darwin, OpenWRT, Oracle linux 8, RHEL 8, Centos 8 (RIP), Oracle linux 7, RHEL 7, Centos 7, Void, Adelie Linux, Source Mage, Buildroot, EdgeOS, LinuxKit, AstLinux y Millis por si te parecían ya pocas las opciones anteriores, todo en este link.
El siguiente paso es generar las llaves publicas y privadas que se necesitaran para poder configurar de manera adecuada todos los equipos que se conectaran en esta VPN.
Primero creamos la carpeta /etc/wireguard/
en cada ordenador que sera parte de
la red y luego vamos a generar las llaves
$ wg genkey | tee privatekey | wg pubkey > publickey
Esto nos generara los archivos privatekey
y publickey
, el publico se utiliza
en la configuración que tendremos en cada maquina, mientras el privado se queda
solo en el ordenador donde lo hemos generado.
Normalmente la red la configuraremos en el archivo que debemos crear,
/etc/wireguard/wg0.conf
, y hacer las configuraciones de paso que nos hagan
falta. Estas configuraciones van a depender del la necesidad que tengamos y como
utilizaremos la red.
En el caso de que solo queremos una conexión privada entre una maquina y un servidor entonces la configuración quedaría muy sencilla, solo hay que agregar las IP y las llaves correspondientes en cada parte.
El wg0.conf
en el servidor quedaría así:
[Interface]
Address = 10.0.1.1
PrivateKey = <server's privatekey>
ListenPort = 51820
[Peer]
PublicKey = <client's publickey>
AllowedIPs = 10.0.1.2/32
Mientras que en el cliente quedaría de la siguiente manera:
[Interface]
Address = 10.0.1.2
PrivateKey = <client's privatekey>
ListenPort = 21841
[Peer]
PublicKey = <server's publickey>
Endpoint = <server's ip>:51820
AllowedIPs = 10.0.1.0/24
# Usamos un keepalive si estamos detras de un NAT
# Y queremos mantener la conexion viva
PersistentKeepalive = 25
Una vez tengamos esto listo ya podemos iniciar la conexión de cada lado, esto es
mediante el comando wg-quick up wg0
en los sistemas operativos unix-like o
presionando el botón de conectar en los casos que contemos con interfaces de
usuario. Se debe correr el comando de inicialización en ambos equipos
En la configuración anterior se eligieron las IP internas de 10.0.1.1 y 10.0.1.2
, y por ello, en caso de que nuestros IP reales estén en esa misma subred se
tendrá que cambias estas IP internas a algo como por ejemplo 11.1.1.x
.
En caso de que queramos acceder a la LAN del lado del servidor entonces vamos a
necesita agregar algo extra de configuración al final de la sección [Interface]
en la configuración del servidor:
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
Esto es asumiendo que la conexión a la LAN de nuestro server es la eth0
, lo
que debemos cambiar en caso de no ser así. También debemos agregar la subred de
la LAN del servidor en la parte de AllowedIPs
del cliente:
AllowedIPs = 10.0.1.0/24, 192.168.1.0/24
En este ejemplo la LAN del servidor es 192.168.1.0/24
, y la agregamos acá para
que nuestro cliente pueda saber que si vamos a conectarnos a una de estas IP las
puede buscar mediante la conexión VPN, mientras que el resto de nuestro uso de
red seguirá pasando por fuera de la VPN.
Esta para muchos seria la opción mas interesante, y utilizar la VPN como se le conoce tradicionalmente, para hacer que toda nuestra conexión pase a través de la VPN y así poder aparentar una locación diferente, ya sea por privacidad o para alcanzar a un servicio no disponible en nuestro país.
Para esta configuración la única parte diferente sera que cambiaremos la parte
de AllowedIPs
del cliente para que en lugar de solo incluir la LAN pueda
incluir también toda la navegación, y esa linea quedaría así:
AllowedIPs = 0.0.0.0/0, ::/0
Esto nos permitirá enrutar todas las peticiones a través de nuestro servidor VPN
creado por nosotros mismos. Y en el servidor en la parte de [INTERFACE]
vamos
a cambiar la parte de PostUp y PostDown por la siguiente:
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
vamos a activar el IP forwarding descomentando la linea net.ipv4.ip_forward=1
del archivo etc/sysctl.conf
y luego ejecutando el comando de control de
sistema sysctl -p /etc/sysctl.conf
Una ultima nota es que deberíamos cambiar los permisos del directorio de config de wireguard, en este caso nos bastara con correr los comandos:
$ sudo chown -R root:root /etc/wireguard/
$ sudo chmod -R og-rwx /etc/wireguard/*
Y si tu sistema operativo linux utiliza systemd
(Como es el caso de la gran
mayoría de distribuciones linux) entonces para que esto sea permanente al
reiniciar el equipo solo debemos correr sudo systemctl enable wg-quick@wg0.service
Ahora que ya configuramos todo, podemos disfrutar de nuestra nueva VPN y probar su efectividad mediante herramientas de red o paginas que te muestran tu IP externa.
Esto ha sido todo en esta guía, espero les sea de provecho.
Adaptado al idioma espanol de esta guia
Creado por Oscar J Rodriguez B (2021)