# Lambicall VPN Manager

Sistema completo de gestión de VPN con OpenVPN y panel web Laravel para Ubuntu 22.04/24.04.

## Arquitectura

- **Servidor VPN**: OpenVPN con EasyRSA (PKI propia)
- **Panel Web**: Laravel 12 + PHP 8.3 + PostgreSQL
- **Frontend**: Blade + Tailwind CSS
- **Cola de trabajos**: Supervisor + Laravel Queues
- **Servidor Web**: Apache2 con PHP-FPM

## Características

- ✅ Gestión completa de certificados VPN
- ✅ Interfaz web intuitiva
- ✅ Generación automática de archivos .ovpn y .conf
- ✅ Revocación de certificados
- ✅ Monitoreo en tiempo real
- ✅ Historial de conexiones
- ✅ Estadísticas de uso
- ✅ Descarga de configuraciones para múltiples plataformas

## Requisitos

- Ubuntu 22.04 LTS o 24.04 LTS
- 2 GB RAM mínimo
- 20 GB espacio en disco
- IP pública estática
- Dominio configurado (vpn.lambicall.com)

## Instalación Rápida

```bash
cd /var/www/html/openvpn
sudo chmod +x install.sh
sudo ./install.sh
```

## Instalación Manual

### 1. Instalar Dependencias

```bash
sudo apt-get update
sudo apt-get install -y openvpn easy-rsa apache2 postgresql php8.3 php8.3-fpm composer supervisor
```

### 2. Configurar OpenVPN

```bash
sudo make-cadir /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa
sudo ./easyrsa init-pki
sudo ./easyrsa build-ca nopass
sudo ./easyrsa gen-dh
sudo ./easyrsa build-server-full server nopass
sudo openvpn --genkey --secret /etc/openvpn/ta.key
```

### 3. Configurar Base de Datos

```bash
sudo -u postgres psql
CREATE DATABASE vpn_manager;
CREATE USER vpn_user WITH ENCRYPTED PASSWORD 'your_password';
GRANT ALL PRIVILEGES ON DATABASE vpn_manager TO vpn_user;
\q
```

### 4. Configurar Laravel

```bash
cd /var/www/html/openvpn/web
composer install
cp .env.example .env
php artisan key:generate
# Editar .env con las credenciales de la base de datos
php artisan migrate
```

### 5. Configurar Apache

```bash
sudo cp config/apache-vpn.conf /etc/apache2/sites-available/vpn.lambicall.com.conf
sudo a2ensite vpn.lambicall.com.conf
sudo a2enmod rewrite headers ssl proxy proxy_fcgi
sudo systemctl restart apache2
```

### 6. Configurar Supervisor

```bash
sudo cp config/supervisor-vpn.conf /etc/supervisor/conf.d/vpn.conf
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start vpn-workers:*
```

### 7. Configurar Permisos

```bash
sudo cp config/sudoers-vpn /etc/sudoers.d/vpn
sudo chmod 440 /etc/sudoers.d/vpn
sudo chown -R www-data:www-data /var/www/html/openvpn
```

## Uso

### Gestión por CLI

```bash
# Crear nuevo cliente
sudo ./scripts/openvpn-manager.sh generate nombre_cliente

# Revocar cliente
sudo ./scripts/openvpn-manager.sh revoke nombre_cliente

# Listar clientes
sudo ./scripts/openvpn-manager.sh list

# Ver estado de cliente
sudo ./scripts/openvpn-manager.sh status nombre_cliente

# Empaquetar archivos de cliente
sudo ./scripts/openvpn-manager.sh package nombre_cliente zip
```

### Panel Web

Acceder a: https://vpn.lambicall.com

Funcionalidades disponibles:
- Dashboard con estadísticas
- Crear nuevos clientes
- Ver detalles de clientes
- Descargar configuraciones (.ovpn, .conf)
- Revocar certificados
- Ver logs y conexiones activas

## Estructura de Directorios

```
/var/www/html/openvpn/
├── config/                 # Configuraciones del sistema
│   ├── server.conf        # Configuración OpenVPN
│   ├── apache-vpn.conf    # Configuración Apache
│   └── supervisor-vpn.conf # Configuración Supervisor
├── scripts/               # Scripts de gestión
│   └── openvpn-manager.sh # Script principal
├── web/                   # Aplicación Laravel
│   ├── app/              # Código de la aplicación
│   ├── database/         # Migraciones y seeders
│   ├── resources/        # Vistas y assets
│   └── routes/           # Rutas de la aplicación
├── certificates/          # Certificados de clientes
│   └── clients/          # Certificados por cliente
├── logs/                  # Logs del sistema
└── docs/                  # Documentación

```

## Configuración de Red

- **Puerto VPN**: 1194/UDP
- **Red VPN**: 10.7.0.0/16
- **Protocolo**: UDP
- **Dispositivo**: tun0
- **DNS**: 8.8.8.8, 8.8.4.4

## Seguridad

### Firewall (UFW)

```bash
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 1194/udp
sudo ufw enable
```

### Certificados SSL

Para producción, instalar certificados SSL válidos:

```bash
sudo certbot --apache -d vpn.lambicall.com
```

### Recomendaciones

1. Cambiar contraseña de administrador por defecto
2. Configurar backups regulares de certificados
3. Monitorear logs regularmente
4. Actualizar sistema operativo y paquetes
5. Implementar 2FA para el panel web
6. Restringir acceso SSH por IP

## Solución de Problemas

### OpenVPN no inicia

```bash
sudo systemctl status openvpn@server
sudo journalctl -xe -u openvpn@server
```

### Laravel Queue no procesa

```bash
sudo supervisorctl status
sudo supervisorctl restart vpn-workers:*
```

### Permisos de archivos

```bash
sudo chown -R www-data:www-data /var/www/html/openvpn
sudo chmod -R 755 /var/www/html/openvpn
sudo chmod -R 775 /var/www/html/openvpn/web/storage
```

## Monitoreo

### Estado del servidor VPN

```bash
sudo systemctl status openvpn@server
```

### Clientes conectados

```bash
sudo cat /var/log/openvpn/openvpn-status.log
```

### Logs de Laravel

```bash
tail -f /var/www/html/openvpn/web/storage/logs/laravel.log
```

### Cola de trabajos

```bash
sudo supervisorctl status
```

## Mantenimiento

### Backup de certificados

```bash
sudo tar -czf vpn-backup-$(date +%Y%m%d).tar.gz /etc/openvpn/easy-rsa/pki /var/www/html/openvpn/certificates
```

### Limpiar logs antiguos

```bash
sudo find /var/log/openvpn -name "*.log" -mtime +30 -delete
```

### Actualizar CRL

```bash
cd /etc/openvpn/easy-rsa
sudo ./easyrsa gen-crl
sudo cp pki/crl.pem /etc/openvpn/
sudo systemctl restart openvpn@server
```

## API Endpoints

El sistema incluye endpoints API para integración:

- `GET /api/clients` - Listar clientes
- `POST /api/clients` - Crear cliente
- `GET /api/clients/{id}` - Ver cliente
- `DELETE /api/clients/{id}` - Revocar cliente
- `GET /api/clients/{id}/download/{format}` - Descargar configuración
- `GET /api/status` - Estado del servidor

## Licencia

Propietario: Lambicall  
Uso interno exclusivo

## Soporte

Para soporte técnico contactar:
- Email: support@lambicall.com
- Web: https://lambicall.com

---

**Versión**: 1.0.0  
**Última actualización**: 2024