Cómo instalar Wireguard VPN en Rocky Linux 9

Wireguard es un protocolo VPN 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 kernel 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 es compatible con la criptografía moderna, como el marco del protocolo Noise, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF y construcciones seguras 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, fue incorporado al kernel Linux v5.6 por Linus Torvalds en 2020 y ese mismo año, también fue portado a FreeBSD 13.

Esta guía te enseña a instalar y configurar Wirgeuard Server en un servidor Rocky Linux 9. También aprenderás a configurar una máquina cliente para que se conecte al servidor Wireguard.

Puedes utilizar cualquier distribución de Linux como máquina cliente en este ejemplo. Pero en esta guía se utilizará la máquina cliente Rocky Linux, una de las distribuciones basadas en RHEL9.

Requisitos previos

Para empezar con esta guía, debes asegurarte de que tienes los siguientes requisitos:

  • Un servidor Rocky Linux 9 – Este ejemplo utiliza un Rocky Linux con nombre de host‘wireguard-rocky‘.
  • Un usuario no root con privilegios de administrador sudo/root.
  • Un SELinux ejecutándose en modo permisivo.

Ahora que ya tienes listos los requisitos previos, puedes empezar a instalar y configurar el servidor Wireguard.

Habilitar el módulo del kernel Wireguard

La última versión de Rocky Linux 9 viene con el kernel Linux 5.14 por defecto, que lleva incorporado el módulo del kernel ‘wireguard’. En este paso, habilitarás el módulo del kernel Wirguard e instalarás las ‘wireguard-tools’ en tu servidor Rocky Linux.

Ejecuta el siguiente comando modprobe para activar el módulo del núcleo «wireguard». A continuación, comprueba la lista de módulos del núcleo habilitados mediante el comando ‘lsmod’.

sudo modprobe wireguard
lsmod | grep wireguard

Si el módulo del núcleo «wireguard» está activado, deberías recibir una salida similar a la siguiente:

activar wireguard

Para cargar el módulo wireguard de forma permanente, puedes ejecutar el siguiente comando para añadir el nuevo archivo de configuración al directorio‘/etc/modules-load.d/’. Esto cargará el módulo del núcleo wireguard permanentemente al arrancar el sistema.

sudo echo wireguard > /etc/modules-load.d/wireguard.conf

Una vez activado el módulo del núcleo‘wireguard‘, debes instalar el paquete‘wireguard-tools‘ para gestionar el servidor Wireguard. Esto incluye la generación de claves, el arranque del servidor Wireguard y muchas cosas más.

Ejecuta el siguiente comando dnf para instalar«wireguard-tools«. Cuando te pida confirmación, introduce y y pulsa ENTER para continuar.

sudo dnf install wireguard-tools

Ahora debería comenzar la instalaciónde‘wireguard-tools’.

instalar herramientas wireguard

Tu servidor Rocky Linux tiene ahora el módulo del kernel ‘wireguard‘ activado y las ‘wireguard-tools‘ instaladas. A continuación, verás cómo generar pares de claves tanto para el servidor como para el cliente de Wireguard mediante las «wireguard-tools».

Generar el par de claves del servidor y del cliente

Las herramientas wireguard proporcionan una línea de comandos en el espacio de usuario para gestionar el despliegue de Wireguard. Hay dos utilidades principales proporcionadas por wireguard-tools:

  • wg – una utilidad de línea de comandos que puede utilizarse para configurar la interfaz de túnel de wireguard. Con esta utilidad, puedes generar pares de claves, verificar el tiempo de ejecución y la interfaz actuales de wireguard, y configurar la interfaz de túnel de Wireguard.
  • wg-quick – una sencilla línea de comandos que puede gestionar la interfaz Wireguard. Puedes iniciar, detener y reiniciar cualquier interfaz wireguard mediante el comando wg-quick.

