CI VPN: WireGuard¶
El contenedor de VPN (WireGuard) es la pieza que une tu red local con el mundo exterior de forma segura. En la Raspberry Pi 5, WireGuard ofrece un rendimiento cercano a la velocidad de cable con un uso de CPU mínimo.
1. Configuración del Host (Raspberry Pi 5)¶
Antes de tocar el contenedor, el Host debe estar preparado:
sudo apt update && sudo apt install -y wireguard-tools
sudo modprobe wireguard
# Verificar que el módulo cargó
lsmod | grep wireguard
2. Despliegue del Contenedor¶
Desde el host, clonamos la base y aplicamos los permisos especiales de kernel:
sudo lxc-copy -n B0-deb12 -N CI04-vpn
Editar Configuración del LXC¶
sudo nano /var/lib/lxc/CI04-vpn/config
Copia el contenido de config.conf
Iniciar y configurar DNS¶
sudo lxc-start -n CI04-vpn
sudo lxc-attach -n CI04-vpn
# Forzar DNS de nuestro Pi-hole
rm /etc/resolv.conf
echo "nameserver 192.168.1.101" > /etc/resolv.conf
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
3. Instalación y Configuración Manual¶
Dentro del contenedor, instalamos las herramientas necesarias:
apt update && apt install -y wireguard wireguard-tools qrencode nftables
Generación de llaves¶
cd /etc/wireguard
umask 077
# Llaves del servidor
wg genkey | tee private.key | wg pubkey > public.key
# Llaves del cliente (Móvil)
wg genkey | tee client_private.key | wg pubkey > client_public.key
Archivo de Configuración wg0.conf¶
nano /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.1.1/24
ListenPort = 51820
PrivateKey = <CONTENIDO_DE_private.key>
[Peer]
PublicKey = <CONTENIDO_DE_client_public.key>
AllowedIPs = 10.0.1.2/32
4. Configuración de Red (Forwarding y NAT)¶
Para que el tráfico fluya desde la VPN a Internet:
# Agregar ruta a 10.0.1.0/24
sudo nmcli connection modify br0 +ipv4.routes "10.0.1.0/24 0.0.0.0"
$ sudo nmcli connection up br0
# Habilitar IP Forwarding
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
# Configurar NAT con nftables
nano /etc/nftables.conf
Copia el contenido de nftables.conf:
**Aplicar y activar:**
```bash
nft -f /etc/nftables.conf
systemctl enable nftables
systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0
5. Generación del Cliente (Código QR)¶
Crea el perfil para tu smartphone:
nano cliente.conf
[Interface]
PrivateKey = <CONTENIDO_DE_client_private.key>
Address = 10.0.1.2/24
DNS = 192.168.1.101
[Peer]
PublicKey = <CONTENIDO_DE_public.key_SERVIDOR>
Endpoint = vpn.davidalvarezp.com:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 20
Mostrar QR: qrencode -t ansiutf8 < cliente.conf
Resumen de Infraestructura Terminada¶
| Servicio | IP | Función |
|---|---|---|
| Pi-hole | .101 | DNS y AdBlock local/remoto |
| Proxy | .102 | Nginx Reverse Proxy |
| Stats | .103 | Grafana & Prometheus |
| VPN | .104 | Acceso remoto seguro (WireGuard) |