Skip to main content

3.7 WireGuard. Servidor de VPN

wireguard-logo.png

Imagen obtenida de https://www.wireguard.com/

Esta herramienta sirve para...

crear una VPN de un modo extremadamente sencillo.

Genial Pablo pero... ¿¡¿¡ para que quiero yo una VPN ?!?!

Hasta el momento hemos ido desplegando diferentes servicios a los que hemos asignado diferentes puertos y cuando nos hemos querido conectar a ellos hemos escrito la IP que tiene la Raspberry Pi dentro de nuestra red y el puerto que le hemos asignado en el fichero docker-compose. Ahora bien, es bastante probable que también queramos acceder a estos servicios desde fuera de nuestra red. Aquí básicamente se nos abren 2 posibilidades:

  1. Acceder al router y "abrir" puertos.
  2. Crear una VPN y conectarnos a ella.

Vamos a optar por la segunda opción por seguridad y comodidad. Al conectarnos a la VPN que creemos será como si estuviésemos conectados a la red de casa por lo que para conectarnos a nuestros servicios seguiremos utilizando la misma IP y puerto que en nuestro domicilio. Con ello conseguimos exponer menos puertos de nuestro router al exterior (seguridad) y no tener que configurar nada en el router ni aprender nada (comodidad).

Web de proyecto y otros enlaces de interés

Web del proyecto: https://www.wireguard.com/

Repositorio de código que podemos utilizar: https://github.com/linuxserver/docker-wireguard

Despliegue

Como en ocasiones anteriores vamos a hacer con docker-compose para ello accedemos al terminal y escribimos

cd $HOME
mkdir wireguard
cd wireguard
nano docker-compose.yml

y dentro del fichero escribiremos el siguiente contenido

version: "2.1"
services:
  wireguard:
    image: lscr.io/linuxserver/wireguard:latest
    container_name: wireguard
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Madrid
      - SERVERURL=vuestrodominio.duckdns.org #optional
      - SERVERPORT=51820 #optional
      - PEERS=1 #optional. Numero de personas que se vayan a conectar a la VPN
      - PEERDNS=auto #optional
      - INTERNAL_SUBNET=10.13.13.0 #optional
      - ALLOWEDIPS=0.0.0.0/0 #optional
      - PERSISTENTKEEPALIVE_PEERS= #optional
      - LOG_CONFS=true #optional
    volumes:
      - ./config:/config
      - /lib/modules:/lib/modules #optional
    ports:
      - 51820:51820/udp
    sysctls:
      - net.ipv4.conf.all.src_valid_mark=1
    restart: unless-stopped

como en ocasiones anteriores, para guardar los cambios pulsaremos control + x y cuando nos pregunte aceptaremos. Una vez volvamos a estar en el terminal, escribiremos docker compose up -d para lanzar los servicios ubicados dentro del fichero docker-compose. El resultado será similar a:

wireguard-deploy.png

Elaboración propia

Funcionamiento

Si prestamos atención al fichero docker-compose veremos que, en el apartado volumes, hemos creado uno volumen llamado config. Si desde $HOME/wireguard listamos el contenido del directorio con ls -l veremos que hay un directorio llamado config. Si accedemos al mismo cd config y listamos el contendio veremos que se han creado tantas carpetas peerX como PEERS hayamos establecido en el fichero docker-compose. En mi caso tengo 3. Si accedemos a una de esas carpetas dentro hay 2 ficheros relevantes los ficheros peerx.conf y peerx.png. El 1º tiene la configuración del fichero para conectarnos a la VPN con esos datos y el 2º tiene una imagen con un código QR que, una vez escaneado, nos configura directamente la VPN.

wireguard-commands.png

Elaboración propia

Configuración desde el teléfono móvil

Desde nuestro teléfono Android accedemos a https://play.google.com/store/apps/details?id=com.wireguard.android e instalamos el cliente de VPN. Una vez instalada la APP pulsamos en el símbolo + y seleccionamos escanear desde código QR. Escaneamos el fichero png comentado en el párrafo anterior y ya está configurada la conexión. Ahora, cada vez que queramos conectarnos a nuestra VPN desde fuera de nuestra red activaremos la VPN y estaremos a todos los efectos conectados a nuestra red. Dejo una serie de capturas de pantalla del proceso.

wireguard-add.jpg

Elaboración propia

wireguard-escanear-qr.jpg

Elaboración propia

wireguard-rename.jpg

Elaboración propia

wireguard-activado.jpg

Elaboración propia

Una vez hechos todos los pasos anteriores y con la VPN activa únicamente deberemos introducir en el navegador la IP que tiene nuestra Raspberry en nuestra red local y el puerto del servicio al que queramos acceder. De este modo nos estaremos conectando a este servicio desde fuera de nuestra red como si estuviéramos en ella.