El primer paso tras habilitar el módulo del núcleo wireguard e instalar wireguard-tools es generar pares de claves para el servidor y el cliente Wireguard. Y esto se puede hacer mediante la utilidad de comandos‘wg‘.

Generar el par de claves del servidor

Ejecuta el siguiente comando ‘wg genkey’ para generar la clave privada del servidor ‘/etc/wireguard/servidor.key‘. A continuación, cambia el permiso por defecto a ‘0400para deshabilitar la escritura y ejecución de otras personas y grupos.

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

Después, ejecuta el siguiente comando para generar la clave pública para el servidor wireguard ‘/etc/wireguard/servidor.pub‘. La clave pública de wireguard se deriva de la clave privada de wireguard ‘/etc/wireguard/servidor.key‘.

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

Salida:

generar par de claves del servidor

A continuación, verifica las claves pública y privada del servidor wireguard mediante el comando cat que aparece a continuación.

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

Puede que tengas una clave diferente para las claves pública y privada, pero la salida es similar a ésta:

verificar el par de claves del servidor

Generación del par de claves del cliente

Tras generar el par de claves del servidor wireguard, generarás uno nuevo para el cliente. En este ejemplo, generarás un nuevo par de claves con el nombre«cliente1«.

Ejecuta el siguiente comando para crear un nuevo directorio ‘/etc/wireguard/clientes‘. Este directorio se utilizará para almacenar los pares de claves de cliente.

mkdir -p /etc/wireguard/clients

A continuación, ejecuta el siguiente comando ‘wg genkey’ para generar la clave privada del cliente /etc/wireguard/clientes/cliente1.key‘. A continuación, genera la clave pública del cliente ‘/etc/wireguard/clientes/cliente1.pubmediante el comando‘wg pubkey‘.

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

Salida:

generar par de claves cliente

Ahora verifica las claves pública y privada de ambos clientes utilizando el comando cat que aparece a continuación.

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

La clave debe ser similar para el par de claves del servidor y del cliente wireguard, que es una clave de tipo base64.

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, configurarás la interfaz wireguard y configurarás la conexión peer para las conexiones cliente. Esto incluye la configuración de la subred VPN wireguard, la dirección IP del servidor wireguard y la dirección IP para el cliente par.

Para empezar, crea un nuevo 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 y asegúrate de cambiar la‘PrivateKey‘ por la clave privada del servidor Wirguard‘server.key‘. Con esto, también configurarás la interfaz del servidor Wireguard para que se ejecute en la dirección IP‘10.8.0.1‘. Y para la conexión con el cliente, utilizarás el puerto UDP 51820. Y, por último, también activarás el parámetro SaveConfig que garantizará que cualquier cambio se guarde en el archivo de configuración de Wireguard, incluso cuando la interfaz Wireguard esté apagada.

[Interface]
# Wireguard Server private key - server.key
PrivateKey = iHaI5bkEbW8wqTQDbU/KITGhxtKoiezWVohVZsKwj3w=

# 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 peer cliente. Asegúrate de cambiar el parámetro‘PublicKey‘ por la clave pública del cliente‘cliente1.pub‘. Con el parámetro ‘IPs permitidas‘, puedes especificar qué cliente Wireguard puede acceder a este par. En este ejemplo, sólo los clientes con IP‘10.8.0.8‘ podrán acceder a esta conexión par. Además, también puedes permitir que el rango de subredes de la red interna, como ‘172.16.100.0/24’, acceda al par Wireguard.

[Peer]
# Wireguard client public key - client1.pub
PublicKey = iWskvxyj+QK4185xO6Z2Fb0XYo1jGyiyI3iKbyGTkT8=

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

Guarda y sal del archivo cuando hayas terminado.

Con esto, ya has creado la configuración básica para el servidor Wreguard. Además, has definido la conexión peer para el cliente utilizando la clave pública del cliente‘cliente1.pub‘. En el siguiente paso, configura el reenvío de puertos en el servidor wireguard y configura las reglas firewalld para el enrutamiento del tráfico.

