Skip to content

shayanb/MoaV

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

621 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

MoaV

Website Docs Version License

English | فارسی

Multi-protocol Internet censorship circumvention stack optimized for hostile network environments.

Features

  • Multiple protocols - Reality (VLESS), Trojan, Hysteria2, XHTTP (VLESS+XHTTP+Reality), XDNS (mKCP DNS tunnel), TrustTunnel, AmneziaWG, WireGuard (direct & wstunnel), DNS tunnels (dnstt + Slipstream), Telegram MTProxy, CDN (VLESS+WS)
  • Stealth-first - All traffic looks like normal HTTPS, WebSocket, DNS, or IMAPS
  • Per-user credentials - Create, revoke, and manage users independently
  • Easy deployment - Docker Compose based, single command setup
  • Mobile-friendly - QR codes and links for easy client import
  • Decoy website - Serves innocent content to unauthenticated visitors
  • Home server ready - Run on Raspberry Pi or any ARM64/x64 Linux as a personal VPN
  • Psiphon Conduit - Optional bandwidth donation to help others bypass censorship
  • Tor Snowflake - Optional bandwidth donation to help Tor users bypass censorship
  • MahsaNet - Donate VPN configs to help Mahsa VPN users (2M+ users in Iran)
  • Monitoring - Optional Grafana + Prometheus observability stack

Read the full documentation β€” setup guides, CLI reference, client apps, monitoring, OPSEC, and more.

Quick Start

One-liner install (recommended):

curl -fsSL moav.sh/install.sh | bash

This will:

  • Install prerequisites (Docker, git, qrencode) if missing
  • Clone MoaV to /opt/moav
  • Prompt for domain, email, and admin password
  • Offer to install moav command globally
  • Launch the interactive setup

Manual install (alternative):

git clone https://github.com/shayanb/MoaV.git
cd MoaV
cp .env.example .env
nano .env  # Set DOMAIN, ACME_EMAIL, ADMIN_PASSWORD
./moav.sh

MoaV Interactive Menu

After installation, use moav from anywhere:

moav                      # Interactive menu
moav start                # Start services
moav status               # Show service status
moav user add alice       # Add user (generates configs + QR codes)
moav user add --batch 10  # Batch create users
moav donate               # Donate configs to MahsaNet/Psiphon/Snowflake
moav doctor               # Run diagnostics (DNS, ports, services)
moav update               # Update MoaV
moav admin password       # Reset admin/Grafana password
moav help                 # Show all commands

See the Setup Guide for complete instructions, the CLI Reference for all commands, or browse the full documentation.

Deploy Your Own

Deploy on Hetzner Deploy on Linode Deploy on Vultr Deploy on DigitalOcean

Architecture

                                                              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                      β”‚ Psiphon Users β”‚  β”‚   Tor Users   β”‚
       β”‚  Your Clients β”‚                                      β”‚  (worldwide)  β”‚  β”‚  (worldwide)  β”‚
       β”‚   (private)   β”‚                                      β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
       β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜                                              β”‚                  β”‚
               β”‚                                                      β”‚                  β”‚
               β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                    β”‚                  β”‚
               β”‚                 β”‚ (when IP blocked)                  β”‚                  β”‚
               β”‚          β”Œβ”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”                            β”‚                  β”‚
               β”‚          β”‚ Cloudflare   β”‚                            β”‚                  β”‚
               β”‚          β”‚  CDN (VLESS) β”‚                            β”‚                  β”‚
               β”‚          β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜                            β”‚                  β”‚
               β”‚                 β”‚                                    β”‚                  β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β•ͺ─────────────────β•ͺ────────────────────────────────────β•ͺ──────────────────β•ͺ─────────┐
β”‚              β”‚                 β”‚          Restricted Internet       β”‚                  β”‚         β”‚
└──────────────β•ͺ─────────────────β•ͺ────────────────────────────────────β•ͺ──────────────────β•ͺβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
               β”‚                 β”‚                                    β”‚                  β”‚
