Cómo instalar Wireguard VPN en Debian 11

Wireguard es un protocolo VPN gratuito y de código abierto alternativo a IPSec, IKEv2 y OpenVPN. Wiruguard está diseñado para sistemas operativos Linux y Unix. Se ejecuta en el espacio del núcleo de Linux, lo que hace que Wireguard sea más rápido y fiable. Wireguard se utiliza para crear conexiones de túnel seguras entre dos ordenadores o más.

Wireguard pretende sustituir a protocolos VPN como IPSec, IKEv2 y OpenVPN. Wireguard es más ligero, más rápido, más fácil de configurar y más eficaz. Y al mismo tiempo, Wiregurad no ha sacrificado el aspecto de seguridad del protocolo VPN. Wireguard admite criptografía moderna de última generación, como el marco del protocolo Noise, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF y construcciones seguras y de confianza.

Comparado con otros protocolos VPN como OpenVPN, IPSec e IKEv2, wireguard es un nuevo protocolo VPN. Wireguard fue lanzado en 2015 por Jason A. Donenfeld como un protocolo VPN alternativo. Linus Torvalds lo incorporó al kernel Linux v5.6 en 2020 y, ese mismo año, también lo portó a FreeBSD 13.

En este tutorial, instalarás y configurarás un servidor VPN mediante Wireguard en servidores Debian 11. Configurarás un servidor VPN Wireguard con un servidor Debian 11 y, a continuación, configurarás una máquina cliente para que se conecte al servidor VPN Wireguard.

En cuanto a la máquina cliente, puedes utilizar cualquier distribución de Linux, pero en este ejemplo se utiliza una máquina Debian.

Requisitos previos

Para empezar con este tutorial, debes tener los siguientes requisitos:

  • Un servidor Debian 11 – Este ejemplo utiliza un servidor Debian con el nombre de host ‘wireguard-servidory una dirección IP estática externa ‘SERVER-IP‘.
  • Una máquina Linux que se utilizará como cliente – Puedes utilizar cualquier distribución de Linux, pero este ejemplo utiliza una máquina Debian con el nombre de host cliente1.
  • Un usuario no root con privilegios de administrador sudo/root.

Si todos estos requisitos están listos, empecemos.

Instalación de Wireguard

Antes de instalar Wireguard, ejecuta el siguiente comando apt para actualizar y refrescar el índice de paquetes de Debian.

sudo apt update

Una vez actualizados los repositorios de Debian, ejecuta el siguiente comando apt para instalar el paquete Wireguard en tu servidor Debian. Esto también instalará el paquete wireguard-tools que se utilizará para gestionar la instalación de tu servidor Wireguard.

sudo apt install wireguard

Cuando se te pida confirmación, introduce y para confirmar y pulsa ENTER para continuar. Ahora debería comenzar la instalación.

instalar wireguard

Con Wireguard instalado en tu servidor, estás listo para generar los pares de claves Pública y Privada para el servidor y el cliente Wireguard.

Generar el par de claves pública/privada

En este paso, generarás un par de claves pública y privada para el servidor Wireguard y la máquina cliente. Y esto se puede hacer mediante la línea de comandos ‘wg’ que proporciona el paquete wireguard-tools.

El par de claves para el servidor será utilizado por el servidor Wireguard, y la máquina cliente utilizará el par de claves para el cliente. Si tienes varias máquinas cliente, puedes generar varios pares de claves para tus clientes.

Generar un par de claves para el servidor Wireguard

Ejecuta el siguiente comando ‘wg genkeypara generar la clave privada del servidor Wireguard. A continuación, cambia el permiso de la clave privada a‘0400‘, que deshabilitará el acceso de lectura y escritura para el grupo y otros.

En este ejemplo, generarás la clave privada ‘/etc/wireguard/server.key‘.

wg genkey | sudo tee /etc/wireguard/server.key
sudo chmod 0400 /etc/wireguard/server.key

A continuación, recibirás una clave aleatoria base64 de salida en la pantalla de tu terminal.

A continuación, ejecuta el siguiente comando ‘wg pubkey‘ para generar la nueva clave pública del servidor en ‘/etc/wireguard/server.pub‘. La clave pública del servidor se deriva de la clave privada del servidor‘/etc/wireguard/server.key‘.

sudo cat /etc/wireguard/server.key | wg pubkey | sudo tee /etc/wireguard/server.pub

A continuación, recibirás en tu terminal una clave pública aleatoria en base64.

generar par de claves del servidor

