VPN WireGuard en CentOS 8
By: Date: abril 4, 2020 Categories: Consultoria y Manuales

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

5 thoughts on “VPN WireGuard en CentOS 8

  1. Usa: Google Chrome Google Chrome 27.0.1453.110 en Windows Windows 7 - Detectado...

    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

  2. Usa: Google Chrome Google Chrome 81.0.4044.92 en Windows Windows 7 - Detectado...

    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.

    1. Usa: Google Chrome Google Chrome 81.0.4044.113 en Windows Windows NT - Detectado...

      Si, lo uso diario estresando el tunel a su máxima capacidad, realmente ha mejorado mucho en rendimiento contra openvpn entre oficinas

  3. Usa: Mozilla Firefox Mozilla Firefox 86.0 en Ubuntu Linux Ubuntu Linux - Detectado...

    ¿que ip debo poner en endpoint? puedo inventar una o debe ser mi ip publica de toda la vida?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *