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.
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.
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
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
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
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.
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.
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.
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.
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.
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.
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‘.
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.
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‘.
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».
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‘.
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‘.
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‘.
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.
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.
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.