Ahora que has generado pares de claves pública y privada para el servidor Wireguard. La privada se encuentra en /etc/wireguard/servidor.keyy la clave pública se encuentra en /etc/wireguard/servidor.pub‘.

Ejecuta el siguiente comando cat para mostrar y verificar el par de claves generado para el servidor Wireguard.

cat /etc/wireguard/server.key
cat /etc/wireguard/server.pub

verificar el par de claves del servidor

Generar el par de claves para el cliente

Para el par de claves del cliente, puedes generarlo en cualquier máquina (servidor o cliente Wireguard) con las herramientas wireguard instaladas. En este paso, generarás un par de claves para el cliente desde el servidor Wireguard.

El proceso para generar un par de claves para el servidor y el cliente es el mismo, utilizando el comando ‘wg genkeypara generar la clave privada y utilizando el comando ‘wg pubkeypara generar la clave pública, que se deriva de la clave privada.

Ahora ejecuta el siguiente comando para crear un nuevo directorio‘/etc/wireguard/clients‘. Este directorio se utilizará para almacenar el par de claves del cliente.

mkdir -p /etc/wireguard/clients

Ejecuta el siguiente comando ‘wg genkey’ para generar la clave privada del cliente en ‘/etc/wireguard/clients/client1.key‘. A continuación, genera la clave pública del cliente mediante el comando «wgpubkey» en «/etc/wireguard/clients/client1.pub«.

wg genkey | tee /etc/wireguard/clients/client1.key
cat /etc/wireguard/clients/client1.key | wg pubkey | tee /etc/wireguard/clients/client1.pub

generar par de claves cliente

Ahora que se ha generado el par de claves del cliente, el par de claves clave pública se encuentra en /etc/wireguard/clientes/cliente1.pub y la clave clave privada es ‘/etc/wireguard/clientes/cliente1.key‘. Ejecuta el siguiente comando para mostrar y verificar el par de claves generado.

cat /etc/wireguard/clients/client1.key
cat /etc/wireguard/clients/client1.pub

verificar el par de claves del cliente

Configurar el Servidor Wireguard

En este paso crearás un nuevo archivo de configuración para el Servidor Wireguard. Pero antes, debes decidir qué subredes vas a utilizar para el servidor VPN Wireguard. También puedes decidir si activas o desactivas IPv6 para tu Servidor VPN Wireguard.

En este ejemplo, el servidor VPN Wireguard tendrá direcciones IP con la subred ‘10.8.0.2/24 ‘ y deshabilitar el IPv6 para la VPN Wireguard.

Crea un nuevo archivo de configuración Wireguard ‘/etc/wireguard/wg0.conf‘ utilizando el siguiente comando del editor nano.

sudo nano /etc/wireguard/wg0.conf

En primer lugar, añade las siguientes líneas al archivo para definir los detalles del servidor Wirguard. Y asegúrate de cambiar la‘PrivateKey‘ con la clave privada del servidor Wirguard‘server.key‘. Con esto, la interfaz del servidor Wireguard se ejecutará en la dirección IP‘10.8.0.1‘, abrirá el puerto UDP 51820 que está disponible para que se conecten los clientes, y el parámetro SaveConfig garantizará que cualquier cambio se guarde en el archivo de configuración, incluso cuando la interfaz Wireguard esté apagada.

[Interface]
# Wireguard Server private key - server.key
PrivateKey = SIybp8GHtKIPtHPBOQFP1kbQg4UCLCMyNIfCLBQR2EA=

# Wireguard interface will be run at 10.8.0.1
Address = 10.8.0.1/24

# Clients will connect to UDP port 51820
ListenPort = 51820

# Ensure any changes will be saved to the Wireguard config file
SaveConfig = true

A continuación, añade las siguientes líneas para definir la conexión entre pares cliente. Cambia el parámetro‘PublicKey‘ por la clave pública del cliente‘cliente1.pub‘. Y el parámetro ‘IPs permitidas‘ especificará qué cliente Wireguard permite el acceso a este par. En este ejemplo, sólo los clientes con IP‘10.8.0.2‘ podrán acceder a esta conexión paritaria. Pero, también puedes permitir el rango de subredes como ’10.8.0.0/24‘.

[Peer]
# Wireguard client public key - client1.pub
PublicKey = ENokvIsS2euXrmM4OVFHPmTdCZ4wfEIR/UHuGCW64lw=

# clients’ VPN IP addresses you allow to connect
# possible to specify subnet ⇒ [10.8.0.0/24]
AllowedIPs = 10.8.0.2/24

