Para seguir el proceso de migración de mi Home Lab desde una pequeña Raspberry Pi 4 a un OptiPlex 7050 ejecutando Proxmox ahora le toca el turno a WireGuard, una VPN extremadamente simple pero rápida y moderna que utiliza criptografía de última generación.
En esta ocasion, en lugar de realizar la instalación de WireGuard en Docker, se utilizará un contenedor ligero LXC de Proxmox con TurnKey Core. El procedimiento para crear este LXC es el mismo que usé para ejecutar Docker en Proxmox LXC.
Características del LXC
Esta VPN con WireGuard se ejecutará sobre un LXC con las siguientes características:
- LXC no privilegiado, con nesting y sin
keyctl
- CT ID: 303
- Hostname: wireguard
- Password + SSH key file
- Disco: 2GB en
local_lvm
- CPU: 1 core
- Memoria: 512MB
- IP estática: 192.168.1.83/24
- Gateway: 192.168.1.1
- Dominio: home
- DNS: 192.168.1.81 192.168.1.82
A continuación se pone en marcha el LXC desde la CLI de Proxmox y se procede a configurarlo de la misma manera que ya expliqué en el artículo sobre LXC y Docker:
pct start 303
Acceder al LXC
Se puede acceder al LXC utilizando la opción Console
de la GUI o, mucho mejor, mediante SSH gracias a la configuración de las claves públicas que se hizo en el mismo:
ssh root@192.168.1.83
A continuación se realiza la configuración habitual:
- First Boot Configuration:
Skip
/Skip
/Install
- Advanced Menu:
Quit
- Zona horaria Europe/Madrid con
dpkg-reconfigure tzdata
- Actualizar con
apt update && apt upgrade -y
- Reiniciar con
reboot
Instalación de PiVPN
La instalación de WireGuard usando PiVPN es muy sencilla usando el script install.sh
:
cd ~
wget -O install.sh https://install.pivpn.io
bash install.sh
Si se cumplen los requisitos para instalar WireGuard, se ejecutará el asistente PiVPN Automated Installer mediante el cual se proporcionará la información necesaria para la instalación:
- Force routing to block IPv6 leak: No
- Local user:
wireguard
- Password:
********
- Choose VPN: WireGuard
Al finalizar la instalación, si no hay ningún problema, continuarán las preguntas del asistente:
- Default WireGuard port: 51821
- DNS Provider:
Custom
- Upstream DNS providers: 9.9.9.9, 149.112.112.112
- Public IP or DNS:
DNS Entry
- Public DNS: wireguard.myhome.com
- Unattended upgrades: Yes
- Reboot: Yes
Nota: Se puede utilizar el comando pivpn
para añadir clientes, depurar problemas, generar códigos QR, etc. Pero antes es necesario modificar el fichero /etc/pivpn/wireguard/setupVars.conf
para cambiar las redes que se enrutarán a través de la VPN.
# Originales
ALLOWED_IPS="0.0.0.0/0"
# Nuevas
ALLOWED_IPS="192.168.1.0/24"
Añadir clientes
Para añadir un cliente se utiliza el comando pivpn -a -n client1
:
root@wireguard ~# pivpn -a -n client1
::: Client Keys generated
::: Client config generated
::: Updated server config
::: WireGuard reloaded
======================================================================
::: Done! manel.conf successfully created!
::: client1.conf was copied to /home/wireguard/configs for easytransfer.
::: Please use this profile only on one device and create additional
::: profiles for other devices. You can also use pivpn -qr
::: to generate a QR Code you can scan with the mobile app.
======================================================================
A continuación se usa el comando pivpn -qr client1
para mostrar el código QR que permite añadir el perfil en un cliente móvil de forma fácil:
Actualización de WireGuard
La actualización de PiVPN se realizaba usando el comando pivpn -up
pero, desde el año 2020, los componentes de la VPN (WireGuard) se actualizan mediante:
apt update && apt upgrade -y
DNS privado en Android
Android 9+ admite DNS sobre TLS para proteger las consultas mediante cifrado. Esta opción, llamada DNS privado, se encuentra en Ajustes
→ Redes e Internet
→ Avanzado
→ DNS privado
.
Para configurar esta opción se selecciona la opción Nombre de host del proveedor de DNS privado
y se introduce el proveedor que se desee utilizar, por ejemplo:
- Quad9:
- Malware Blocking, DNSSEC Validation:
dns.quad9.net
- Malware blocking, DNSSEC Validation, ECS enabled:
dns11.quad9.net
- Malware Blocking, DNSSEC Validation:
- Cloudflare:
- DNS Resolver:
one.one.one.one
- Block malware for Families:
security.cloudflare-dns.com
- Block malware and adult content for Families:
family.cloudflare-dns.com
- DNS Resolver:
A diferencia de las versiones anteriores de Android, este método también garantiza que no sea necesario configurar un DNS propio para cada nueva red Wi-Fi a la que se una el teléfono inteligente.
En algunos teléfonos, por ejemplo en mi Pixel 7a con GrapheneOS, al configurar esta opción y activar WireGuard se pierde la conexión a Internet. Esto es debido al hecho de no poder enrutar las peticiones DNS a través de la VPN por una configuración incorrecta de la misma.
Para evitar este problema, únicamente hay que añadir la dirección o direcciones IP del DNS privado a la lista de direcciones permitidas en el fichero /etc/pivpn/wireguard/setupVars.conf
:
ALLOWED_IPS="192.168.1.0/24, 9.9.9.9/32, 149.112.112.112/32"
Referencias
- Getting PiVPN to run on Proxmox LXC container
- Set up WireGuard using PiVPN inside LXC
- OpenVPN in LXC @ Proxmox Wiki
- WireGuard VPN: Instalación y configuración de la mejor VPN @ RedesZone.net
- WGDashboard, usada por Proxmox VE Helper Scripts
- Wg Gen Web, para ejecutar en Docker
- WireGuard-UI, interfaz realizada en Go
- How to monitor who’s connected to your WireGuard VPN
- WireGuard-Manager
- Wireguard Config Generator
- Chris Swanda WireGuard Setup
- Pro Custodibus
Historial de cambios
- 2023-11-19: Artículo original
- 2023-12-11: Cambio de los DNS públicos a Quad9
- 2024-02-12: Cambio en Allowed IPs para soportar DNS privado en Android