VPN WireGuard en CentOS 8

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: 60372

peer: 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.

Ver más grande

Ver más grande

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

4 Comments

Add a Comment

Comment spam protected by SpamBam