Guarda el archivo y sal del editor cuando hayas terminado.

Con el archivo de configuración del servidor Wireguard creado y la conexión cliente par añadida, a continuación configurarás el reenvío de puertos en el servidor Weireguard y configurarás el cortafuegos para establecer el enrutamiento del tráfico.

Activar el reenvío de puertos mediante /etc/sysctl.conf

En este paso, habilitarás el reenvío de puertos en el servidor Wireguard mediante el archivo /etc/sysctl.conf’. Puedes habilitar el reenvío de puertos tanto para IPv4 como para IPv6 en el servidor de guardia Wireguard.

Para empezar, abre el archivo de configuración ‘/etc/sysctl.conf‘ utilizando el siguiente comando del editor nano.

sudo nano /etc/sysctl.conf

Añade las siguientes líneas al archivo. Esto habilitará el reenvío de puertos en tu servidor Wireguard. Puedes utilizar ambos para IPv4 e IPv6, o puedes utilizar IPv4 si tienes IPv6 desactivado en tu servidor Wireguard.

# Port Forwarding for IPv4
net.ipv4.ip_forward=1

# Port forwarding for IPv6
net.ipv6.conf.all.forwarding=1

Guarda el archivo y sal del editor cuando hayas terminado.

A continuación, ejecuta la utilidad de comando sysctl que aparece a continuación para aplicar los cambios.

sudo sysctl -p

Recibirás una salida como ésta – El reenvío de puertos debería habilitarse inmediatamente.

activar reenvío de puertos

Con el Reenvío de puertos habilitado en el servidor Wireguard, a continuación configurarás el cortafuegos que dirigirá el tráfico de los clientes Wireguard a la interfaz de red específica.

Configurar el cortafuegos para el servidor Wireguard

En este paso, configurarás el cortafuegos que se utilizará para que el servidor Wireguard dirija las conexiones de los clientes a la interfaz de red adecuada que se utilizará para acceder a Internet. Esto también permitirá a los clientes de Wireguard acceder a internet a través de la interfaz específica del servidor Wireguard.

En primer lugar, ejecuta el siguiente comando apt para instalar el paquete cortafuegos ufw en tu servidor Debian.

sudo apt install ufw

Introduce y cuando se te pida y pulsa ENTER para continuar.

instalar ufw

Una vez instalado ufw, ejecuta el siguiente comando para abrir el servicio SSH y activar el cortafuegos ufw.

sudo ufw allow OpenSSH
sudo ufw enable

Cuando se te pida confirmación para activar el cortafuegos ufw, introduce y y pulsa INTRO. El cortafuegos ufw debería estar ejecutándose ahora en tu sistema y también estar habilitado.

start activar ufw

Ahora comprueba el estado del cortafuegos ufw mediante el siguiente comando. Deberías recibir una salida como«Estado: activo«, lo que significa que el estado del cortafuegos ufw es en ejecución.

sudo ufw status

Con el cortafuegos ufw en funcionamiento, a continuación lo configurarás para enrutar las conexiones del cliente Wireguard a la interfaz de red específica.

Ahora ejecuta el siguiente comando para comprobar la interfaz de la tabla de enrutamiento por defecto en el servidor Wireguard. Por lo general, esto detectará una interfaz que se utilice para acceder a Internet o en la que esté disponible la dirección IP pública.

ip route list default

Recibirás una salida como ésta – Este ejemplo es la interfaz eth0 es la tabla de enrutamiento por defecto para el servidor Wireguard. Y ésta es la interfaz que se utiliza para acceder a Internet. Puede que tengas un nombre de interfaz diferente.

mostrar ruta por defecto

A continuación, abre el archivo de configuración del servidor Wireguard‘/etc/wireguard/wg0.conf‘ utilizando el siguiente comando del editor nano.

sudo nano /etc/wireguard/wg0.conf

Añade las siguientes líneas al archivo ‘[Interfaz]‘.

[Interface]
...
....
PostUp = ufw route allow in on wg0 out on eth0
PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
PostUp = ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
PreDown = ufw route delete allow in on wg0 out on eth0
PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
PreDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Guarda el archivo y sal del editor cuando hayas terminado.

  • El parámetro ‘PostUp‘ se ejecutará siempre que el servidor Wirguard inicie el túnel VPN.
  • El parámetro ‘PreDown‘ se ejecutará siempre que el servidor Wireguard detenga el túnel VPN.
  • El comando‘ufw route allow in on wg0 out on eth0‘ permite reenviar el tráfico que entra por la interfaz wg0 a la interfaz de internet eth0.
  • El comando ‘ iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE ‘ habilitará el enmascaramiento y reescribirá el tráfico IPv4 de la interfaz wg0 para que parezca la conexión directa desde el servidor Wireguard.
  • El comando‘ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE’ habilitará el enmascaramiento y reescribirá el tráfico IPv46 de la interfaz wg0 para que parezca una conexión directa desde el servidor Wireguard.

