Minecraft Worlds
Quickstart: Bring a World Up
-
Allocate IP, Velocity route, and DNS:
sudo /data/minecraft/velocity/ipctl create <name> --dns(Allocates backend IPv6
fd77:7777:5010::1337:3c:d00d:<hex>/64, adds route invelocity.toml, configures<name>.drheck.devin Unbound ondanknasty, and syncs to deSEC). -
Configure the backend server: In your backend server's
server.properties:server-ip=fd77:7777:5010::1337:3c:d00d:<hex> server-port=25565 online-mode=false(If using Paper/Fabric modern player forwarding, enable Velocity forwarding and paste the secret from
/data/minecraft/velocity/forwarding.secret). -
Start backend & Velocity:
- Launch your backend Minecraft server.
- Start or reload Velocity:
(Or reload config in Velocity console withcd /data/minecraft/velocity && java -jar velocity.jar/velocity reload).
-
Connect: Join using
<name>.drheck.dev(standard port 25565).
Quickstart: Take a World Down
-
Stop the backend server: Run
stopin the Minecraft server console or terminate its process. -
Disable or remove proxy routing & DNS:
- Temporary takedown (disable in Velocity only):
sudo /data/minecraft/velocity/ipctl velocity disable <name> - Complete teardown (release IP, remove Velocity route, purge DNS):
sudo /data/minecraft/velocity/ipctl delete <name> --dns
- Temporary takedown (disable in Velocity only):
Architecture & Design Details
1. Unified Endpoint Model
All public and LAN client connections resolve to the single Velocity Proxy endpoint pair:
- IPv4:
10.0.0.113 - IPv6:
fd77:7777:5010::1337:f1ac:d00d:3c
Whether connecting via minecraft.drheck.dev, survival.drheck.dev, or another server subdomain, players connect to this same IP pair on standard port 25565.
2. SNI / Virtual Host Routing (forced-hosts)
Minecraft clients transmit the domain name entered in the multiplayer menu during the handshake packet. Velocity inspects this hostname and routes traffic according to forced-hosts in /data/minecraft/velocity/velocity.toml:
[servers]
survival = "[fd77:7777:5010::1337:3c:d00d:1]:25565"
[forced-hosts]
"survival.drheck.dev" = [
"survival"
]
Any unmatched hostnames fallback to the try lobby list.
3. Backend IPv6 Address Scheme
Each backend Minecraft server is isolated on a dedicated, internal Unique Local Address (ULA) on interface eth77 of ul:
- Prefix:
fd77:7777:5010::1337:3c:d00d:<hex>/64 - Port: Each server binds to standard port
25565on its assigned IPv6 address. - Security: Backend IPv6 addresses are not published in external DNS or forwarded via router NAT/firewall. Only Velocity communicates directly with the backends over internal IPv6.
4. Network & DNS Automation (ipctl)
The tool /data/minecraft/velocity/ipctl automates the entire provisioning workflow:
- Local Network (
ul): Appends or removesAddress=fd77:7777:5010::1337:3c:d00d:<hex>/64 # <name>in/etc/systemd/network/20-wired.networkand triggersnetworkctl reload. - Proxy Configuration:
Updates
[servers]and[forced-hosts]inside/data/minecraft/velocity/velocity.toml. - Router DNS (
danknasty): When--dnsis passed:- Updates the git working tree at
/home/luke/git/router_config/unbound.conf. - Verifies syntax using
doas unbound-checkconf. - Deploys the configuration to
/var/unbound/etc/unbound.conf. - Restarts Unbound via
doas rcctl restart unbound. - Verifies local resolution via
dig @10.0.0.1. - Executes
python3 /home/luke/git/router_config/dns_danger_sync.py --forceto synchronize public A and AAAA records on deSEC.io.
- Updates the git working tree at