Sign inSign up

alh477/vpn-manager

By alh477

Updated 8 months ago

module for managing multiple VPN connections with support for WireGuard and OpenVPN.

Image
Networking
Security
Monitoring & observability
0

657

alh477/vpn-manager repository overview

Docker Images for VPN Manager

https://github.com/ALH477/vpn

This directory contains Dockerfile configurations for containerized deployment of VPN Manager components.

Available Images

1. VPN Manager Core
  • Image: vpn-manager:latest
  • Purpose: Main VPN management service
  • Size: ~150MB
  • Base: Alpine Linux 3.19
2. Metrics Exporter
  • Image: vpn-metrics-exporter:latest
  • Purpose: Prometheus metrics collection
  • Size: ~50MB
  • Base: Alpine Linux 3.19
3. Health Monitor
  • Image: vpn-health-monitor:latest
  • Purpose: Dedicated health monitoring service
  • Size: ~80MB
  • Base: Alpine Linux 3.19

Build Commands

# Build all images
docker-compose build

# Build specific image
docker build -t vpn-manager:latest -f Dockerfile.manager .
docker build -t vpn-metrics-exporter:latest -f Dockerfile.metrics .
docker build -t vpn-health-monitor:latest -f Dockerfile.health .

# Build with buildx for multi-platform
docker buildx build --platform linux/amd64,linux/arm64 -t vpn-manager:latest -f Dockerfile.manager .

Usage Examples

Docker Compose Deployment
version: '3.8'
services:
  vpn-manager:
    image: vpn-manager:latest
    cap_add:
      - NET_ADMIN
      - NET_RAW
    devices:
      - /dev/net/tun
    volumes:
      - ./config:/etc/vpn-manager
      - ./keys:/root/wireguard-keys
      - ./logs:/var/log/vpn-manager
    environment:
      - LOG_LEVEL=info
      - HEALTH_CHECK_INTERVAL=60
    network_mode: host

  vpn-metrics:
    image: vpn-metrics-exporter:latest
    ports:
      - "9101:9101"
    environment:
      - METRICS_PORT=9101
    volumes:
      - ./logs:/var/log/vpn-manager

  vpn-health:
    image: vpn-health-monitor:latest
    volumes:
      - ./config:/etc/vpn-manager
      - ./logs:/var/log/vpn-manager
    environment:
      - CHECK_INTERVAL=30
      - ALERT_WEBHOOK=https://hooks.slack.com/your-webhook
Standalone Docker Run
# VPN Manager
docker run -d \
  --name vpn-manager \
  --cap-add NET_ADMIN \
  --cap-add NET_RAW \
  --device /dev/net/tun \
  --network host \
  -v ./config:/etc/vpn-manager \
  -v ./keys:/root/wireguard-keys \
  -v ./logs:/var/log/vpn-manager \
  vpn-manager:latest

# Metrics Exporter
docker run -d \
  --name vpn-metrics \
  -p 9101:9101 \
  -v ./logs:/var/log/vpn-manager \
  vpn-metrics-exporter:latest

Configuration

Environment Variables
VPN Manager Core
  • LOG_LEVEL: Logging level (debug, info, warn, error)
  • HEALTH_CHECK_INTERVAL: Health check interval in seconds (default: 60)
  • MAX_CONNECTIONS: Maximum concurrent VPN connections (default: 5)
  • DNS_SERVERS: Comma-separated DNS servers (default: 1.1.1.1,1.0.0.1)
  • FIREWALL_ENABLED: Enable firewall rules (default: true)
Metrics Exporter
  • METRICS_PORT: Metrics listening port (default: 9101)
  • SCRAPE_INTERVAL: Metrics collection interval (default: 30)
  • LOG_LEVEL: Logging level (default: info)
Health Monitor
  • CHECK_INTERVAL: Health check interval (default: 30)
  • FAILURE_THRESHOLD: Failure threshold for alerts (default: 3)
  • ALERT_WEBHOOK: Webhook URL for alerts (optional)
  • ALERT_EMAIL: Email for alerts (optional)
Volume Mounts
Required Volumes
  • /etc/vpn-manager: Configuration files
  • /root/wireguard-keys: VPN keys and certificates
  • /var/log/vpn-manager: Log files