Ahora ejecuta el siguiente comando ufw para abrir el puerto UDP 51820 al que se conectarán los clientes.

sudo ufw allow 51820/udp

Por último, ejecuta el siguiente comando para recargar el cortafuegos ufw y aplicar los cambios. A continuación, verifica la lista de reglas ufw mediante el comando siguiente.

sudo ufw reload
sudo ufw status

Recibirás una salida como la de esta captura de pantalla – El puerto UDP 51820 que el servidor Wireguard utilizará para las conexiones de los clientes añadido al cortafuegos ufw.

configurar ufw firewall

Ahora ya has activado el reenvío de puertos y configurado el cortafuegos en el servidor Wireguard. Ahora estás preparado para iniciar el servidor Wireguard.

Iniciar el servidor Wireguard

En este paso, iniciarás y activarás el servidor Wireguard. También verificarás el servidor Wireguard y verificarás la interfaz wg0 que creará el servicio Wireguard.

Ejecuta la siguiente utilidad de comandos systemctl para iniciar y habilitar el servicio Wireguard. El servicio[email protected]‘ creará y habilitará la interfaz Wireguard‘wg0‘ en tu servidor Wireguard.

sudo systemctl start [email protected]
sudo systemctl enable [email protected]

Ahora verifica el servicio Wireguard mediante el siguiente comando.

sudo systemctl status [email protected]

Recibirás una salida similar a la siguiente captura de pantalla – El servicio Wireguard ‘[email protected]‘ se está ejecutando y está habilitado. Esto también significa que la interfaz «wg0» está creada y en funcionamiento.

start enable verificar servidor wireguard

Ejecuta el siguiente comando para verificar la interfaz «wg0» en tu servidor Wireguard.

ip a show wg0

Deberías recibir una salida como ésta – La interfaz wg0 de Wireguard obtiene una dirección IP‘10.8.0.1‘, como se describe en el archivo de configuración de Wireguard‘/etc/wireguard/wg0.conf‘.

verificar interfaz wg0

Además, también puedes iniciar y detener Wireguard mediante el comando ‘wg-quick‘ como se indica a continuación. El comando «wg-quickup» iniciará el servidor Wireguard, y el «wg-quick down» lo detendrá.

sudo wg-quick up /etc/wireguard/wg0.conf
sudo wg-quick down /etc/wireguard/wg0.conf

Con el servidor Wireguard en marcha, a continuación configurarás la máquina cliente y la conectarás al servidor Wireguard.

Configurar la máquina cliente y conectarla al servidor Wireguard

En este paso, configurarás el equipo cliente instalando las herramientas de wireguard, creando una nueva configuración de Wireguard para el cliente, conectándote al servidor VPN de Wireguard y, por último, verificando la conexión y asegurándote de que el equipo cliente puede acceder a Internet y a la red VPN local.

Instala el paquete«wireguard-tools» en la máquina cliente. Esto utiliza una Debian como cliente, por lo que se utilizará el comando APT.

sudo apt install wireguard-tools

La instalación debería comenzar automáticamente.

instalar cliente wireguard

Una vez instaladas las herramientas de wireguard, crea un nuevo archivo de configuración‘/etc/wireguard/wg-client1.conf‘ utilizando el siguiente comando del editor nano.

sudo nano /etc/wireguard/wg-client1.conf

Añade las siguientes líneas al archivo.

[Interface]
# Define the IP address for the client - must be matched with wg0 on Wireguard Server
Address = 10.8.0.2/24
# specific DNS Server
DNS = 1.1.1.1

# Private key for the client - client1.key
PrivateKey = KPI59QH0jwc9wkUsW5Byci9ojXhz1322QXK52fQCE3E=

[Peer]
# Public key of the Wireguard server - server.pub
PublicKey = Qt6oRLtlfAR490lTNb2K8TlbpwADV1j8NX7D5HY38EM=

# Allow all traffic to be routed via Wireguard VPN
AllowedIPs = 0.0.0.0/0

