Guides / Proxy
Want a lobby that sends players to several worlds (survival, anarchy, minigames)? Put a proxy in front of them. On ShadowNode there is exactly one rule that trips everyone up โ connect backends by their hostname on port 25565, never a custom port. This guide shows why, and the exact config.
A proxy setup is several servers working together โ each one is a normal ShadowNode Minecraft server with its own address.
yourname.mc.shadownodehosting.com, shown with a copy button in your console.This is the single reason 99 % of proxy setups fail on shared hosting.
ShadowNode routes Minecraft traffic by hostname on the standard port 25565. When a connection comes in, our router reads the address from the Minecraft handshake and forwards it to the right server. That means:
<backend-address>:25565 โ the address exactly as shown in your console.27028. Those ports are not open on the public network, so the connection just times out.server-port in server.properties โ that is your backend's internal port, assigned by the panel; changing it breaks the server. The only server.properties change for a proxy backend is online-mode=false.If you use the wrong port, your proxy log looks like this:
[ERROR]: [connected player] Player: unable to connect to server ANARCHY io.netty.channel.ConnectTimeoutException: connection timed out after 30000 ms: youranarchy.mc.shadownodehosting.com/โฆ:27028 โ wrong: custom port
The fix is always the same: change that port to 25565.
Edit velocity.toml on your proxy server (open it in the console file manager). Each backend is its own hostname on 25565:
# velocity.toml [servers] lobby = "yourlobby.mc.shadownodehosting.com:25565" anarchy = "youranarchy.mc.shadownodehosting.com:25565" survival = "yoursurvival.mc.shadownodehosting.com:25565" # where new players land first try = ["lobby"]
host:25565.For player info (skins, UUIDs, real IPs) Velocity uses modern forwarding. Set player-info-forwarding-mode = "modern" in velocity.toml, copy the generated forwarding.secret, and on each Paper backend enable it in config/paper-global.yml (velocity: enabled: true, paste the same secret). Backends then run in online-mode=false because the proxy handles authentication.
Same idea โ every server entry points at the backend hostname on 25565:
# config.yml
servers:
lobby:
address: yourlobby.mc.shadownodehosting.com:25565
restricted: false
anarchy:
address: youranarchy.mc.shadownodehosting.com:25565
restricted: false
priorities:
- lobby
ip_forward: true, and on each backend (Spigot/Paper) set bungeecord: true in spigot.yml and online-mode=false in server.properties.Players don't connect to the backends โ they connect to the proxy's own address (e.g. yournetwork.mc.shadownodehosting.com). The proxy then forwards them to lobby, and in-game they can move between servers. Share only the proxy address.
:25565 and use the console address.online-mode=false.modern + paper-global.yml velocity enabled with the SAME forwarding.secret (and remove bungeecord: true from spigot.yml) โ or Velocity legacy + backend bungeecord: true. Never both. Restart backend AND proxy. If the backend is Fabric, install the FabricProxy-Lite mod and put the same secret in its config.