Optional Volumes
  • /var/lib/vpn-manager: State data
  • /etc/localtime: Host timezone
  • /proc:/host/proc: Host process information

Security Considerations

Capabilities Required
  • NET_ADMIN: Required for network interface management
  • NET_RAW: Required for raw socket operations
Network Modes
  • Host Network: Required for WireGuard/OpenVPN functionality
  • Bridge Network: Limited functionality, not recommended
File Permissions
# Set proper permissions for keys
chmod 600 ./keys/*
chmod 700 ./keys

# Set proper permissions for logs
mkdir -p ./logs
chmod 755 ./logs

Kubernetes Deployment

Deployment Manifest
apiVersion: apps/v1
kind: Deployment
metadata:
  name: vpn-manager
spec:
  replicas: 1
  selector:
    matchLabels:
      app: vpn-manager
  template:
    metadata:
      labels:
        app: vpn-manager
    spec:
      containers:
      - name: vpn-manager
        image: vpn-manager:latest
        securityContext:
          capabilities:
            add:
            - NET_ADMIN
            - NET_RAW
        env:
        - name: LOG_LEVEL
          value: "info"
        - name: HEALTH_CHECK_INTERVAL
          value: "60"
        volumeMounts:
        - name: config
          mountPath: /etc/vpn-manager
        - name: keys
          mountPath: /root/wireguard-keys
        - name: logs
          mountPath: /var/log/vpn-manager
        hostNetwork: true
      volumes:
      - name: config
        configMap:
          name: vpn-config
      - name: keys
        secret:
          secretName: vpn-keys
      - name: logs
        persistentVolumeClaim:
          claimName: vpn-logs
Service Account
apiVersion: v1
kind: ServiceAccount
metadata:
  name: vpn-manager
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: vpn-manager
rules:
- apiGroups: [""]
  resources: ["pods", "services"]
  verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: vpn-manager
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: vpn-manager
subjects:
- kind: ServiceAccount
  name: vpn-manager
  namespace: default

Monitoring Integration

Prometheus Configuration
scrape_configs:
  - job_name: 'vpn-manager'
    static_configs:
      - targets: ['vpn-metrics:9101']
    scrape_interval: 30s
    metrics_path: /metrics
Grafana Dashboard
  • Import grafana-vpn-dashboard.json for pre-built visualization
  • Dashboard ID: VPN-Manager-v1.0

Troubleshooting

Common Issues
VPN Interface Not Created
# Check capabilities
docker exec vpn-manager capsh --print

# Check device mapping
docker exec vpn-manager ls -la /dev/net/tun

# Check kernel modules
docker exec vpn-manager lsmod | grep -E "(wireguard|tun)"
Permission Denied Errors
# Check file permissions
docker exec vpn-manager ls -la /root/wireguard-keys

# Fix permissions
docker exec --user root vpn-manager chmod 600 /root/wireguard-keys/*
Network Connectivity Issues
# Check network namespace
docker exec vpn-manager ip addr show

# Check routing
docker exec vpn-manager ip route show

# Check DNS
docker exec vpn-manager nslookup google.com
Debug Mode
# Enable debug logging
docker run -e LOG_LEVEL=debug vpn-manager:latest

# Interactive debugging
docker run -it --entrypoint /bin/sh vpn-manager:latest

Updates and Maintenance

Image Updates
# Pull latest images
docker-compose pull

# Recreate services
docker-compose up -d

# Remove old images
docker image prune -f
Backup Configuration
# Backup volumes
docker run --rm -v ./config:/backup-config alpine tar czf - -C /backup-config . > config-backup.tar.gz
docker run --rm -v ./keys:/backup-keys alpine tar czf - -C /backup-keys . > keys-backup.tar.gz
Version Information
# Check image version
docker run --rm vpn-manager:latest --version

# Check build info
docker run --rm vpn-manager:latest --build-info

Last Updated: 2025-01-30 Version: 1.0.0

Tag summary

Content type

Image

Digest

sha256:9cc3ed56f

Size

35.4 MB

Last updated

8 months ago

docker pull alh477/vpn-manager