module for managing multiple VPN connections with support for WireGuard and OpenVPN.
657
https://github.com/ALH477/vpn
This directory contains Dockerfile configurations for containerized deployment of VPN Manager components.
vpn-manager:latestvpn-metrics-exporter:latestvpn-health-monitor:latest# 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 .
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
# 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
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_PORT: Metrics listening port (default: 9101)SCRAPE_INTERVAL: Metrics collection interval (default: 30)LOG_LEVEL: Logging level (default: info)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)/etc/vpn-manager: Configuration files/root/wireguard-keys: VPN keys and certificates/var/log/vpn-manager: Log files/var/lib/vpn-manager: State data/etc/localtime: Host timezone/proc:/host/proc: Host process informationNET_ADMIN: Required for network interface managementNET_RAW: Required for raw socket operations# Set proper permissions for keys
chmod 600 ./keys/*
chmod 700 ./keys
# Set proper permissions for logs
mkdir -p ./logs
chmod 755 ./logs
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
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
scrape_configs:
- job_name: 'vpn-manager'
static_configs:
- targets: ['vpn-metrics:9101']
scrape_interval: 30s
metrics_path: /metrics
grafana-vpn-dashboard.json for pre-built visualization# 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)"
# 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/*
# 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
# Enable debug logging
docker run -e LOG_LEVEL=debug vpn-manager:latest
# Interactive debugging
docker run -it --entrypoint /bin/sh vpn-manager:latest
# Pull latest images
docker-compose pull
# Recreate services
docker-compose up -d
# Remove old images
docker image prune -f
# 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
# 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
Content type
Image
Digest
sha256:9cc3ed56f…
Size
35.4 MB
Last updated
8 months ago
docker pull alh477/vpn-manager