Contenidos
Introducción
Existen varios tipos de VPN: PPTP, L2TP/IPSEC, OpenVPN, SSTP, IKEV2.

La más recomendada habitualmente es OpenVPN, pero ha surgido recientemente un nuevo tipo de VPN llamada Wireguard que destaca por su seguridad, facilidad de configuración y sobretodo velocidad.
Veamos como instalarla y configurarla.
Escenario
Vamos a instalar un servidor VPN en Ubuntu 18.04 (también ha funcionado con Ubuntu 16.04) que nos permitirá conectarnos desde fuera, con Windows 10, no solo al propio servidor VPN, sino a cualquier equipo que esté en su misma red.
Con esta configuración no podremos salir a internet desde la red del cliente con la IP del servidor VPN, aunque con Wireguard es posible.
Vamos a usar estos datos en nuestro ejemplo:
- Red del servidor: 192.168.0.0/24
- Red del cliente remoto: 192.168.1.0/24
- Red virtual: 192.168.2.0/24
- Puerto UDP: 51820
Instalación del servidor
Wireguard no se encuentra todavía en los paquetes de Ubuntu, así que debemos añadir primero el repositorio antes de instalar:
sudo add-apt-repository ppa:wireguard/wireguard
sudo apt update
sudo apt install wireguard
Si todo ha ido bien veremos un mensaje como este:
wireguard:
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/4.15.0-91-generic/updates/dkms/
depmod...
DKMS: install completed.
Configurando wireguard (1.0.20200319-0ppa1~18.04) ...
Configurando linux-headers-generic (4.15.0.91.83) ...
Configuración del servidor
Reenvío de paquetes
Si queremos acceder a la LAN del servidor remoto, debemos activar primero el reenvío de paquetes:
Activar reenvío de paquetes manualmente
sysctl -w net.ipv4.ip_forward=1
Activar reenvío de paquetes de forma permanente
Editar archivo /etc/sysctl.conf y poner a 1 la variable net.ipv4.ip_forward
Generación de claves
La conexión entre el servidor y los clientes de wireguard se hace mediante pares de claves, como con SSH.
Generaremos, como root, las claves para nuestro servidor en /etc/wireguard
cd /etc/wireguard
wg genkey | tee privatekey | wg pubkey > publickey
chmod 600 privatekey publickey
Creamos el fichero de configuración /etc/wireguard/wg0.conf con este contenido:
[Interface]
Address = 192.168.2.1/24
SaveConfig = true
ListenPort = 51820
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o enp1s0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o enp1s0 -j MASQUERADE
PrivateKey = XXXXXXXXXX
[Peer]
#Equipo 1
PublicKey = YYYYYYYYYYY
AllowedIPs = 192.168.2.0/24
[Peer]
#Equipo 2
PublicKey = ZZZZZZZZZZ
AllowedIPs = 192.168.2.5/32
- Interface: en esta sección añadimos los datos del servidor
- Address: Define la IP privada de la red virtual que queremos asignar al servidor.
- SaveConfig: Le decimos al archivo de configuración que se actualice automaticamente cada vez que se conecte un nuevo cliente.
- ListenPort: El puerto UDP usado para las conexiones entrantes que deberemos abrir en nuestro router.
- PostUp y PostDown: aquí indicamos comandos que se ejecutarán al activar y desactivar la interface respectivamente.
- PrivateKey: La clave privada que generamos anteriormente en el archivo privatekey y que no debemos compartir con nadie.
- Peer: aquí añadimos los datos de los clientes que se conectarán
- PublicKey: la clave pública del cliente. Luego veremos como generarla.
- AllowedIPs: Podemos indicar la subred de la IP que tendrá el cliente (ejemplo equipo 1) o la IP concreta que tendrá (ejemplo equipo 2).
Iniciar el servicio
Podemos iniciar el servicio con este comando:
wg-quick up wg0
Se creará una nueva interfaz de red llamada wg0 con la IP que hemos configurado antes. Podemos comprobarlo con ifconfig o ip a.
Otro comando para comprobar si se está ejecutando la VPN y obtener otra información interesante, como tiempo de funcionamiento y cantidad de datos transferidos:
wg show
Para parar el servicio:
wg-quick down wg0
Para configurar el arranque automático de la VPN al reiniciar:
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0.service
Configuración del cliente
Podemos facilitar la conexión de clientes con interfaces web como una de estas:
Wireguard es compatible con gran cantidad de Sistemas Operativos: Windows, Linux, MacOS e incluso Android e iOS. Vamos a ver como configurarlo en Windows:
Descargamos e instalamos el cliente oficial desde la página de Wireguard
Abrimos la aplicación y seleccionamos la opción Add empty tunnel y nos aparecerá una ventana con nuestra clave pública y privada y espacio para escribir la configuración, que en nuestro caso sería:
[Interface]
PrivateKey = XXXXXXXXXXX
Address = 192.168.2.13/32
[Peer]
PublicKey = ZZZZZZZZZZZZZ
Endpoint = 88.200.20.20:51820
AllowedIPs = 192.168.2.0/24, 192.168.0.0/24
- Interface: en esta sección añadimos los datos de nuestro equipo:
- PrivateKey: Nuestra clave privada. Se genera automaticamente.
- Address: La IP privada que tendrá nuestro equipo en la red virtual.
- Peer: aquí añadimos los datos del servidor al que nos conectaremos
- PublicKey: la clave pública del servidor.
- Endpoint: IP pública y puerto del servidor.
- AllowedIPs: Aquí indicaremos dos subredes: la virtual y la subred real donde se encuentra el servidor. Esta última es muy importante, ya que sin ella no podremos acceder a la LAN del servidor.
Le asignamos un nombre al túnel, guardamos los cambios y damos a Activate.
Podemos añadir este cliente en el servidor simplemente con este comando:
wg set wg0 peer clave-publica-cliente allowed-ips 192.168.2.13/32
Podemos comprobar si la conexión se ha realizado desde la pestaña Log de Wireguard, o bien haciendo ping a la IP local del servidor o de algún otro equipo de su red.
OJO, aunque ponga estado sea Activo y el icono en verde, no significa que tengamos realmente conexión con el servidor. Comprobar en transfer que tenemos datos tanto enviados como recibidos y la pestaña de log para comprobar errores.
El cliente conserva su estado tras apagar o reiniciar el ordenador: si teniamos la conexión activa seguirá estando activa y si estaba desactivada así seguirá. Incluso si cerramos el programa, tras reiniciar no se abrirá.
Información adicional
- Web oficial Wireguard
- Con este instalador podemos instalar y configurar Wireguard muy fácilmente.
- Wiki de Arch Linux
- Wintune: Cliente alternativo
- Tunsafe: Cliente alternativo
- Permitir manejo de interfaz WireGuard con usuarios no administradores en Windows
Deja una respuesta