# Public IP address of the Wireguard Server
Endpoint = SERVER-IP:51820

# Sending Keepalive every 25 sec
PersistentKeepalive = 25

Guarda y cierra el archivo cuando hayas terminado.

En la sección ‘[Interfaz]‘, debes definir lo siguiente:

  • La dirección IP del cliente debe coincidir con la subred del servidor Wireguard. En este ejemplo, el cliente Wireguard obtendrá la dirección IP ‘10.8.0.2’.
  • Especifica el servidor DNS para el cliente.
  • Cambia el parámetro ‘PrivateKey‘ por la clave privada del cliente que has generado, ‘cliente1.key‘.En la sección ‘[Peer]’, debes añadir lo siguiente:
  • La clave pública del servidor Wireguard ‘server.pub‘ al parámetro PublicKey.
  • Especifica ‘IPs permitidas‘ para restringir el acceso en el par VPN, puedes especificar subredes de redes o simplemente poner 0.0.0.0/0 para tunelizar todo el tráfico a través de la VPN.
  • Especifica el parámetro Punto final con la dirección IP pública del servidor Wireguard o utiliza un nombre de dominio.

Una vez creada la configuración del cliente, ejecuta el siguiente comando para iniciar Wireguard en la máquina cliente.

wg-quick up wg-client1

Deberías recibir una salida similar a esta captura de pantalla – Se creará la nueva interfaz Wireguard ‘wg-client1‘ y la máquina cliente debería estar conectada al servidor Wireguard que se ejecuta en ‘SERVER-IP:51820‘.

configurar cliente wireguard

Ejecuta el siguiente comando para verificar la interfaz Wireguard ‘wg-client1‘.

ip a show wg-client1

La interfaz wg-client1 está activa con una dirección IP«10.8.0.2«, que forma parte de la subred del servidor Wireguard«10.8.0.0/24».

comprobar interfaz wireguar clcinet

También puedes verificar la conexión Wireguard mediante el comando ‘wg show‘.

Ejecuta el siguiente comando ‘wg show’ en la máquina cliente y deberías recibir una salida como ésta.

wg show

Si estás conectado al servidor Wireguard correcto, deberías ver la dirección IP del servidor Wirguard en la sección‘endpoint‘ y ver la clave pública del servidor Wirguard ‘servidor.pub‘.

wg mostrar cliente

Ahora dirígete al servidor Wireguard y ejecuta el comando‘wg show‘.

wg show

En la sección «endpoint « verás la dirección IP pública del cliente, y en la sección «peer» verás la clave pública del cliente. cliente1.pub‘.

wg mostrar servidor wireguard

Por último, ejecuta el siguiente comando para asegurarte de que la máquina cliente puede acceder a Internet o a la subred de la red interna de la VPN Wireguard.

ping -c5 10.8.0.1
ping -c5 1.1.1.1
ping -c5 duckduckgo.com

A continuación se muestra el resultado que deberías obtener:

La máquina cliente puede conectarse al servidor Wireguard con una dirección IP ‘10.8.0.1‘.

ping al servidor wireguard

El equipo cliente puede acceder a Internet. Todo el tráfico se encamina a través de la dirección IP pública del servidor Wireguard.

ping a internet

Ahora, si quieres detener el Wrieguard en la máquina cliente, puedes ejecutar el siguiente comando‘wg-quick down

wg-quick down wg-client1

Recibirás la salida de la siguiente manera. Además, la interfaz wg-client1 se disipará de la máquina cliente.

ping con dominio

Ahora ya has configurado la VPN Wirguard en la máquina cliente. También has verificado la conexión entre la máquina cliente y el servidor Wireguard.

Conclusión

En este tutorial, has instalado y configurado Wireguard VPN en un servidor Debian 11. También has configurado una máquina Debian y te has conectado con éxito al servidor VPN Wireguard.

En concreto, has instalado el paquete VPN de Wireguard, has generado un par de claves pública y privada tanto para el servidor como para el cliente, has configurado el cortafuegos UFW para enrutar el tráfico VPN a la interfaz de red específica y has habilitado el reenvío de puertos mediante el archivo /etc/sysctl.conf.

Con esto en mente, ahora puedes añadir más clientes a tu servidor VPN Wireguard generando otro par de claves para el cliente, definiendo la conexión entre pares en el servidor Wireguard y creando después un nuevo archivo de configuración Wireguard que utilizará la máquina cliente. Para saber más sobre Wireguard, visita la documentación oficial de Wireguard.

También te podría gustar...