WhatsApp

  
WireGuard: Configuración para Servidor VPN paso a paso

En el vertiginoso mundo de las tecnologías de la información y la comunicación, la seguridad y la privacidad de los datos se han convertido en prioridades fundamentales. Es en este contexto en el que WireGuard, una tecnología de túneles VPN (Red Privada Virtual) de código abierto y altamente segura, se ha ganado una merecida reputación.

WireGuard destaca por su simplicidad y eficiencia, lo que lo convierte en una elección popular tanto para administradores de sistemas como para usuarios individuales que desean proteger sus comunicaciones en línea. Si estás buscando una solución para establecer tu propio servidor VPN o simplemente estás interesado en aprender más sobre WireGuard, has llegado al lugar adecuado.

En esta guía se hará una configuración paso a paso para levantar un servidor de WireGuard con Ubuntu Server de forma simple y sin entrar en conceptos complicados. De modo que, esta guía será corta y de fácil comprensión. Se descubrirá cómo crear un canal seguro para las comunicaciones, lo que permitirá navegar de forma más segura en Internet, acceder a recursos privados en la red, o incluso conectar varias ubicaciones de manera segura.

Pasos para la Instalación de WireGuard en Ubuntu Server

Lo primero que se debe verificar es que el ambiente se encuentre bien actualizado, por lo que se deben ejecutar las siguientes instrucciones en el servidor.
sudo apt update
sudo apt upgrade


Posteriormente se debe instalar wireguard con el siguiente comando:
sudo apt install wireguard


Pare verificar que wireguard esté instalado después de la ejecución del comando anterior, debemos aplicar lo siguiente:
wg --version


Y si se observa una respuesta similar a la anterior, WireGuard está listo.

Configuración de WireGuard en Ubuntu Server

Una vez instalado correctamente, pasaremos a la configuración de WireGuard en el servidor. Ejecutando los siguientes comandos para generar el par de llaves necesarios, una llave pública y una llave privada:
umask 077
sudo wg genkey | sudo tee /etc/wireguard/privatekey | sudo wg pubkey | sudo tee /etc/wireguard/publickey


Después de ejecutar el comando, aparecerá la llave pública del servidor. 
IMPORTANTE: Esta llave es la que se compartirá a todos los clientes, sin embargo, la llave privada a continuación será mostrada en la configuración con fines ilustrativos y no debe ser compartida.
Lo siguiente es leer la llave privada con el siguiente comando:
sudo cat /etc/wireguard/privatekey


Para copiarla en el archivo de configuración de la interfaz de WireGuard.
Con el siguiente comando empezaremos a editar la configuración del servidor desde nano, con “wg0” como el nombre de la interfaz de wireguard, pero este puede ser distinto.
sudo nano /etc/wireguard/wg0.conf


Al ejecutar el comando, podremos empezar a editar el archivo de configuración. En este caso en particular se está añadiendo la clave privada que copiamos anteriormente y se está definiendo una dirección en un prefijo de red privado y que corresponde a la primera dirección disponible del prefijo 10.0.0.0/24. En este caso se está utilizando /24 para abarcar 254 direcciones.
El puerto de escucha se define como el puerto por defecto de wireguard “51820”.


Desde este punto se pueden comenzar a agregar clientes. En esta guía, se agregará un cliente con dirección estática para pruebas y la configuración se vería de la siguiente manera:


Resta guardar la configuración y ejecutar el siguiente comando para habilitar la interfaz.
sudo wg-quick up wg0

También se pueden añadir los siguientes comandos para permitir el inicio automático del servicio de wireguard en el servidor:
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0
En este caso, recordar que wg0 es la interfaz configurada y este nombre puede variar.


Para verificar el estado de la interfaz, aplicamos sudo wg show wg0


En este caso, la salida muestra el estado de la interfaz wg0 y nos aparece el cliente que tenemos configurado, así como su llave pública. Una vez que el cliente comience una conexión al servidor, se debe ver el estado completo del cliente, indicando la cantidad de datos transmitidos y recibidos, así como el intervalo de tiempo que ha transcurrido desde la última vez que hicieron handshake, este campo se puede utilizar para verificar si un cliente está activo, dado que este intervalo de tiempo no debe ser muy grande. El campo de "endpoint" representa la dirección del servidor y puerto que tiene configurado el cliente, en este caso es una dirección de red privada debido a que es un ejercicio de demostración, pero hay que recordar que aquí debe ser una dirección pública o un dominio público.


También podemos verificar la conectividad punto a punto con un ping desde el servidor al cliente:

Si la salida no es como la anterior, no necesariamente representará que el cliente no esté bien configurado, simplemente puede que el firewall del cliente no esté admitiendo tráfico ICMP, sin embargo, si la salida arroja un tipo de mesaje similar a "destination host unreachable" se debe considerar revisar la configuración.

En caso de que se requiera un enrutamiento de paquetes a través del servidor, es necesario aplicar una configuración sencilla con lo siguiente. Basta con entrar al archivo de configuración siguiente con el comando sudo nano /etc/sysctl.conf


Una vez abierto el archivo de configuración, es necesario descomentar la línea que contiene lo siguiente “net.ipv4.ip_forward=1”


Finalmente, se guarda el archivo y se aplican los cambios.
sudo sysctl -p

Ahora se ha configurado exitosamente el servidor para que los clientes puedan comunicarse correctamente entre ellos. Se debe considerar que, debido a las configuraciones que cada servidor pueda tener, se tendrá que permitir el puerto que se vaya a utilizar para WireGuard a través del Firewall (en caso de que se encuentre habilitado) y también se debe tener en cuenta a aquellos servidores que pasen a través de una conexión NAT, puesto que requerirá una configuración que dependerá de las interfaces encargadas de redireccionar el tráfico del servidor VPN hacia Internet en caso de que los clientes requieran enviar todo su tráfico a través del servidor y no sólo acceder a recursos locales, por lo que, aquí se debe hacer un análisis en la configuración del cliente para determinar si todo el tráfico pasará por el servidor VPN o únicamente un segmento de red, esto dependerá de las necesidades de cada cliente/servidor. Si lo anterior es requerido, un comando que puede ayudar bastante es el siguiente:
sudo iptables -t nat -A POSTROUTING -o "INTERFAZ DE SALIDA" -j MASQUERADE
Se debe sustituir "INTERFAZ DE SALIDA" por el nombre de la interfaz del servidor que esté conectada a internet o el gateway. Este nombre puede verificarse utilizando ifconfig.

Si quieres saber cómo configurar los clientes, puedes revisar el siguiente artículo:

WireGuard: Qué es y Cómo Configurar tu Cliente en Minutos



Compartir

Rodolfo Velazquez 14 septiembre, 2023
Compartir
Categorías


Iniciar sesión dejar un comentario

  
WireGuard: Qué es y Cómo Configurar tu Cliente en Minutos