Wireguard docker, crea una vps en 5 minutos

Por Manolo Gómez | May 12, 2022

Siempre había oído los de VPN para salir por una ip distinta a lo de tu país pero me había parado a pensar los que significa, como su nombre indica es una red virtual privada y las posibilidades que esto ofrece.

Wireguard docker, crea una vps en 5 minutos

Me surge la necesidad de conectar a mis raspberrys cuando no estoy en mi cada para consultar datos o disfrutar del los servicio que tengo instalados en ellos desde cualquier parte.

Gracias a Lorenzo de atareao con linux, fuente de muchos de mis conocimientos sobre linux, descubrí Wireguard que es un servicio para crear una red local virtual a traves de internet para tener acceso a todos tus equipos desde cualquier lugar de forma segura.

He encontrado una solución con docker para que sea más sencillo de instalar y de portar. El funcionamiento es el siguiente. en el VPS, (servidor virtual) corro un contenedor que se encarga de crear toda la infraestructura.

por comentar algunas opciones que he cambiado

  • SERVERURL=wireguard.manolog.es subdominio que apunta a la ip del servidor donde esta corriento este wireguard.
  • PEERS=main,raspi1,raspi2,movil1,movil2,pc1,pc2 equipos que perteneceran a la red en mi caso 2 rasberrys, 2 moviles y 2 pcs
  • INTERNAL_SUBNET=10.11.12.0 el rango de ips que generara para la red 10.11.12.1, 10.11.12.2, 10.11.12.3…

version: "2.1"
services:
  wireguard:
    image: lscr.io/linuxserver/wireguard
    container_name: wireguard
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    environment:
      - PUID=1001
      - PGID=1001
      - TZ=Europe/Madrid
      - SERVERURL=wireguard.manolog.es #optional
      - SERVERPORT=51820 #optional
      - PEERS=main,raspi1,raspi2,movil1,movil2,pc1,pc2
      - PEERDNS=auto #optional
      - INTERNAL_SUBNET=10.11.12.0 #optional
      - ALLOWEDIPS=0.0.0.0/0 #optional
    volumes:
      - ./config:/config
      - ./lib/modules:/lib/modules
    ports:
      - 51820:51820/udp
    sysctls:
      - net.ipv4.conf.all.src_valid_mark=1
    restart: unless-stopped   

Al ejecutar el docker compose por primera vez crea en la carpeta config varios archivos y directorios de los que destacamos:

  • wg0.conf principal de configuración de los equipos que conforman la red tiene su ip y su key public
  • las carpetas peer_xxxx una carpeta por equipo con la configuración de mismo
  • peer_raspi.conf configuración a copiar en el cliente
  • peer_raspi.png código qr para configurar equipos móviles
  • privatekey-peer_raspi
  • publickey-peer_raspi

Tendremos que abrir el puerto del servidor, en mi caso con ufw es

sudo ufw allow  51820/udp
sudo ufw enable

Deberíamos hacer una copia de las carpeta config en nuestro equipo para desde este copiar los archivos de config de cada equipo.


rsync -avzrh -e ssh usuario@IPDELSERVER:~/wireguard/config . --progress

En cada equipo que queramos que pertenezca a la red tenemos que instalar un cliente de wireguard

En los equipos android basta con escanear el código Qr de la imagen

instalar cliente Raspberry

instalamos con apt

sudo apt install wireguard

copiar su archivo conf correspondiente la Raspberry

scp peer_raspi1.conf pi@192.168.1.100:/etc/wireguard

sudo mv peer_raspi1.conf /etc/wireguard

para correr el servicio

sudo wg-quick up peer_raspi1

ponerlo para que arranque al inicio

sudo systemctl enable wg-quick@peer_raspi1
sudo systemctl daemon-reload

instalación en ubuntu mi equipo principal

Al instalarlo en mi equipo en Ubuntu he necesitado instalar también openresolv.

sudo apt install openresolv

activa VPN

sudo wg-quick up peer_main

desactiva VPN

sudo wg-quick down peer_main