╔══════════════β•ͺ═════════════════β•ͺ════════════════════════════════════β•ͺ══════════════════β•ͺ═════════╗
β•‘              β”‚                 β”‚                                    β”‚                  β”‚         β•‘
β•‘     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”                     β”‚                  β”‚         β•‘
β•‘     β”‚        β”‚         β”‚       β”‚       β”‚      β”‚                     β”‚                  β”‚         β•‘
β•‘     β–Ό        β–Ό         β–Ό       β–Ό       β–Ό      β–Ό                     β–Ό                  β–Ό         β•‘
β•‘ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β•‘
β•‘ β”‚ Reality β”‚β”‚WireGuardβ”‚β”‚ Trust β”‚β”‚  DNS    β”‚β”‚Telegramβ”‚          β”‚           β”‚      β”‚           β”‚   β•‘
β•‘ β”‚ 443/tcp β”‚β”‚51820/udpβ”‚β”‚Tunnel β”‚β”‚ 53/udp  β”‚β”‚MTProxy β”‚          β”‚  Conduit  β”‚      β”‚ Snowflake β”‚   β•‘
β•‘ β”‚ Trojan  β”‚β”‚AmneziaWGβ”‚β”‚4443/  β”‚β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”‚993/tcp β”‚          β”‚  (donate  β”‚      β”‚  (donate  β”‚   β•‘
β•‘ β”‚8443/tcp β”‚β”‚51821/udpβ”‚β”‚tcp+udpβ”‚β”‚  dnstt  β”‚β””β”€β”€β”€β”¬β”€β”€β”€β”€β”˜          β”‚ bandwidth)β”‚      β”‚ bandwidth)β”‚   β•‘
β•‘ β”‚Hysteria2β”‚β”‚wstunnel β”‚β”‚       β”‚β”‚Slipstrm β”‚    β”‚               β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜      β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜   β•‘
β•‘ β”‚ 443/udp β”‚β”‚8080/tcp β”‚β”‚       β”‚β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜    β”‚                     β”‚                  β”‚         β•‘
β•‘ β”‚ CDN WS  β”‚β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜β””β”€β”€β”€β”¬β”€β”€β”€β”˜     β”‚         β”‚                     β”‚                  β”‚         β•‘
β•‘ β”‚2082/tcp β”‚     β”‚         β”‚         β”‚         β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚                  β”‚     M   β•‘
β•‘ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€     β”‚         β”‚         β”‚         β”‚  β”‚ Grafana  :9444 β”‚ β”‚                  β”‚     O   β•‘
β•‘ β”‚ sing-boxβ”‚     β”‚         β”‚         β”‚         β”‚  β”‚ Prometheus     β”‚ β”‚                  β”‚     A   β•‘
β•‘ β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜     β”‚         β”‚         β”‚         β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚                  β”‚     V   β•‘
β•‘      β”‚          β”‚         β”‚         β”‚         β”‚                     β”‚                  β”‚         β•‘
β•šβ•β•β•β•β•β•β•ͺ══════════β•ͺ═════════β•ͺ═════════β•ͺ═════════β•ͺ═════════════════════β•ͺ══════════════════β•ͺ═════════╝
       β”‚          β”‚         β”‚         β”‚         β”‚                     β”‚                  β”‚
       β–Ό          β–Ό         β–Ό         β–Ό         β–Ό                     β–Ό                  β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                        Open Internet                                            β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Protocols

