Direct answer

Modern forwarding passes UUID, IP and skin information from Velocity using a shared secret. Configure one forwarding mode consistently on the proxy and every backend; do not mix modern with legacy forwarding.

Recommended procedure

  1. Set player-info-forwarding-mode = "modern" in velocity.toml and keep the generated forwarding.secret secure.
  2. On Paper backends set online-mode=false in server.properties and settings.bungeecord=false in spigot.yml.
  3. In config/paper-global.yml enable proxies.velocity, copy the same secret into its secret setting and match proxies.velocity.online-mode to the proxy online-mode.

What to change

# velocity.toml
player-info-forwarding-mode = "modern"
# paper-global.yml (on backend)
proxies:
  velocity:
    enabled: true
    online-mode: true # match proxy setting
    secret: "COPY_SECRET_FROM_FORWARDING_FILE"
  1. Keep backend ports inaccessible to public clients through host firewall rules or private interfaces.
  2. Restart proxy and backends and connect through Velocity; test that direct external backend connections are blocked.

How to verify the result

Confirm stable player UUIDs, correct skin/IP forwarding and that a direct backend login from outside the trusted proxy cannot succeed.

Version and compatibility notes

Modern forwarding supports Java 1.13+ in the official guide; older protocols and some modded backends need different handling. Never treat the shared secret as a replacement for network isolation.

Official references

Was this article helpful?
Help us improve this article

Tell us what is missing, unclear, outdated, or incorrect. You can also suggest something we should add.

What could we improve?
Do not include passwords, server IPs, or other private information.0 / 1000