Configurar el reenvío de puertos

Para configurar cualquier servidor VPN, debes habilitar el reenvío de puertos en tu servidor de despliegue. En este paso, habilitarás el reenvío de puertos en tu servidor Rocky Linux mediante el archivo ‘/etc/sysctl.conf’.

Abre el archivo de configuración ‘/etc/sysctl.conf‘ utilizando el editor nano que aparece a continuación.

sudo nano /etc/sysctl.conf

Añade las siguientes líneas al final del mismo. Estas líneas habilitarán el reenvío de puertos tanto para IPv4 como para IPv6. Tanto si necesitas IPv6 como si no, puedes desactivarlo poniendo un comentario‘#’ al principio de la línea.

# 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.

Ahora ejecuta el siguiente comando‘sysctl‘ para aplicar los cambios en el archivo‘/etc/sysctl.conf‘.

sudo sysctl -p

Y recibirás una salida similar a ésta:

activar el reenvío de puertos

Con el Reenvío de Puertos activado, a continuación configurarás un cortafuegos que se utilizará para enrutar el tráfico de los clientes a la interfaz de red específica del servidor wireguard.

Configurar el cortafuegos

En este paso configurarás el firewalld en el servidor Wireguard. Enrutarás el tráfico de los clientes a la interfaz de red específica del servidor wireguard a través de firewalld. Y esto se puede hacer añadiendo nuevas reglas a firewalld de forma permanente, o utilizando los parámetros‘PostUp‘ y‘PostDown’ de wireguard en el archivo de configuración de Wireguard.

Antes de empezar, ejecuta el siguiente comando ip para comprobar la interfaz de red por defecto que se utiliza para acceder a Internet en el servidor wireguard.

ip route show default

Recibirás una salida similar a ésta – En este ejemplo, el servidor wireguard utilizaba la interfaz eth0 para el acceso a Internet. Puede que tengas nombres diferentes de interfaces de red en tu servidor.

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 a la sección ‘[Interfaz]‘.

PostUp = firewall-cmd --zone=public --add-masquerade
PostUp = firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i wg -o eth0 -j ACCEPT
PostUp = firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o eth0 -j MASQUERADE

PostDown = firewall-cmd –zone=public –remove-masquerade
PostDown = firewall-cmd –direct –remove-rule ipv4 filter FORWARD 0 -i wg -o eth0 -j ACCEPT
PostDown = firewall-cmd –direct –remove-rule ipv4 nat POSTROUTING 0 -o eth0 -j MASQUERADE

Guarda y sal del archivo.

  • El parámetro ‘PostUp‘ se ejecutará cada vez que el servidor Wirguard inicie el túnel VPN.
  • El parámetro «PostDown» se ejecutará cada vez que el servidor Wireguard detenga el túnel VPN.
  • El comando‘firewall-cmd –zone=public –add-masquerade‘ habilitará el enmascaramiento en firewalld.
  • El comando ‘firewall-cmd–direct –add-rule ipv4 filter FORWARD 0 -i wg -o eth0 -j ACCEPT‘ añadirá firewalld rich-rule para el tráfico desde la interfaz wireguard a eth0.
  • El comando ‘firewall-cmd –direct –add-rule ipv4 nat POSTROUTING 0 -o eth0 -j MASQUERADE‘ habilitará NAT a través de la interfaz eth0.
  • En el parámetro ‘PostDown‘, todos estos comandos se utilizan para revertir los cambios en firewalld eliminando las reglas que se aplicaron durante la ejecución de los comandos en el parámetro‘PostUp‘.

A continuación, ejecuta el siguiente comando firewall-cmd para abrir el puerto UDP 51820 que se utilizará para los clientes de wirguard. A continuación, recarga el firewalld para aplicar los cambios.

sudo firewall-cmd --add-port=51820/udp --permanent
sudo firewall-cmd --reload

