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 in velocity.toml, configures <name>.drheck.dev in Unbound on danknasty, 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:
cd /data/minecraft/velocity && java -jar velocity.jar
(Or reload config in Velocity console with /velocity reload).
Connect:
Join using <name>.drheck.dev (standard port 25565).
Quickstart: Take a World Down
Stop the backend server:
Run stop in the Minecraft server console or terminate its process.
Disable or remove proxy routing & DNS:
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
Architecture & Design Details
1. Unified Endpoint Model
All public and LAN client connections resolve to the single Velocity Proxy endpoint pair:
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:
fd77:7777:5010::1337:3c:d00d:<hex>/64
Port: Each server binds to standard port 25565 on 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:
ul):
Appends or removes Address=fd77:7777:5010::1337:3c:d00d:<hex>/64 # <name> in /etc/systemd/network/20-wired.network and triggers networkctl reload.
Proxy Configuration:
Updates [servers] and [forced-hosts] inside /data/minecraft/velocity/velocity.toml.
Router DNS (danknasty):
When --dns is passed:
/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 --force to synchronize public A and AAAA records on deSEC.io.