Wireguard: VPN en casa en 10 minutos

Si tenemos un poco de interés en servidores de algún tipo, o queremos no depender de servicios de terceros, es casi seguro que tendremos algún equipo en casa, que nos haga de servidor, al que poder acceder una vez estamos conectados a la red de nuestra casa. Pero exponer estos servicios a Internet, muchas veces puede llegar a ser un peligro, ya que estamos dando acceso de alguna manera a equipos que tenemos en casa.

Para solucionar este problema, existen las llamadas VPNs, que durante el confinamiento por COVID19 tanto se están usando, para poder acceder a los servicios de las empresas (Aunque ya se usaban VPNs anteriormente para eso mismo, y poder navegar de forma anónima por Internet, con un proveedor de VPN).

Pero este servicio no tiene porque estar acotado a las empresas. Si como decía antes tenemos algún servicio en nuestra casa al que podamos acceder por conexión de red, montar una VPN en nuestra casa, para poder acceder a esos servicios una vez que estamos fuera, es probablemente la mejor opción.

En mi caso, tengo un NAS donde tengo todos mis datos importantes, backups, y más cosas, a los que puedo acceder una vez estoy conectado a la red de mi casa, pero muchas veces quiero poder acceder a esos archivos desde fuera. Podria exponer estos archivos hacia fuera mediante un servicio FTP por ejemplo, pero eso daría pie a ataques por parte de terceros para acceder a esos archivos, comprometiendo muchisimos datos privados.

Para evitar esto, me he instalado un servidor de VPN al que obviamente, si que he dado acceso hacia el exterior mediante el mapeo del correspondiente puerto en el router, y consiguiendo el acceso seguro a todos los datos de mi casa.

Además este acceso por VPN sería una capa de seguridad muy buena, si estáis de viaje y os tenéis que conectar desde una red WiFi pública, desde las cuales jamás deberías usar ningún servicio importante, debido a la posibilidad que hay de que se intercepten las comunicaciones, y que al conectarte a la VPN de tu casa, quedaría resulto sin ningún problema.

Normalmente se usaría en estos casos una VPN de tipo OpenVPN que es probablemente el servicio más extendido. Investigando un poco más encontré un servicio muy actual para VPN que usa algoritmos de criptografía modernos, y con una velocidad asombrosa, llamado Wireguard.

Esta VPN se puede configurar en cualquier servidor que tengas en casa (En mi caso una Raspberry Pi 4), y su configuración gracias a Docker (Como ya os dije, no instalo ya de forma tradicional ningún servicio. Absolutamente todo con Docker, o sino no se usa), resulta ser de lo más sencillo.

Antes de nada, deberéis tener un nombre de dominio asociado a vuestra IP de casa. Para ello con algún tipo de DNS dinámico, os valdría perfectamente.

Os dejo por aquí el docker-compose que uso para poder crear el servicio de Wireguard

version: "3"

services:
  wireguard:
    image: linuxserver/wireguard
    container_name: wireguard
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Madrid
      - SERVERURL=midominio.decasa.com #optional
      - SERVERPORT=51821 #optional
      - PEERS=2 #optional
      - PEERDNS=8.8.8.8 #optional
      - INTERNAL_SUBNET=10.13.13.0/24 #optional
    volumes:
      - /home/misuuario/wireguard:/config
      - /lib/modules:/lib/modules
    ports:
      - 51821:51820/udp
    restart: unless-stopped

Lo imporante de este archivo son los siguientes puntos:

  • SERVERURL: Este debe ser el dominio que tiene que apuntar a vuestra casa.
  • SERVERPORT: Por defecto se pone a 51820, pero si a su vez quereis desde vuestra casa, poder conectar como cliente a otras VPN Wireguard, os recomiendo poner el 51821
  • /home/misuuario/wireguard: Este será el directorio donde se guarde toda vuestra configuración de la VPN
  • 51821:51820/udp Hay que asegurarse de que el puerto interno del contenedor 51820 queda mapeado al externo en el 51821, y por supuesto, mapear en vuestro router el puerto 51821 hacia vuestro servidor.

Una vez arrancado el servidor, si vemos los logs con

docker logs -f wireguard

se nos mostrarán dos códigos QR correspondientes a los dos clientes creados para la VPN. Estos códigos QR deben ser escaneados con las aplicaciones correspondientes de móviles (Android e IOS) para poder acceder a la VPN de forma sencilla desde nuestro dispositivo.

Si queremos poder acceder desde un PC, desde Windows o Mac no hace falta más que instalar su cliente desde https://www.wireguard.com/install/

En Linux, Wireguard ya va integrado en el Kernel, por lo cual solo hay que seguir las instrucciones que se dan en la misma página para poder configurarlo.

Para encontrar el archivo de configuración que se debe importar en estos clientes, solo haría falta ir al directorio /home/misuuario/wireguard y entrar a los sub-directorios de los clientes generados (peer1 y peer2), y en ellos se encontrarán los ficheros peerX.conf, que al importarlos en el cliente de Wireguard te deja la configuración lista para activarse. También en estos directorios encontrareis los ficheros de imagen del código QR por si queréis volver a configurarlos en dispositivos móviles.

El proceso de instalación no os llevará más de diez minutos, entre la configuración del fichero docker-compose, el mapeado del puerto correspondiente en el router, y la configuración de un cliente para tener listo un acceso privado a vuestra casa.

2 comentarios

  1. Estoy pensando en ponerlo en la oficina (tengo un cluster kubernetes de prueba ahora mismo), ¿podría hacer un dockerfile que incluya ya la configuración relevante de la red para tener una imagen única que desplegar? o necesita por narices acceder al /lib/modules de la máquina host.

    1. Por desgracia necesita acceder al /lib/modules, ya que wireguard está integrado en el propio kernel de linux, y necesita que en la máquina host, se instalen si o si esos modulos. Si no se mapea, no podrá autoinstalar los modulos necesarios. Aunque si se hacen a mano la instalación de los modulos, se podria quitar el mapeo.
      Siempre puedes extender el Dockerfile que trae y meterlo lo que necesites. Lo que aun no he conseguido, es montarlo sin el pseudo NAT que haya de por medio, porque así no puedes tener acceso a la máquina cliente cuando se enchufa a la VPN, sobre todo porque habria que definir rutas en el router para que se redirigiera hacia el server de Wireguard, y al menos por ahora no he necesitado algo tan complejo.

Unirse a la conversación

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *