WireGuard Multi-Client WebUI is a web-based management interface for WireGuard VPN that allows you to:
- Manage multiple WireGuard networks (groups)
- Create and manage unlimited VPN clients
- Monitor traffic statistics
- Support multiple users with role-based access control
Yes! The application has been security-hardened and is ready for production deployment. See SECURITY-AUDIT.md for the complete security assessment.
Absolutely! The application works great for both personal and enterprise use.
- Docker and Docker Compose
- Linux host with kernel ≥5.6 (for WireGuard)
- 1GB RAM, 1 CPU core (for small deployments)
- 20GB disk space
No! The application provides a user-friendly interface that handles all WireGuard configuration for you. However, basic VPN knowledge is helpful.
While Docker is recommended, you can run the application directly with Python and Node.js. See the Development Setup section in README.md.
- Log in with username
adminand passwordadmin - Go to your profile settings
- Change password to a strong, unique password
Alternatively, set ADMIN_PASSWORD environment variable before first startup.
Yes! Configure a reverse proxy (nginx, Caddy, or Traefik) with SSL certificates. See DEPLOYMENT.md for detailed instructions.
- SQLite (default): Good for small to medium deployments (<100 users)
- PostgreSQL: Recommended for large deployments (>100 users)
- MySQL/MariaDB: Also supported via SQLAlchemy
Use a reverse proxy with SSL certificates:
- Install nginx and certbot
- Configure nginx to proxy to the application
- Obtain SSL certificate from Let's Encrypt
- See DEPLOYMENT.md for complete guide
Yes! Edit docker-compose.yml and change the port mapping:
ports:
- "8080:80" # Change 8080 to your preferred portEach group (network) uses a separate UDP port. Add port mappings in docker-compose.yml:
ports:
- "51820:51820/udp"
- "51821:51821/udp"
- "51822:51822/udp"Unlimited! Each group represents a separate WireGuard network with its own configuration and clients.
Unlimited! However, performance depends on your server resources. For large deployments (1000+ clients), see the scaling section in DEPLOYMENT.md.
Yes! Users can be members of multiple groups and manage clients in each group they have access to.
- Navigate to the client details page
- Click "Download Configuration"
- Transfer the
.conffile to your device - Import into WireGuard client app
Yes! You can set custom DNS servers:
- Per-group (applies to all clients in the group)
- Per-client (overrides group DNS for specific client)
The "Allowed IPs" field determines which traffic is routed through the VPN:
0.0.0.0/0- All traffic (full tunnel)10.0.0.0/8- Only private network traffic192.168.1.0/24- Specific subnet
Yes! The application implements:
- JWT authentication with bcrypt password hashing
- Role-based access control
- Input validation and sanitization
- Security headers (CSP, HSTS, etc.)
- Rate limiting on authentication
- Regular security updates
See SECURITY.md and SECURITY-AUDIT.md for details.
Preshared keys provide an additional layer of security (quantum-resistant). Enable by setting:
WG_USE_PRESHARED_KEY=trueWireGuard keys don't expire, but you may want to rotate them periodically for security:
- Client keys: Every 6-12 months
- Server keys: When security policy requires
- Use the "Regenerate Keys" feature in the UI
This application manages WireGuard through its own database. Importing existing configs is not currently supported, but you can manually recreate them in the UI.
Statistics are collected from WireGuard interfaces at intervals defined by STATS_COLLECTION_INTERVAL (default: 10 seconds). They are accurate within this interval.
Currently, statistics are stored in the database. You can query the database directly or use the API to export data.
Health check endpoints allow monitoring systems to verify the application is running:
/api/health- Basic health check/api/ready- Database connectivity check
It depends on your server resources:
- Small (<50 users): 1 CPU, 1GB RAM
- Medium (50-500 users): 2 CPU, 2GB RAM
- Large (500+ users): 4 CPU, 4GB RAM with PostgreSQL
- Increase
STATS_COLLECTION_INTERVALto reduce database I/O - Use PostgreSQL instead of SQLite
- Increase Gunicorn workers
- Use faster storage (SSD)
See DEPLOYMENT.md for scaling details.
The application uses SQLite by default, which doesn't support multiple instances. For load balancing:
- Use PostgreSQL database
- Set up a load balancer
- Ensure session persistence via JWT tokens
Backup these items:
- Database:
data/app.db - WireGuard configs:
wireguard/directory - Environment file:
.env
See DEPLOYMENT.md for automated backup scripts.
- Stop the application
- Replace database and configs with backup copies
- Restart the application
You'll lose:
- User accounts and passwords
- Group configurations
- Client assignments
WireGuard configs are separate files and won't be lost, but you'll need to recreate the database entries manually.
- Check container status:
docker-compose ps - Check logs:
docker-compose logs -f - Verify firewall allows port 8080
- Check if port is already in use:
netstat -tulpn | grep 8080
- Check WireGuard module:
lsmod | grep wireguard - Verify IP forwarding:
sysctl net.ipv4.ip_forward - Check container logs:
docker-compose logs backend - Verify config syntax:
wg show
- Verify server firewall allows WireGuard port (UDP)
- Check client configuration has correct endpoint
- Verify group is enabled in the UI
- Check server logs for errors
- Stop the application:
docker-compose down - Check for file locks:
lsof data/app.db - Restart:
docker-compose up -d
For more troubleshooting, see DEPLOYMENT.md.
cd /opt/wireguard-multiclient-webui
git pull
docker-compose pull
docker-compose up -dAlways backup before updating!
- Security updates: Immediately
- Feature updates: When needed
- System updates: Monthly
Configuration is stored in the database and environment files, which are not affected by updates. Always backup before updating.
Yes! Contributions are welcome. See the Contributing section in README.md.
- Check if it's already reported in GitHub Issues
- If not, create a new issue with:
- Description of the bug
- Steps to reproduce
- Your environment details
- Logs (if available)
Please report security issues privately:
- Create an issue with [SECURITY] in the title
- Do not disclose details publicly
- See SECURITY.md for full policy
- Documentation: README.md, SECURITY.md, DEPLOYMENT.md
- GitHub Issues: Report bugs and request features
- GitHub Discussions: Ask questions and share experiences
Currently, this is a community-supported project. Commercial support may be available in the future.
Yes! This project is licensed under GPLv3, which allows commercial use with certain requirements. See LICENSE for details.
Yes! GPLv3 allows modifications, but you must:
- Keep the same license
- Make your changes available
- Credit the original authors
Didn't find your question? Ask on GitHub Discussions