Initial clean commit (history purged)
This commit is contained in:
435
wireguard/README.md
Normal file
435
wireguard/README.md
Normal 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
|
||||
Reference in New Issue
Block a user