Por último, verifica las reglas del firewalld mediante el siguiente comando firewall-cmd.

sudo firewall-cmd --list-all

Deberías recibir una salida como ésta – El puerto 51820/udp del cliente wireguard añadido al firewalld.

configurar firewalld

Con esto, ya has habilitado el reenvío de puertos en el servidor wireguard y configurado el firewalld para enrutar el tráfico desde la interfaz wireguard a la interfaz de red específica. Ahora estás preparado para iniciar el servidor wireguard.

Iniciar el servidor wireguard

En este paso, iniciarás y habilitará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 servidor wireguard. Esto iniciará el servicio wireguard y creará una nueva interfaz wireguard‘wg0‘.

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

Verifica el servidor wireguard utilizando el siguiente comando systemctl. Esto asegurará que el servidor wireguard se está ejecutando.

sudo systemctl status [email protected]

Y recibirás una salida similar a ésta – El servidor wireguard está ahora habilitado y se ejecutará automáticamente al arrancar. Y el estado del servidor wireguard es en ejecución.

iniciar la verificación del servidor wireguard

También puedes verificar la interfaz «wg0» creada por el servidor wireguard mediante el siguiente comando ip.

ip a show wg0

Recibirás la interfaz detallada de wg0, que coincide con el archivo de configuración del servidor wireguard ‘/etc/wireguard/wg0.conf’. La interfaz wg0 debe tener una dirección IP‘10.8.0.1‘ como se describe en el archivo de configuración de wireguard ‘/etc/wireguard/wg0.conf‘.

verificar wireguard ip

Otro método que se puede utilizar para iniciar el servidor wireguard es utilizar la utilidad de comandos ‘wg-quick‘ que proporciona wireguard-tools.

Ejecuta ‘wg-quickup‘ para iniciar el servidor wireguard y‘wg-quick down‘ para detenerlo. Además, asegúrate de especificar la ruta completa de tu archivo de configuración del servidor wireguard ‘/etc/wireguard/wg0.conf‘.

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

En este punto, el servidor wireguard se está ejecutando en el servidor Linux Rocky. En el siguiente paso, configurarás una máquina cliente y la conectarás al servidor wireguard.

Configurar el cliente y conectarlo al servidor wireguard

En este paso, configurarás un wireguard en una máquina cliente Linux y, a continuación, conectarás la máquina cliente al servidor wireguard. Este ejemplo utiliza un Linux Rocky con el nombre de host ‘cliente1’ como máquina cliente, pero también puedes utilizar cualquier distribución de Linux.

Conéctate a la máquina cliente y ejecuta el siguiente comando dnf para instalar el paquete wireguard-tools en tu cliente. Esta operación también instala la dependencia ‘systemd-resolved’ que utilizará wireguard-tools para gestionar el resolver DNS.

sudo dnf install wireguard-tools

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

instalar herramientas wireguaard

Durante la instalaciónde «wireguard-tools«, el paquete systemd-resolved también se instala como dependencia.

Ejecuta el siguiente comando para iniciar y activar el servicio «systemd-resolved«.

sudo systemctl start systemd-resolved
sudo systemctl enable systemd-resolved

Con las herramientas de wireguard instaladas ysystemd-resolved en funcionamiento, configura NetworkManager para que utilicesystemd-resolved como servidor DNS.

Abre el archivo de configuración del Gestor de Red‘/etc/NetworkManager/NetworkManager.conf‘ utilizando el comando del editor nano que aparece a continuación.

sudo nano /etc/NetworkManager/NetworkManager.conf

Añade el parámetro ‘dns’ a la sección ‘[main]‘ como se indica a continuación.

[main]
dns=systemd-resolved

Guarda el archivo y sal del editor.

A continuación, ejecuta el siguiente comando para eliminar el archivo ‘/etc/resolv.conf‘ y crear un nuevo archivo symlink del archivo ‘resolv.conf‘ gestionado por systemd-resolved.

