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. Si ponemos AllowedIPs = 0.0.0.0/0, ::0/0 enrutaremos todo nuestro tráfico a través de la VPN (saldriamos a internet con la IP de la red remota, pero la velocidad de navegación sería mucho más lenta), para esto haría falta tener activado el reenvío de paquetes
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