Minecraft Worlds
Quickstart: Bring a World Up
-
Allocate IP,
VelocitySNIroute,Route, and DNS:sudo /data/minecraft/velocity/ipctl create <name> --dns(Allocates backend IPv6
fd77:7777:5010::1337:3c:d00d:<hex>/64, configures HAProxy SNI routing, addsroute invelocity.toml, configures<name>.drheck.devin Unbound ondanknasty, and syncs public A/AAAA records 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=falsetrue(
IfBackendusingserversPaper/Fabricrunmodernstockplayervanillaforwarding, enable Velocity forwarding and paste the secret fromMinecraft,, listening on standard port/data/minecraft/velocity/forwarding.secretonline-mode=true25565). -
Start
backendthe&server:Velocity: - Launch your
backendMinecraftserver.
cdto /data/minecraft/velocityits &&dedicated javaIPv6 -jar velocity.jar
/velocity reloadConnect:
JoinPlayers connect using <name>.drheck.dev (standard port 25565). Microsoft account authentication takes place directly between the client and your backend server.
Quickstart: Take a World Down
-
Stop the backend server: Run
stopin the Minecraft server console or terminate its process. -
Disable or remove
proxyrouterroutingmapping & DNS:- Temporary takedown (disable in
Velocityrouter only):sudo /data/minecraft/velocity/ipctlvelocityroute disable <name> - Complete teardown (release IP, remove
VelocityHAProxy route, purge DNS):sudo /data/minecraft/velocity/ipctl delete <name> --dns
- Temporary takedown (disable in
Architecture & Design Details
1. Unified Endpoint Model
All public and LAN client connections resolve to the single VelocityMinecraft ProxyRouter endpoint pair:
- IPv4:
10.0.0.113 - IPv6:
fd77:7777:5010::1337:f1ac:d00d:3c
Whether connecting via minecraft.pokelovers.drheck.dev, survival.drheck.dev, or anotherany other server subdomain, players connect to this sameexact IP pair on standard port 25565.
2. Transparent TCP SNI / Virtual HostHandshake Routing (forced-hosts)HAProxy)
MinecraftRather clientsthan transmitusing thean domainapplication-level nameproxy entered(which inbreaks thevanilla multiplayerDiffie-Hellman menu during the handshake packet. Velocity inspects this hostnameencryption and routes traffic according toforces ), HAProxy performs transparent pre-handshake packet inspection:forced-hostsonline-mode=false
10.0.0.113:25565 /data/minecraft/velocity/velocity.toml[servers]
survival = "[fd77:7777:5010::1337:3c:f1ac:d00d:1]3c]:25565"25565.
0x00) via /etc/haproxy/minecraft.lua and extracts the requested hostname (e.g. pokelovers.drheck.dev"dev).
/etc/haproxy/minecraft_hosts.map.
Any
25565.
The client and backend perform native Microsoft/Mojang online-mode=true authentication directly over the tryspliced 3. Backend IPv6 Address Scheme
Each backend Minecraft server is isolated on a dedicated, internaldedicated 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
notcompletelypublishedinternalinandexternalhiddenDNS or forwarded via router NAT/firewall. Only Velocity communicates directly withbehind thebackendsproxyover internal IPv6.router.
4. Network & DNS Automation (ipctl)
The tool /data/minecraft/velocity/ipctl automates the entire provisioning workflow:lifecycle:
- Local Network (
ul): Appends or removes# <name>andAddress=fd77:7777:5010::1337:3c:d00d:<hex>/64in# <name>/etc/systemd/network/20-wired.networkand triggersnetworkctl reload. ProxyRouterConfiguration:Configuration (ul): Updatesand[servers]/etc/haproxy/minecraft_hosts.mapbackend[forced-hosts]insidestanzas in/, then reloadsdata/minecraft/velocity/velocity.tomletc/haproxy/haproxy.cfghaproxy.service.
SHA256:7Xr0vCxgfpPhbKE3hN9fE2IC9y4x3Kj+kYmXwzgJY3s (ultra-arikui) is loaded in the agent before running remote router commands.
Router DNS (danknasty):
When --dns is 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.