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:
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’.
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:
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:
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:
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.
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:
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.
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.
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.
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‘.
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.
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‘.
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.
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‘.
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‘.
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».
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«.
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.
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.