>_SPENCERLABSECURITY · INFRASTRUCTURE SERVING FROM THE HOMELAB|0 INBOUND PORTS
GitHub
Administered

A self-hosted Minecraft server, run with Crafty

A Paper Minecraft server on its own VM on the third Proxmox host, managed with Crafty Controller, with Geyser so phones and consoles can join the Java world. The panel stays LAN-only, and this site shows the server's live status without exposing anything new.

2 min read
Administered

The setup

What's running

Server
Paper 26.2
Slots
20 players
Bedrock
Geyser
Managed by
Crafty Controller
Host
VM on the third Proxmox host

Paper is a high-performance fork of the vanilla server that supports plugins. Crafty Controller is a web panel for running Minecraft servers. It handles starting and stopping, the console, scheduled tasks, backups and server settings, so day-to-day running doesn't need an SSH session.

Geyser is a plugin that translates between the two editions of Minecraft. Java players connect on the usual Java port. Phones, tablets and consoles run Bedrock edition, and they connect to Geyser's Bedrock listener on the standard Bedrock port. Both end up in the same world, and Bedrock players count toward the same 20 slots.

The server runs in its own VM on the third Proxmox host, away from the cluster that serves this site.

Exposure

What's reachable, and from where

  • Crafty's panel is LAN-only. A web panel that can run commands on a server is the last thing to put on the internet, so it isn't published anywhere.
  • The game ports are LAN-only too, for now. This site goes out through a Cloudflare Tunnel because the ISP's DS-Lite setup makes port forwarding impossible (see Going live via Cloudflare Tunnel). A tunnel like that carries web traffic, but a normal Minecraft client can't connect through it. Bedrock is harder still, because it runs over UDP. Opening the server to friends outside the house needs a relay that forwards TCP for Java and UDP for Bedrock. That's a separate piece of work.

Live status without a new hole

The projects page shows whether the server is up, how many players are on, the version and the ping. The hub on UbuntuServ asks the server over the home network, the same way each edition's server list does: a Server List Ping for Java, and a RakNet "unconnected ping" for Bedrock. The result is cached for 30 seconds. Only those values are published: no address, player names or MOTD.