Para los que no conozcáis WireGuard VPN es una alternativa muy interesante a OpenVPN o IPsec. Recientemente se ha lanzado la versión 5.6 de Kernel la cual ya integra módulos de WireGuard. Si estás usando un Kernel anterior también puedes usar WireGuard activando el módulo correspondiente. En las pruebas que hemos realizado hemos obtenido mucho mejor rendimiento con WireGuard que con OpenVPN o IPsec.
Información
En Clouding no es necesario instalarlo manualmente si no lo deseas, tienes la Imagen preinstalada de WireGuard disponible y lista para configurarlo con una interfaz Web. Tienes más información en Cómo utilizar la imagen preinstalada de WireGuard.
Instalación de WireGuard
Para instalar WireGuard tendremos que ejecutar:
# apt install wireguard
Deberíamos obtener un resultado como este:
Loading new wireguard-1.0.20200413 DKMS files...
Building for 4.15.0-20-generic
Building initial module for 4.15.0-20-generic
Done.
wireguard:
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/4.15.0-20-generic/updates/dkms/
depmod....
DKMS: install completed.
Setting up wireguard (1.0.20200319-0ppa1~18.04) ...
Processing triggers for libc-bin (2.27-3ubuntu1) ...
Como podemos ver en el resultado WireGuard se ha instalado correctamente y ha instalado el correspondiente módulo para Kernel. Ahora activaremos el módulo ejecutando:
# modprobe wireguard
Podemos comprobar que esté bien activado con:
# lsmod | grep wireguard
Devolverá un resultado como este:
wireguard 217088 0
ip6_udp_tunnel 16384 1 wireguard
udp_tunnel 16384 1 wireguard
Configuración de WireGuard
Ahora ya podemos proceder a configurar WireGuard en nuestro servidor, para ello lo primero que haremos será generar nuestra llave pública y privada con:
# wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey
Ahora que ya tenemos nuestras claves creadas podemos proceder a configurar una interfaz de red para WireGuard, para ello crearemos un fichero de configuración:
# vi /etc/wireguard/wg0.conf
Añadiremos el siguiente contenido:
[Interface]
Address = 10.0.8.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth1 -j MASQUERADE
Cambiaremos SERVER_PRIVATE_KEY por nuestra llave privada, en nuestro ejemplo usamos el rango privado 10.0.8.0/24, se puede usar cualquier otro. Recuerda que tienes que abrir el puerto 51820 UDP en el firewall del panel de cliente.
Ahora procederemos a proteger los ficheros que hemos generado, el resto de usuarios no ha de tener acceso:
# chmod 600 /etc/wireguard/{privatekey,wg0.conf}
Ahora que ya tenemos WireGuard configurado ya podemos activar nuestra interfaz de red ejecutando:
# wg-quick up wg0
Nos devolverá un resultado como este:
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.8.0/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
Para que funcione el NAT ejecutaremos:
# /sbin/sysctl -w net.ipv4.ip_forward=1
Ahora ya tenemos WireGuard configurado y funcionando, solo nos queda asegurarnos que lo siga haciendo cuando reiniciemos nuestro servidor, para ello en el fichero /etc/rc.local añadiremos:
/sbin/sysctl -w net.ipv4.ip_forward=1
Además activaremos que se cree nuestra interfaz de red con:
# systemctl enable wg-quick@wg0
Cliente de WireGuard Windows
Lo primero que haremos es descargarnos el cliente para Windows de la web de WireGuard. Una vez instalado procederemos a configura nuestro túnel, para ello haremos clic en “Add Tunnel” -> “Add empty tunnel…”:
Se nos abrirá una ventana con la public key de nuestro Windows y la private key (no borrar private key):
Antes de rellenar la configuración os haremos algunas aclaraciones sobre AllowedIPs, esta variable sirve para enrutar el tráfico por la VPN podemos optar por varias opciones:
- Enrutar solo tráfico privado: AllowedIPs = 10.0.8.0/24, 10.20.10.0/24
- Enrutar tráfico privado y cualquier IP pública de Clouding: AllowedIPs = 10.0.8.0/24, 10.20.10.0/24, 27.0.172.0/22,46.183.112.0/21,80.240.126.0/23,85.208.20.0/21,93.189.88.0/19,103.23.60.0/23,161.22.40.0/21,185.166.212.0/21,185.253.152.0/22,185.254.204.0/22,213.192.233.0/24,217.71.200.0/21
- Enrutar todo el tráfico: AllowedIPs = 0.0.0.0/0
Ahora procederemos a configurar nuestra VPN teniendo en cuenta estas variables:
- Interface > Private Key: dejaremos el valor que nos apareció al empezar a crear el túnel.
- Interface > Addreess: indicaremos la IP que queremos que nos asigne la VPN.
- Peer > PublicKey: indicaremos la clave pública de nuestro servidor, la que hemos generado en "Configuración de WireGuard".
- Peer > AllowedIPs: indicaremos el tráfico que queremos enrutar por la VPN.
- Peer > EndPoint: indicaremos la IP pública de nuestro servidor WireGuard y el puerto configurado en "Configuración de WireGuard".
El fichero de configuración quedaría así:
[Interface]
PrivateKey = KJf30VdqaaPR0jjUqk9pEm++Hg+sXyStPH8Ou2ggeHQ=
Address = 10.0.8.10/24
[Peer]
PublicKey = 78MlX8LqV/SNpfvOrrD3nhJmBo0cGtHD94PimCGXSCE=
AllowedIPs = 10.0.8.0/24, 10.20.10.0/24
Endpoint = 185.254.204.xxx:51820
Guardaremos los cambios y ahora procederemos a dar de alta el cliente en nuestro servidor indicando la public key de nuestro Windows:
# wg set wg0 peer vgJeO8S9ZDF4PkrwQPfahfpXS+qatvV4V37Q+g4AWH0= allowed-ips 10.0.8.10
Ahora ya podremos activar nuestra VPN con el botón de activate:
Cliente de WireGuard Linux o MacOS
Para configurar nuestra VPN en Linux o MacOS los pasos son bastante similares, también podemos descargar el cliente de MacOS desde la APP Store. Si queremos configurar la VPN desde linea de comandos los pasos son muy similares a la configuración del servidor.
Lo primero que haremos será generar nuestra llave pública y privada para nuestro pc con:
# wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey
Ahora que ya tenemos nuestras claves creadas podemos proceder a configurar una interfaz de red para WireGuard, para ello crearemos un fichero de configuración:
# vi /etc/wireguard/wg0.conf
Añadiremos el siguiente contenido:
[Interface]
PrivateKey = KJf30VdqaaPR0jjUqk9pEm++Hg+sXyStPH8Ou2ggeHQ=
Address = 10.0.8.10/24
[Peer]
PublicKey = 78MlX8LqV/SNpfvOrrD3nhJmBo0cGtHD94PimCGXSCE=
AllowedIPs = 10.0.8.0/24, 10.20.10.0/24
Endpoint = 185.254.204.xxx:51820
El fichero de configuración es como el de Windows, podemos elegir que IP queremos usar y que rangos queremos enrutar. En Peer hemos de indicar la clave pública de nuestro servidor WireGuard y en Interface la clave privada de nuestro PC.
Guardaremos los cambios y ahora procederemos a dar de alta el cliente en nuestro servidor indicando la public key de nuestro PC:
# wg set wg0 peer vgJeO8S9ZDF4PkrwQPfahfpXS+qatvV4V37Q+g4AWH0= allowed-ips 10.0.8.10
Ahora ya podemos activar o desactivar nuestra VPN con:
# wg-quick up wg0
# wg-quick down wg0
Test de velocidad
Llego el momento de las pruebas de velocidad, hemos realizado esta prueba con una fibra de 300 Mbps con pfSense + OpenVPN y un servidor con Ubuntu + WireGuard, los resultados hablan por si solos:
WireGuard:
OpenVPN:
Como podemos ver en estos test de iperf WireGuard ha sido mucho más rápido que OpenVPN.
Esperamos haberte ayudado con este artículo. Si te quedan dudas sobre esta u otra cuestión relacionada con tus servidores en Clouding, escríbenos a soporte@clouding.io. ¡Estamos para ayudarte! 😉