Initial clean commit (history purged)

This commit is contained in:
Eduardo David Paredes Vara
2025-12-03 17:15:06 +00:00
commit 4ac3881958
28 changed files with 4250 additions and 0 deletions

435
wireguard/README.md Normal file
View File

@@ -0,0 +1,435 @@
# WireGuard - VPN Rápida y Segura
WireGuard es una VPN moderna, rápida y segura. Este stack usa `wg-easy` para gestión simplificada de clientes.
## 📋 Descripción
Este stack despliega WireGuard con:
- Interfaz web para gestión de clientes (wg-easy)
- Generación automática de configuraciones de clientes
- Códigos QR para configuración móvil rápida
- Panel web protegido con Authentik
- Puerto UDP para el túnel VPN
## 🚀 Despliegue
### Prerequisitos
1. **Red Docker**: Asegúrate de que la red `proxy` existe
2. **Registro DNS**: Configura el registro A para tu dominio WireGuard
3. **Puerto UDP**: El puerto UDP debe estar abierto en el firewall (por defecto 51820)
4. **Kernel modules**: El servidor debe soportar WireGuard
### Verificar Soporte WireGuard
```bash
# Verificar módulo WireGuard
lsmod | grep wireguard
# O intentar cargarlo
sudo modprobe wireguard
# Si falla, instala wireguard-tools
sudo dnf install wireguard-tools # Fedora/RHEL
sudo apt install wireguard # Debian/Ubuntu
```
### Desde Portainer
1. Ve a **Stacks****Add stack**
2. Nombre: `wireguard`
3. Selecciona **Repository** o **Git repository**
4. Configura:
- Repository URL: `<tu-repositorio>`
- Repository reference: `main`
- Compose path: `wireguard/docker-compose.yml`
5. Carga el archivo de variables de entorno: `wireguard/stack.env`
6. Haz clic en **Deploy the stack**
### Variables de Entorno
Edita el archivo `stack.env`:
```env
# Imagen
WG_EASY_IMAGE=ghcr.io/wg-easy/wg-easy:latest
# Dominio o IP pública del servidor
WG_HOST=vpn.tudominio.com
# Puerto UDP de WireGuard (debe estar abierto en el firewall)
WG_PORT=51820
WG_UDP_PORT=51820
# Puerto HTTP de la UI (interno)
WG_UI_PORT=51821
# Credenciales iniciales para la UI
INIT_ENABLED=true
INIT_USERNAME=admin
INIT_PASSWORD=tu-password-seguro
# Desactivar IPv6 (si el servidor no lo soporta)
DISABLE_IPV6=true
# Rutas
WG_DATA_PATH=/opt/wireguard/data
WG_MODULES_PATH=/lib/modules
# Dominio de la UI
WG_DOMAIN=vpn-admin.tudominio.com
# Traefik
TRAEFIK_DOCKER_NETWORK=proxy
TRAEFIK_ENTRYPOINT_SECURE=websecure
TRAEFIK_CERTRESOLVER=letsencrypt
TRAEFIK_AUTH_MIDDLEWARE=authentik@docker
```
> **⚠️ Importante**:
> - Cambia `INIT_PASSWORD` por una contraseña segura
> - Usa tu dominio o IP pública en `WG_HOST`
### Abrir Puerto UDP en el Firewall
```bash
# Firewalld (Fedora/RHEL)
sudo firewall-cmd --permanent --add-port=51820/udp
sudo firewall-cmd --reload
# UFW (Ubuntu/Debian)
sudo ufw allow 51820/udp
# iptables
sudo iptables -A INPUT -p udp --dport 51820 -j ACCEPT
sudo iptables-save > /etc/iptables/rules.v4
```
## ⚙️ Configuración Post-Instalación
### 1. Acceso al Panel Web
1. Accede a `https://vpn-admin.tudominio.com`
2. Si configuraste Authentik, serás redirigido al SSO
3. Inicia sesión con las credenciales configuradas en `INIT_USERNAME` y `INIT_PASSWORD`
### 2. Crear Cliente VPN
1. En el panel web, haz clic en **+ Add Client**
2. Nombre del cliente: `mi-laptop`, `mi-movil`, etc.
3. El cliente se crea automáticamente con:
- Par de claves pública/privada
- IP asignada dentro del túnel VPN
- Configuración completa
### 3. Configurar Cliente
#### Móvil (Android/iOS)
1. Instala la app **WireGuard** desde Play Store o App Store
2. En el panel web, haz clic en el icono **QR** del cliente
3. Escanea el código QR con la app
4. Activa el túnel VPN
#### Windows/Mac/Linux Desktop
##### Opción A: Escanear QR
1. Descarga WireGuard desde [wireguard.com](https://www.wireguard.com/install/)
2. Instala la aplicación
3. Haz clic en **Import tunnel(s) from QR code**
4. Escanea el QR del panel web con tu webcam
##### Opción B: Descargar archivo de configuración
1. En el panel web, haz clic en el icono **Download** del cliente
2. Guarda el archivo `.conf`
3. En WireGuard app, haz clic en **Import tunnel(s) from file**
4. Selecciona el archivo `.conf`
##### Opción C: Configuración manual
Copia la configuración del panel web:
```ini
[Interface]
PrivateKey = tu_clave_privada
Address = 10.8.0.2/24
DNS = 1.1.1.1
[Peer]
PublicKey = clave_publica_servidor
PresharedKey = clave_compartida
Endpoint = vpn.tudominio.com:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
```
Guarda como `cliente.conf` y carga en WireGuard.
### 4. Verificar Conexión
Una vez activado el túnel:
```bash
# Verificar IP pública (debe ser la de tu servidor VPN)
curl ifconfig.me
# Ping al servidor VPN (IP interna)
ping 10.8.0.1
# Verificar DNS
nslookup google.com
```
## 🔧 Configuración Avanzada
### Rutear Solo Tráfico Específico (Split Tunneling)
Por defecto, WireGuard enruta TODO el tráfico (`AllowedIPs = 0.0.0.0/0`).
Para rutear solo ciertos rangos:
1. Descarga el archivo `.conf` del cliente
2. Edita `AllowedIPs`:
```ini
AllowedIPs = 10.8.0.0/24, 192.168.1.0/24
```
3. Importa el archivo modificado en el cliente
Ejemplos:
- Solo red VPN: `10.8.0.0/24`
- Red VPN + red local del servidor: `10.8.0.0/24, 192.168.1.0/24`
- Todo excepto red local del cliente: `0.0.0.0/1, 128.0.0.0/1`
### Cambiar Rango de IPs de la VPN
Por defecto usa `10.8.0.0/24`. Para cambiar:
1. Detén el stack
2. Edita `/opt/wireguard/data/wireguard.conf`
3. Cambia:
```ini
[Interface]
Address = 10.9.0.1/24
```
4. Actualiza también en cada cliente
5. Reinicia el stack
### Usar DNS Personalizado
Para que los clientes usen tu AdGuard Home:
1. En el panel web, ve a **Settings**
2. Cambia **DNS** a la IP de tu servidor (ej: `192.168.1.10`)
3. O edita manualmente en cada archivo `.conf`:
```ini
DNS = IP-de-tu-AdGuard
```
### Limitar Ancho de Banda
No soportado directamente por wg-easy, pero puedes usar `tc` en el servidor:
```bash
# Limitar a 10 Mbps
sudo tc qdisc add dev wg0 root tbf rate 10mbit burst 32kbit latency 400ms
```
### Configurar Post-Up/Post-Down Scripts
Para ejecutar scripts al iniciar/detener el túnel:
Edita `/opt/wireguard/data/wireguard.conf`:
```ini
[Interface]
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
```
## 🛠️ Troubleshooting
### No puedo conectar al VPN
1. Verifica que el puerto UDP está abierto:
```bash
sudo netstat -tulpn | grep 51820
nc -zuv vpn.tudominio.com 51820
```
2. Verifica que WireGuard está corriendo:
```bash
docker logs wg-easy
```
3. Verifica que el módulo WireGuard está cargado:
```bash
lsmod | grep wireguard
```
4. Verifica la configuración del cliente (especialmente `Endpoint`)
### Conecta pero no hay Internet
1. Verifica que el forwarding está habilitado en el servidor:
```bash
cat /proc/sys/net/ipv4/ip_forward # Debe ser 1
```
2. Verifica las reglas de iptables:
```bash
sudo iptables -L -v -n
```
3. Verifica la configuración de NAT en wg-easy
### Panel web no accesible
1. Verifica que está corriendo:
```bash
docker ps | grep wg-easy
```
2. Verifica los logs:
```bash
docker logs wg-easy
```
3. Verifica Traefik:
```bash
docker logs traefik | grep wg
```
### Error "Cannot find device wg0"
El módulo WireGuard no está cargado:
```bash
# Intentar cargar
sudo modprobe wireguard
# Si falla, instalar
sudo dnf install wireguard-tools # Fedora/RHEL
sudo apt install wireguard # Debian/Ubuntu
```
### Clientes se desconectan frecuentemente
1. Aumenta `PersistentKeepalive` en la configuración del cliente:
```ini
PersistentKeepalive = 25
```
2. Verifica el MTU (puede ser muy alto para tu red):
```ini
MTU = 1280
```
### IPv6 causa problemas
Desactiva IPv6 en `stack.env`:
```env
DISABLE_IPV6=true
```
Y reinicia el stack.
## 📚 Recursos Adicionales
- [Documentación oficial de WireGuard](https://www.wireguard.com/)
- [wg-easy en GitHub](https://github.com/wg-easy/wg-easy)
- [Guía de WireGuard](https://www.wireguard.com/quickstart/)
## 🔒 Seguridad
- **Cifrado**: WireGuard usa criptografía moderna (ChaCha20, Curve25519)
- **Panel web**: Protegido con Authentik (SSO)
- **Claves**: Cada cliente tiene su par de claves único
- **PresharedKey**: Capa adicional de seguridad cuántica
- **Firewall**: Solo el puerto UDP de WireGuard debe estar abierto
### Best Practices
1. **Cambia la contraseña** del panel web
2. **Usa Authentik** para proteger el panel
3. **Limita IPs** si solo necesitas acceso desde ciertos rangos
4. **Revoca clientes** cuando ya no los uses
5. **Haz backups** de `/opt/wireguard/data/`
## 💾 Backups
```bash
# Backup de configuraciones
sudo tar -czf wireguard-backup-$(date +%Y%m%d).tar.gz /opt/wireguard/data/
# Restaurar
sudo tar -xzf wireguard-backup-YYYYMMDD.tar.gz -C /
docker restart wg-easy
```
> **Importante**: Guarda los backups de forma segura. Contienen las claves privadas.
## 🔄 Actualizaciones
1. Haz backup de `/opt/wireguard/data/`
2. Actualiza en `stack.env`:
```env
WG_EASY_IMAGE=ghcr.io/wg-easy/wg-easy:latest
```
3. Actualiza el stack en Portainer
4. Verifica que los clientes siguen conectando
## 📊 Monitoreo
### Ver Clientes Conectados
En el panel web, verás:
- Clientes activos (verde)
- Última conexión
- Transferencia de datos
- IP asignada
### Ver Stats del Túnel
```bash
# Desde el servidor
docker exec wg-easy wg show
# Ver configuración
docker exec wg-easy cat /etc/wireguard/wg0.conf
# Ver logs
docker logs -f wg-easy
```
## 🎯 Casos de Uso
### Acceso Remoto Seguro
Accede a tu red doméstica desde cualquier lugar:
- Administra servidores
- Accede a servicios internos
- Usa impresoras de red
### Protección en Redes Públicas
Usa WireGuard en WiFi públicas para:
- Cifrar todo el tráfico
- Evitar ataques Man-in-the-Middle
- Proteger tus datos
### Bypass de Restricciones Geográficas
Usa la IP de tu servidor para:
- Acceder a contenido local
- Evitar censura
- Mantener tu IP original
### Combinar con AdGuard
Configura los clientes VPN para usar tu AdGuard Home:
- Bloqueo de anuncios en móvil
- Protección contra rastreadores
- DNS filtrado incluso fuera de casa