Ir al contenido principal

WireGuard como servidor VPN en Ubuntu/Debian y cliente VPN en Windows y Android

    Si estáis buscando una alternativa a OpenVPN, tal vez hayas escuchado sobre la solución WireGuard. WireGuard es una solución de VPN muy sencilla de implementar, que tiene muy buen rendimiento y hay que tenerla en cuenta.

    Su configuración es muy sencilla. Para instalar la parte servidora, será necesario ejecutar el siguiente comando en el equipo al cual te quieres conectar desde el exterior de tu red:

sudo apt install wireguard

    Una vez instalado, nos situaremos en la ruta de WireGuard ejecutando el siguiente comando:

cd /etc/wireguard

    Una vez dentro, tendremos que generar las claves públicas y privadas del servidor mediante la ejecución del siguiente comando:

wg genkey | tee private | wg pubkey > public

     A través del comando cat, podremos leer dichos ficheros y anotaremos la cadena resultante:

cat public

cat private

    En este momento, tenemos dos opciones:

  • Generar las claves del cliente en el servidor.
  • Usar la herramienta cliente WireGuard en Windows la cual nos genera automáticamente las claves.

   Las claves del cliente se generan igual que las del servidor, por lo tanto, ejecutaremos el siguiente comando y anotaremos las cadenas de los dos ficheros resultantes:

wg genkey | tee clientprivate | wg pubkey > clientpublic

    A continuación, generaremos la configuración del servidor de wireguard dentro de un fichero denominado wg0.conf en la ruta /etc/wireguard:

[Interface]
PrivateKey = "introducir aquí la cadena privada del servidor"
Address = 10.0.0.1/24
ListenPort = 51820
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
PublicKey = "introducir aquí la cadena pública del cliente"
AllowedIPs = 10.0.0.2/32 

    El campo PrivateKey lo emplearemos para añadir la cadena privada del servidor. Address para especificar la dirección IP y la máscara del servidor. ListenPort el puerto que emplearemos para escuchar las peticiones de la VPN "Será necesario abrir este puerto en el router y en el firewall para que nos lleguen las peticiones". PostUP y PostDown serán las reglas IPTABLES necesarias para permitir el acceso del tunel a nuestra red "cuidado, en mi caso mi interfaz es eth0 pero deberéis de verificar como se llama la vuestra". Finalmente, podréis añadir configuraciones clientes adicionales cuando queráis siempre que empiecen por [Peer]:

[Peer]

PublicKey = "clave pública del cliente 1"

AllowedIPs = "Dirección IP del cliente 1"

[Peer]

PublicKey = "clave pública del cliente 2"

AllowedIPs = "Dirección IP del cliente 2"

     Para aplicar la configuración, ejecutaréis el siguiente comando:

wg-quick up wg0

    Para hacer que WireGuard se inicie al arrancar ejecutaremos el siguiente comando:

sudo systemctl enable wg-quick@wg0

 Nota: si os equivocáis, primero eliminaréis la configuración con wg-quick down wg0, realizar los cambios y luego, volver a arrancar el servicio.

    Dado que es necesario realizar un reenvio de las peticiones de la VPN a la red en la que estamos, es necesario modificar el fichero /etc/sysctl.conf activando la siguiente línea:

Ipv4 forward

 Nota: en este paso será necesario reiniciar la máquina para que apliquen los cambios.

    A continuación, denifiremos la configuración cliente en un equipo Windows. Para ello, nos instalaremos la aplicación cliente de WireGuard que la podéis descargar de su página web. Posteriormente, crearemos una nueva configuración siguiente las siguiente directrices:

Configuración WireGuard cliente

    En este caso, Windows os generará la clave pública del cliente y la privada. En interface configuraréis la clave privada del cliente en el apartado "PrivateKey".  

Nota: recordad que la pública la deberéis de añadir a la configuración del PEER del servidor. 

    Es importante añadir la dirección IP que usará el cliente en el túnel, así como el servidor DNS "ya que en caso contrario no tendréis resolución de nombres". Finalmente, en el [PEER] tendréis que añadir la clave pública del servidor, los rangos de red a los que podréis acceder en el apartado AllowedIPs, así como la dirección IP del servidor VPN y el puerto en el apartado Endpoint. Podéis usar un servicio tipo DynDNS o DuckDNS "este último es muy recomendable". 

    Esta configuración la podréis exportar en la aplicación cliente WireGuard para Windows e importarla en Android. 

Wireguard en Android

Comentarios