¡Esta es una revisión vieja del documento!
Tabla de Contenidos
WireGuard
Solución para crear túneles VPN. Más segura, moderna y eficiente que otras soluciones de código abierto como OpenVPN.
Servidor
WireGuard Easy
La forma más sencilla de instalarlo es mediante Docker con la imagen de
Una forma sencilla de instalarlo es mediante Docker con la imagen WireGuard Easy (repositorio en GitHub). Ejemplo del docker-compose.yml:
version: "3.8" services: wg-easy: environment: # ⚠️ Required: # Change this to your host's public address - WG_HOST=raspberrypi.local # Optional: # - PASSWORD_HASH=f$$asdf/.oob$$51234ar123UYUADasd # - WG_PORT=51820 # - WG_DEFAULT_ADDRESS=10.8.0.x # - WG_DEFAULT_DNS=1.1.1.1 # - WG_MTU=1420 # - WG_ALLOWED_IPS=192.168.15.0/24, 10.0.1.0/24 image: ghcr.io/wg-easy/wg-easy container_name: wg-easy volumes: - .:/etc/wireguard ports: - "51820:51820/udp" - "51821:51821/tcp" restart: unless-stopped cap_add: - NET_ADMIN - SYS_MODULE sysctls: - net.ipv4.ip_forward=1 - net.ipv4.conf.all.src_valid_mark=1
Esta imagen provee también de un panel de administración web desde el que poder añadir y gestionar lo clientes de la VPN. Accesible desde http://ip.servidor.wireguard:51821
Para poder conectarnos a este servidor desde fuera de nuestra red local (Internet) es necesario realizar una redirección de puertos para que este puerto local pueda ser accesible desde el exterior.
Protección con contraseña
Básicamente:
docker run -it ghcr.io/wg-easy/wg-easy wgpw <TU_CONTRASEÑA>
Devolverá algo como:
PASSWORD_HASH='$2b$12$coPqCsPtcFO.Ab99xylBNOW4.Iu7OOA2/ZIboHN6/oyxca3MWo7fW' // literalmente sería <TU_CONTRASEÑA>
Utilizaremos la variable PASSWORD_HASH en el Docker Compose sin las comillas simples y sustituyendo cada $ por dos, es decir, $$:
version: "3.8" services: wg-easy: environment: # ⚠️ Required: # Change this to your host's public address - WG_HOST=raspberrypi.local - PASSWORD_HASH=$$2b$$12$$coPqCsPtcFO.Ab99xylBNOW4.Iu7OOA2/ZIboHN6/oyxca3MWo7fW image: weejewel/wg-easy container_name: wg-easy volumes: - .:/etc/wireguard ports: - "51820:51820/udp" - "51821:51821/tcp" restart: unless-stopped cap_add: - NET_ADMIN - SYS_MODULE sysctls: - net.ipv4.ip_forward=1 - net.ipv4.conf.all.src_valid_mark=1
Manual
Otra opción es la imagen de Linuxserver
PEERS: indica el número de clientes para los que Wireguard creará configuraciones. Puede ser numérico o una lista de nombres (myPC, myPhone, myTablet…)INTERNAL_SUBNET: subred que usarán los clientes conectados a la VPN.SERVERURL: IP o dominio en el que está Wireguard.
Una vez arrancado, vamos a consultar los logs para poder ver el código QR que tendrá que escanear el primer cliente de esa VPN:
docker-compose logs -f --tail=10
Ejemplo de salida:
(...) wireguard | PEER 1 QR code: wireguard | █████████████████████████████████████████████████████████████████ wireguard | █████████████████████████████████████████████████████████████████ wireguard | ████ ▄▄▄▄▄ █▄█ ▀ ▀▀█▄ ▀▀█ ▄ ▀▄▄█ ▄▀▀▀▀ ▀▀█▀ ▀▀█▀▄ ██ ▄▄▄▄▄ ████ wireguard | ████ █ █ █ █▀██▀█▀▄█▀▀▄▄▄▄▀█ █▄▀▄▀▄▄█ ▀▄▀▄▄▄█▀▄▀▄ ██ █ █ ████ wireguard | ████ █▄▄▄█ █▄██▄▀█▀▄▄▄▀█▄▀▀█ ▄ ▄▄▄ ▄ ▀▄█ ▄▀██ █ ▀▄██ █▄▄▄█ ████ wireguard | ████▄▄▄▄▄▄▄█▄█ ▀ █▄▀ ▀ █ ▀▄█ █ █▄█ █▄█▄█ ▀ █ ▀ █ ▀▄▀▄█▄▄▄▄▄▄▄████ wireguard | ████▄▄ █▀▄█▄ ███▀▀██▄▀▄█▄▄▀ ▄▄ ▄▄ ▄█▀▄█▀ █▄▄▀ ▄█▀▄ ▀ ██▄▄▄▀ ████ wireguard | ████ ▄ ▀▀██▀▄▄█▀ ▀ █ ▄▀▀▄ ▀▄██ ▀██▀█▀ ▄███▄▄▄████▄▄▄▄ ▀██▀▄ ▄████ wireguard | ████ ▀ ▄▄ ▄▀▄ ▀▀ ▄ █▄▀ █ ▄ █ █▄██▄▄ █▀▀▀ █▄▀ ▄▀▄ ▀█▀▀▄█▀████ wireguard | █████▀ ▄ ▄▄▄▄▀██▀██▀▄█▄ ██▄ ▄██ ▀▄▄▄██▀█▀ ▀▀█▄ █▄ ▀ ▀ █████ wireguard | █████ ████▄ ▀▄▀█▀ ▀▀▀█▄ █▀▄ ▄▀▀ ██▄▀ ██▄▄▄█ █▀ ▀ ▀▄▄▄ █▄ █████ wireguard | ████▀ ██▄▀▄█ █▄▀█▄▄▄▄▀▄██ █ ▀ █▀▀▄██ ▀▄ ▄▄█ ▀█▀▀▄▄▀ █▀██▄▀████ wireguard | ████▀ ▄ ▄▀▀▄ ▀█▄ ▄ █ ▀▄▄▄▀██▄ █▀█▀█▄█▀ ▄▄▄ ▀▀█ ▄█ ▄ ▄ ▀▀█████ wireguard | ████▀▄▀ ▄▄▄█▄█▄▄█ ▄▀▀██▀█ ██ ▄▄▀▀▄▄ ▀▄█▀ ▄█▄▄▄ █▄█▀██ █▄▄████ wireguard | █████▄▄ ▄▄█▄▄▀ ▀▄▄ ▄ ▄ ▀ █ ██▀▄▄██▄▄█▄ ▀▀▀▄▄██▄▄▄▄▀▀▀▀▀▀▄█████ wireguard | █████▀▄ ▄▄▄ ▀▄▄▄▄▀▄▀▀▀██ ▀█▄ ▄▄▄ █ ▀▄▄██ ▄█ ▄█ █▀ ▄▄▄ ▀ █████ wireguard | █████▀▄ █▄█ ▀▀ ▄▄ ▀ ██ ▄ ██▀ █▄█ ▄▀ █▀█ █▄█▄▄ ▀ █▄█ ▄▄█████ wireguard | ████ ▄▄█▄ ▄ ▄█▀ █▀█ █▄█ ▀▀▀▄▄ ▄ ▄▀▄▀█▄▄█ █▄ ▀▀▄▄▄ ▄▄▄██▄█████ wireguard | ████ █▀▄█ ▄█ ▄███ ▀▄█▄█▀██ ▄ █▀▄██▀▄█▀▄▄█▀▄█▄ ▀▄▀▄██▄ ▀▄█▄▀▄▀████ wireguard | ██████▄█ ▄▀▄█▀ █▀▀▄██▀▄▄█▀█▄ ▄ ▀▄██ ▀ █ █ ▀▄ ▀ ▄ ▀ █▄ ████ wireguard | ████▀▄▀█▄█▄▀█ ▀ ▀ ▀▀▄▄▀ ▀█ █ ▀▄▄ ▀ ▄▀▄▄ ██▄█▄██ ▄▄▀▄▄█ ▀████ wireguard | ████ ▀▀▀ ▄▀▄▀▄▄▄███▀▄▄██ ▀▄▀▀█▀▄▀▄ ▀▄ ██▄▄ █ ▀▄█ ▄▄▀▀▄ ▀▄█████ wireguard | ████▀▀▄▀█▄▄ ▄▄██ █▀ █▀█▄▄█▀█▄█▀▀▄▀▀▄█▀▄██▄ █ █▀▄▄▀▄ █▄▀ █ ████ wireguard | ████▄▀ ▀▀▄█▀ ▄ ███▄█ ▀▄ █▀ █ ██ █▀▄▄▀▄ ▄█ █▀█▄▀▄█ ▄█▄▄███▀████ wireguard | ████ ▀ ▄▀█ ▀ ▄▄ ▄▄▄ ▄█▄█ ▄█▀▄▄█▀██▄▄▀ █▄▄▄▀███▄▀▄██▄▄ ▀████ wireguard | ████ ▀ ▀▀▄▄█▄▀▀█▄▄ █▄█▀█ █▀▀▀▀██▀██▀ ▄ ▄▀██ █ ▀ ▀ ▀▄▄▀▀▄▄▄▄████ wireguard | ██████████▄█ ▀▄▄▄ █▄█ ▄ ▄ ▀█▄█ ▄▀▀▄█▄▄▀▀ ▀▄▄▄█▀▄█ ▄▄▄ ▄█ █████ wireguard | ████ ▄▄▄▄▄ ██▄█▄▄▄▀█▄█▄█▄▀▄▄▀▄ █▄█ █ ▄▀▄▀▄▄▄█▀ ▀▄▄ █▄█ ▀▄▀████ wireguard | ████ █ █ █▀ ▄▀▄▄█▄▀▄██ ▄▄███ ▄▄▄ ▀ █ ▄██▀▀▄ ▄ ▀▄ ▄▄ █████ wireguard | ████ █▄▄▄█ █ ▄ ██ █▀█▀█ ▀▀ ▄ ▄▀▄ █ ▄▀▄▄▀ ▄▄█▀▀███ ██▄▄█▀████ wireguard | ████▄▄▄▄▄▄▄█▄▄██▄▄█▄█▄██▄█▄█▄██████▄██████▄▄▄██▄█▄▄▄▄▄▄▄▄▄▄██████ wireguard | █████████████████████████████████████████████████████████████████ wireguard | █████████████████████████████████████████████████████████████████ wireguard | [cont-init.d] 30-config: exited 0. wireguard | [cont-init.d] 99-custom-scripts: executing... wireguard | [custom-init] no custom files found exiting... wireguard | [cont-init.d] 99-custom-scripts: exited 0. wireguard | [cont-init.d] done. wireguard | [services.d] starting services wireguard | [services.d] done. (...)
Variables SERVERURL, SERVERPORT, INTERNAL_SUBNET and PEERDNS are optional variables used for server mode. Any changes to these environment variables will trigger regeneration of server and peer confs. Peer/client confs will be recreated with existing private/public keys. Delete the peer folders for the keys to be recreated along with the confs.
Si queremos volver a crear las claves y configuraciones, basta con eliminar los directorios peer, dentro de config.
Para añadir más clientes/peers, aumentamos el valor de la variable de entorno PEERS y recreamos el contenedor.
Si queremos volver a ver los códigos QR de los clientes/peers activos:
docker exec -it wireguard /app/show-peer 1 4 5
También sería válido:
docker exec -it wireguard /app/show-peer myPC myPhone myTablet
Los códigos QR también se almacenan en el directorio config como imágenes PNG
Cliente
- Cliente Android en Google Play o F-Droid
NetworkManager
NetworkManager tiene soporte native para configurar interfaces de WireGuard. Una vez generado en el servidor el fichero de configuración para un cliente, podemos usar nmcli para crear el perfil de conexión de la siguiente manera:
# nmcli connection import type wireguard file /fichero/wireguard/cliente.conf