Protocol Port Stealth Speed Use Case
Reality (VLESS) 443/tcp β˜…β˜…β˜…β˜…β˜… β˜…β˜…β˜…β˜…β˜† Primary, most reliable
Hysteria2 443/udp β˜…β˜…β˜…β˜…β˜† β˜…β˜…β˜…β˜…β˜… Fast, works when TCP throttled
Trojan 8443/tcp β˜…β˜…β˜…β˜…β˜† β˜…β˜…β˜…β˜…β˜† Backup, uses your domain
CDN (VLESS+WS) 443 via Cloudflare β˜…β˜…β˜…β˜…β˜… β˜…β˜…β˜…β˜†β˜† When server IP is blocked
TrustTunnel 4443/tcp+udp β˜…β˜…β˜…β˜…β˜… β˜…β˜…β˜…β˜…β˜† HTTP/2 & QUIC, looks like HTTPS
WireGuard (Direct) 51820/udp β˜…β˜…β˜…β˜†β˜† β˜…β˜…β˜…β˜…β˜… Full VPN, simple setup
AmneziaWG 51821/udp β˜…β˜…β˜…β˜…β˜… β˜…β˜…β˜…β˜…β˜† Obfuscated WireGuard, defeats DPI
WireGuard (wstunnel) 8080/tcp β˜…β˜…β˜…β˜…β˜† β˜…β˜…β˜…β˜…β˜† VPN when UDP is blocked
DNS Tunnel (dnstt) 53/udp β˜…β˜…β˜…β˜†β˜† β˜…β˜†β˜†β˜†β˜† Last resort, hard to block
Slipstream 53/udp β˜…β˜…β˜…β˜†β˜† β˜…β˜…β˜†β˜†β˜† QUIC-over-DNS, 1.5-5x faster than dnstt
Telegram MTProxy 993/tcp β˜…β˜…β˜…β˜…β˜† β˜…β˜…β˜…β˜†β˜† Fake-TLS V2, direct Telegram access
XHTTP (VLESS+XHTTP+Reality) 2096/tcp β˜…β˜…β˜…β˜…β˜… β˜…β˜…β˜…β˜…β˜† Xray-core, no domain needed
XDNS (VLESS+mKCP+DNS) 53/udp β˜…β˜…β˜…β˜†β˜† β˜…β˜†β˜†β˜†β˜† DNS tunnel via Xray FinalMask, works during heavy shutdowns
Psiphon Conduit - - - Donate bandwidth to Psiphon (2M+ users)
Tor Snowflake - - - Donate bandwidth to Tor network
MahsaNet - - - Donate VPN configs to Mahsa VPN (2M+ users)

User Management

moav user list            # List all users
moav user add joe         # Add user to all protocols
moav user add alice bob   # Add multiple users
moav user add --batch 10 --prefix team  # Batch create team01..team10
moav user revoke joe      # Revoke user
moav user package joe     # Create zip bundle

Each user gets a bundle in outputs/bundles/<username>/ with config files, QR codes, and a README.html guide.

Download bundles from the admin dashboard at https://your-server:9443 or via SCP.

Admin Dashboard & Monitoring

  • Admin dashboard: https://your-server:9443 β€” user management, service status, MahsaNet donations
  • Grafana: https://your-server:9444 β€” per-user traffic, protocol breakdown, GeoIP distribution
  • Username: admin | Password: set during install (stored in .env as ADMIN_PASSWORD)
  • Reset password: moav admin password

Service Management

moav status               # Show all service status
moav start                # Start services
moav start proxy admin    # Start specific profiles
moav stop                 # Stop all services
moav restart sing-box     # Restart specific service
moav logs sing-box        # View service logs
moav doctor               # Run diagnostics
moav doctor dns           # Check DNS configuration
moav donate               # Donate configs to MahsaNet/Psiphon/Snowflake

Profiles: proxy, wireguard, amneziawg, dnstunnel, trusttunnel, telegram, xhttp, admin, conduit, snowflake, monitoring, all

Server Migration

Export and migrate your MoaV installation to a new server:

# Export full backup (keys, users, configs)
moav export                        # Creates moav-backup-TIMESTAMP.tar.gz

# On new server: import and update IP
moav import moav-backup-*.tar.gz   # Restore configuration
moav migrate-ip 1.2.3.4            # Update all configs to new IP
moav start                         # Start services

See docs/SETUP.md for detailed migration workflow.

Testing

moav test user1           # Test all protocols for a user
moav test user1 -v        # Verbose output for debugging
moav client connect user1 # Connect as user (exposes local SOCKS5/HTTP proxy)

Client Apps

Platform Recommended Apps
iOS Happ, Streisand, Hiddify, WireGuard, Shadowrocket
Android Happ, v2rayNG, Hiddify, WireGuard, NekoBox
macOS Happ, Hiddify, Streisand, WireGuard
Windows Happ, v2rayN, Hiddify, WireGuard
Linux Hiddify, sing-box, WireGuard

