WireGuard VPN

Servidor VPN

Instalación y configuración de WireGuard

Para instalar WireGuard hacemos lo siguiente como cualquier paquete.

image.png

Ahora vamos a generar directamente una clave privada y vamos a guardarla.

image.png

Este comando nos dará una clave aleatoria por ejemplo "3JNHDCNSM3DHISN(&JD83ND3U"

Ahora vamos a cambiar los permisos de la clave para que solo pueda acceder el usuario creador.

image.png

Ahora necesitamos una clave pública pero que este relacionada con la privada.

Vamos a suponer "874FD6V8S838YE8%&(/8648367".

image.png

Ahora vamos a crear y modificar el archivo wg0.conf del directorio de configuración de wireguard.

image.png

Y añadimos la siguiente configuración.

image.png

Donde pone privatekey, como el propio parámetro dice hay que poner la clave privada que fue la primera que creamos, para el tutorial vamos a coger el dicho anteriormente "3JNHDCNSM3DHISN(&JD83ND3U"

En dirección ponemos la ip que queramos que tenga el servidor vpn, no se refiere al rango.

El puerto que queramos poner, en este ejemplo he puesto 10296.

Y el parámetro saveconfig para que guarde la configuración cuando una interfaz de wireguard se apague.

Ahora vamos a ver que nombre de interfaz de red tenemos en el servidor.

image.png

Vemos que es ens18 en este caso, nos vamos al archivo wg0 y añadimos dos reglas de iptables que hacen lo siguiente:

PostUp:

iptables -A FORWARD -i %i -j ACCEPT: Añade una regla a la cadena FORWARD para permitir el reenvío de paquetes provenientes de la interfaz especificada (%i).


iptables -t nat -A POSTROUTING -o [NOMBRE_INTERFAZ_INTERNET] -j MASQUERADE: Añade una regla a la tabla de nat para realizar el enmascaramiento de direcciones (NAT) en la interfaz de salida especificada ([NOMBRE_INTERFAZ_INTERNET]), lo que permite que los paquetes parezcan provenir de la interfaz principal.


PostDown:

iptables -D FORWARD -i %i -j ACCEPT: Elimina la regla que permite el reenvío de paquetes provenientes de la interfaz especificada (%i).


iptables -t nat -D POSTROUTING -o [NOMBRE_INTERFAZ_INTERNET] -j MASQUERADE: Elimina la regla de enmascaramiento de direcciones para la interfaz de salida especificada ([NOMBRE_INTERFAZ_INTERNET]).

image.png

Ahora vamos a modificar los permisos del archivo wg0.

image.png

Ahora vamos a probar a activar la interfaz.

image.png

Y podemos comprobar el funcionamiento.

image.png

Ahora que hemos comprobado que funciona vamos a indicarle que se inicie automáticamente al iniciar el sistema.

image.png

Ahora vamos a modificar el sistema para permitir el reenvío del tráfico.

image.png

Entramos y descomentamos la primera línea de la imagen, la segunda es por si lo estáis haciendo con ipv6.

image.png

Ahora comprobamos que este bien.

image.png

Tenemos que activar el firewall y añadirle el puerto de la vpn.

image.png

Y el ultimo paso es modificar el MTU para bajarlo a 1420.

Y con ello ya podríamos dar por terminado la instalación y configuración de wireguard, el siguiente tutorial es como añadir un cliente.

Añadir un cliente a WireGuard

Si ya esta el servidor encendido y no queremos pararlo, podemos añadir clientes/pares con el siguiente comando.

Creamos las claves privadas y publicas del cliente (necesitamos entrar en root)

wg genkey > /etc/wireguard/keys/cliente.key

cat /etc/wireguard/keys/cliente.key | wg pubkey

Y lo añadimos con lo siguiente.

sudo wg set wg0 peer [CLAVE_PUBLICA_CLIENTE] allowed-ips [IP_CLIENTE_VPN]

Para empezar vamos a crear una carpeta que almacene las claves.

image.png

Y dentro del directorio le otorgamos permisos predeterminados para que solo el usuario pueda entrar a los documentos.

image.png

Creamos las claves privadas y publicas del cliente (necesitamos entrar en root)

wg genkey > /etc/wireguard/keys/cliente.key

cat /etc/wireguard/keys/cliente.key | wg pubkey

image.png

Ahora nos vamos al archivo wg0.conf y añadimos lo siguiente.

image.png

Ahora encendemos el servidor y comprobamos el estado.

image.png

image.png

image.png

Ahora tenemos que irnos al cliente e instalar wireguard, en mi caso iré a un iphone.

Al instalar la aplicación y entrar nos dirá de agregar un tunel.

IMG_1451.PNG

Ahora tenemos que rellenar los siguientes puntos.

Las claves son las generadas en el servidor.

La dirección es la que le asignamos en el servidor.

Puerto de escucha la misma que el servidor y en mi caso puse el DNS de google.

IMG_1454.PNG

En la parte de abajo tenemos que poner la clave pública del servidor, donde pone punto final se refiere a la ip pública del servidor junto al puerto, el IPs permitidas recomiendo siempre dejarlo en 0.0.0.0/0 a no ser que queramos otra cosa y el Keepalive nos recomienda wireguard 25 segundos pero yo pongo 35, esto sirve para que cada 35 segundos compruebe si la conexión sigue activa. Las dos opciones ultimas "Celular" y "Wi-Fi" es para que pongamos si queremos que la vpn se active automaticamente al utilizar datos o wifi.

image.png

Una vez conectados veremos lo siguiente en el apartado par.

image.png

Y si en el servidor ponemos el siguiente comando veremos como llegan las solicitudes al servidor.

image.png

Y ya tendríamos todo listo, y si haces un script que automáticamente añada el par en el servidor y le mande al usuario un archivo zip para añadirlo a la aplicación sin tocar nada?