Wireguard es un protocolo VPN de código abierto alternativo a IPSec, IKEv2 y OpenVPN. Wireguard 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.
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’.
1 2 |
sudo modprobe wireguard lsmod | grep 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.
1 |
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.
1 |
sudo dnf install 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 0400 para deshabilitar la escritura y ejecución de otras personas y grupos.
1 2 |
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‘.
1 |
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.
1 2 |
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.
1 |
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‘.
1 2 |
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.
1 2 |
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.
1 |
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, en el ejemplo utilizaremos el 1194. 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[Interface] Address = 10.210.0.1/16 SaveConfig = true ListenPort = 1194 # Wireguard Server private key - server.key PrivateKey = iHaI5bkEbW8wqTQDbU/KITGhxtKoiezWVohVZsKwj3w= #cliente1 [Peer] # Wireguard client public key - client1.pub PublicKey = iWskvxyj+QK4185xO6Z2Fb0XYo1jGyiyI3iKbyGTkT8= #IP para el cliente AllowedIPs = 10.210.0.2/32 #cliente2 [Peer] PublicKey = iWskvxyj+QK4185xO6Z2Fb0XYo1jGyiyI3iKbyGTkT2= AllowedIPs = 10.210.0.238/32 |
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.
1 |
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.
1 2 |
# 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‘.
1 |
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
Si Desactivas el firewalld, debes saltarte este paso.
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.
1 |
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.
1 |
sudo nano /etc/wireguard/wg0.conf |
Añade las siguientes líneas a la sección ‘[Interfaz]‘.
1 2 3 |
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.
1 2 |
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.
1 |
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‘.
1 2 |
sudo systemctl start wg-quick@wg0.service sudo systemctl enable wg-quick@wg0.service |
Verifica el servidor wireguard utilizando el siguiente comando systemctl. Esto asegurará que el servidor wireguard se está ejecutando.
1 |
sudo systemctl status wg-quick@wg0.service |
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.
1 |
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‘.
1 2 |
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
Crear llave privada del cliente
1 |
wg genkey | tee /etc/wireguard/clients/nombrecliente.key |
Crear llave publica
1 |
cat /etc/wireguard/clients/nombrecliente.key | wg pubkey | tee /etc/wireguard/clients/nombrecliente.pub |
Configurar la llave publica (nombre.key) en el servidor en la sección de Peers
Instalacion para Centos 7
1 2 3 4 |
yum update yum install epel-release https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm yum install yum-plugin-elrepo yum install kmod-wireguard wireguard-tools |
Crear el archivo pa conectarse al servidor VPN
1 |
nano /etc/wireguard/wg0.conf |
Contenido
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[Interface] # IP del cliente - Debe ser igual a la definida en el servidor Address = 10.210.0.2/16 # Private key for the client - client1.key PrivateKey = 4FsCdtKr9GrLiX7zpNEYeqodMa5oSeHwH/m9hsNNfEs= [Peer] # Public key of the Wireguard server - server.pub PublicKey = aK+MQ48PVopb8j1Vjs8Fvgz5ZIG2k6pmVZs8iVsgr1E= # Trafico que va a enrutar por la VPN AllowedIPs = 10.210.0.0/16 # Public IP address of the Wireguard Server Endpoint = vpnserver.com:1194 # Sending Keepalive every 25 sec PersistentKeepalive = 25 |
Cambiar los permisos
1 |
chmod 600 /etc/wireguard/wg0.conf |
Subir la VPN
1 |
wg-quick up wg0 |
Ver la configuración en el servidor y en el cliente
1 |
wg show |
Referencia:
https://www.hostafrica.co.za/blog/linux/install-wireguard-vpn-centos-7/
https://reintech.io/blog/setting-up-vpn-server-wireguard-rocky-linux-9#google_vignette