Running multiple Minecraft servers behind a single IP address requires a proxy. Players connect to the proxy, which routes them to the correct backend server. The two main options are BungeeCord and Velocity.
BungeeCord vs Velocity
BungeeCord has been the standard since 2013. It's stable, well-documented, and supported by nearly every network plugin.
Velocity is the modern alternative, built from scratch with better performance, security, and a modern plugin API. It's developed by the PaperMC team.
| Feature | BungeeCord | Velocity | |---------|-----------|----------| | Performance | Good | Better (native compression) | | Security | Requires IP forwarding | Modern forwarding (more secure) | | Plugin API | Legacy, larger ecosystem | Modern, growing ecosystem | | Paper support | Full | Full | | Forge support | Limited | Better | | Configuration | YAML | TOML |
Recommendation: Use Velocity for new networks. It's faster, more secure, and actively maintained. BungeeCord is fine for existing setups but offers no advantage for new installations.
Setting Up Velocity
Step 1: Download Velocity
Get the latest build from PaperMC's downloads page.
Step 2: Create a Velocity Server
Create a new server instance for the proxy. This should be separate from your game servers. On Space-Node, you can order a small plan (1-2GB) specifically for the proxy.
Step 3: Initial Configuration
Start Velocity once to generate velocity.toml. Key settings:
bind = "0.0.0.0:25577"
[servers]
lobby = "127.0.0.1:25565"
survival = "127.0.0.1:25566"
creative = "127.0.0.1:25567"
try = ["lobby"]
[forced-hosts]
"play.example.com" = ["lobby"]
[advanced]
compression-threshold = 256
compression-level = 6
login-ratelimit = 3000
Step 4: Configure Backend Servers
Each backend Paper/Purpur server needs to accept Velocity's modern forwarding. In paper-global.yml:
proxies:
velocity:
enabled: true
online-mode: true
secret: "your-secret-here"
Set the same secret in Velocity's forwarding.secret file.
Step 5: Security
- Set all backend servers to
online-mode=falseinserver.properties(Velocity handles authentication) - Ensure backend servers are NOT accessible directly from the internet - only from the proxy's IP
- Use Velocity's
prevent-client-proxy-connectionssetting
Network Architecture
A typical network setup:
Players → Velocity Proxy (25577) → Lobby (25565)
→ Survival (25566)
→ Creative (25567)
→ Minigames (25568)
Proxy requirements: 512MB-2GB RAM depending on player count. 1 CPU core is enough.
Backend servers: Sized according to their workload. A lobby needs 1-2GB. A survival server needs 4-16GB depending on mods/plugins.
Essential Network Plugins
For Velocity:
- LuckPerms: Shared permissions across servers
- Geyser: Cross-play support at the proxy level
- LimboAuth: Authentication plugin for offline mode
- MiniMessage: Cross-server messaging
For Backend Servers:
- ViaVersion/ViaBackwards: Allow different client versions
- ServerUtils: Server management commands
- TAB: Synchronized tab list across servers
Scaling Tips
- Start with a lobby + 1-2 game servers
- Add servers as demand grows - the proxy handles routing
- Use a shared MySQL database for cross-server data (economy, ranks, stats)
- Monitor each server independently with Spark
- The proxy itself rarely becomes the bottleneck - backend servers will limit scaling first
A well-designed network gives your community variety while sharing a player base. Players can switch between survival, creative, and minigames without leaving your ecosystem.
