VPN Infrastructure Setup Guide
Overview
This setup provides a secure VPN-based infrastructure using WireGuard that: - Exposes only essential public services to the internet - Requires VPN connection for administrative and monitoring services - Provides enterprise-grade security with minimal performance overhead
Architecture
Internet
β
[Public Services] β Traefik Reverse Proxy
β
[WireGuard VPN] β VPN Required
β
[Private Services] β Internal Network
Public Services (Internet Accessible)
These services remain accessible without VPN:
- Status Page:
status.olanna.ai(Uptime Kuma) - Assets:
assets.olanna.ai(Static files)
Administrative Services (Basic Auth Required)
These services have their own authentication but are publicly accessible:
- VPN Admin:
vpn-admin.olanna.ai(WG-Easy - with basic auth)
Private Services (VPN Required)
These services require VPN connection:
- Authentication:
auth.olanna.ai(Keycloak) - Monitoring:
monitoring.olanna.ai(Grafana) - Search:
search.olanna.ai(OpenSearch Dashboards) - Tracing:
tracing.olanna.ai(Jaeger) - Database:
database.olanna.ai(pgAdmin) - CI/CD:
jenkins.olanna.ai(Jenkins) - Service Discovery:
consul.olanna.ai(Consul) - Secrets:
vault.olanna.ai(Vault) - Artifacts:
nexus.olanna.ai(Nexus) - Proxy Admin:
traefik.olanna.ai(Traefik Dashboard) - Message Queue:
rabbitmq.olanna.ai(RabbitMQ) - DNS Admin:
dns.olanna.ai(Pi-hole) - Telemetry:
telemetry.olanna.ai(OpenTelemetry)
Quick Start
1. Run the Setup Script
./scripts/setup-vpn.sh
This script will: - Check WireGuard support - Generate cryptographic keys - Create client configurations - Set up Docker networks - Generate firewall rules - Create documentation
2. Start VPN Infrastructure
# Start VPN services first
docker-compose -f docker-compose-vpn.yml up -d
# Start main services with VPN protection
docker-compose up -d
3. Configure DNS
Add these DNS records to your domain:
# VPN Infrastructure
vpn.olanna.ai A YOUR_SERVER_IP
vpn-admin.olanna.ai A YOUR_SERVER_IP
# Public Services
status.olanna.ai A YOUR_SERVER_IP
assets.olanna.ai A YOUR_SERVER_IP
# Private Services (VPN Required)
auth.olanna.ai A YOUR_SERVER_IP
monitoring.olanna.ai A YOUR_SERVER_IP
search.olanna.ai A YOUR_SERVER_IP
tracing.olanna.ai A YOUR_SERVER_IP
jenkins.olanna.ai A YOUR_SERVER_IP
database.olanna.ai A YOUR_SERVER_IP
consul.olanna.ai A YOUR_SERVER_IP
vault.olanna.ai A YOUR_SERVER_IP
nexus.olanna.ai A YOUR_SERVER_IP
traefik.olanna.ai A YOUR_SERVER_IP
rabbitmq.olanna.ai A YOUR_SERVER_IP
dns.olanna.ai A YOUR_SERVER_IP
telemetry.olanna.ai A YOUR_SERVER_IP
4. Apply Firewall Rules
sudo ./firewall-rules.sh
5. Configure VPN Clients
- Client configurations are in
./wireguard-clients/ - Import
client1.confinto your WireGuard client - Connect and test access to private services
Security Features
Network Isolation
- VPN Subnet: 10.8.0.0/24
- Docker Network: 172.18.0.0/16
- IP Filtering: Services check source IP ranges
Access Control
- Public: Rate-limited, security headers
- Private: VPN-only, additional authentication
- Admin: Basic auth + VPN required
Encryption
- WireGuard: ChaCha20Poly1305 encryption
- TLS: Let's Encrypt certificates
- Headers: Security headers on all services
Configuration Files
WireGuard Server Config (Auto-generated)
[Interface]
PrivateKey = SERVER_PRIVATE_KEY
Address = 10.8.0.1/24
ListenPort = 51820
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.8.0.2/32
Client Config Example
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.8.0.2/24
DNS = 172.18.0.10, 1.1.1.1
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = vpn.olanna.ai:51820
AllowedIPs = 10.8.0.0/24, 172.18.0.0/16
PersistentKeepalive = 25
Management
WG-Easy Web Interface
- URL:
https://vpn-admin.olanna.ai - Features:
- QR codes for mobile clients
- Client management
- Usage statistics
- Connection monitoring
Pi-hole DNS Management
- URL:
https://dns.olanna.ai - Features:
- Internal DNS resolution
- Ad blocking for VPN clients
- Query logging
- Whitelist/blacklist management
Monitoring & Troubleshooting
Connection Testing
# Test VPN connection
ping 10.8.0.1
# Test internal service access
curl -I https://monitoring.olanna.ai
# Check WireGuard status
sudo wg show
Log Locations
- WireGuard: Container logs via
docker logs wireguard - Traefik:
/var/log/traefik/ - Access Logs: Traefik access logs show VPN vs public access
Common Issues
- Can't connect to VPN
- Check firewall allows UDP 51820
- Verify DNS resolution for vpn.olanna.ai
-
Check server logs:
docker logs wg-easy -
Can access VPN but not services
- Verify IP range in VPN config includes 172.18.0.0/16
- Check Traefik dynamic config loaded
-
Test with:
curl -H "Host: monitoring.olanna.ai" http://172.18.0.X:3000 -
Services accessible from internet (security issue)
- Check firewall rules are applied
- Verify Traefik middleware is active
- Check service labels include
vpn-only@file
Performance Considerations
WireGuard Performance
- Throughput: Near-native network speed
- Latency: <1ms additional overhead
- CPU Usage: Minimal (optimized cryptography)
Resource Allocation
- WireGuard: 128MB RAM limit
- WG-Easy: 128MB RAM limit
- Pi-hole: 256MB RAM limit
Scaling
Multiple VPN Servers
For high availability: 1. Deploy multiple WireGuard instances 2. Use DNS round-robin or load balancer 3. Sync client configurations
Client Management
- WG-Easy supports unlimited clients
- Each client gets unique IP (10.8.0.2-254)
- Revoke access by removing peer configuration
Security Best Practices
-
Change Default Passwords
# Update passwords in docker-compose files # Generate strong passwords with: openssl rand -base64 32 -
Certificate Management
- Let's Encrypt auto-renewal configured
-
Monitor certificate expiration
-
Access Monitoring
- Review Traefik access logs
- Monitor VPN connection logs
-
Set up alerts for unusual access patterns
-
Regular Updates
# Update containers docker-compose pull docker-compose up -d # Update WireGuard docker pull lscr.io/linuxserver/wireguard:latest
Backup & Recovery
Critical Data
- WireGuard keys:
./wireguard-keys/ - Client configs:
./wireguard-clients/ - Traefik certificates:
./letsencrypt/ - Service data: Docker volumes
Backup Script
#!/bin/bash
tar -czf vpn-backup-$(date +%Y%m%d).tar.gz \
wireguard-keys/ \
wireguard-clients/ \
letsencrypt/ \
*.yml \
*.conf
Cost Analysis
Advantages of This Setup vs Commercial VPN
- Cost: $0 vs $50-200/month for enterprise VPN
- Performance: Better (no shared infrastructure)
- Control: Complete control over configuration
- Integration: Native Docker/container integration
Estimated Resource Usage
- Bandwidth: <5% overhead for VPN encryption
- Storage: <1GB for configurations and logs
- CPU: <1% additional load for encryption
This setup provides enterprise-grade VPN security at minimal cost and complexity while maintaining high performance and full control over your infrastructure.