Este proyecto implementa una solución completa de VPN utilizando WireGuard en un entorno containerizado con Docker. La solución incluye conectividad Site-to-Site, acceso remoto, calidad de servicio (QoS) y herramientas de seguridad con IA.
Desarrollado por: Grupo Gemini Engineering
Universidad: Universidad Distrital Francisco José de Caldas
Asignatura: Redes de Comunicaciones III
Internet Simulada (172.18.0.0/16)
│
├── Gateway-A (172.18.0.2) ──────VPN Tunnel──────── Gateway-B (172.18.0.3)
│ │ (10.0.0.0/24) │
│ └── Red-A (172.16.10.0/24) └── Red-B (172.16.20.0/24)
│ └── Cliente-A (172.16.10.2) └── Cliente-B-VOD (172.16.20.2)
│
└── Cliente-Remoto (172.18.0.4)
└── Conecta vía VPN (10.0.0.3)
- Gateway-A: Router/VPN endpoint (10.0.0.1)
- Gateway-B: Router/VPN endpoint (10.0.0.2)
- Cliente-A: Host en red oficina A
- Cliente-B-VOD: Servidor de Video on Demand
- Cliente-Remoto: Cliente VPN remoto (10.0.0.3)
VPN-Namespaces/
├── docker-compose.yml # Definición de infraestructura
├── setup_network.sh # Script maestro de configuración
├── validate_configuration.sh # Script de validación y diagnóstico
├── Taller_1_Reporte.md # Reporte técnico completo
├── README.md # Esta documentación
├── config/ # Configuraciones y scripts
│ ├── gateway-a/
│ │ ├── wg0.conf # Config WireGuard gateway-a
│ │ └── setup.sh # Script de configuración
│ ├── gateway-b/
│ │ ├── wg0.conf # Config WireGuard gateway-b
│ │ └── setup.sh # Script de configuración
│ ├── cliente-remoto/
│ │ ├── wg0.conf # Config WireGuard cliente
│ │ └── setup.sh # Script de configuración
│ ├── cliente-a/
│ │ └── setup_routes.sh # Script de rutas
│ └── cliente-b-vod-server/
│ └── setup_routes.sh # Script de rutas
└── vod-data/ # Contenido servidor VoD
- Docker y Docker Compose instalados
- Sistema Linux (recomendado) o WSL2
- Permisos sudo
# 1. Clonar el repositorio
git clone https://github.com/EngJuanSER/VPN-Namespaces.git
cd VPN-Namespaces
# 2. Levantar la infraestructura
docker-compose up -d
# 3. Configurar automáticamente toda la red VPN
sudo ./setup_network.sh
# 4. Validar configuración (opcional)
./validate_configuration.shListo! En menos de 2 minutos tendrás una red VPN completamente funcional.
El proyecto incluye un script de validación completa que verifica:
./validate_configuration.shVerifica automáticamente:
- ✅ Estado de contenedores
- ✅ Configuraciones WireGuard válidas
- ✅ Claves públicas correctamente emparejadas
- ✅ Conectividad de endpoints
- ✅ Conectividad completa Site-to-Site y Remote Access
- ✅ Configuración de scripts y permisos
# Validación completa automatizada
./validate_configuration.sh
# Verificar conectividad Site-to-Site
sudo docker exec cliente-a ping -c 4 172.16.20.2
# Verificar acceso remoto
sudo docker exec cliente-remoto ping -c 4 172.16.10.2
sudo docker exec cliente-remoto ping -c 4 172.16.20.2
# Ver estado de WireGuard
sudo docker exec gateway-a wg showSi prefieres configurar paso a paso o entender el proceso:
# Gateway-A
sudo docker cp config/gateway-a/wg0.conf gateway-a:/etc/wireguard/
sudo docker exec gateway-a /etc/setup.sh
# Gateway-B
sudo docker cp config/gateway-b/wg0.conf gateway-b:/etc/wireguard/
sudo docker exec gateway-b /etc/setup.shsudo docker cp config/cliente-remoto/wg0.conf cliente-remoto:/etc/wireguard/
sudo docker exec cliente-remoto /etc/setup.shsudo docker exec cliente-a /etc/setup_routes.sh
sudo docker exec cliente-b-vod-server /etc/setup_routes.sh- Túnel seguro entre dos redes LAN
- Enrutamiento automático bidireccional
- Cifrado ChaCha20Poly1305
- Cliente remoto con acceso a ambas redes
- Configuración Full Tunnel
- DNS personalizable
- Traffic Shaping: Token Bucket Filter
- Traffic Policing: Hierarchical Token Bucket
- Priority Queuing: Colas de prioridad PRIO
- Setup automático: Un solo comando configura toda la infraestructura
- Validación inteligente: Script de diagnóstico que verifica configuración
- Scripts modulares: Configuración individual por componente
- Instalación automática de dependencias
- Verificación automática de conectividad
- Infraestructura como Código (IaC)
- Nginx con contenido de streaming
- Pruebas de rendimiento con/sin QoS
- Métricas de ancho de banda y latencia
# Script de validación completa (recomendado)
./validate_configuration.shEste script realiza verificaciones exhaustivas:
- Contenedores: Estado y conectividad
- Configuraciones WireGuard: Sintaxis y parámetros
- Claves públicas: Emparejamiento correcto entre peers
- Endpoints: Conectividad de red entre nodos
- Conectividad VPN: Site-to-Site y Remote Access
- Scripts: Permisos y configuración
# Ping entre gateways
sudo docker exec gateway-a ping -c 4 10.0.0.2
# Conectividad Site-to-Site
sudo docker exec cliente-a ping -c 4 172.16.20.2
sudo docker exec cliente-b-vod-server ping -c 4 172.16.10.2
# Acceso remoto
sudo docker exec cliente-remoto ping -c 4 172.16.10.2
sudo docker exec cliente-remoto ping -c 4 172.16.20.2# Test de ancho de banda con iperf3
sudo docker exec -it cliente-a iperf3 -c 172.16.20.2 -t 30
# Descarga desde servidor VoD
sudo docker exec cliente-a wget -O /dev/null http://172.16.20.2/video.mp4
# Estadísticas de QoS
sudo docker exec gateway-a tc -s qdisc show dev wg0# Ver peers conectados
sudo docker exec gateway-a wg show
sudo docker exec gateway-b wg show
sudo docker exec cliente-remoto wg show
# Ver configuración
sudo docker exec gateway-a cat /etc/wireguard/wg0.conf- Cifrado moderno: ChaCha20Poly1305
- Autenticación: Claves públicas Curve25519
- Perfect Forward Secrecy: Rotación automática de claves
- Firewall integrado: iptables configurado automáticamente
Las configuraciones incluyen claves pre-generadas para fines educativos. En producción:
# Generar nuevas claves
wg genkey | tee private.key | wg pubkey > public.key# Traffic Shaping - Limitar a 15 Mbps
tc qdisc add dev wg0 root handle 1: tbf rate 15mbit burst 32kbit limit 65536
# Priority Queuing - 3 bandas de prioridad
tc qdisc add dev wg0 root handle 1: prio bands 3
# HTB - Control jerárquico
tc qdisc add dev wg0 root handle 1: htb default 30
tc class add dev wg0 parent 1: classid 1:1 htb rate 20mbit| Configuración | Throughput | Latencia | Jitter |
|---|---|---|---|
| Sin QoS | >800 MB/s | <1ms | Variable |
| Con QoS (15Mbps) | ~14.4 Mbps | <2ms | Controlado |
# Diagnóstico automático completo
./validate_configuration.sh
# Si muestra errores, revisar logs específicos
sudo docker logs gateway-a
sudo docker logs gateway-bWireGuard no inicia:
# Verificar permisos
sudo docker exec gateway-a chmod 600 /etc/wireguard/wg0.conf
# Revisar logs
sudo docker logs gateway-aSin conectividad:
# Diagnóstico completo
./validate_configuration.sh
# Verificar rutas manualmente
sudo docker exec cliente-a ip route
# Verificar firewall
sudo docker exec gateway-a iptables -L -vRendimiento bajo:
# Diagnóstico de configuración
./validate_configuration.sh
# Verificar QoS
sudo docker exec gateway-a tc qdisc show
# Test de conectividad directa
sudo docker exec cliente-a ping -c 10 172.16.10.10Si necesitas reconfigurar desde cero:
# Limpiar configuración
docker-compose down
docker-compose up -d
# Reconfigurar automáticamente
sudo ./setup_network.sh
# Validar nueva configuración
./validate_configuration.sh- Fork del repositorio
- Crear rama para nueva característica (
git checkout -b feature/nueva-caracteristica) - Commit de cambios (
git commit -am 'Agregar nueva característica') - Push a la rama (
git push origin feature/nueva-caracteristica) - Crear Pull Request
Este proyecto es desarrollado con fines educativos para la Universidad Distrital Francisco José de Caldas.
¿Necesitas ayuda? Revisa el reporte técnico completo para análisis detallado y ejemplos adicionales.