جی بلاگ | پیکربندی WireGuard VPN در Debian 10

En este artículo vamos a ver como montar una VPN con WireGuard en menos de 5 minutos.

Primero vamos a la parte teórica, pero puedes pasar directamente a la práctica si ya sabes como funciona.

En este articulo únicamente explicaremos como usar el script

¿Que es WireGuard?

WireGuard es una aplicación de software libre y de código abierto y un protocolo de comunicación que implementa técnicas de red privada virtual para crear conexiones seguras punto a punto en configuraciones enrutadas o puenteadas. 

https://es.wikipedia.org/wiki/WireGuard

Ventajas

  • Facilidad de instalación 
  • Ligera, el código fuente es muy ligero 
  • Facilidad de configuración 
  • Modo stand-by. Cuando el usuario no envía datos se pone en modo stand-by y ahorra batería 
  • Kill switch por defecto 

Desventajas

  • Todavía está en desarrollo 

Instalación

Para esta demo vamos a realizar la instalación en una instancia de EC2 de AWS. Nos saltaremos
la instalación del servidor y configuración de las reglas. Empezamos con una consola SSH abierta.

Instalación en servidor

Abrimos una terminal SSH del servidor que vamos a configurar

  1. Instalamos WireGuard desde los repositorios
apt update & apt upgrade
apt install wireguard

2. Una vez se haya instalado WireGuard correctamente vamos a la carpeta donde haremos toda la configuración.

cd /etc/wireguard

3. Generamos las claves. Con el siguiente comando vamos a generar la clave pública y privada a la vez

wg genkey | tee privatekey | wg pubkey > publickey

4. Comprobamos que se han creado correctamente y las copiamos para tenerlas a mano, ya que nos harán falta en todas las configuraciones

cat privatekey publickey

5. Creamos el archivo de configuración. El nombre que le demos a este archivo será el nombre de la interfaz.

nano wg0.conf

El archivo tendrá un aspecto similar al siguiente fragmento:

[Interface]
Address = [Dirección que tendrá dentro de la VPN]
PrivateKey = [Clave privada del servidor]
ListenPort = 51820 #Puerto por defecto

#Añadimos reglas iptables
#Con estas reglas redireccionamos el tráfico de la interfaz wg0 de la VPN a la interfaz eth0
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE;

#Aquí añadimos los clientes
#Cada Peer es un cliente, por lo que si queremos añadir más clientes tenemos que duplicar las siguientes líneas
[Peer]
PublicKey = [Clave pública del cliente]
AllowedIPs = [Direcciones IP que puede tomar] #Evitar la dirección 0.0.0.0/0

Address = Dirección IP que tendra la interfaz
Private = Clave privada que hemos generado para esta interfaz
ListenPort = puerto por el que estará escuchando para conectarse con los clientes
PostUp = Comando que se ejecuta al arrancar la interfaz
PostDown = Comando que se ejecuta al parar la interfaz
Peer = Cliente VPN
PublicKey = Clave publica de la interfaz que queramos configurar
AllowedIPs = Direcciones IPs permitidas para esa interfaz

6. Activar el reenvío IPv4

Además de crear las reglas en iptables también es necesario activar el reenvío o de lo contrario no funcionará. Para esto vamos al archivo /etc/sysctl.conf

nano /etc/sysctl.conf

Buscamos la línea que ponga net.ipv4.ip_forward=1 y la descomentamos y la ponemos a 1 en caso de que no lo este.
Guardamos y reiniciamos con:

sysctl –p

7. Iniciar la interfaz del servidor

Si queremos que el servicio se inicie cada vez que arranquemos el servidor usaremos el comando

systemctl enable wg-quick@[nombre de la interfaz(sin .conf)]
systemctl start wg-quick@[nombre de la interfaz (sin .conf)]

O también podemos iniciar el servicio una única vez con

wg-quick up [nombre de la interfaz (sin .conf)]

2.2 Instalación en cliente

  1. Repetimos los pasos de la instalación del servidor hasta el paso 5. El archivo de configuración del cliente es ligeramente distinto
[Interface]
Address = [Dirección que tendra dentro de la VPN]
PrivateKey = [Clave privada del cliente]
[Peer]
PublicKey = [Clave pública del servidor]
AllowedIPs = [Direcciones IP que puede tomar]
Endpoint = [Dirección IP pública del servidor donde está la VPN : Puerto]
PersistentKeepalive = 25

Endpoint –> Es la ruta donde se encuentra el servidor
PersistentKeepalive –> Envía un mensaje al servidor cada X segundos para comprobar que sigue vivo

2. Iniciamos la interfaz de igual manera que en el servidor

wg-quick up [nombre de la interfaz (sin .conf)]

2.3 Añadir cliente al servidor

Después de configurar el cliente y el servidor toca añadir el cliente a la configuración del servidor.
Para esto debemos tener acceso al servidor y tener la clave pública del cliente.
En el archivo de configuración de nuestra interfaz wg vamos a añadir las siguientes líneas por cada cliente que queramos agregar.

[Peer]
PublicKey = [Clave pública del cliente]
AllowedIPs = [Direcciones IP que puede tomar] #Evitar la dirección 0.0.0.0/0

Guardamos y reiniciamos el servicio, bien con systemctl o con wg down [interfaz] y wg up [interfaz]