Compatibility
Minecraft: Java Edition
26.3
26.2
26.1.x
1.21.x
1.20.x
1.19.x
1.18.x
1.17.x
1.16.x
1.15.x
1.14.x
1.13.x
1.12.x
1.11.x
1.10.x
1.9.x
1.8.x
Platforms
Tags
Creators
Details
Licensed ARR
Published last year
Updated 2 days ago

DynamicDNS is a lightweight, cross-platform Minecraft plugin and proxy extension that keeps your subservers connected and reachable even when hosted on dynamic IP addresses (such as home servers or VPS nodes without static IPs).
No separate port forward, custom daemons or DNS propagation delays are required — address changes are synchronized in real-time directly through Minecraft's native networking layer.
Features
- Port-Free Subserver Synchronization: Subservers ping the proxy using native Minecraft Handshake packets signed with HMAC-SHA256 (
sync.v2.<name>.<port>.<signature>). No extra open ports or firewall adjustments are needed on the proxy. - HMAC-SHA256 Handshake Verification: Cryptographic handshake signatures verify authenticity without exposing the raw secret token over the wire, with seamless backward-compatibility for legacy payloads.
- Proxy Configuration Persistence: Automatically registers, updates, and persists subserver addresses directly into
velocity.toml(Velocity) orconfig.yml(BungeeCord). - Subserver Status & Last Update Tracking: Displays real-time registration status and accurate
last updatetimestamps recorded directly on the proxy. - Multiple DDNS Providers:
- Cloudflare DNS API: Automated updates for root or subdomain
A(IPv4) andAAAA(IPv6) records with configurable proxy (orange cloud) status. - DuckDNS: Instant HTTP/HTTPS updates with dual-stack IPv4 and IPv6 support.
- No-IP / DynDNS v2: Automated hostname updates using HTTP Basic Auth.
- Dynu DDNS: Updates Dynu domains and SRV records automatically with your current public IP address or ngrok hostname.
- Cloudflare DNS API: Automated updates for root or subdomain
- Dual-Stack IPv4 & IPv6 Detection: Native public IPv4 and IPv6 resolution via redundant global lookup services.
- Built-in ngrok Tunneling: Automatically exposes local servers via ngrok TCP tunnels and propagates the assigned public tunnel endpoint to your proxy or Dynu.
- Integrated Modrinth Update Checker: Checks for new releases against the Modrinth API asynchronously in the background.
- All-in-One Universal Jar: One unified artifact supports all platforms.
Supported Platforms
| Platform | Type | Minimum Version |
|---|---|---|
| Velocity | Proxy | 3.x / 4.x |
| BungeeCord / Waterfall | Proxy | 1.8.8 – 26.4 |
| Paper / Purpur / Spigot / Folia | Subserver | 1.8.8 – 26.4 |
| Sponge | Subserver | SpongeAPI 8+ (Minecraft 1.16.5+) |
How It Works
+-------------------------------------------------------------------+
| Subserver (Spigot / Paper / Sponge) |
| |
| 1. Periodically sends handshake ping: |
| virtualHost = "sync.v2.<name>.<port>.<hmac>" |
+---------------------------------+---------------------------------+
|
(Standard Minecraft Port, e.g. 25565)
v
+-------------------------------------------------------------------+
| Proxy (Velocity / BungeeCord) |
| |
| 2. Intercepts incoming handshake/ping connection |
| 3. Verifies HMAC-SHA256 signature |
| 4. Updates subserver address in proxy server registry |
| 5. Saves updated address to velocity.toml or config.yml |
| 6. Records 'last update' timestamp and drops connection |
+-------------------------------------------------------------------+
- The subserver runs a repeating background task sending a handshake ping to the proxy's regular Minecraft address and port.
- The payload contains the subserver identifier, target port/IP, and a 32-character HMAC-SHA256 signature calculated with the shared secret token.
- The proxy verifies the signature using its shared secret.
- The proxy updates the subserver route dynamically in memory, persists it to file, records the proxy-side
last updatetimestamp, and terminates the sync ping handshake without proxying player traffic.
Installation & Setup
1. Proxy Setup (Velocity or BungeeCord)
- Drop
DynamicDNS.jarinto your proxy'splugins/directory. - Start or restart the proxy to generate
plugins/DynamicDNS/config.yml. - Open
plugins/DynamicDNS/config.ymland enable synchronization:server_sync: enabled: true token: "YOUR_SECRET_TOKEN" # If left blank, a UUID token is automatically generated on startup - Copy the secret
tokenfor use on your subservers.
2. Subserver Setup (Paper, Spigot or Sponge)
- Drop
DynamicDNS.jarinto your subserver'splugins/(ormods/on Sponge) directory. - Start or restart the server to generate
config.yml. - Configure
plugins/DynamicDNS/config.yml:server_sync: enabled: true token: "YOUR_SECRET_TOKEN" # Must match the token set on your proxy name: "survival" # The server ID registered on the proxy target_address: "proxy.host:25565" # Host and port of your proxy server interval: 30 # Sync interval in seconds - Reload the configuration with
/dynamicdns reloador restart the subserver. The proxy will automatically register the subserver's current IP and port.
Commands & Permissions
| Command | Aliases | Description | Permission |
|---|---|---|---|
/dynamicdns status |
/ddns status |
Displays active provider hooks, registered subservers, and last update timestamps | dynamicdns.status |
/dynamicdns sync |
/ddns sync |
Forces an immediate sync ping to the configured proxy (subserver only) | dynamicdns.sync |
/dynamicdns reload |
/ddns reload |
Reloads config.yml and restarts active hooks |
dynamicdns.reload |
/dynamicdns update |
/ddns update |
Checks Modrinth for available plugin updates | dynamicdns.update |
The dynamicdns.admin permission grants full access to all commands. By default, permissions are granted to server operators (op) or administrators.


