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.
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