See docs/CLIENTS.md for complete list and setup instructions.

Documentation

Requirements

Server:

  • Debian 12, Ubuntu 22.04/24.04
  • 1 vCPU, 1 GB RAM minimum (2 vCPU, 2 GB RAM if using monitoring)
  • Public IPv4
  • Domain name (optional - see Domain-less Mode below)

Ports (open as needed):

Port Protocol Service Requires Domain
443/tcp TCP Reality (VLESS) Yes
443/udp UDP Hysteria2 Yes
8443/tcp TCP Trojan Yes
4443/tcp+udp TCP+UDP TrustTunnel Yes
2082/tcp TCP CDN WebSocket Yes (Cloudflare)
51820/udp UDP WireGuard No
51821/udp UDP AmneziaWG No
8080/tcp TCP wstunnel No
993/tcp TCP Telegram MTProxy No
2096/tcp TCP XHTTP (VLESS+XHTTP+Reality) No
9443/tcp TCP Admin dashboard No
9444/tcp TCP Grafana (monitoring) No
53/udp UDP DNS tunnel Yes
80/tcp TCP Let's Encrypt Yes (during setup)

Domainless Mode

Don't have a domain? MoaV can run in domainless mode with:

  • Reality (VLESS+Reality, primary protocol)
  • XHTTP (VLESS+XHTTP+Reality via Xray-core)
  • WireGuard (direct UDP + WebSocket tunnel)
  • AmneziaWG (obfuscated WireGuard, defeats DPI)
  • Telegram MTProxy (fake-TLS, direct Telegram access)
  • Admin dashboard (uses self-signed certificate)
  • Conduit (Psiphon bandwidth donation)
  • Snowflake (Tor bandwidth donation)

Run moav and select "No domain" when prompted, or use moav domainless to configure.

Recommended VPS:

Project Structure

MoaV/
β”œβ”€β”€ moav.sh                 # CLI management tool (install with: ./moav.sh install)
β”œβ”€β”€ docker-compose.yml      # Main compose file
β”œβ”€β”€ .env.example            # Environment template
β”œβ”€β”€ Dockerfile.*            # Container definitions
β”œβ”€β”€ configs/                # Service configurations
β”‚   β”œβ”€β”€ sing-box/
β”‚   β”œβ”€β”€ wireguard/
β”‚   β”œβ”€β”€ amneziawg/
β”‚   β”œβ”€β”€ trusttunnel/
β”‚   β”œβ”€β”€ dnstt/
β”‚   β”œβ”€β”€ telemt/
β”‚   └── monitoring/
β”œβ”€β”€ scripts/                # Management scripts
β”‚   β”œβ”€β”€ bootstrap.sh
β”‚   β”œβ”€β”€ user-add.sh
β”‚   β”œβ”€β”€ user-revoke.sh
β”‚   └── lib/
β”œβ”€β”€ outputs/                # Generated configs (gitignored)
β”‚   └── bundles/
β”œβ”€β”€ web/                    # Decoy website
β”œβ”€β”€ admin/                  # Stats dashboard
└── docs/                   # Documentation

Security

  • All protocols require authentication
  • Decoy website for unauthenticated traffic
  • Per-user credentials with instant revocation
  • Minimal logging (no URLs, no content)
  • TLS 1.3 everywhere

See docs/OPSEC.md for security guidelines.

License

MIT

Changelog

See CHANGELOG.md for release notes and version history.

Disclaimer

This project provides general-purpose open-source networking software only.

It is not a service, not a platform, and not an operated network.

The authors and contributors:

  • Do not operate infrastructure
  • Do not provide access
  • Do not distribute credentials
  • Do not manage users
  • Do not coordinate deployments

All usage, deployment, and operation are the sole responsibility of third parties.

This software is provided β€œAS IS”, without warranty of any kind.
The authors and contributors accept no liability for any use or misuse of this software.

Users are responsible for complying with all applicable laws and regulations.