Repository navigation
Modern Forwarding
Modern forwarding is the mechanism MineAlphaProxy uses to pass player information (real IP, UUID, skin) to backend servers. This page explains what it is, how to set it up, and how to debug common problems.
Without forwarding, a backend server sees only the proxy's IP address and treats every player as connecting from 127.0.0.1. The player's real IP, UUID, and skin are lost.
With modern forwarding, the proxy packages the player's real data into a signed token and sends it to the backend during login. The backend unpacks it, verifies the signature, and uses the real player data.
| Mode | Protocol | Works with | Status |
|---|---|---|---|
none |
- | Any backend | No forwarding at all |
legacy |
BungeeCord ip_forward
|
1.12 and lower | Supported |
modern |
Velocity native | 1.13+ | Recommended |
For modern Paper/Spigot servers (1.13+), always use modern.
In core.yml:
forwarding:
mode: "modern"
secret-file: "forwarding.secret"On the next launch, if forwarding.secret does not exist, MineAlphaProxy creates one automatically:
[..] INFO - Generated new forwarding.secret: forwarding.secret
[..] WARN - Make sure backend servers use the same secret for modern forwarding!
Open forwarding.secret in a text editor. It contains a single line - a 32-character hex string:
a3f8c91d64e2b7f01284d5c9e7b1a034
Copy this value.
For Paper 1.19+, edit config/paper-global.yml:
proxies:
velocity:
enabled: true
online-mode: true
secret: "a3f8c91d64e2b7f01284d5c9e7b1a034"For Paper 1.16 - 1.18, edit paper.yml:
velocity-support:
enabled: true
online-mode: true
secret: "a3f8c91d64e2b7f01284d5c9e7b1a034"For Spigot (1.13+), edit spigot.yml:
settings:
bungeecord: falseAnd in server.properties:
online-mode=falseImportant: online-mode in paper-global.yml under proxies.velocity is not the same as server.properties.online-mode:
| Setting | Meaning |
|---|---|
paper-global.yml → proxies.velocity.online-mode: true
|
Trust the UUID sent by the proxy |
server.properties → online-mode=false
|
Do not verify clients with Mojang |
Both should be set as shown above.
- Stop the backend server (
stopin console) - Stop MineAlphaProxy
- Start MineAlphaProxy first
- Start the backend
- Connect a player
After a player successfully joins, the proxy log should show:
[..] INFO - Login Start: Steve from 203.0.113.45 (extra 16 bytes, uuid 069a79f4-...)
[..] INFO - Connecting to backend 'lobby' (127.0.0.1:25566)...
[..] INFO - Backend 'lobby' reached
[..] INFO - Backend login plugin request: channel='velocity:player_info'
[..] INFO - Sending modern forwarding data for Steve (uuid 069a79f4-...)
[..] INFO - Compression enabled (threshold=256)
[..] INFO - Login Success rewritten with UUID 069a79f4-...
The backend should log:
[..] INFO - UUID of player Steve is 069a79f4-44e9-4726-a5be-fca90e38aaf5
[..] INFO - Steve[/203.0.113.45:xxxxx] logged in
If the backend shows 127.0.0.1 instead of the real IP, forwarding is not working.
The client received a Login Success packet with a UUID that does not match what it sent. Common causes:
-
paper-global.yml→proxies.velocity.online-mode: falseFix: change totrue. The backend must trust the UUID from the proxy. -
Client running a different version than the backend Fix: enable ViaProxy so all client versions are accepted.
-
Wrong forwarding format This was fixed in MineAlphaProxy
1.0.1-ALPHA. Make sure you are on that version or newer.
The proxy is talking to a backend that expects direct encryption - this happens when proxies.velocity.enabled: false on the backend.
Fix: set proxies.velocity.enabled: true and restart the backend.
The secret does not match between proxy and backend.
Fix:
# On the proxy
cat forwarding.secret
# On the backend (paper-global.yml)
# Compare the "secret:" value character by character
They must be identical. After fixing, restart both sides.
Modern forwarding is disabled or misconfigured.
Check:
-
paper-global.yml→proxies.velocity.enabled: true -
paper-global.yml→proxies.velocity.online-mode: true - Restart the backend (not
/reload)
The backend has bungeecord: true in spigot.yml, which conflicts with modern forwarding.
Fix:
# spigot.yml
settings:
bungeecord: falseModern forwarding works for both:
- Premium clients send their real Mojang UUID
- Cracked clients send a UUID generated from their username
MineAlphaProxy passes whichever UUID the client sent. The backend uses that UUID for permission lookups, player data, etc.
Recommendation: for cracked players, use an authentication plugin (SimpleLogin, SecureProxy, etc.) so they cannot impersonate premium users.
To rotate the forwarding secret:
- Stop MineAlphaProxy
- Delete
forwarding.secret - Stop all backends
- Start MineAlphaProxy - it will generate a new secret
- Copy the new secret to every backend's
paper-global.yml - Start backends
Every player will be treated as new. Back up player data before rotating.
- The secret is a shared key - never publish it, never commit it to Git
-
.gitignorein the MineAlphaProxy repository already excludesforwarding.secret - If the secret leaks, rotate it immediately
- Restrict filesystem access to
forwarding.secret- only the proxy process should read it
- ViaProxy - accept clients from any version
-
Configuration - full
core.ymlreference - Troubleshooting - more error fixes