rm -f /etc/resolv.conf
sudo ln -s /usr/lib/systemd/resolv.conf /etc/resolv.conf

Ahora reinicia el servicio NetworkManager para aplicar los cambios.

sudo systemctl restart NetworkManager

Ahora que el NetworkManager está configurado, estás listo para configurar el cliente wireguard.

Crea un nuevo archivo‘/etc/wireguard/wg-client1.conf ‘ utilizando el editor nano que aparece a continuación.

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.8/24

# Private key for the client – client1.key
PrivateKey = 4FsCdtKr9GrLiX7zpNEYeqodMa5oSeHwH/m9hsNNfEs=

# Run resolvectl command
PostUp = resolvectl dns %i 1.1.1.1 9.9.9.9; resolvectl domain %i ~.
PreDown = resolvectl revert %i

[Peer]
# Public key of the Wireguard server – server.pub
PublicKey = aK+MQ48PVopb8j1Vjs8Fvgz5ZIG2k6pmVZs8iVsgr1E=

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

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

# Sending Keepalive every 25 sec
PersistentKeepalive = 25

Guarda el archivo y sal del editor 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.8’.
  • Especifica el servidor DNS para el cliente mediante el comando resolvectl.
  • 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 ‘AllowedIPs‘ para restringir el acceso en el par VPN, puedes especificar subredes de redes o puedes poner simplemente 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 también puedes utilizar un nombre de dominio.

Con el archivo de configuración del cliente wireguard creado, puedes ejecutar wireguard en la máquina cliente mediante el comando‘wg-quick up‘ que aparece a continuación.

wg-quick up wg-client1

Recibirás una salida similar a ésta – Se crea la nueva interfaz wireguard‘wg-client1‘ y obtiene una dirección IP‘10.8.0.8‘.

iniciar cliente wireguard

Ahora verifica la interfaz ‘wg-cliente1mediante el siguiente comando ip.

ip a show wg-client1

A continuación se muestra una salida similar que se imprimirá en tu terminal.

verificar cliente wg

También puedes verificar el resolver DNS en la interfaz wg-client1 mediante el comando‘resolvectl‘ que aparece a continuación.

resolvectl status wg-client1

A continuación se muestra la salida que recibirás en tu terminal – La interfaz wg-client1 de wireguard utilizó un resolver DNS definido mediante el parámetro ‘PostUp‘, que está utilizando el‘systemd-resolved‘.

verificar resolución

Además, también puedes verificar la conexión Wireguard mediante el comando ‘wg show‘.

Ejecuta el comando ‘wg show‘ en la máquina cliente de wireguard y recibirás una salida como la de la captura de pantalla siguiente.

wg show

La dirección IP del servidor wireguard debería aparecer en la sección‘endpoint‘. También puedes ver la clave pública del servidor wireguard‘server.pub‘.

wge mostrar cliente

Vuelve al servidor wireguard y ejecuta el siguiente 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«client1.pub».

wg mostrar servidor

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 que tiene una dirección IP«10.8.0.1«.

verificar ping servidor wireguard

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

verificar ping internet

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

Conclusión

En esta guía, has instalado y configurado el servidor VPN wireguard en Rocky Linux 9. También has aprendido a configurar la máquina cliente Rocky Linux para conectarse al servidor wireguard. Además, has aprendido a activar el reenvío de puertos y a configurar NAT mediante firewalld.

Por último, has aprendido los usos básicos de la utilidad de comandos «wg» para generar pares de claves públicas y privadas y verificar las conexiones VPN de wireguard. También has aprendido a utilizar el comando ‘wg-quick’ para iniciar y detener la conexión wireguard.

Si quieres saber más sobre WireGuard, visita la documentación de WireGuard. También puedes visitar los temas de GitHub relacionados con Wireguard para encontrar la automatización del despliegue del Servidor VPN WireGuard.

También te podría gustar...