[Guide] Free Minecraft Bedrock NetherNet using Playit.gg + Warden + Geyser
Hey everyone! With Minecraft Bedrock switching from RakNet to NetherNet, I wanted to share a workaround I managed to get working on my own Minecraft server.
This setup allows Bedrock players to connect through NetherNet using a free Playit.gg UDP tunnel, without needing Playit’s premium NetherNet tunnel or opening a public TCP port. I’m using Geyser + Playit.gg + Warden, and I’ve successfully tested it with Minecraft Bedrock 26.60.
How it works
NetherNet uses two separate connections:
-
HTTPS signaling: Used to find the server and negotiate the connection.
-
UDP (WebRTC): Used for the actual Minecraft gameplay traffic.
Rather than forwarding both TCP and UDP through Playit, we can use Warden for HTTPS signaling and Playit for UDP gameplay.
The connection works like this:
Bedrock Client → Warden (HTTPS) → Playit UDP → Geyser → Java Server
Warden handles the signaling, while Playit forwards the WebRTC traffic to Geyser.
Step 1 — Create a free Playit UDP tunnel
Head to https://playit.gg/ and make sure you have a working Playit agent.
You’ll need the standalone Playit agent or another UDP-capable integration. The older official Minecraft plugin only supports TCP forwarding.
Create a new tunnel with these settings:
| Setting | Value |
|---|---|
| Tunnel Type | UDP |
| Local IP | 127.0.0.1 |
| Local Port | 19133 |
| Protocol | UDP |
Playit will assign a public IP and port, for example:
203.0.113.10:37178
This is an example address. Use the actual IP and port Playit assigns to your tunnel.
Make sure UDP port 19133 is available to your Minecraft server. If you’re using Pterodactyl or another hosting panel, check the server’s allocations and firewall configuration.
Step 2 — Configure Geyser
Make sure you’re running an up-to-date version of Geyser that supports NetherNet.
Open:
plugins/Geyser-Spigot/config.yml
Find your existing bedrock: section and update the relevant settings:
bedrock:
address: 0.0.0.0
port: 19132
clone-remote-port: false
transport: both
webrtc-port: 19133
signaling:
mode: nxs
nxs:
token: ''
endpoint: https://agent.warden.cloud
advertise-addresses:
- "<your_playit_ip_and_port_here>"
Don’t replace your entire Geyser configuration with this example. Just merge these settings into the existing sections.
Replace <your_playit_ip_and_port_here> with your Playit tunnel’s public IP and port.
A couple of things worth noting:
-
transport: bothsupports RakNet and NetherNet simultaneously. -
port: 19132is the normal Bedrock/RakNet port. -
webrtc-port: 19133is the local UDP port NetherNet uses. -
mode: nxstells Geyser to use external signaling through Warden. -
advertise-addressestells players which public Playit endpoint to reach.
You can also use transport: nethernet if you only want NetherNet support. I’m using both because I wanted to keep the two transports separate.
Step 3 — Set up Warden
Visit https://panel.warden.cloud/
Warden provides the HTTPS signaling that would otherwise require a separate TCP connection.
You can initially leave token: '' empty in Geyser, as Warden supports anonymous registration although I created an account on the panel and setup my Game Server/Signal Server myself and would recommend you do the same so you can still manage it easier at a later date.
After restarting your Minecraft server, Geyser should register with Warden. If you’re using the Warden dashboard, you can manage your Game Server registration and set up a Signal Server with a public hostname.
Make sure your Game Server shows Ready for players and that your Signal Server is configured to route players to it. For example, Warden might give you a hostname like:
example.wdn.gg
This is the hostname your Bedrock players will use to connect.
Step 4 — Connect from Minecraft Bedrock
Open Minecraft Bedrock Edition and add a new server.
| Setting | Value |
|---|---|
| Server Name | My Minecraft Server |
| Server Address | example.wdn.gg |
| Port | 443 |
Use your Warden Signal Server hostname, not the Playit IP.
When a player connects:
-
Minecraft contacts Warden over HTTPS on port
443. -
Warden handles the NetherNet signaling and connection negotiation.
-
The client establishes its WebRTC connection through your public Playit UDP tunnel.
-
Playit forwards the traffic to Geyser on UDP port
19133. -
Geyser handles the connection and forwards the Minecraft gameplay to your Java server.
That’s it!
Troubleshooting
If the server won’t connect, here are a few things I’d check:
-
Geyser: Make sure you’re using a recent NetherNet-compatible build and check the console for signaling errors.
-
Playit: Confirm the UDP tunnel points to the same local port as
webrtc-port. -
Warden: Check that your Game Server is registered and your Signal Server is active.
-
Connectivity: Run Warden’s IPv4 connectivity check to see whether the advertised UDP endpoint is reachable.
-
Addresses: Ensure
advertise-addressescontains the public Playit UDP endpoint, not your local server IP or Warden hostname.
Also, keep in mind that Warden only handles signaling. It doesn’t carry your Minecraft gameplay traffic. That still goes through the Playit UDP tunnel.
What about vanilla Bedrock Dedicated Servers?
This guide is specifically for servers using Geyser.
Geyser already has NetherNet and NXS support built in, including the ability to handle multiple WebRTC connections over a single UDP port.
Vanilla Bedrock Dedicated Servers don’t currently offer the same external NXS integration, so you can’t simply copy this configuration into BDS.
One possible approach is to use WaterdogPE as a NetherNet-compatible proxy in front of a vanilla Bedrock server. WaterdogPE supports Warden NXS signaling and single-port WebRTC multiplexing, although vanilla BDS backend compatibility should be tested separately. There should be a guide for WaterDog setups soon.
Final thoughts
I thought I’d share this because I spent a fair bit of time figuring out how to get NetherNet working without paying for a combined TCP/UDP tunnel. For my Geyser server, this setup has worked successfully using just a free Playit UDP tunnel and Warden’s external signaling service.
Hopefully this helps anyone else trying to keep their Bedrock servers accessible after the move to NetherNet!