Monta tu propia VPN con WireGuard

Hoy en día, montar una VPN en tu servidor es cada vez más sencillo. Hacerlo con el protocolo WireGuard se puede conseguir en pocos pasos. En este post te explico cómo hacerlo. Necesitas tener un servidor y conocimientos básicos de Docker.

Primero lo primero, ¿Qué es una VPN?

Una VPN (red privada virtual) te permite saltarte la censura a sitios, servicios y aplicaciones bloqueados por tu proveedor de servicios local (ISP) o por una entidad externa. Puedes leer más sobre esta tecnología en Wikipedia.

En la propia Wikipedia, se resaltan estas ventajas asociadas al uso de las VPNs:

  • Integridad, confidencialidad y seguridad de datos.
  • Reducen los costos y son sencillas de usar.
  • Protegen la información relevante de tu ordenador como podría ser la dirección IP desde la cual estás accediendo.
  • Se establecen conexiones más sencillas entre lugares lejanos gracias a la creación de canales privados mediante la manipulación de DMN's.
  • Da acceso a contenido no disponible en tu región.
  • Facilidad de creación de canales privados.

¿Por qué usamos el protocolo WireGuard?

WireGuard es un protocolo de punta, rápido, moderno, extremadamente simple y seguro para ofrecer criptografía en el tráfico de una VPN. Su objetivo es ser rápido (lo ha logrado), simple, ligero y más fácil de usar que otros.

Además de eso WireGuard logra camuflar su tráfico de forma ingeniosa y resulta muy difícil de censurar.

Puedes leer más información sobre el protocolo en su sitio web: wireguard.com.

WireGuard® is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography. It aims to be faster, simpler, leaner, and more useful than IPsec, while avoiding the massive headache. It intends to be considerably more performant than OpenVPN. WireGuard is designed as a general purpose VPN for running on embedded interfaces and super computers alike, fit for many different circumstances. Initially released for the Linux kernel, it is now cross-platform (Windows, macOS, BSD, iOS, Android) and widely deployable. It is currently under heavy development, but already it might be regarded as the most secure, easiest to use, and simplest VPN solution in the industry.

Montando la VPN en tu servidor

Vas a necesitar un servidor propio, que bien puede ser un VPS, un droplet de DigitalOcean, o una instancia de AWS. Cualquier servidor que te ofrezca una dirección IP pública sirve.

Asumimos que tienes un servidor corriendo alguna de las últimas versiones de Ubuntu, u otra distribución compatible con WireGuard, así que vamos a seguir estos pasos:

  1. Instalar Docker.

Docker es necesario para ejecutar WireGuard, así que necesitas instalarlo. Puedes hacerlo ejecutando este simple comando:

sh -c "$(curl -fsSL https://gist.githubusercontent.com/lugodev/168d1260e471b1747aa80ba30e0c2e12/raw/bfdda825f1e43663952eab5a7c180a3555bcf80a/install-docker.sh)"

O también tienes la opción de ejecutar cada uno de estos, de manera secuencial.

2. Instalar WireGuard.

La imagen que utilizaremos es cortesía de LinuxServer, y tiene su código fuente abierto por si quieres examinarla. Para más información, estos son los enlaces de la imagen:

Antes de proceder a instalar WireGuard, debemos entender que la VPN constará de dos partes:

  • El servidor, que es quien provee el servicio (valga la redundancia) de VPN
  • Y el o los clientes (peers), que consumirán el servicio, en este caso a través de aplicaciones en sus dispositivos

Procedemos a la instalación, ejecutando este comando, pero modificando las variables (-e) en cada caso, según necesites:

docker run -d \
  --name=wireguard \
  --cap-add=NET_ADMIN \
  --cap-add=SYS_MODULE \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Europe/London \
  -e SERVERURL=wireguard.domain.com `#optional` \
  -e SERVERPORT=51820 `#optional` \
  -e PEERS=1 `#optional` \
  -e PEERDNS=auto `#optional` \
  -e INTERNAL_SUBNET=10.13.13.0 `#optional` \
  -e ALLOWEDIPS=0.0.0.0/0 `#optional` \
  -p 51820:51820/udp \
  -v /path/to/appdata/config:/config \
  -v /lib/modules:/lib/modules \
  --sysctl="net.ipv4.conf.all.src_valid_mark=1" \
  --restart unless-stopped \
  lscr.io/linuxserver/wireguard

Variables que te recomiendo modificar:

  • TZ: timezone, especifica el de tu ciudad.
  • SERVERURL: si tienes un dominio apuntando a la IP del servidor, especifícalo aquí, sino pues elimina esa variable del comando. En mi caso tengo a us.lugo.network y de.lugo.network, que son mis dos nodos o servidores.
  • SERVERPORT: el puerto por el cual entra y sale el tráfico de WireGuard, puedes cambiarlo siempre que no colisione con otro en el sistema operativo.
  • PEERS: la cantidad de peers o configuraciones que va a generar WireGuard cuando lo ejecutes la primera vez. Te saldrán una serie de códigos QR por cada peer y podrás escanearlos con tu teléfono.

Además de eso, WireGuard necesita un directorio en tu sistema de archivos para guardar los datos que maneja, así que debes crear una carpeta en tu servidor y colocar su ruta en -v /path/to/appdata/config:/config. Ejemplo: /apps/lugodev-vpn/storage:/config.

Si todo sale bien, tendrás a WireGuard ejecutándose. Ahora debemos dar este otro paso.

3. Autorizar el puerto del tráfico de WireGuard.

Debes habilitar el tráfico en el puerto que elegiste para la VPN, que por defecto es 51820. En el firewall que uses, habilita el puerto. En mi caso utilizo ufw, y se hace de esta manera.

ufw allow 51820
ufw reload

Listo, ahora a saltarse la censura

Ya tienes tu servidor con la VPN activa, ahora instálate la aplicación en tu dispositivo, añade la configuración y a disfrutar de un internet libre y privado.

¿No quieres montar tu VPN? Aquí tienes algunas

Lugodev VPN: Esta es mi VPN personal, tiene dos ubicaciones, Estados Unidos y Alemania. En este video te explico cómo utilizarla y configurarla.

Puedes encontrar más información en lugo.network, o leer este artículo de CubaNet Noticias sobre mi servicio. También puedes ver este video donde explican la instalación y configuración.

Mempool VPN

También basada en WireGuard, mis colegas de Mempool Stream, están compartiendo su VPN durante estos días.

Meet VPN

Esta otra no está basada en Wireguard, sino en Outline, pero igual la comparto.

Espero que esta información te sea útil, si es así, nos vemos en Telegram.

Suscríbete a mi boletín de startups y creatividad.