WireGuard es una VPN de ultima generación, que funciona de forma privilegiada dentro del kernel de Linux lo que le da una ligereza que no tiene OpenVPN. Esta VPN esta pensada para ser fácil de implementar y para ser mas veloz que IPSec u OpenVPN
En este artículo se configurará en CentOS 8, salvo se indique lo contrario los siguientes pasos se tiene que hacer en el lado servidor y en el lado cliente ( En realidad ambos lados son Peers ) el servidor tendrá la IP global de internet 192.155.87.230 y en el túnel 200.34.35.1 y el cliente no requiere IP global fija y tendrá la ip en el túnel 200.34.35.2
Requisitos
Habilitar repositorios
yum install epel-release -y
yum install ‘dnf-command(config-manager)’ -y
yum config-manager –set-enabled PowerTools
yum copr enable jdoss/wireguard -y
Instalar WireGuard
yum install wireguard-dkms wireguard-tools -y
Crear el directorio /etc/wireguard/ para el archivo de configuración de interface y la llave pública y privada
mkdir /etc/wireguard/ ; touch /etc/wireguard/wg0.conf ;chmod og-wrx /etc/wireguard/ -R
Generar las llaves dentro del directorio /etc/wireguard
wg genkey > privatekey ; cat privatekey | wg pubkey > publickey ; chmod go-wrx privatekey publickey
Configurar la interface del servidor ( Peer A ) en el archivo
/etc/wireguard/wg0.conf
[Interface]
#IP del túnel en el servidor
Address = 200.34.35.1/32
#Puerto de escucha
ListenPort = 31194
#Asignar la cadena almacenada en: /etc/wireguard/privatekey, ejemplo:
PrivateKey = cBRd8MhXckz5ZnNRvk8F+r0558sfJlI0YdJ7ZQfWqUM=
#Clientes en bloques Peer
[Peer]
#Texto almacenado en el /etc/wireguard/pubkey del cliente
PublicKey = bsPJHph1C/jxg6suouqKTWQhBK/1OEq8fZRXxUfHfGs=
#Permitir la IP del túnel del cliente
AllowedIPs = 200.34.35.2/32
Arrancar la interface wg0 con systemctl start wg-quick@wg0
Ejecutar wg, la salida debe ser similar a:
#wg
interface: wg0
public key: py+3ImPAGBA8Osaa5T5beb5R6PHkQ5iv5c1bpJHFjEg=
private key: (hidden)
listening port: 31194
Configurar el cliente ( Peer B ) en el archivo /etc/wireguard/wg0.conf
[Interface]
#Asignar la cadena en privatekey, ejemplo:
PrivateKey = gJ0NWwjO0w+JIWK+1ysryCR1FrGoGb/rtSWXO/XWSmU=
#IP del tunel en el cliente
Address = 200.34.35.2/32
#En el cliente el bloque Peer es el servidor
[Peer]
#Asignar el texto de publickey del servidor, ejemplo
PublicKey = py+3ImPAGBA8Osaa5T5beb5R6PHkQ5iv5c1bpJHFjEg=
#Lista de acceso de IPS de otros nodos o del servidor
AllowedIPs = 200.34.35.1/32
#IP Global para recibir conexiones en IPv4 o IPv6 del servidor
Endpoint = 192.155.87.230:31194
#Revisar que la conexión esta viva cada 15 segundos
PersistentKeepalive = 15
Arrancar la interface wg0 con systemctl start wg-quick@wg0
Ejecutar wg, la salida debe ser similar a:
wg
interface: wg0
public key: bsPJHph1C/jxg6suouqKTWQhBK/1OEq8fZRXxUfHfGs=
private key: (hidden)
listening port: 60372peer: py+3ImPAGBA8Osaa5T5beb5R6PHkQ5iv5c1bpJHFjEg=
endpoint: 192.155.87.230:31194
allowed ips: 200.34.35.1/32
transfer: 0 B received, 444 B sent
persistent keepalive: every 15 seconds
Permisos para pasar redes entre los peers
En este ejemplo cada peer le da permiso a su contrario en la directiva allowed ips, wireguard controla que solo esas IP pasarán, si se quiere pasar redes LAN detrás del túnel deberán ser especificas dichas redes
Ejemplo:
allowed ips = 200.34.35.1/32, 192.168.0.0/16
Pruebas de rendimiento
Para las imágenes se contrato 2 VPS, uno en USA y el otro en Alemania para tener latencia significativa y poder medir rendimientos. Se descargó de Alemania a USA un archivo ISO de CentOS 8 en 3 formas distintas, 1 de IP a IP global, 2 con OpenVPN usando las IP del tunnel y usando las IP del tunel usando WireGuard.
El resultado es:
IP a IP Global un tiempo aproximado de 6 Minutos
WireGuard se duplica el tiempo a un aproximado de 12 minutos
OpenVPN Se requiere un giga por hora, 7 Horas para pasar el ISO
siempre será mas rápido ikev2 que cualquier otro protocolo. menos fallas de desconección, mas rápida la conección y desconección, y por si fuera poco, si fuera una conección transparente, de forma automática se bloquea aún mejor. tiene mejor velosidad al cargar las páginas, incluso que el propio internet del router
Lo cierto es que también es mas veloz que IPSec
Hola Last Dragon, ¿Tienes experiencia en utilizarlo con 200/400 clientes en simultáneo o sólo punto a punto?
Consulto , porque esa prueba de arriba, no es válida para dejar de lado OpenVPN y cambiar a WireGuard, ya que no muestra realmente la potencia del protocolo, sino velocidad y latencia entre dos puntos.
Gracias, muy bueno tu blog.
Si, lo uso diario estresando el tunel a su máxima capacidad, realmente ha mejorado mucho en rendimiento contra openvpn entre oficinas
¿que ip debo poner en endpoint? puedo inventar una o debe ser mi ip publica de toda la vida?